Skip to content

Commit 74472e3

Browse files
authored
Merge pull request #185 from alexanderwiederin/verify-flags
fix(core): replace btck_ScriptVerificationFlags with a public type alias
2 parents 7b3b040 + 1676083 commit 74472e3

5 files changed

Lines changed: 27 additions & 21 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Changed
11+
- The `verify` function's `flags` parameter now uses `ScriptVerificationFlags` instead of `u32`, making the type explicit in the public API.
12+
1013
## [0.2.1] 2026-05-20
1114

1215
### Added

src/core/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub use block::{
2121
pub use script::ScriptPubkeyExt;
2222
pub use transaction::{TransactionExt, TxInExt, TxOutExt, TxOutPointExt, TxidExt};
2323

24-
pub use verify::{verify, PrecomputedTransactionData, ScriptVerifyError};
24+
pub use verify::{verify, PrecomputedTransactionData, ScriptVerificationFlags, ScriptVerifyError};
2525

2626
pub mod verify_flags {
2727
pub use super::verify::{

src/core/verify.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -171,37 +171,40 @@ use crate::{
171171
c_helpers, ffi::sealed::AsPtr, KernelError, ScriptPubkeyExt, TransactionExt, TxOutExt,
172172
};
173173

174+
/// Bitmask of flags controlling which consensus rules [`verify`] enforces.
175+
pub type ScriptVerificationFlags = btck_ScriptVerificationFlags;
176+
174177
/// No verification flags.
175-
pub const VERIFY_NONE: btck_ScriptVerificationFlags = btck_ScriptVerificationFlags_NONE;
178+
pub const VERIFY_NONE: ScriptVerificationFlags = btck_ScriptVerificationFlags_NONE;
176179

177180
/// Validate Pay-to-Script-Hash (BIP 16).
178-
pub const VERIFY_P2SH: btck_ScriptVerificationFlags = btck_ScriptVerificationFlags_P2SH;
181+
pub const VERIFY_P2SH: ScriptVerificationFlags = btck_ScriptVerificationFlags_P2SH;
179182

180183
/// Require strict DER encoding for ECDSA signatures (BIP 66).
181-
pub const VERIFY_DERSIG: btck_ScriptVerificationFlags = btck_ScriptVerificationFlags_DERSIG;
184+
pub const VERIFY_DERSIG: ScriptVerificationFlags = btck_ScriptVerificationFlags_DERSIG;
182185

183186
/// Require the dummy element in OP_CHECKMULTISIG to be empty (BIP 147).
184-
pub const VERIFY_NULLDUMMY: btck_ScriptVerificationFlags = btck_ScriptVerificationFlags_NULLDUMMY;
187+
pub const VERIFY_NULLDUMMY: ScriptVerificationFlags = btck_ScriptVerificationFlags_NULLDUMMY;
185188

186189
/// Enable OP_CHECKLOCKTIMEVERIFY (BIP 65).
187-
pub const VERIFY_CHECKLOCKTIMEVERIFY: btck_ScriptVerificationFlags =
190+
pub const VERIFY_CHECKLOCKTIMEVERIFY: ScriptVerificationFlags =
188191
btck_ScriptVerificationFlags_CHECKLOCKTIMEVERIFY;
189192

190193
/// Enable OP_CHECKSEQUENCEVERIFY (BIP 112).
191-
pub const VERIFY_CHECKSEQUENCEVERIFY: btck_ScriptVerificationFlags =
194+
pub const VERIFY_CHECKSEQUENCEVERIFY: ScriptVerificationFlags =
192195
btck_ScriptVerificationFlags_CHECKSEQUENCEVERIFY;
193196

194197
/// Validate Segregated Witness programs (BIP 141/143).
195-
pub const VERIFY_WITNESS: btck_ScriptVerificationFlags = btck_ScriptVerificationFlags_WITNESS;
198+
pub const VERIFY_WITNESS: ScriptVerificationFlags = btck_ScriptVerificationFlags_WITNESS;
196199

197200
/// Validate Taproot spends (BIP 341/342). Requires spent outputs.
198-
pub const VERIFY_TAPROOT: btck_ScriptVerificationFlags = btck_ScriptVerificationFlags_TAPROOT;
201+
pub const VERIFY_TAPROOT: ScriptVerificationFlags = btck_ScriptVerificationFlags_TAPROOT;
199202

200203
/// All consensus rules.
201-
pub const VERIFY_ALL: btck_ScriptVerificationFlags = btck_ScriptVerificationFlags_ALL;
204+
pub const VERIFY_ALL: ScriptVerificationFlags = btck_ScriptVerificationFlags_ALL;
202205

203206
/// All consensus rules except Taproot.
204-
pub const VERIFY_ALL_PRE_TAPROOT: btck_ScriptVerificationFlags = VERIFY_P2SH
207+
pub const VERIFY_ALL_PRE_TAPROOT: ScriptVerificationFlags = VERIFY_P2SH
205208
| VERIFY_DERSIG
206209
| VERIFY_NULLDUMMY
207210
| VERIFY_CHECKLOCKTIMEVERIFY
@@ -389,7 +392,7 @@ pub fn verify(
389392
amount: Option<i64>,
390393
tx_to: &impl TransactionExt,
391394
input_index: usize,
392-
flags: Option<u32>,
395+
flags: Option<ScriptVerificationFlags>,
393396
precomputed_txdata: &PrecomputedTransactionData,
394397
) -> Result<(), KernelError> {
395398
let input_count = tx_to.input_count();

src/lib.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,10 @@ impl std::error::Error for KernelError {
282282

283283
pub use crate::core::{
284284
verify, Block, BlockHash, BlockHeader, BlockSpentOutputs, BlockSpentOutputsRef, BlockTreeEntry,
285-
Coin, CoinRef, PrecomputedTransactionData, ScriptPubkey, ScriptPubkeyRef, ScriptVerifyError,
286-
Transaction, TransactionRef, TransactionSpentOutputs, TransactionSpentOutputsRef, TxIn,
287-
TxInRef, TxOut, TxOutPoint, TxOutPointRef, TxOutRef, Txid, TxidRef,
285+
Coin, CoinRef, PrecomputedTransactionData, ScriptPubkey, ScriptPubkeyRef,
286+
ScriptVerificationFlags, ScriptVerifyError, Transaction, TransactionRef,
287+
TransactionSpentOutputs, TransactionSpentOutputsRef, TxIn, TxInRef, TxOut, TxOutPoint,
288+
TxOutPointRef, TxOutRef, Txid, TxidRef,
288289
};
289290

290291
pub use crate::log::{disable_logging, Log, LogCategory, LogLevel, Logger};

tests/test.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@ mod tests {
99
prelude::*, verify, Block, BlockHash, BlockHeader, BlockSpentOutputs, BlockTreeEntry,
1010
BlockValidationStateRef, ChainParams, ChainType, ChainstateManager,
1111
ChainstateManagerBuilder, Coin, Context, ContextBuilder, KernelError, Log, Logger,
12-
PrecomputedTransactionData, ScriptPubkey, ScriptVerifyError, Transaction,
13-
TransactionSpentOutputs, TxIn, TxOut, ValidationMode, VERIFY_ALL, VERIFY_ALL_PRE_TAPROOT,
14-
VERIFY_CHECKLOCKTIMEVERIFY, VERIFY_CHECKSEQUENCEVERIFY, VERIFY_DERSIG, VERIFY_NONE,
15-
VERIFY_NULLDUMMY, VERIFY_P2SH, VERIFY_TAPROOT, VERIFY_WITNESS,
12+
PrecomputedTransactionData, ScriptPubkey, ScriptVerificationFlags, ScriptVerifyError,
13+
Transaction, TransactionSpentOutputs, TxIn, TxOut, ValidationMode, VERIFY_ALL,
14+
VERIFY_ALL_PRE_TAPROOT, VERIFY_CHECKLOCKTIMEVERIFY, VERIFY_CHECKSEQUENCEVERIFY,
15+
VERIFY_DERSIG, VERIFY_NONE, VERIFY_NULLDUMMY, VERIFY_P2SH, VERIFY_TAPROOT, VERIFY_WITNESS,
1616
};
17-
use libbitcoinkernel_sys::btck_ScriptVerificationFlags;
1817
use std::fs::File;
1918
use std::io::{BufRead, BufReader};
2019
use std::sync::{Arc, Once};
@@ -865,7 +864,7 @@ mod tests {
865864
amount: i64,
866865
input: usize,
867866
outputs: Vec<TxOut>,
868-
flags: btck_ScriptVerificationFlags,
867+
flags: ScriptVerificationFlags,
869868
) -> Result<(), KernelError> {
870869
let spent_script_pubkey =
871870
ScriptPubkey::try_from(hex::decode(spent).unwrap().as_slice()).unwrap();

0 commit comments

Comments
 (0)