Merge bitcoin/bitcoin#33135: wallet: warn against accidental unsafe older() import
76c092ff80wallet: warn against accidental unsafe older() import (Sjors Provoost)592157b759test: move SEQUENCE_LOCKTIME flags to script (Sjors Provoost) Pull request description: [BIP 379](https://github.com/bitcoin/bips/blob/master/bip-0379.md) ([Miniscript](https://bitcoin.sipa.be/miniscript/)) allows relative height and time locks that have no consensus meaning in [BIP 68](https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki) (relative timelocks) / [BIP 112](https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki) (`CHECKSEQUENCEVERIFY`). This is (ab)used by some protocols, e.g. [by Lightning to encode extra data](https://delvingbitcoin.org/t/exploring-extended-relative-timelocks/1818/23), but is unsafe when used unintentionally: `older(65536)` is equivalent to `older(1)`. This PR emits a warning when `importdescriptors` contains such a descriptor. The first commit makes `SEQUENCE_LOCKTIME` flags reusable by other tests. The main commit adds the `ForEachNode` helper to `miniscript.h` which is then used in the `MiniscriptDescriptor` constructor to check for `Fragment::OLDER` with unsafe values. These are stored in `m_warnings`, which the RPC code then collects via `Warnings()`. It adds both a unit and functional test. --- A previous version of this PR prevented the import, unless the user opted in with an `unsafe` flag. It also used string parsing in the RPC code. --- Based on: - [x] https://github.com/bitcoin/bitcoin/pull/33914 ACKs for top commit: pythcoiner: reACK76c092ff80achow101: ACK76c092ff80rkrux: lgtm re-ACK76c092ff80brunoerg: reACK76c092ff80Tree-SHA512: 8e944e499bd4a43cc27eeb889f262b499b9b07aa07610f4a415ccb4e34a9110f9946646f446a54ac5bf17494d8d96a89e4a1fa278385db9b950468f27283e17a
This commit is contained in:
9 files changed
+147
-6
No files matched your search
@@ -24,6 +24,10 @@ from test_framework.messages import (
|
||||
from test_framework.script import (
|
||||
CScript,
|
||||
OP_TRUE,
|
||||
SEQUENCE_LOCKTIME_DISABLE_FLAG,
|
||||
SEQUENCE_LOCKTIME_TYPE_FLAG,
|
||||
SEQUENCE_LOCKTIME_GRANULARITY,
|
||||
SEQUENCE_LOCKTIME_MASK,
|
||||
)
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import (
|
||||
@@ -36,11 +40,6 @@ from test_framework.wallet import MiniWallet
|
||||
|
||||
SCRIPT_W0_SH_OP_TRUE = script_to_p2wsh_script(CScript([OP_TRUE]))
|
||||
|
||||
SEQUENCE_LOCKTIME_DISABLE_FLAG = (1<<31)
|
||||
SEQUENCE_LOCKTIME_TYPE_FLAG = (1<<22) # this means use time (0 means height)
|
||||
SEQUENCE_LOCKTIME_GRANULARITY = 9 # this is a bit-shift
|
||||
SEQUENCE_LOCKTIME_MASK = 0x0000ffff
|
||||
|
||||
# RPC error for non-BIP68 final transactions
|
||||
NOT_FINAL_ERROR = "non-BIP68-final"
|
||||
|
||||
|
||||
Reference in new issue
Block a user