Hi waxwing,
Thanks again for sharing your feedback! The idea of
incrementing the marker byte with a group ID is clever
and I agree that it works technically. This triggered
me to spend some more time to think about what that
might look like which is fun but I am still not
fully convinced this is worth adding.
> Say a bunch of people want maximally weight-minimising
> transaction (for their consolidation), but don't want to
> run a collaborative scheme between each other because
> it's technically hard to do safely (constrained
> hardware/software, nonce state handling, etc.). Each of
> them just want to full agg their 10 inputs, each.
You may have already had this in mind but to make sure
we are on the same page: In this scenario the parties do
not become fully independent of each other. With sighash
default (or all) every signature commits to all outputs,
so all parties have to agree on the complete output list
of the transaction before anyone can sign. Only the
signing session itself is avoided. It is hard for me to
imagine a scenario where that kind of up-front
coordination is fine but the signing session isn't. It
would require some kind of communication and holding of
state as well. Please let me know if you think
differently here. I am not sure what your assumptions
are around up-front coordination capabilities.
I also looked into decoupling the parties further but
it does not really work in my opinion. SINGLE with
ANYONECANPAY only fits parties with one input and one
output each, the consolidation example has no outputs that
the other 9 inputs could safely commit to. When this does
fit, it reveals which input pays which output, and since
nothing commits to the other groups, anyone can split the
merged transaction apart. The explicit sighash bytes
also cost one extra weight unit per input, while
separate transactions can omit the byte by using the
default.
> Not saying it's some super-common-in-practice scenario,
> but it seems suboptimal that you can't do it. So ... I
> guess it depends on whether "the additional validation
> complexity" is really bad compared with the utility of
> that specific use case.
The utility seems limited because of the minor additional
savings they gain from this. They can use half-aggregation
within the shared transaction, but probably better for a
scenario as you outline, each party just broadcasts its
own transaction with its own full-aggregation group. The
latter has about 10 vbytes of transaction overhead and
both alternatives lose all the coordination requirements.
However, we could take the multi-full-agg-group concept
to the next level and half-agg the full-agg signatures
of the different groups for another round of savings (as
well as additional complexity of course).
So, back of the envelope multi-full-agg-group steelman
calculation for your scenario: 10 participants each
consolidating 10 inputs into 1 output.
Each in their own tx:
10 x input skeleton 1640 WU
9 placeholders + 1 final (27 + 67) 94 WU
1 output 172 WU
tx skeleton 42 WU
total 1948 WU (487 vb)
All in one shared tx with half-agg on top:
10 x input skeleton 1640 WU
9 placeholders + 1 R-only final (27 + 35) 62 WU
1 output 172 WU
share of combined s (32 / 10) 3.2 WU
share of tx skeleton (42 / 10) 4.2 WU
total 1881 WU (470 vb)
So this takes it up to 17 vbytes, or 3.4% savings per
participant/group. I didn't fully sketch this out but
I think it should be possible without introducing
additional overhead.
I start to warm up to it because it's clever but I am
not sure if that is a good thing ;)
> More specifically, though, why couldn't a 'group ID' be
> folded into the marker byte.
> Is this just out of consideration for some other reason
> that (hardly surprising) I'm not aware of?
Yepp, this works just like you describe. The reason is
only that I do not see a real use case justifying it and
I even feel like the sighash constraints make reasonable
use-cases hard to imagine.
> A negative (for privacy specifically) would be that you
> tag the different groups in the input list.
Right, the group numbers would reveal which inputs
belong together. But for your consolidation scenario this
seems like a minor issue and it's not that different from
potential finger printing issues resulting from unique
mixing of different aggregation types in a transaction.
I already have some fingerprinting warnings in the BIP to
make people aware of this.
> While that as a proposal may or may not be a good one, I
> feel like: this is worth mentioning at this time because
> (IIUC) it cannot be retrofitted in after.
Yes, undefined marker values cannot become valid through
a soft fork, I thought about something like this early on
trying to find potential upgrade paths. But this doesn't
seem possible and it's good to have this conversation now.
Thank you again for raising this. I have expanded the
rationale section in the BIP with my reasoning so
that the decision is better documented. I am also
still open to think about other potentially interesting
use-cases for the multi-group-full-agg feature or to
reconsider if you or other reviewers think we should rather
be maximimally flexible in this regard even without a clear
use-case. But unless there is interest being signalled
I will err on the side of simplicity.
Best,
Fabian
You received this message because you are subscribed to the Google Groups "Bitcoin Development Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bitcoindev+...@googlegroups.com.