I believe starting simple is the right approach when looking at something as complicated as incentives for mesh network nodes. We also need some sort prototype user to help focus the effort.
For a reference user, I propose a person on an off-grid mesh network who wants to send a short message via a messaging app to someone on the global internet.
I propose the following reference protocol to incentivize nodes to transport data for our reference user at node ‘A’:
- Node ‘A’ broadcasts request for price to forward data to a gateway
- Nearby nodes with a path to gateways respond with price offers
- Node ‘A’ selects node ‘B’ and creates a signed transaction to pay ‘B’ for up to ‘x’ bytes per second of data for ‘y’ minutes.
- Node ‘B’ forwards the transaction to the next node in the circuit ‘C’, etc until it reaches the gateway
- Node ‘B’ … ‘D’ all have negotiated for data transport to a gateway
- Once a node has scheduled their available bandwidth/power budget they stop responding to requests for gateway connections
- When the transaction from node ‘A’ reaches the gateway, it is broadcast to the blockchain
- When the transaction from node ‘A’ is confirmed, the proof of the payment being recorded in a block is returned via nodes ‘D’ … ‘B’ to node ‘A’.
- Node ‘A’ may now proceed to send and receive data by broadcasting it to ‘B’
There’s nothing exotic or specific to a particular blockchain about this reference protocol. I would assert that more elaborate workflows simply optimizes some aspect of this basic reference protocol.
My question to the community then is, what optimizations if any do you think are necessary to make this a practical protocol?
There are different axis we could optimize, which would you prioritize?
- trust model
- bandwidth / power usage
Using the bitcoin blockchain as an example, a transaction is about 600 bytes and takes about 10 minutes to be confirmed once it reaches the blockchain. Block headers are 81 bytes for each block until the last seen block header. A merkle block allows a thin client to use the block headers to do a block depth check to verify a transaction is in a block and require less than 1000 bytes.
Bandwidth for sending and receiving data on the order of 3000 bytes would be required to setup an incentive for each node in the circuit. We can also optimize the return bandwidth by using a single set of block headers and merkle blocks for all nodes in a circuit.
If we assume radios that can transmit at 1920 bytes per second, then the transmissions would take about 6 seconds for four hop to get to the gateway, about 10 min if we waited for a single block confirmation and then another 6 seconds to get the confirmation. After the circuit is setup the latency would be about 12 seconds per round trip.