Matt Corallo [ARCHIVE] on Nostr: 📅 Original date posted:2022-02-10 📝 Original message:This is great in theory, ...
📅 Original date posted:2022-02-10
📝 Original message:This is great in theory, but I think it kinda misses *why* the complexity keeps creeping in. We
agree on (most of) the goals here, but the problem is the goals explicitly lead to the complexity,
its not some software engineering failure or imagination failure that leads to the complexity.
On 2/10/22 14:40, James O'Beirne via bitcoin-dev wrote:
-snip-
> # Purely additive feerate bumps should never be impossible
>
> Any user should always be able to add to the incentive to mine any
> transaction in a purely additive way. The countervailing force here
> ends up being spam prevention (a la min-relay-fee) to prevent someone
> from consuming bandwidth and mempool space with a long series of
> infinitesimal fee-bumps.
>
> A fee bump, naturally, should be given the same per-byte consideration
> as a normal Bitcoin transaction in terms of relay and block space,
> although it would be nice to come up with a more succinct
> representation. This leads to another design principle:
This is where *all* the complexity comes from. If our goal is to "ensure a bump increases a miner's
overall revenue" (thus not wasting relay for everyone else), then we precisely *do* need
> Special consideration for "what should be in the next
> block" and/or the caching of block templates seems like an imposing
> dependency
Whether a transaction increases a miner's revenue depends precisely on whether the transaction
(package) being replaced is in the next block - if it is, you care about the absolute fee of the
package and its replacement. If it is not in the next block (or, really, not near a block boundary
or further down in the mempool where you assume other transactions will appear around it over time),
then you care about the fee *rate*, not the fee difference.
> # The bandwidth and chain space consumed by a fee-bump should be minimal
>
> Instead of prompting a rebroadcast of the original transaction for
> replacement, which contains a lot of data not new to the network, it
> makes more sense to broadcast the "diff" which is the additive
> contribution towards some txn's feerate.
This entirely misses the network cost. Yes, sure, we can send "diffs", but if you send enough diffs
eventually you send a lot of data. We cannot simply ignore network-wide costs like total relay
bandwidth (or implementation runtime DoS issues).
> # Special transaction structure should not be required to bump fees
>
> In an ideal design, special structural foresight would not be needed
> in order for a txn's feerate to be improved after broadcast.
>
> Anchor outputs specified solely for CPFP, which amount to many bytes of
> wasted chainspace, are a hack. > It's probably uncontroversial at this
This has nothing to do with fee bumping, though, this is only solved with covenants or something in
that direction, not different relay policy.
> Coming down to earth, the "tabula rasa" thought experiment above has led
> me to favor an approach like the transaction sponsors design that Jeremy
> proposed in a prior discussion back in 2020[1].
How does this not also fail your above criteria of not wasting block space?
Further, this doesn't solve pinning attacks at all. In lightning we want to be able to *replace*
something in the mempool (or see it confirm soon, but that assumes we know exactly what transaction
is in "the" mempool). Just being able to sponsor something doesn't help if you don't know what that
thing is.
Matt
Published at
2023-06-07 23:04:14Event JSON
{
"id": "d013b13a3331b5312583cafc72f1d7c597cda81e0cf3b38681565d7ef0cf7962",
"pubkey": "cd753aa8fbc112e14ffe9fe09d3630f0eff76ca68e376e004b8e77b687adddba",
"created_at": 1686179054,
"kind": 1,
"tags": [
[
"e",
"c703681c72b4e4669ca1bb5b15d757a9761db34f49baa03e75c29c4c1b65c0d1",
"",
"root"
],
[
"e",
"404132f29fc9c34ec8670c74c9422bcc031ce4e998d53356d182ee6cb97cbb24",
"",
"reply"
],
[
"p",
"3030ec2d70259fdd55ba8e063740c139c3daaa618f86e3fae34cebcb73c742ba"
]
],
"content": "📅 Original date posted:2022-02-10\n📝 Original message:This is great in theory, but I think it kinda misses *why* the complexity keeps creeping in. We \nagree on (most of) the goals here, but the problem is the goals explicitly lead to the complexity, \nits not some software engineering failure or imagination failure that leads to the complexity.\n\nOn 2/10/22 14:40, James O'Beirne via bitcoin-dev wrote:\n-snip-\n\u003e # Purely additive feerate bumps should never be impossible\n\u003e \n\u003e Any user should always be able to add to the incentive to mine any\n\u003e transaction in a purely additive way. The countervailing force here\n\u003e ends up being spam prevention (a la min-relay-fee) to prevent someone\n\u003e from consuming bandwidth and mempool space with a long series of\n\u003e infinitesimal fee-bumps.\n\u003e \n\u003e A fee bump, naturally, should be given the same per-byte consideration\n\u003e as a normal Bitcoin transaction in terms of relay and block space,\n\u003e although it would be nice to come up with a more succinct\n\u003e representation. This leads to another design principle:\n\nThis is where *all* the complexity comes from. If our goal is to \"ensure a bump increases a miner's \noverall revenue\" (thus not wasting relay for everyone else), then we precisely *do* need\n\n \u003e Special consideration for \"what should be in the next\n \u003e block\" and/or the caching of block templates seems like an imposing\n \u003e dependency\n\nWhether a transaction increases a miner's revenue depends precisely on whether the transaction \n(package) being replaced is in the next block - if it is, you care about the absolute fee of the \npackage and its replacement. If it is not in the next block (or, really, not near a block boundary \nor further down in the mempool where you assume other transactions will appear around it over time), \nthen you care about the fee *rate*, not the fee difference.\n\n \u003e # The bandwidth and chain space consumed by a fee-bump should be minimal\n \u003e\n \u003e Instead of prompting a rebroadcast of the original transaction for\n \u003e replacement, which contains a lot of data not new to the network, it\n \u003e makes more sense to broadcast the \"diff\" which is the additive\n \u003e contribution towards some txn's feerate.\n\nThis entirely misses the network cost. Yes, sure, we can send \"diffs\", but if you send enough diffs \neventually you send a lot of data. We cannot simply ignore network-wide costs like total relay \nbandwidth (or implementation runtime DoS issues).\n\n\u003e # Special transaction structure should not be required to bump fees\n\u003e \n\u003e In an ideal design, special structural foresight would not be needed\n\u003e in order for a txn's feerate to be improved after broadcast.\n\u003e \n\u003e Anchor outputs specified solely for CPFP, which amount to many bytes of\n\u003e wasted chainspace, are a hack. \u003e It's probably uncontroversial at this\n\nThis has nothing to do with fee bumping, though, this is only solved with covenants or something in \nthat direction, not different relay policy.\n\n\u003e Coming down to earth, the \"tabula rasa\" thought experiment above has led\n\u003e me to favor an approach like the transaction sponsors design that Jeremy\n\u003e proposed in a prior discussion back in 2020[1].\n\nHow does this not also fail your above criteria of not wasting block space?\n\nFurther, this doesn't solve pinning attacks at all. In lightning we want to be able to *replace* \nsomething in the mempool (or see it confirm soon, but that assumes we know exactly what transaction \nis in \"the\" mempool). Just being able to sponsor something doesn't help if you don't know what that \nthing is.\n\nMatt",
"sig": "323fa61cbaa9a88b3a4b5512ab2d2fb33e70c25fad635f17af98d8613343d3f5499bce9851d1094d69afb8a72730c33955df305631f54edf97442833bfa3a998"
}