Hi, Antoine. It sounds like perhaps OP_CHECKCONTRACTVERIFY can achieve what you are looking for: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-May/021719.html
By committing the participants' pubkeys and balances in the dynamic data instead of the taptree one can imagine a subset of online users agreeing to pool their aggregated balances in a new output, while the offline users' funds would remain inaccessible by them in a second output. The way this would work is by spending the coinpool utxo with a transaction having two outputs: one output that is the "remainder" of the previous coinpool (the offline users), and the second output the new coinpool among the online users*. When the offline users are back online, they could all agree to continue using the original coinpool utxo. * assuming Eltoo in case an offline user comes back online and double spends the UTXO. - Johan On Wed, Sep 27, 2023 at 12:08 PM Antoine Riard via bitcoin-dev <bitcoin-dev@lists.linuxfoundation.org> wrote: > > Hi Zeeman, > > See my comments at the time of OP_EVICT original publication. > > https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-February/019939.html > > "I think in the context of (off-chain) payment pool, OP_EVICT requires > participant cooperation *after* the state update to allow a single > participant to withdraw her funds. > > I believe this is unsafe if we retain as an off-chain construction security > requirement that a participant should have the unilateral means to enforce > the latest agreed upon state at any time during the construction lifetime". > > I think this level of covenant flexibility is still wished for CoinPool as a > fundamental property, and this is offered by TLUV or MERKLESUB. > On the other hand, I think OP_EVICT introduces this idea of *subgroup > novation* (i.e `K-of-N`) of a PT2R scriptpubkey. > > To the best of my understanding, I think there is not yet any sound covenant > proposal aiming to combine TLUV and EVICT-like semantics in a consistent set > of Script primitives to enable "cut-through" updates, while still retaining > the key property of unilateral withdraw of promised balances in any-order. > > I might go to work on crafting one, though for now I'm still interested to > understand better if on-chain "cut-through" is the best direction to solve > the fundamental high interactivity issue of channel factory and payment pool > over punishment-based ideas. > > Best, > Antoine > > Le mar. 26 sept. 2023 à 07:51, ZmnSCPxj <zmnsc...@protonmail.com> a écrit : >> >> Good morning Antoine, >> >> Does `OP_EVICT` not fit? >> >> https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-February/019926.html >> >> Regards, >> ZmnSCPxj >> >> >> Sent with Proton Mail secure email. >> >> ------- Original Message ------- >> On Monday, September 25th, 2023 at 6:18 PM, Antoine Riard via bitcoin-dev >> <bitcoin-dev@lists.linuxfoundation.org> wrote: >> >> >> > Payment pools and channel factories are afflicted by severe interactivity >> > constraints worsening with the number of users owning an off-chain balance >> > in the construction. The security of user funds is paramount on the >> > ability to withdraw unilaterally from the off-chain construction. As such >> > any update applied to the off-chain balances requires a signature >> > contribution from the unanimity of the construction users to ensure this >> > ability is conserved along updates. >> > As soon as one user starts to be offline or irresponsive, the updates of >> > the off-chain balances must have to be halted and payments progress are >> > limited among subsets of 2 users sharing a channel. Different people have >> > proposed solutions to this issue: introducing a coordinator, partitioning >> > or layering balances in off-chain users subsets. I think all those >> > solutions have circled around a novel issue introduced, namely >> > equivocation of off-chain balances at the harm of construction >> > counterparties [0]. >> > >> > As ZmnSCPxj pointed out recently, one way to mitigate this equivocation >> > consists in punishing the cheating pre-nominated coordinator on an >> > external fidelity bond. One can even imagine more trust-mimized and >> > decentralized fraud proofs to implement this mitigation, removing the need >> > of a coordinator [1]. >> > >> > However, I believe punishment equivocation to be game-theory sound should >> > compensate a defrauded counterparty of the integrity of its lost off-chain >> > balance. As one cheating counterparty can equivocate in the worst-case >> > against all the other counterparties in the construction, one fidelity >> > bond should be equal to ( C - 1 ) * B satoshi amount, where C is the >> > number of construction counterparty and B the initial off-chain balance of >> > the cheating counterparty. >> > >> > Moreover, I guess it is impossible to know ahead of a partition or >> > transition who will be the "honest" counterparties from the "dishonest" >> > ones, therefore this ( C - 1 ) * B-sized fidelity bond must be maintained >> > by every counterparty in the pool or factory. On this ground, I think this >> > mitigation and other corrective ones are not economically practical for >> > large-scale pools among a set of anonymous users. >> > >> > I think the best solution to solve the interactivity issue which is >> > realistic to design is one ruling out off-chain group equivocation in a >> > prophylactic fashion. The pool or factory funding utxo should be edited in >> > an efficient way to register new off-chain subgroups, as lack of >> > interactivity from a subset of counterparties demands it. >> > >> > With CoinPool, there is already this idea of including a user pubkey and >> > balance amount to each leaf composing the Taproot tree while preserving >> > the key-path spend in case of unanimity in the user group. Taproot leaves >> > can be effectively regarded as off-chain user accounts available to >> > realize privacy-preserving payments and contracts. >> > >> > I think one (new ?) idea can be to introduce taproot leaves "cut-through" >> > spends where multiple leaves are updated with a single witness, >> > interactively composed by the owners of the spent leaves. This spend sends >> > back the leaves amount to a new single leaf, aggregating the amounts and >> > user pubkeys. The user leaves not participating in this "cut-through" are >> > inherited with full integrity in the new version of the Taproot tree, at >> > the gain of no interactivity from their side. >> > >> > Let's say you have a CoinPool funded and initially set with Alice, Bob, >> > Caroll, Dave and Eve. Each pool participant has a leaf L.x committing to >> > an amount A.x and user pubkey P.x, where x is the user name owning a leaf. >> > >> > Bob and Eve are deemed to be offline by the Alice, Caroll and Dave subset >> > (the ACD group). >> > >> > The ACD group composes a cut-through spend of L.a + L.c + L.d. This spends >> > generates a new leaf L.(acd) leaf committing to amount A.(acd) and P.(acd). >> > >> > Amount A.(acd) = A.a + A.c + A.d and pubkey P.(acd) = P.a + P.c + P.d. >> > >> > Bob's leaf L.b and Eve's leaf L.e are left unmodified. >> > >> > The ACD group generates a new Taproot tree T' = L.(acd) + L.b + L.e, where >> > the key-path K spend including the original unanimity of pool >> > counterparties is left unmodified. >> > >> > The ACD group can confirm a transaction spending the pool funding utxo to >> > a new single output committing to the scriptpubkey K + T'. >> > >> > From then, the ACD group can pursue off-chain balance updates among the >> > subgroup thanks to the new P.(acd) and relying on the known Eltoo >> > mechanism. There is no possibility for any member of the ACD group to >> > equivocate with Bob or Eve in a non-observable fashion. >> > >> > Once Bob and Eve are online and ready to negotiate an on-chain pool >> > "refresh" transaction, the conserved key-path spend can be used to >> > re-equilibrate the Taproot tree, prune out old subgroups unlikely to be >> > used and provision future subgroups, all with a compact spend based on >> > signature aggregation. >> > >> > Few new Taproot tree update script primitives have been proposed, e.g [2]. >> > Though I think none with the level of flexibility offered to generate >> > leaves cut-through spends, or even batch of "cut-through" where M >> > subgroups are willing to spend N leaves to compose P new subgroups fan-out >> > in Q new outputs, with showing a single on-chain witness. I believe such a >> > hypothetical primitive can also reduce the chain space consumed in the >> > occurrence of naive mass pool withdraws at the same time. >> > >> > I think this solution to the high-interactivity issue of payment pools and >> > factories shifts the burden on each individual user to pre-commit fast >> > Taproot tree traversals, allowing them to compose new pool subgroups as >> > fluctuations in pool users' level of liveliness demand it. Pool efficiency >> > becomes the sum of the quality of user prediction on its counterparties' >> > liveliness during the construction lifetime. Recursive taproot tree spends >> > or more efficient accumulator than merkle tree sounds ideas to lower the >> > on-chain witness space consumed by every pool in the average >> > non-interactive case. >> > >> > Cheers, >> > Antoine >> > >> > [0] >> > https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-April/020370.html >> > [1] >> > https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-August/004043.html >> > [2] >> > https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019420.html > > _______________________________________________ > bitcoin-dev mailing list > bitcoin-dev@lists.linuxfoundation.org > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev _______________________________________________ bitcoin-dev mailing list bitcoin-dev@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev