Luke-Jr [ARCHIVE] on Nostr: 📅 Original date posted:2011-09-26 🗒️ Summary of this message: A discussion ...
📅 Original date posted:2011-09-26
🗒️ Summary of this message: A discussion about the potential risks of using DoS (Denial of Service) rules in Bitcoin's block acceptance process.
📝 Original message:On Monday, September 26, 2011 4:47:06 PM Gavin Andresen wrote:
> On Mon, Sep 26, 2011 at 3:17 PM, Luke-Jr <luke at dashjr.org> wrote:
> > + return DoS(10, error("AcceptToMemoryPool() : transaction with
> > out-of- bounds SigOpCount"));
> > + return DoS(10, error("ConnectInputs() : tried to
> > spend coinbase at depth %d", pindexBlock->nHeight - pindex->nHeight));
> > These shouldn't be "DoS"'d, or else you open a new DoS when nodes
> > legitimately relay such transactions/blocks.
>
> Huh?
>
> So in the future lets suppose we schedule a change to the acceptable
> block rules that allows more SigOps in a block, or allows generation
> transaction to be spent before 100 confirmations. At that same time,
> the DoS rules will be changed.
>
> You cannot "legitimately" relay those blocks without a scheduled
> block-chain-split. If a block-chain-split IS scheduled and the rules
> change, then denying service to nodes running old, obsolete versions
> of bitcoin is the right thing to do-- it is better to "fail hard" and
> find it difficult or impossible to connect to the network rather than
> continue with an obsolete client and a non-majority block chain.
>
> (and the third DoS in AcceptBlock(): prev block not found is a
> "should be impossible" case, because AcceptBlock is only called when
> extending the best-block chain).
The first one I was referring to is a *transaction* with "non-standard" sig op
count, which is AFAIK allowed in blocks, just not accepted by the mainline
rules. In the second case, that transaction is not tied to a specific block.
Maybe the person spending it sees it matured beyond 100 confirmations, and you
only see 99. An attacker could use these things to get nodes to ban each
other.
Published at
2023-06-07 02:29:16Event JSON
{
"id": "5c3b3eac1b5d0adb502a9b63c94891a4b90e3753bcd07774131e1e12a2201a9a",
"pubkey": "6ac6a519b554d8ff726a301e3daec0b489f443793778feccc6ea7a536f7354f1",
"created_at": 1686104956,
"kind": 1,
"tags": [
[
"e",
"d6d0027f983f7cf39b7bceeaefc2da4fd33248e5b23365297769f7aaa959dad8",
"",
"root"
],
[
"e",
"8462c555b6ba2412d25cd90ffda835a4453a3f4f37370a0793edf85f7bf614cb",
"",
"reply"
],
[
"p",
"857f2f78dc1639e711f5ea703a9fc978e22ebd279abdea1861b7daa833512ee4"
]
],
"content": "📅 Original date posted:2011-09-26\n🗒️ Summary of this message: A discussion about the potential risks of using DoS (Denial of Service) rules in Bitcoin's block acceptance process.\n📝 Original message:On Monday, September 26, 2011 4:47:06 PM Gavin Andresen wrote:\n\u003e On Mon, Sep 26, 2011 at 3:17 PM, Luke-Jr \u003cluke at dashjr.org\u003e wrote:\n\u003e \u003e + return DoS(10, error(\"AcceptToMemoryPool() : transaction with\n\u003e \u003e out-of- bounds SigOpCount\"));\n\u003e \u003e + return DoS(10, error(\"ConnectInputs() : tried to\n\u003e \u003e spend coinbase at depth %d\", pindexBlock-\u003enHeight - pindex-\u003enHeight));\n\u003e \u003e These shouldn't be \"DoS\"'d, or else you open a new DoS when nodes\n\u003e \u003e legitimately relay such transactions/blocks.\n\u003e \n\u003e Huh?\n\u003e \n\u003e So in the future lets suppose we schedule a change to the acceptable\n\u003e block rules that allows more SigOps in a block, or allows generation\n\u003e transaction to be spent before 100 confirmations. At that same time,\n\u003e the DoS rules will be changed.\n\u003e \n\u003e You cannot \"legitimately\" relay those blocks without a scheduled\n\u003e block-chain-split. If a block-chain-split IS scheduled and the rules\n\u003e change, then denying service to nodes running old, obsolete versions\n\u003e of bitcoin is the right thing to do-- it is better to \"fail hard\" and\n\u003e find it difficult or impossible to connect to the network rather than\n\u003e continue with an obsolete client and a non-majority block chain.\n\u003e \n\u003e (and the third DoS in AcceptBlock(): prev block not found is a\n\u003e \"should be impossible\" case, because AcceptBlock is only called when\n\u003e extending the best-block chain).\n\nThe first one I was referring to is a *transaction* with \"non-standard\" sig op \ncount, which is AFAIK allowed in blocks, just not accepted by the mainline \nrules. In the second case, that transaction is not tied to a specific block. \nMaybe the person spending it sees it matured beyond 100 confirmations, and you \nonly see 99. An attacker could use these things to get nodes to ban each \nother.",
"sig": "f7888cd61fed17c5742c405ee3a9fb2a47b8ca4c8adb4c7a3fe99346929b9ab086f342de16a02a916a6733084e89b3566d8ab4a6ae8aa80261263e632b42f3cf"
}