Matt Whitlock [ARCHIVE] on Nostr: 📅 Original date posted:2014-07-31 📝 Original message:It would make more sense ...
📅 Original date posted:2014-07-31
📝 Original message:It would make more sense to introduce a new script opcode that pushes the current block height onto the operand stack. Then you could implement arbitrary logic about which blocks the transaction can be valid in. This would require that the client revalidate all transactions in its mempool (really, only those making use of this opcode) whenever the chain tip changes.
On Thursday, 31 July 2014, at 5:58 pm, Kaz Wesley wrote:
> There is currently little in place for managing transaction lifetime
> in the network's mempools (see discussion in github in #3722 "mempool
> transaction expiration", and it seems to be a major factor blocking
> some mempool exchange, see #1833/1918, #3721). Expiry per-node a
> certain amount of wall time after receipt has been proposed, but
> that's a fragile mechanism -- a single node could keep all relayable
> transactions alive forever by remembering transactions until most
> nodes have dropped them and then releasing them back into the wild.
>
> I have a proposal for a way to add finite and predictable lifespans to
> transactions in mempools: we d̶e̶s̶t̶r̶o̶y̶ ̶t̶h̶e̶
> ̶r̶e̶s̶u̶r̶r̶e̶c̶t̶i̶o̶n̶ ̶h̶u̶b̶ use nLockTime and a new standardness
> rule. It could be done in stages, would not necessarily require even a
> soft fork, and does not cause problems with reorgs like the proposal
> in #3509:
> 1. start setting nLockTime to the current height by default in newly
> created transactions (or slightly below the current height, for
> reorg-friendliness)
> 2. once users have had some time to upgrade to clients that set
> nLockTime, start discouraging transactions without nLockTime --
> possibly with a slightly higher fee required for relay
> 3. start rate-limiting relay of transactions without an nLockTime
> (maybe this alone could be used to achieve [2])
> 4. add a new IsStandard rule rejecting transactions with an nLockTime
> more than N blocks behind the current tip (for some fixed value N, to
> be determined)
>
> Transactions would stop being relayed and drop out of mempools a fixed
> number of blocks from their creation; once that window had passed, the
> sender's wallet could begin to expect the transaction would not be
> confirmed. In case a reorg displaces a transaction until after its
> expiry height, a miner can still put it back in the blockchain; the
> expiry height is just a relay rule. Also, a user who needed to get
> their original "expired" transaction confirmed could still do so by
> submitting it directly to a miner with suitable policies.
Published at
2023-06-07 15:24:39Event JSON
{
"id": "241ccbe3d0afe0ec49015f17b3a2304850298b04402c0dc832adf60842f232ca",
"pubkey": "f00d0858b09287e941ccbc491567cc70bdbc62d714628b167c1b76e7fef04d91",
"created_at": 1686151479,
"kind": 1,
"tags": [
[
"e",
"862ea3dc96b72bff70fc377e79d0d6efd56d14bf0babb9aa995ab55fc1b92d18",
"",
"root"
],
[
"e",
"141df1b23b92711f50f6e26ba849a29bd31548449c01d19348ab51bb3af0e435",
"",
"reply"
],
[
"p",
"fb86e09da2994d49831e6fa34cbe7c71aef99054c8ac90c8438c5594b4ce2f60"
]
],
"content": "📅 Original date posted:2014-07-31\n📝 Original message:It would make more sense to introduce a new script opcode that pushes the current block height onto the operand stack. Then you could implement arbitrary logic about which blocks the transaction can be valid in. This would require that the client revalidate all transactions in its mempool (really, only those making use of this opcode) whenever the chain tip changes.\n\n\nOn Thursday, 31 July 2014, at 5:58 pm, Kaz Wesley wrote:\n\u003e There is currently little in place for managing transaction lifetime\n\u003e in the network's mempools (see discussion in github in #3722 \"mempool\n\u003e transaction expiration\", and it seems to be a major factor blocking\n\u003e some mempool exchange, see #1833/1918, #3721). Expiry per-node a\n\u003e certain amount of wall time after receipt has been proposed, but\n\u003e that's a fragile mechanism -- a single node could keep all relayable\n\u003e transactions alive forever by remembering transactions until most\n\u003e nodes have dropped them and then releasing them back into the wild.\n\u003e \n\u003e I have a proposal for a way to add finite and predictable lifespans to\n\u003e transactions in mempools: we d̶e̶s̶t̶r̶o̶y̶ ̶t̶h̶e̶\n\u003e ̶r̶e̶s̶u̶r̶r̶e̶c̶t̶i̶o̶n̶ ̶h̶u̶b̶ use nLockTime and a new standardness\n\u003e rule. It could be done in stages, would not necessarily require even a\n\u003e soft fork, and does not cause problems with reorgs like the proposal\n\u003e in #3509:\n\u003e 1. start setting nLockTime to the current height by default in newly\n\u003e created transactions (or slightly below the current height, for\n\u003e reorg-friendliness)\n\u003e 2. once users have had some time to upgrade to clients that set\n\u003e nLockTime, start discouraging transactions without nLockTime --\n\u003e possibly with a slightly higher fee required for relay\n\u003e 3. start rate-limiting relay of transactions without an nLockTime\n\u003e (maybe this alone could be used to achieve [2])\n\u003e 4. add a new IsStandard rule rejecting transactions with an nLockTime\n\u003e more than N blocks behind the current tip (for some fixed value N, to\n\u003e be determined)\n\u003e \n\u003e Transactions would stop being relayed and drop out of mempools a fixed\n\u003e number of blocks from their creation; once that window had passed, the\n\u003e sender's wallet could begin to expect the transaction would not be\n\u003e confirmed. In case a reorg displaces a transaction until after its\n\u003e expiry height, a miner can still put it back in the blockchain; the\n\u003e expiry height is just a relay rule. Also, a user who needed to get\n\u003e their original \"expired\" transaction confirmed could still do so by\n\u003e submitting it directly to a miner with suitable policies.",
"sig": "baf7ad3057954ecc41dbec890cfcdac3a2048f087209e10c8c15857cf5fa241552226fc04485396b156213899d4bb66132ff632d77a2aa52f34b3915ca9d3a4d"
}