Disclaimer:
This is docucement explores a non-interactive user experience for Grin transactions using a relay buddy system. This method is not proven, created for fun, and the author does advocate or endorse this proposal. I hope the reader will enjoy reading this proposal and will appreciate it as a (to the authors knowledge) first example of using cut-through before broadcasting to achieve some benefits; skipping the last round of interaction. Note the trick with a temporary output can also be used to creating a 1 step interaction transactions without a relay being involved. If combined with an address book, this would create a transaction method with few disadvantages. However, the method would still require two kernels and would not be compatible with PayJoins that remove directionality in the transaction graph. Although the authors finds this idea entertaining enough to to share, I frimly believe the future of Grin is in its interactivity, e.g. fully interactive uniform transactions using PayJoins and optional CoinSwap. This proposal only serves for eductiona/fun purposes.

Discussion on Bulleting Boards systems

This proposal is a 6th option added in the Discussion on Bulletin Board Systems on the grin forum.. Note that Grin is by default interactive crypto, the discusion on Bulletin Board Systems does not aim to provide 1 step or non-interactive transactions, but aims to find/explore user friendly ways to buffer and facilitate interaction between users. This proposal simply aims to share one such possible solutions. After inception I red Marek’s Slate Store proposal and recognize it to be fairly similar with the exception that the last round of communication is kipped [REF].

Transaction Relay-buddy system

This document proposes a method which I call the transaction relay Buddy System to allow a users (A, Alice) to send a transaction via an intermediary (B, Bob the Buddy) to a receiver (C, Charlie). The transaction flow is request-RSR-SRS and requires 6 steps of interaction. Most notable, the last round of interaction with the Sender is skipped using a temporary output, creating a ‘send and forget’ kind of user experience. The objective is to faciliate transaction between Alice and Charlie while Alice is offline with no need for Alice to manually interfer in the transaction process. In other words, it should all be magic behind the scenes.

0) Alice contacts Charlie over tor, but Charlie is offline 1) Alice send a request to Bob, the relay-buddy. 2) Bob creates a payment request including his output with the relay-fee (RSR) and sends it to Alice. 3) Alice adds the outputs for Charlie using Charlies known Pubkey(s)* and creates her partial signature for all outputs [change-output,relay-fee,charlies-output] 4) Bob waits till Charlie comes online to continues the transaction. When Charlie comes online, Bob sends the transaction in SRS mode to Charlie 5) Charlie receives the transaction, signs for it - and combines it with a self spend where he replaces the output from Alice with a new outputs for himself and sends it back to Bob. Charlie signs both the initial RSR transaction and the new SRS transaction (two kernels) and sends the result to Bob.
6) Bob finalizes the two transactions that are now aggregated by signing the second kernel and broadcasting the transctions to the network to earn his relay fee.

Note

Advantages:

Disadvantages:

As mentioned above, the transaction relay-buddy system, requires additional information, namely a known PubKey for the receiver. There are two logical solutions:

1) An address-book that contains information for the sender such as [name - address - [buddy tor addres, PubKey for relay]]. I will provide an example of such information in the next section 2) A transaction transfer information system. The transaction transfer information is a wrapper with additional information besides the slatepack address of the receiver. In this wrapper, the Receiver puts information such as the preferred methods/protocols to be used to receive a transaction. The methods can simply be provided in the order of preference, e.g. first try method 1, if that fails, method 2, etc.. One of the methods that is put in this wrapper is the information to contact the relay-buddy. When the receiver is offline, the Sender can use the information to contact the relay-buddy, who will handle the transaction for the receiver

Transaction transfer information:

Example of how transfer protocol information could potentially look like as JSON-LD. Information can be presented as QR code to the user without needing to worry about space restrictions [REF].
[{
"method-1":{"address": grin......},
"method-2": {"relay": grin42.....,relay-PubKey},
"method-3":{"email":"tomelvisjedusor@protonmail.com"}
}]

Insentives

For this to work it is essential that:

Security considerations

References

Bulletin Board System discussion on Grin forum: https://forum.grin.mw/t/grin-bulletin-board-discussing-four-options-and-select-one-for-bounty/9822/14
Transfer protocol: https://forum.grin.mw/t/what-is-the-most-critical-problem-of-grin/9424/62
Contract wall: https://gist.github.com/phyro/1046022377fcb1886a1b4f6500f23773 Simple explenation transact: https://forum.grin.mw/t/eliminating-finalize-step/7621
Payment proof Kurt: https://forum.grin.mw/t/eliminating-finalize-step/7621/22
https://forum.grin.mw/t/eliminating-finalize-step/7621/76?u=anynomous
https://github.com/mimblewimble/grin-rfcs/pull/59#issuecomment-679970246
https://medium.com/blockstream/insecure-shortcuts-in-musig-2ad0d38a97da
Asynchronous transactions e.g. Grinbox https://github.com/mimblewimble/grin-rfcs/pull/25
https://gist.github.com/DavidBurkett/32e33835b03f9101666690b7d6185203
Discussion on KeyBas: keybase://chat/grincoin#general/63744

Theme  Moonwalk