Skip to content

Commit 21c2879

Browse files
committed
Merge bitcoin/bitcoin#30560: refactor: Add consteval uint256 constructor
2d9d752 scripted-diff: Replace uint256S("str") -> uint256{"str"} (Hodlinator) c06f236 refactor: Hand-replace some uint256S -> uint256 (Hodlinator) b74d8d5 refactor: Add consteval uint256(hex_str) (Hodlinator) Pull request description: Motivation: * Validates and converts the hex string at compile time instead of at runtime into the resulting bytes. * Makes it possible to derive other compile time constants from `uint256`. * Potentially eliminates runtime dependencies (`SetHexDeprecated()` is called in less places). * Has stricter requirements than the deprecated `uint256S()` (requiring 64 chars exactly, disallows garbage at the end) and replaces it in a bunch of places. * Makes the binary smaller (tested Guix-built x86_64-linux-gnu bitcoind binary). * Minor: should shave off a few cycles of start-up time. Extracted from #30377 which diverged into exploring `consteval` `ParseHex()` solutions. ACKs for top commit: maflcko: rebase re-cr-ACK 2d9d752 🎐 stickies-v: re-ACK 2d9d752 paplorinc: ACK 2d9d752 Tree-SHA512: 39bd9320db0ed81950b5d71495eaa1d06508cc008466f2308874d70ac9ff32bc69798d2e3ef6a784868c1633fb519f60cc2111a9d0718c2663b28e78b67f7cde
2 parents 42326b0 + 2d9d752 commit 21c2879

19 files changed

+177
-137
lines changed

contrib/devtools/test_utxo_snapshots.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ echo
138138
echo "-- Now: add the following to CMainParams::m_assumeutxo_data"
139139
echo " in src/kernel/chainparams.cpp, and recompile:"
140140
echo
141-
echo " {${RPC_BASE_HEIGHT}, AssumeutxoHash{uint256S(\"0x${RPC_AU}\")}, ${RPC_NCHAINTX}, uint256S(\"0x${RPC_BLOCKHASH}\")},"
141+
echo " {.height = ${RPC_BASE_HEIGHT}, .hash_serialized = AssumeutxoHash{uint256{\"${RPC_AU}\"}}, .m_chain_tx_count = ${RPC_NCHAINTX}, .blockhash = consteval_ctor(uint256{\"${RPC_BLOCKHASH}\"})},"
142142
echo
143143
echo
144144
echo "-- IBDing more blocks to the server node (height=$FINAL_HEIGHT) so there is a diff between snapshot and tip..."

src/kernel/chainparams.cpp

Lines changed: 58 additions & 48 deletions
Large diffs are not rendered by default.

src/test/bloom_tests.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ BOOST_AUTO_TEST_CASE(bloom_match)
112112
CTransaction spendingTx(deserialize, TX_WITH_WITNESS, spendStream);
113113

114114
CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);
115-
filter.insert(uint256S("0xb4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854fcd7fff6b"));
115+
filter.insert(uint256{"b4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854fcd7fff6b"});
116116
BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't match tx hash");
117117

118118
filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);
@@ -152,7 +152,7 @@ BOOST_AUTO_TEST_CASE(bloom_match)
152152
BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't match manually serialized COutPoint");
153153

154154
filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);
155-
filter.insert(uint256S("00000009e784f32f62ef849763d4f45b98e07ba658647343b915ff832b110436"));
155+
filter.insert(uint256{"00000009e784f32f62ef849763d4f45b98e07ba658647343b915ff832b110436"});
156156
BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx), "Simple Bloom filter matched random tx hash");
157157

158158
filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);
@@ -173,15 +173,15 @@ BOOST_AUTO_TEST_CASE(merkle_block_1)
173173
CBlock block = getBlock13b8a();
174174
CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);
175175
// Match the last transaction
176-
filter.insert(uint256S("0x74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20"));
176+
filter.insert(uint256{"74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20"});
177177

178178
CMerkleBlock merkleBlock(block, filter);
179179
BOOST_CHECK_EQUAL(merkleBlock.header.GetHash().GetHex(), block.GetHash().GetHex());
180180

181181
BOOST_CHECK_EQUAL(merkleBlock.vMatchedTxn.size(), 1U);
182182
std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];
183183

184-
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0x74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20"));
184+
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20"});
185185
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 8);
186186

187187
std::vector<uint256> vMatched;
@@ -192,15 +192,15 @@ BOOST_AUTO_TEST_CASE(merkle_block_1)
192192
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);
193193

194194
// Also match the 8th transaction
195-
filter.insert(uint256S("0xdd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f168809cdfae1053"));
195+
filter.insert(uint256{"dd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f168809cdfae1053"});
196196
merkleBlock = CMerkleBlock(block, filter);
197197
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());
198198

199199
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2);
200200

201201
BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair);
202202

203-
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xdd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f168809cdfae1053"));
203+
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"dd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f168809cdfae1053"});
204204
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 7);
205205

206206
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot);
@@ -221,15 +221,15 @@ BOOST_AUTO_TEST_CASE(merkle_block_2)
221221

222222
CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);
223223
// Match the first transaction
224-
filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"));
224+
filter.insert(uint256{"e980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"});
225225

226226
CMerkleBlock merkleBlock(block, filter);
227227
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());
228228

229229
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);
230230
std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];
231231

232-
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"));
232+
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"e980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"});
233233
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);
234234

235235
std::vector<uint256> vMatched;
@@ -251,13 +251,13 @@ BOOST_AUTO_TEST_CASE(merkle_block_2)
251251

252252
BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);
253253

254-
BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f"));
254+
BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256{"28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f"});
255255
BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);
256256

257-
BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x6b0f8a73a56c04b519f1883e8aafda643ba61a30bd1439969df21bea5f4e27e2"));
257+
BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256{"6b0f8a73a56c04b519f1883e8aafda643ba61a30bd1439969df21bea5f4e27e2"});
258258
BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 2);
259259

260-
BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == uint256S("0x3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d7007663ace63cddb23"));
260+
BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == uint256{"3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d7007663ace63cddb23"});
261261
BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3);
262262

263263
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot);
@@ -278,15 +278,15 @@ BOOST_AUTO_TEST_CASE(merkle_block_2_with_update_none)
278278

279279
CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);
280280
// Match the first transaction
281-
filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"));
281+
filter.insert(uint256{"e980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"});
282282

283283
CMerkleBlock merkleBlock(block, filter);
284284
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());
285285

286286
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);
287287
std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];
288288

289-
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"));
289+
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"e980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70"});
290290
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);
291291

292292
std::vector<uint256> vMatched;
@@ -308,10 +308,10 @@ BOOST_AUTO_TEST_CASE(merkle_block_2_with_update_none)
308308

309309
BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);
310310

311-
BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f"));
311+
BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256{"28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f"});
312312
BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);
313313

314-
BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d7007663ace63cddb23"));
314+
BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256{"3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d7007663ace63cddb23"});
315315
BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3);
316316

317317
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot);
@@ -332,14 +332,14 @@ BOOST_AUTO_TEST_CASE(merkle_block_3_and_serialize)
332332

333333
CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);
334334
// Match the only transaction
335-
filter.insert(uint256S("0x63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669c00cb5"));
335+
filter.insert(uint256{"63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669c00cb5"});
336336

337337
CMerkleBlock merkleBlock(block, filter);
338338
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());
339339

340340
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);
341341

342-
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0x63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669c00cb5"));
342+
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669c00cb5"});
343343
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);
344344

345345
std::vector<uint256> vMatched;
@@ -370,15 +370,15 @@ BOOST_AUTO_TEST_CASE(merkle_block_4)
370370

371371
CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);
372372
// Match the last transaction
373-
filter.insert(uint256S("0x0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df0ac154"));
373+
filter.insert(uint256{"0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df0ac154"});
374374

375375
CMerkleBlock merkleBlock(block, filter);
376376
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());
377377

378378
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);
379379
std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];
380380

381-
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0x0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df0ac154"));
381+
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df0ac154"});
382382
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 6);
383383

384384
std::vector<uint256> vMatched;
@@ -389,13 +389,13 @@ BOOST_AUTO_TEST_CASE(merkle_block_4)
389389
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);
390390

391391
// Also match the 4th transaction
392-
filter.insert(uint256S("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041"));
392+
filter.insert(uint256{"02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041"});
393393
merkleBlock = CMerkleBlock(block, filter);
394394
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());
395395

396396
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2);
397397

398-
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041"));
398+
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256{"02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041"});
399399
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 3);
400400

401401
BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair);

src/test/crypto_tests.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,15 +1235,15 @@ BOOST_AUTO_TEST_CASE(muhash_tests)
12351235
acc *= FromInt(1);
12361236
acc /= FromInt(2);
12371237
acc.Finalize(out);
1238-
BOOST_CHECK_EQUAL(out, uint256S("10d312b100cbd32ada024a6646e40d3482fcff103668d2625f10002a607d5863"));
1238+
BOOST_CHECK_EQUAL(out, uint256{"10d312b100cbd32ada024a6646e40d3482fcff103668d2625f10002a607d5863"});
12391239

12401240
MuHash3072 acc2 = FromInt(0);
12411241
unsigned char tmp[32] = {1, 0};
12421242
acc2.Insert(tmp);
12431243
unsigned char tmp2[32] = {2, 0};
12441244
acc2.Remove(tmp2);
12451245
acc2.Finalize(out);
1246-
BOOST_CHECK_EQUAL(out, uint256S("10d312b100cbd32ada024a6646e40d3482fcff103668d2625f10002a607d5863"));
1246+
BOOST_CHECK_EQUAL(out, uint256{"10d312b100cbd32ada024a6646e40d3482fcff103668d2625f10002a607d5863"});
12471247

12481248
// Test MuHash3072 serialization
12491249
MuHash3072 serchk = FromInt(1); serchk *= FromInt(2);

0 commit comments

Comments
 (0)