WelcomeUser Guide
ToSPrivacyCanary
DonateBugsLicense

©2024 Poal.co

1.4K

I'm trying to design a good protocol. I'd rather not do a coin, because that would entail a blockchain which brings with it a ton of complexity.

Captain Dirgo has a lot of similarities with email, where each url can be thought of an email address. The only question then is who holds the emails and what is their incentive to us this system.

This is my current idea. It would be a DHT based system, where urls are the keys, and comments and other information are the values. The amount of urls that a node is responsible for is configurable by the user.

The incentive model for this network is based on a simplified version of KARMA that Arweave uses: https://arwiki.wiki/#/en/karma (See Basic Mechanism, paragraph 2), where Proof of Work provides the value. I decided that the full Karma protocol, with bank-nodes and currency and transactions was more complex than what I need.

The system centers around CPU efficient hash puzzles with a timestamp attached as a proof that an entity is not acting maliciously or trying to overload the network (ie. Proof of work). I will refer to these solved hash puzzles as PoW.

To begin with, each message may have one or more PoW attached to it. This gives the message value, and allows it to be showed with more promenance in the comments shown to users. When a user upvotes a comment, they perform an PoW that gets attached to message as well. Also, in general the worth of these PoW's decrease over time in terms of scoring (below).

Each node keeps a score attached to every other node that it knows about. Think of it like the tit-for-tat algorithm except for with points instead of just remembering what your peer did and doing the same thing again. Each score is determined by each node individually and different nodes can have different opinions on a particular third node (eg. where a,b and c are nodes in the network, a scores c with x points, and b scores c with y points, where x and y may not be equal).

Nodes can then ask peers to perform operations depending on the score and what the operation is to be performed.

In general, the score is based on how the node is behaving in relation to the peer and what amounts to a portfolio of good deeds that the node has performed recently. You can think of the idea as a account balance, which is equal to the total of all the good things that a node can prove it has done (PoW being one of them) recently. Since reviewing all the data of an particular portfolio would use too much bandwidth and processing time, a peer samples the good deads of a node to determine its own opinion of the nodes score, using a merkle tree with a digest including an index length.

Specifically, to establish a positive score with a peer, a node can do a few things:

  1. Allow the peer to sample messages that the node stores. This is done by having the node provide the peer with a merkle tree hash top of the messages it contains and a count. The peer replies with an index, and the node must provide the message and the merkle path to that index (in order to establish proof that the message provided was in the merkle tree at the corresponding index). The PoWs attached to the message provided will contribute to the peer's evaluation of the node's score.
  2. Perform operations for the peer that it requests.
  3. Be owned by a user account with a high score (see below for scoring users)

To establish a positive score, a user can provide a list a proof of messages (similiarly to item 1 for nodes, above) with PoW's attached or PoW's of upvotes.

In addition, users or nodes can also establish a positive score by completing a random PoW puzzle with an initial nonce setup by the peer evaluating it. The more difficult it is the higher the score (this may not be linear). This allows a new user or node to get started on the network.

I'm also thinking that maybe that a kind of trust web can work as an enhancement to the above. If the network becomes tight enough, so that nodes are all known by each other through x paths of separation, maybe an algorithm could be designed to take advantage of this to provide another way to score unknown nodes. (ex. Node A wants to establish a score of Node C and already has a score for Node B and Node B already has a score for Node C. Node A can then ask Node B for its score of Node C to help with its evaluation.

As far as figuring out the minimum score necessary to perform task, each node will have a queue of requests by peers and rank them by score.

As far as tasks that peers can ask each other in addition to the above, they would be the following:

  1. Establish a connection
  2. DHT related tasks (find neighbors)
  3. Retrieve a list of encrypted messages for a url hash.
  4. Provide a message, or upvote to be stored. (I think I will also be able to provide downvotes)

and probably others, I haven't really completely thought out the tasks just yet.

I'm trying to design a good protocol. I'd rather not do a coin, because that would entail a blockchain which brings with it a ton of complexity. Captain Dirgo has a lot of similarities with email, where each url can be thought of an email address. The only question then is who holds the emails and what is their incentive to us this system. This is my current idea. It would be a DHT based system, where urls are the keys, and comments and other information are the values. The amount of urls that a node is responsible for is configurable by the user. The incentive model for this network is based on a simplified version of KARMA that Arweave uses: https://arwiki.wiki/#/en/karma (See Basic Mechanism, paragraph 2), where Proof of Work provides the value. I decided that the full Karma protocol, with bank-nodes and currency and transactions was more complex than what I need. The system centers around CPU efficient hash puzzles with a timestamp attached as a proof that an entity is not acting maliciously or trying to overload the network (ie. Proof of work). I will refer to these solved hash puzzles as PoW. To begin with, each message may have one or more PoW attached to it. This gives the message value, and allows it to be showed with more promenance in the comments shown to users. When a user upvotes a comment, they perform an PoW that gets attached to message as well. Also, in general the worth of these PoW's decrease over time in terms of scoring (below). Each node keeps a score attached to every other node that it knows about. Think of it like the tit-for-tat algorithm except for with points instead of just remembering what your peer did and doing the same thing again. Each score is determined by each node individually and different nodes can have different opinions on a particular third node (eg. where *a*,*b* and *c* are nodes in the network, *a* scores *c* with *x* points, and *b* scores *c* with *y* points, where *x* and *y* may not be equal). Nodes can then ask peers to perform operations depending on the score and what the operation is to be performed. In general, the score is based on how the node is behaving in relation to the peer and what amounts to a portfolio of good deeds that the node has performed recently. You can think of the idea as a account balance, which is equal to the total of all the good things that a node can prove it has done (PoW being one of them) recently. Since reviewing all the data of an particular portfolio would use too much bandwidth and processing time, a peer samples the good deads of a node to determine its own opinion of the nodes score, using a merkle tree with a digest including an index length. Specifically, to establish a positive score with a peer, a node can do a few things: 1. Allow the peer to sample messages that the node stores. This is done by having the node provide the peer with a merkle tree hash top of the messages it contains and a count. The peer replies with an index, and the node must provide the message and the merkle path to that index (in order to establish proof that the message provided was in the merkle tree at the corresponding index). The PoWs attached to the message provided will contribute to the peer's evaluation of the node's score. 2. Perform operations for the peer that it requests. 3. Be owned by a user account with a high score (see below for scoring users) To establish a positive score, a user can provide a list a proof of messages (similiarly to item 1 for nodes, above) with PoW's attached or PoW's of upvotes. In addition, users or nodes can also establish a positive score by completing a random PoW puzzle with an initial nonce setup by the peer evaluating it. The more difficult it is the higher the score (this may not be linear). This allows a new user or node to get started on the network. I'm also thinking that maybe that a kind of trust web can work as an enhancement to the above. If the network becomes tight enough, so that nodes are all known by each other through x paths of separation, maybe an algorithm could be designed to take advantage of this to provide another way to score unknown nodes. (ex. Node A wants to establish a score of Node C and already has a score for Node B and Node B already has a score for Node C. Node A can then ask Node B for its score of Node C to help with its evaluation. As far as figuring out the minimum score necessary to perform task, each node will have a queue of requests by peers and rank them by score. As far as tasks that peers can ask each other in addition to the above, they would be the following: 1. Establish a connection 1. DHT related tasks (find neighbors) 2. Retrieve a list of encrypted messages for a url hash. 3. Provide a message, or upvote to be stored. (I think I will also be able to provide downvotes) and probably others, I haven't really completely thought out the tasks just yet.

(post is archived)

[–] 1 pt

Wicked. Have you thought about leveraging an existing DHT implementation like Kademlia or I2P? https://en.m.wikipedia.org/wiki/Kademlia

https://en.m.wikipedia.org/wiki/I2P

[–] 1 pt

Yes, my idea to use the kademlia algorithm except with heterogeneous connections. Browser to browser would be done through webrtc since it can penetrate firewalls and most nats even if both peers are behind one. Web sockets for browser to node, and regular tcp or udp for node to node. As far as I know, there isn't any opensource code that does this, so I probably would have to create my own.

I haven't heard of i2p, though. That might simplify things if it works well. Thanks.