|
3 | 3 | // file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
4 | 4 |
|
5 | 5 | #include <key.h>
|
| 6 | +#include <key_io.h> |
6 | 7 | #include <script/script.h>
|
7 | 8 | #include <script/signingprovider.h>
|
8 | 9 | #include <script/standard.h>
|
9 | 10 | #include <test/util/setup_common.h>
|
| 11 | +#include <util/strencodings.h> |
10 | 12 |
|
11 | 13 | #include <boost/test/unit_test.hpp>
|
12 | 14 |
|
@@ -378,4 +380,70 @@ BOOST_AUTO_TEST_CASE(script_standard_GetScriptFor_)
|
378 | 380 | BOOST_CHECK(result == expected);
|
379 | 381 | }
|
380 | 382 |
|
| 383 | +BOOST_AUTO_TEST_CASE(script_standard_taproot_builder) |
| 384 | +{ |
| 385 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({}), true); |
| 386 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0}), true); |
| 387 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1}), false); |
| 388 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2}), false); |
| 389 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,0}), false); |
| 390 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,1}), false); |
| 391 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,2}), false); |
| 392 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,0}), false); |
| 393 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,1}), true); |
| 394 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,2}), false); |
| 395 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,0}), false); |
| 396 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,1}), false); |
| 397 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,2}), false); |
| 398 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,0,0}), false); |
| 399 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,0,1}), false); |
| 400 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,0,2}), false); |
| 401 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,1,0}), false); |
| 402 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,1,1}), false); |
| 403 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,1,2}), false); |
| 404 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,2,0}), false); |
| 405 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,2,1}), false); |
| 406 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({0,2,2}), false); |
| 407 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,0,0}), false); |
| 408 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,0,1}), false); |
| 409 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,0,2}), false); |
| 410 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,1,0}), false); |
| 411 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,1,1}), false); |
| 412 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,1,2}), false); |
| 413 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,2,0}), false); |
| 414 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,2,1}), false); |
| 415 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({1,2,2}), true); |
| 416 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,0,0}), false); |
| 417 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,0,1}), false); |
| 418 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,0,2}), false); |
| 419 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,1,0}), false); |
| 420 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,1,1}), false); |
| 421 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,1,2}), false); |
| 422 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,2,0}), false); |
| 423 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,2,1}), true); |
| 424 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,2,2}), false); |
| 425 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({2,2,2,3,4,5,6,7,8,9,10,11,12,14,14,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,31,31,31,31,31,31,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,128}), true); |
| 426 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({128,128,127,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}), true); |
| 427 | + BOOST_CHECK_EQUAL(TaprootBuilder::ValidDepths({129,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}), false); |
| 428 | + |
| 429 | + XOnlyPubKey key_inner{ParseHex("79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798")}; |
| 430 | + XOnlyPubKey key_1{ParseHex("c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5")}; |
| 431 | + XOnlyPubKey key_2{ParseHex("f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9")}; |
| 432 | + CScript script_1 = CScript() << ToByteVector(key_1) << OP_CHECKSIG; |
| 433 | + CScript script_2 = CScript() << ToByteVector(key_2) << OP_CHECKSIG; |
| 434 | + uint256 hash_3 = uint256S("31fe7061656bea2a36aa60a2f7ef940578049273746935d296426dc0afd86b68"); |
| 435 | + |
| 436 | + TaprootBuilder builder; |
| 437 | + BOOST_CHECK(builder.IsValid() && builder.IsComplete()); |
| 438 | + builder.Add(2, script_2, 0xc0); |
| 439 | + BOOST_CHECK(builder.IsValid() && !builder.IsComplete()); |
| 440 | + builder.AddOmitted(2, hash_3); |
| 441 | + BOOST_CHECK(builder.IsValid() && !builder.IsComplete()); |
| 442 | + builder.Add(1, script_1, 0xc0); |
| 443 | + BOOST_CHECK(builder.IsValid() && builder.IsComplete()); |
| 444 | + builder.Finalize(key_inner); |
| 445 | + BOOST_CHECK(builder.IsValid() && builder.IsComplete()); |
| 446 | + BOOST_CHECK_EQUAL(EncodeDestination(builder.GetOutput()), "bc1pj6gaw944fy0xpmzzu45ugqde4rz7mqj5kj0tg8kmr5f0pjq8vnaqgynnge"); |
| 447 | +} |
| 448 | + |
381 | 449 | BOOST_AUTO_TEST_SUITE_END()
|
0 commit comments