Comment by kosolam
8 days ago
I can design such a system in a couple of minutes. As the adjacent commenter said it can be done with a blockchain, using smart contacts. 1. Sender deposits fee 2. Message includes unlocking code that itself only can be unlocked by the recipient 3. Message getting wrapped with details of forwarders while it moves between peers 4. Recipient unlocks the message via the smart contract thereby releasing the micropayments to the forwarders
To make this work you need to be able to connect to the public blockchain, which of course requires internet access.
Absolutely, to deposit and withdraw. But relay can be done without the Internet.
The central smart contract is on the blockchain and can only be used if the internet is up. That's why you haven't solved anything here.
Your proposal is that since Alice and Bob can't communicate in real-time, either directly or indirectly, Alice does an interaction with a smart contract to lock some value and then Bob does an interaction with the same smart contract to unlock some value.
We can view the smart contract as some shared algorithm between Alice and Bob (if they are running their own nodes) or we can view it as something outside of them both (perhaps they are RPC customers of Infura). If Alice and Bob are running their own nodes, however those nodes manage to communicate with each other is a way they could just send the message to each other and not need a blockchain. And if they're both able to communicate with Infura, they could also swap Infura for Gmail and send each other a message the normal way (or if they can really only reach Infura for some reason, they can put their messages on the blockchain). But we are talking about designing systems that can work in scenarios where direct communication like this is impossible, and messages have to be forwarded hop-by-hop over a span of hours. You can't design a system for slow networking, that assumes the existence of a separate fast network just to run the payment system.
All nodes running a blockchain have to be in low-latency contact with each other. If you try to run Bitcoin in a network with multi-hour latency, you'll never reach consensus on which blocks are in the chain. You'll be hard-forking all over the place. You'd have to slow it down to, like, one block per week, but then it's far too slow to be useful for payments.
If a blockchain exists in such an environment, it exists on a tightly-coupled cluster of nearby nodes. And that cluster is pretty much the same as a single central node, from the perspective of the network. You don't gain anything by making it a cluster (except for redundancy, as usual).
To claim payment for services too. You've created a new problem that does nothing to solve the original problem.
6 replies →
I'd like to better understand steps 3 and 4.
The sender deposits a fee into a smart contract.
The message is encrypted in layers, with each forwarder only able to decrypt their part (like an onion).
As the message is forwarded peer-to-peer, each forwarder appends some kind of proof-of-forwarding.
When the recipient finally receives and decrypts the message, they unlock the contract using a code embedded in the message. This triggers micropayments to all the forwarders.
Do forwarders need to interact with the blockchain (i.e., create/update a smart contract) when forwarding?
If so, wouldn’t that require each forwarder to have internet access at the time of forwarding—which breaks the idea of fully offline Bluetooth relaying?
Or is all the blockchain interaction deferred to the recipient, who proves the path the message took and triggers all payments at once?