Good morning William,
> Has anyone coded up a 'Poor man's rendez-vous' demo yet? How hard would > it be, could it be done with a clightning plugin perhaps? Probably not *yet*; it needs each intermediate payee (i.e. the one that is not the last one) to sign an invoice for which it does not know the preimage. Maybe call such a command `signfakeinvoice`. However, if a command to do the above is implemented (it would have to generate and sign the invoice, but not insert it into the database at all), then intermediate payees can use `htlc_accepted` hook for the "rendez-vous". So to generate the invoice: * Arrange the payees in some agreed fixed order. * Last payee generates a normal invoice. * From last payee to second, each one: * Passes its invoice to the previous payee. * The previous payee then creates its own signed invoice with `signfakeinvoice` to itself, adding its payout plus a fee budget, as well as adding its own delay budget. * The previous payee plugin stores the next-payee invoice and the details of its own invoice to db, such as by `datastore` command. * The first payee sends the sender the invoice. On payment: * The sender sends the payment to the first hop. * From first payee to second-to-last: * Triggers `htlc_accepted` hook, and plugin checks if the incoming payment has a hash that is in this scheme stored in the database. * The plugin gathers `htlc_accepted` hook invocations until they sum up to the expected amount (this handles multipath between payees). * The plugin marks that it has gathered all `htlc_accepted` hooks for that hash in durable storage a.k.a. `datastore` (this handles a race condition where the plugin is able to respond to some `htlc_accepted` hooks, but the node is restarted before all of them were able to be recorded by C-Lightning in its own database --- this makes the plugin skip the "gathering" step above, once it has already gathered them all before). * The plugin checks if there is already an outgoing payment for that hash (this handles the case where our node gets restarted in the meantime --- C-Lightning will reissue `htlc_accepted` on startup) * If the outgoing payment exists and is pending, wait for it to resolve to either success or failure. * If the outgoing payment exists and succeeded, resolve all the gathered `htlc_accepted` hooks. * If the outgoing payment exists and failed, fail all the gathered `htlc_accepted` hooks. * Otherwise, perform a `pay`, giving `maxfeepercent` and `maxdelay` based on its fee budget and delay budget. When the `pay` succeeds or fails, propagate it to the gathered `htlc_accepted` hooks. * The last payee just receives a normal payment using the normal invoice-receive scheme. Regards, ZmnSCPxj _______________________________________________ Lightning-dev mailing list Lightning-dev@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev