Skip to content

Conversation

@sedited
Copy link
Owner

@sedited sedited commented Dec 27, 2025

No description provided.

…4ddc2dced57

94ddc2dced57 Merge bitcoin/bitcoin#34113: refactor: [rpc] Remove confusing and brittle integral casts
c575990651d6 Merge bitcoin/bitcoin#34147: scripted-diff: refactor: wallet: Delete duplicate IsCrypted()
eb0594e23f0c Merge bitcoin/bitcoin#33891: kernel: Expose reusable `PrecomputedTransactionData` in script validation
e7033605775c Merge bitcoin/bitcoin#32997: index: Deduplicate HashKey / HeightKey handling
ec4ff99a22b1 Merge bitcoin/bitcoin#33892: policy: allow <minrelay txns in package context if paid for by cpfp
48c9ba1e974b Merge bitcoin/bitcoin#34137: test: Avoid hard time.sleep(1) in feature_init.py
11ce5cf7997e scripted-diff: refactor: wallet: Delete IsCrypted
44e006d43831 [kernel] Expose reusable PrecomputedTransactionData in script valid
fa727e3ec984 test: Avoid hard time.sleep(1) in feature_init.py
d861c3820528 Merge bitcoin/bitcoin#33636: wallet: Expand MuSig test coverage and follow-ups
25636500c232 Merge bitcoin/bitcoin#32737: rpc, doc: clarify the response of listtransactions RPC
d018876696cf Merge bitcoin/bitcoin#34039: test: address self-announcement
5bbc7c8cc1f2 Merge bitcoin/bitcoin#33810: ci: Add IWYU job
695e2b94ecd9 Merge bitcoin/bitcoin#33353: log: show reindex progress in `ImportBlocks`
1f151e73c00a Merge bitcoin/bitcoin#32929: qa: Clarify assert_start_raises_init_error output
315fdb406658 Merge bitcoin/bitcoin#34079: kernel: Remove non-kernel module includes
d3a479cb077d kernel: Move BlockInfo to a kernel file
d69a582e72ea kernel: Remove some unnecessary non-kernel includes
e44dec027cee add release note about supporing non-TRUC <minrelay txns
7f295e1d9b44 Merge bitcoin/bitcoin#34084: scripted-diff: [doc] Unify stale copyright headers
5e7931af3573 Merge bitcoin/bitcoin#34095: refactor: enable `readability-container-contains` clang-tidy rule
c80fd910f96c Merge bitcoin/bitcoin#33732: ci: Call docker exec from Python script to fix word splitting
acba51101bbc Merge bitcoin/bitcoin#34107: build: Update minimum required Boost version
fa66e2d07a4b refactor: [rpc] Remove confusing and brittle integral casts
74d6efe9c28b Merge bitcoin/bitcoin#34106: doc: add missing copyright headers
0c862bc7ea28 Merge bitcoin/bitcoin#32545: Replace cluster linearization algorithm with SFL
1e94e562f76e refactor: enable `readability-container-contains` clang-tidy rule
fd9f1accbda9 Fix compilation for old Boost versions
75bdb925f404 clusterlin: drop support for improvable chunking (simplification)
91399a79122c clusterlin: remove unused MergeLinearizations (cleanup)
5ce280074512 clusterlin: randomize equal-feerate parts of linearization (privacy)
13aad26b7848 clusterlin: randomize various decisions in SFL (feature)
ddbfa4dfac7b clusterlin: keep FIFO queue of improvable chunks (preparation)
3efc94d6564d clusterlin: replace cluster linearization with SFL (feature)
6a8fa821b80c clusterlin: add support for loading existing linearization (feature)
da48ed9f348a clusterlin: ReadLinearization for non-topological (tests)
c461259fb629 clusterlin: add class implementing SFL state (preparation)
f480c1e71777 build: Update minimum required Boost version
95bfe7d574cf clusterlin: replace benchmarks with SFL-hard ones (bench)
86dd550a9b70 clusterlin: add known-correct optimal linearization tests (tests)
aeb7ccb937bb doc: add missing copyright headers
68a7cb8f8be8 contrib: output copyright in generate-seeds.py
516ae5ede44a Merge bitcoin/bitcoin#31533: fuzz: Add fuzz target for block index tree and related validation events
9272fd517fd3 Merge bitcoin/bitcoin#34105: kernel: revert accidentally removed copyright header
85314dc0bf87 kernel: revert accidentally removed copyright header
fa4cb13b5203 test: [doc] Manually unify stale headers
1841bf9cb67b test: address self-announcement
1ed8e7616527 rpc, doc: clarify the response of listtransactions RPC
09a1fa190ea3 Merge bitcoin/bitcoin#34094: chore: bump checkout to v6
80b1b5917dd1 Merge bitcoin/bitcoin#34088: log: Use `__func__` for -logsourcelocations
3a2807ad953c Merge bitcoin/bitcoin#33875: qa: Account for unset errno in ConnectionResetError
8d38b6f5f10b Merge bitcoin/bitcoin#34091: fuzz: doc: remove any mention to `address_deserialize_v2`
cd98caea438a Update ci.yml
ab513103df8d Merge bitcoin/bitcoin#33192: refactor: unify container presence checks
56750c4f87d0 iwyu, clang-format: Sort includes
2c78814e0e18 ci: Add IWYU job
94e4f04d7cf4 cmake: Fix target name
0f81e005197f cmake: Make `codegen` target dependent on `generate_build_info`
73f7844cdb1e iwyu: Add patch to prefer C++ headers over C counterparts
7a65437e2370 iwyu: Add patch to prefer angled brackets over quotes for includes
facd3d56ccbe log: Use `__func__` for -logsourcelocations
fe0e31f1efca Merge bitcoin/bitcoin#34053: lint: Remove confusing, redundant, and brittle lint-spelling
e5c600dc0e06 Merge bitcoin/bitcoin#34063: Make `transaction_indentifier` hex string constructor evaluated at comptime
41f2cc6d3d59 Merge bitcoin-core/gui#919: move-only: MAX_BLOCK_TIME_GAP to src/qt
7c7cd8c296a5 Merge bitcoin/bitcoin#34089: contrib: asmap-tool.py - Don't write binary to TTY
e3a4cb127f0d Merge bitcoin/bitcoin#34080: ci: Pin native tests on cross-builds to same commit
a005fdff6c7a Merge bitcoin/bitcoin#34074: A few followups after introducing `/rest/blockpart/` endpoint
caf4843a59a9 fuzz: doc: remove any mention to address_deserialize_v2
fa5ed16aa4d9 move-only: MAX_BLOCK_TIME_GAP to src/qt
356883f0e48b qa-tests: Log expected output in debug
7427a03b5ac9 qa-tests: Add test for timeouts due to missing init errors
d7f703c1f1a8 refactor(qa-tests): Extract InternalDurationTestMixin for use in next commit
69bcfcad8c3d fix(qa-tests): Bring back decoding of exception field
fb43b2f8cc4c qa: Improve assert_start_raises_init_error output
59b93f11e860 rest: print also HTTP response reason in case of an error
7fe94a04934a rest: add a test for unsuported `/blockpart/` request type
fa5f29774872 scripted-diff: [doc] Unify stale copyright headers
faa8ee62f5c1 ci: Pin native tests on cross-builds to same commit
db2d39f64297 fuzz: add subtest for re-downloading a previously pruned block
45f5b2dac330 fuzz: Add fuzzer for block index
c011e3aa5426 test: Wrap validation functions with TestChainstateManager
13891a8a685d Merge bitcoin/bitcoin#34050: fuzz: exercise `ComputeMerkleRoot` without `mutated` parameter
ab643efc0a70 Merge bitcoin/bitcoin#34003: test: interface_ipc.py minor fixes and cleanup
4f11ef058b08 Merge bitcoin/bitcoin#30214: refactor: Improve assumeutxo state representation
cbafd3ddf8a2 Merge bitcoin/bitcoin#34060: test: fix race condition in p2p_v2_misbehaving.py peerid assertion
55d0d19b5c02 rest: deduplicate `interface_rest.py` negative tests
89eb531024d9 rest: update release notes for `/blockpart/` endpoint
41bf8f2d5ece Merge bitcoin-core/gui#877: Add a menu action to restore then migrate a legacy wallet
2210feb4466e Merge bitcoin/bitcoin#34051: log: Remove brittle and confusing LogPrintLevel
58251bf9fa4b Merge bitcoin/bitcoin#34061: fuzz: Fix bugs in `clusterlin_postlinearize_tree` target
41118e17f875 blockstorage: simplify partial block read validation
599effdeab4d rest: reformat `uri_prefixes` initializer list
5ac35795206d refactor: Add compile-time-checked hex txid
fa8a5d215c5a log: Remove brittle and confusing LogPrintLevel
fac24bbec85f test: Clarify logging_SeverityLevels test
f2731676619d ipc: separate log statements per level
94c51ae54072 libevent: separate log statements per level
a70a14a3f4f4 refactor: Separate out logic for building a tree-shaped dependency graph
ce29d7d6262c fuzz: Fix variable in `clusterlin_postlinearize_tree` check
876e2849b4ec fuzz: Fix incorrect loop bounds in `clusterlin_postlinearize_tree`
09dfa4d3f8df test: fix race condition in p2p_v2_misbehaving.py peerid assertion
938d7aacabd0 Merge bitcoin/bitcoin#33657: rest: allow reading partial block data from storage
82be652e40ec doc: Improve ChainstateManager documentation, use consistent terms
597b8be223d4 Merge bitcoin/bitcoin#34025: net: Waste less time in socket handling
af455dcb39db refactor: Simplify pruning functions
ae85c495f1b5 refactor: Delete ChainstateManager::GetAll() method
6a572dbda92c refactor: Add ChainstateManager::ActivateBestChains() method
491d827d5284 refactor: Add ChainstateManager::m_chainstates member
e514fe611681 refactor: Delete ChainstateManager::SnapshotBlockhash() method
ee35250683ab refactor: Delete ChainstateManager::IsSnapshotValidated() method
d9e82299fc4e refactor: Delete ChainstateManager::IsSnapshotActive() method
4dfe38391276 refactor: Convert ChainstateRole enum to struct
352ad27fc1b1 refactor: Add ChainstateManager::ValidatedChainstate() method
a229cb9477e6 refactor: Add ChainstateManager::CurrentChainstate() method
a9b7f5614c24 refactor: Add Chainstate::StoragePath() method
840bd2ef230e refactor: Pass chainstate parameters to MaybeCompleteSnapshotValidation
1598a15aedb9 refactor: Deduplicate Chainstate activation code
9fe927b6d654 refactor: Add Chainstate m_assumeutxo and m_target_utxohash members
6082c84713f4 refactor: Add Chainstate::m_target_blockhash member
de00e87548f7 test: Fix broken chainstatemanager_snapshot_init check
fa904fc683c0 lint: Remove confusing, redundant, and brittle lint-spelling
14371fd1fca5 gui: Add a menu item to restore then migrate a wallet file
f11a7d248cf5 gui: Add restore_and_migrate function to restore then migrate a wallet
16ab6dfc1074 gui: Move actual migration part of migrate() to its own function
4ec2d18a0734 wallet, interfaces, gui: Expose load_after_restore parameter
d155fc12a0c7 Merge bitcoin/bitcoin#32414: validation: periodically flush dbcache during reindex-chainstate
07135290c172 rest: allow reading partial block data from storage
4e2af1c06547 blockstorage: allow reading partial block data from storage
f2fd1aa21c76 blockstorage: return an error code from `ReadRawBlock()`
5be20c380dcb Merge bitcoin/bitcoin#34033: scripted-diff: Unify error and warning log formatting
b31f7866952a Merge bitcoin/bitcoin#34045: test: Log IP of download server in get_previous_releases.py
7e9de20c0c14 fuzz: exercise `ComputeMerkleRoot` without mutated parameter
b26762bdcb94 Merge bitcoin/bitcoin#33805: merkle: migrate `path` arg to reference and drop unused args
0f6d8a347aec Merge bitcoin/bitcoin#30442: precalculate SipHash constant salt XORs
c2975f26d69f Merge bitcoin/bitcoin#33602: [IBD] coins: reduce lookups in dbcache layer propagation
cdaf25f9c3e5 test: Log IP of download server in get_previous_releases.py
c1f0a89d9cae Merge bitcoin/bitcoin#34040: test: Detect truncated download in get_previous_releases.py
fa75480c84ff test: Detect truncated download in get_previous_releases.py
56ce78d5f62c Merge bitcoin/bitcoin#34031: net: Remove "tor" as a network specification
500862b2d4a1 Merge bitcoin/bitcoin#33423: qa: Improvements to debug_assert_log + busy_wait_for_debug_log
5f5c1ea01955 net: Cache -capturemessages setting
cca113f5b022 Merge bitcoin/bitcoin#34008: log: don't rate-limit "new peer" with -debug=net
2c44c41984e0 Merge bitcoin/bitcoin#33553: validation: Improve warnings in case of chain corruption
6eb5ba569141 refactor: extract shared `SipHash` state into `SipHashState`
118d22ddb4ba optimization: cache `PresaltedSipHasher` in `CBlockHeaderAndShortTxIDs`
9ca52a4cbece optimization: migrate `SipHashUint256` to `PresaltedSipHasher`
ec11b9fede2a optimization: introduce `PresaltedSipHasher` for repeated hashing
d23d49ee3f23 Merge bitcoin/bitcoin#31823: tests: Add witness commitment if we have a witness transaction in `FullBlockTest.update_block()`
20330548cf5f refactor: extract `SipHash` C0-C3 constants to class scope
9f9eb7fbc053 test: rename k1/k2 to k0/k1 in `SipHash` consistency tests
29ed608dc75e Merge bitcoin/bitcoin#33961: script: Add a separate ScriptError for empty pubkeys encountered in Tapscript
d2a199bca73b Merge bitcoin/bitcoin#33909: doc, ci: Make the max number of commits tested explicit
dbc892806912 Merge bitcoin/bitcoin#33993: init: point out -stopatheight may be imprecise
d4d184eda9c0 log: don't rate-limit "new peer" with -debug=net
e7ac5a133cc3 doc: add release note for 34031
c4c70a256ed8 netbase: Remove "tor" as a network specification
fa89f60e31d1 scripted-diff: LogPrintLevel(*,BCLog::Level::*,*) -> LogError()/LogWarning()
fa6c7a1954ea scripted-diff: LogPrintLevel(*,BCLog::Level::Debug,*) -> LogDebug()
d8fe5f0326c5 test: improve interface_ipc.py waitNext tests
a5e61b1917af test: interface_ipc.py minor fixes and cleanup
d5c8199b7904 Merge bitcoin/bitcoin#34006: Add util::Expected (std::expected)
77248e849699 Merge bitcoin/bitcoin#33771: refactor: C++20 operators
36073d56db0d Merge bitcoin/bitcoin#33952: depends: update freetype and document remaining `bitcoin-qt` runtime libs
f09ae5f96fe8 Merge bitcoin/bitcoin#33950: guix: reduce allowed exported symbols
cea443e24618 net: Pass time to InactivityChecks fuctions
89dc82295ebd Merge bitcoin/bitcoin#29641: scripted-diff: Use LogInfo over LogPrintf
eb19a2dac5c7 Merge bitcoin/bitcoin#34017: fuzz: Add a test case for `ParseByteUnits()`
faa23738fc25 refactor: Enable clang-tidy bugprone-unused-return-value
fa114be27b17 Add util::Expected (std::expected)
e68517208b4c Merge bitcoin/bitcoin#33995: depends: Propagate native C compiler to `sqlite` package
091cae6fdf89 Merge bitcoin/bitcoin#33939: contrib: Count entry differences in asmap-tool diff summary
57b888ce0ebd fuzz: Add a test case for `ParseByteUnits()`
b8e66b901d56 Merge bitcoin/bitcoin#33858: test: add unit test coverage for the empty leaves path in MerkleComputation
0c9ab0f8f8c8 Merge bitcoin/bitcoin#33956: net: fix use-after-free with v2->v1 reconnection logic
fa4395dffd43 refactor: Remove unused LogPrintf
fa05181d904d scripted-diff: LogPrintf -> LogInfo
5646e6c0d358 index: restrict index helper function to namespace
032f3503e3fe index, refactor: deduplicate LookUpOne
a67d3eb91d5e index: deduplicate Hash / Height handling
9890058b37b8 Merge bitcoin/bitcoin#33723: chainparams: remove dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us
9e02f7808909 Merge bitcoin/bitcoin#33774: cmake: Move IPC tests to `ipc/test`
ad452a1e655e Merge bitcoin/bitcoin#33528: wallet: don't consider unconfirmed TRUC coins with ancestors
ff06e2468a5d init: point out -stopatheight may be imprecise
ded11fb04d82 test: fix interface_ipc.py template destruction
9a29b2d331ee Merge bitcoin/bitcoin#33857: doc: Add `x86_64-w64-mingw32ucrt` triplet to `depends/README.md`
69e66efe45a0 Merge bitcoin/bitcoin#32882: index: remove unnecessary locator cleaning in BaseIndex::Init()
d9319b06cf82 refactor: unify container presence checks - non-trivial counts
039307554eb3 refactor: unify container presence checks - trivial counts
8bb9219b6301 refactor: unify container presence checks - find
6581ac5d9f93 Merge bitcoin/bitcoin#33996: contrib: fix manpage generation
39ca01525977 Merge bitcoin/bitcoin#33140: test: Avoid shutdown race in NetworkThread
e9536faaee2b contrib: fix manpage generation
bcf794d5f35b Merge bitcoin/bitcoin#30455: test: assumeutxo: add missing tests in wallet_assumeutxo.py
af0e6a65c928 Merge bitcoin/bitcoin#33702: contrib: Remove brittle, confusing and redundant UTF8 encoding from Python IO
4b4711369880 validation: Reword CheckForkWarningConditions and call it also during IBD and at startup
2f51951d03cc p2p: Add warning message when receiving headers for blocks cached as invalid
4c784b25c478 Merge bitcoin/bitcoin#33985: fuzz: gate mempool entry based on weight
710031ebef83 Revert "guix: sqlite wants tcl"
4cf5ea6c3d2a depends: Propagate native C compiler to `sqlite` package
ce771726f3e7 Merge bitcoin/bitcoin#33960: log: Use more severe log level (warn/err) where appropriate
cb7d5bfe4a59 test, assumeutxo: loading a wallet (backup) on a pruned node
7a365244f839 test, refactor snapshot import and background validation
e0ba6bbed97b Merge bitcoin/bitcoin#33591: Cluster mempool followups
b8d279a81c16 doc: add comment to explain correctness of GatherClusters()
aba7500a30ee Fix parameter name in getmempoolcluster rpc
6c1325a0913e Rename weight -> clusterweight in RPC output, and add doc explaining mempool terminology
bc2eb931da30 Require mempool lock to be held when invoking TRUC checks
957ae232414b Improve comments for getTransactionAncestry to reference cluster counts instead of descendants
d97d6199ce50 Fix comment to reference cluster limits, not chain limits
a1b341ef9875 Sanity check feerate diagram in CTxMemPool::check()
23d6f457c4c0 rpc: improve getmempoolcluster output
d2dcd37aac1e Avoid using mapTx.modify() to update modified fees
d84ffc24d2dc doc: add release notes snippet for cluster mempool
b0417ba94437 doc: Add design notes for cluster mempool and explain new mempool limits
804329400a73 fuzz: gate mempool entry based on weight
2d88966e43c6 miner: replace "package" with "chunk"
6f3e8eb3001a Add a GetFeePerVSize() accessor to CFeeRate, and use it in the BlockAssembler
b5f245f6f219 Remove unused DEFAULT_ANCESTOR_SIZE_LIMIT_KVB and DEFAULT_DESCENDANT_SIZE_LIMIT_KVB
1dac54d506b5 Use cluster size limit instead of ancestor size limit in txpackage unit test
04f65488ca3e Use cluster size limit instead of ancestor/descendant size limits when sanity checking TRUC policy limits
634291a7dc44 Use cluster limits instead of ancestor/descendant limits when sanity checking package policy limits
fc18ef1f3f33 Remove ancestor and descendant vsize limits from MemPoolLimits
ed8e819121d7 Warn user if using -limitancestorsize/-limitdescendantsize that the options have no effect
80d8df2d47c2 Invoke removeUnchecked() directly in removeForBlock()
9292570f4cb8 Rewrite GetChildren without sets
3e39ea8c3070 Rewrite removeForReorg to avoid using sets
a3c31dfd71de scripted-diff: rename AddToMempool -> TryAddToMempool
a5a7905d83df Simplify removeRecursive
01d8520038ea Remove unused argument to RemoveStaged
ec8eb013a9bf doc: Add `x86_64-w64-mingw32ucrt` triplet to `depends/README.md`
48496caa1235 ci: Remove redundant `DEP_OPTS` from “Windows-cross UCRT” job
b5a7a685bba3 ci: Make the max number of commits tested explicit
9d5021a05bd3 script: add SCRIPT_ERR_TAPSCRIPT_EMPTY_PUBKEY
7b90b4f5bb10 guix: reduce allowed exported symbols
41e657aacfa6 guix: add bitcoin-qt runtime libs doc in symbol-check
ef4ce19a1545 depends: freetype 2.11.1
fa45a1503eee log: Use LogWarning for non-critical logs
fa0018d01102 log: Use LogError for fatal errors
e7e51952dc24 contrib: Avoid outputting binary data to TTY
22229de7288f doc: Fix typo in init log
167df7a98c85 net: fix use-after-free with v2->v1 reconnection logic
fd4ce55121e7 contrib: Count entry differences in asmap-tool diff summary
1488315d76ee policy: Allow any transaction version with < minrelay
fad61185861a test: Fix "typo" in written invalid content
fab085c15f72 contrib: Use text=True in subprocess over manual encoding handling
fa71c15f8610 scripted-diff: Bump copyright headers after encoding changes
fae612424b3e contrib: Remove confusing and redundant encoding from IO
fa7d72bd1be9 lint: Drop check to enforce encoding to be specified in Python scripts
faf39d8539c9 test: Clarify that Python UTF-8 mode is the default today for most systems
fa83e3a81ddb lint: Do not allow locale dependent shell scripts
217dbbbb5e38 test: Add musig failure scenarios
fa336053aada Move ci_exec to the Python script
fa83555d163f ci: Require rsync to pass
eeee02ea53dd ci: Untangle CI_EXEC bash function
fa21fd1dc2e5 ci: Move macos snippet under DANGER_RUN_CI_ON_HOST
fa37559ac5b7 ci: Document the retry script in PATH
666675e95fe8 ci: Move folder creation and docker kill to Python script
bc64013e6fad Remove unused variable (cacheMap) in mempool
c9519c260b7a musig: Check session id reuse
e755614be586 sign: Remove duplicate sigversion check
0f7f0692ca1e musig: Move MUSIG_CHAINCODE to musig.cpp
a7c96f874de1 tests: Add witness commitment if we have a witness transaction in FullBlockTest.update_block()
76e0e6087d03 qa: Account for errno not always being set for ConnectionResetError
ffcae82a6810 test: exercise TransactionMerklePath with empty block; targets the MerkleComputation empty-leaves path that was only reached by fuzz tests
24ed820d4f0d merkle: remove unused `mutated` arg from `BlockWitnessMerkleRoot`
63d640fa6a70 merkle: remove unused `proot` and `pmutated` args from `MerkleComputation`
be270551df30 merkle: migrate `path` arg of `MerkleComputation` to a reference
866bbb98fd36 cmake, test: Improve locality of `bitcoin_ipc_test` library description
ae2e438b257f cmake: Move IPC tests to `ipc/test`
48840bfc2d7b refactor: Prefer `<=>` over multiple relational operators
5a0f49bd2661 refactor: Remove all `operator!=` definitions
0ac969cddfdb validation: don't reallocate cache for short-lived CCoinsViewCache
c8f5e446dc95 coins: reduce lookups in dbcache layer propagation
b0c706795ce6 Remove unreliable seed from chainparams.cpp, and the associated README
dcd42d6d8f16 [test] wallet send 3 generation TRUC
e753fadfd01c [wallet] never try to spend from unconfirmed TRUC that already has ancestors
fa6db79302d2 test: Avoid shutdown race in NetworkThread
a1f762302096 qa: Only complain about expected messages that were not found
1e54125e2e00 refactor(qa): Avoid unnecessary string operations
a9021101dc63 qa: Replace always-escaped regexps with "X in Y"
5c16e4631c00 doc: Remove no longer correct comment
facd01e6ffbb refactor: remove redundant locator cleanup in BaseIndex::Init()
d7de5b109f69 logs: show reindex progress in `ImportBlocks`
c1e554d3e583 refactor: consolidate 3 separate locks into one block
41479ed1d23e test: add test for periodic flush inside ActivateBestChain
84820561dcb2 validation: periodically flush dbcache during reindex-chainstate

git-subtree-dir: libbitcoinkernel-sys/bitcoin
git-subtree-split: 94ddc2dced5736612e358a3b80f2bc718fbd8161
@joshdoman
Copy link

Nice! Do you think it makes sense to make PrecomputedTransactionData an Option in the verify API? That way users verifying a single non-taproot input can just pass in None.

Something like:

pub fn verify(
    script_pubkey: &impl ScriptPubkeyExt,
    amount: Option<i64>,
    tx_to: &impl TransactionExt,
    input_index: usize,
    flags: Option<u32>,
    precomputed_txdata: Option<&PrecomputedTransactionData>,
) -> Result<(), KernelError>

And then:

let ret = unsafe {
    btck_script_pubkey_verify(
        script_pubkey.as_ptr(),
        kernel_amount,
        tx_to.as_ptr(),
        precomputed_txdata.map_or(std::ptr::null(), |data| data.as_ptr()),
        input_index as u32,
        kernel_flags,
        &mut status,
    )
};

@sedited
Copy link
Owner Author

sedited commented Dec 27, 2025

I implemented that at first, but now I'm not sure anymore. We should guide the user towards doing the correct thing, which in most situations is computing the hashes ahead of time. Also taking an option of a borrow seems a bit icky. They can always choose to not supply the outputs to the precomputed data.

@joshdoman
Copy link

That's reasonable. It is a cleaner API the way you have it, and I like the idea of guiding users toward best practices.

@sedited sedited marked this pull request as ready for review December 28, 2025 10:42
@sedited sedited changed the title core: Add PrecomputedData core: Add PrecomputedTransactionData Dec 28, 2025
@sedited sedited requested a review from joshdoman January 5, 2026 16:45
Copy link

@joshdoman joshdoman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully ran tests locally. LGTM.

Copy link
Contributor

@alexanderwiederin alexanderwiederin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! Thanks for the patience.

/// to perform script verification.
///
/// Previous outputs are only required if verifying a taproot transaction. An
/// empty slice may be passed in otherwise.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

An empty slice should be passed for non-taproot transactions.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think may is the correct verb here. The cost of doing so nevertheless is marginal (and something we do every time during validation in Bitcoin Core's internal usage of it).

@sedited
Copy link
Owner Author

sedited commented Jan 13, 2026

Thanks for the review @alexanderwiederin, pushed to address your comments, safe the doc change I commented on.

Copy link
Contributor

@alexanderwiederin alexanderwiederin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

if spent_outputs.len() != tx.input_count() {
return Err(KernelError::MismatchedOutputsSize);
}
spent_outputs.as_ptr() as *mut *const btck_TransactionOutput
Copy link
Contributor

@alexanderwiederin alexanderwiederin Jan 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From what I understand, this assumes that TxOut (i.e. the rust wrapper) has the same layout as *const btck_TransactionOutput (the raw pointer), which happens to be true because TxOut holds only one field. I think it would be safer to explicitly build a vector of pointers like we did for kernel_spent_outputs in the previous verify function.

Alternatively, we could add #[repr(transparent)] to the TxOut type for this to be truly safe.

Any thoughts?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice catch! I agree, we should always be collecting these explicitly instead of relying on somewhat coincidental alignment. We should also really expand the number of script test cases. Would be good to have a passing and failing example for each of the common transaction types, as well checking for multiple inputs.

Make this a required new argument to encourage callers to use this data
structure to initialize their script verification hashes.
Copy link
Contributor

@alexanderwiederin alexanderwiederin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK

nit: move doc changes and null check into 9accb6c

@sedited sedited merged commit 3b2ae96 into master Jan 14, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants