diff --git a/src/avalanche/proof.h b/src/avalanche/proof.h --- a/src/avalanche/proof.h +++ b/src/avalanche/proof.h @@ -69,7 +69,12 @@ bool isCoinbase() const { return height & 1; } const CPubKey &getPubkey() const { return pubkey; } - uint256 getHash(const ProofId &proofid) const; + template uint256 getHash(Args &&... args) const { + CHashWriter ss(SER_GETHASH, 0); + (ss << ... << args); + ss << *this; + return ss.GetHash(); + } const StakeId &getId() const { return stakeid; } }; @@ -88,7 +93,10 @@ const Stake &getStake() const { return stake; } const SchnorrSig &getSignature() const { return sig; } - bool verify(const ProofId &proofid) const; + template bool verify(Args &&... args) const { + return stake.getPubkey().VerifySchnorr( + stake.getHash(std::forward(args)...), sig); + } }; class Proof { diff --git a/src/avalanche/proof.cpp b/src/avalanche/proof.cpp --- a/src/avalanche/proof.cpp +++ b/src/avalanche/proof.cpp @@ -24,17 +24,6 @@ stakeid = StakeId(ss.GetHash()); } -uint256 Stake::getHash(const ProofId &proofid) const { - CHashWriter ss(SER_GETHASH, 0); - ss << proofid; - ss << *this; - return ss.GetHash(); -} - -bool SignedStake::verify(const ProofId &proofid) const { - return stake.getPubkey().VerifySchnorr(stake.getHash(proofid), sig); -} - bool Proof::FromHex(Proof &proof, const std::string &hexProof, bilingual_str &errorOut) { if (!IsHex(hexProof)) { @@ -126,7 +115,14 @@ "duplicated-stake"); } - if (!ss.verify(proofid)) { + auto verifyStake = [&](const ArgsManager &argsman) { + if (useLegacy(gArgs)) { + return ss.verify(proofid); + } + return ss.verify(expirationTime, master); + }; + + if (!verifyStake(gArgs)) { return state.Invalid( ProofValidationResult::INVALID_STAKE_SIGNATURE, "invalid-stake-signature", diff --git a/src/avalanche/proofbuilder.h b/src/avalanche/proofbuilder.h --- a/src/avalanche/proofbuilder.h +++ b/src/avalanche/proofbuilder.h @@ -27,7 +27,16 @@ StakeSigner(Stake stake_, CKey key_) : stake(std::move(stake_)), key(std::move(key_)) {} - SignedStake sign(const ProofId &proofid); + template SignedStake sign(Args &&... args) { + const uint256 h = stake.getHash(std::forward(args)...); + + SchnorrSig sig; + if (!key.SignSchnorr(h, sig)) { + sig.fill(0); + } + + return SignedStake(std::move(stake), std::move(sig)); + } }; struct StakeSignerComparator { diff --git a/src/avalanche/proofbuilder.cpp b/src/avalanche/proofbuilder.cpp --- a/src/avalanche/proofbuilder.cpp +++ b/src/avalanche/proofbuilder.cpp @@ -8,17 +8,6 @@ namespace avalanche { -SignedStake ProofBuilder::StakeSigner::sign(const ProofId &proofid) { - const uint256 h = stake.getHash(proofid); - - SchnorrSig sig; - if (!key.SignSchnorr(h, sig)) { - sig.fill(0); - } - - return SignedStake(std::move(stake), std::move(sig)); -} - bool ProofBuilder::addUTXO(COutPoint utxo, Amount amount, uint32_t height, bool is_coinbase, CKey key) { if (!key.IsValid()) { @@ -41,17 +30,28 @@ } } - const ProofId proofid = getProofId(); - std::vector signedStakes; signedStakes.reserve(stakes.size()); + const CPubKey masterPubKey = masterKey.GetPubKey(); + + // FIXME Compute the proofid now because the signing algo removes the stakes + // as they are getting signed. Only needed for the legacy proof format. + const ProofId proofid = getProofId(); + + auto signStake = [&](const ArgsManager &argsman, StakeSigner &signer) { + if (Proof::useLegacy(argsman)) { + return signer.sign(proofid); + } + return signer.sign(expirationTime, masterPubKey); + }; + while (!stakes.empty()) { auto handle = stakes.extract(stakes.begin()); - signedStakes.push_back(handle.value().sign(proofid)); + signedStakes.push_back(signStake(gArgs, handle.value())); } - return Proof(sequence, expirationTime, masterKey.GetPubKey(), + return Proof(sequence, expirationTime, masterPubKey, std::move(signedStakes), payoutScriptPubKey, std::move(proofSignature)); } diff --git a/src/avalanche/test/proof_tests.cpp b/src/avalanche/test/proof_tests.cpp --- a/src/avalanche/test/proof_tests.cpp +++ b/src/avalanche/test/proof_tests.cpp @@ -316,12 +316,12 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6802249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" - "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac7b0b7865200f63052" - "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" - "4f5ddf7d9865c7fead7e4a840b947939590261640f", + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" + "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac6788bf0373c641dcc" + "cd11299b4bea102a0b3c9ca0f247774bb1cc2b1c3b0d1ecbb0c6f7f93c60a255a0cea" + "aeff34a58544af3445e52b454636b63d45c8c0ddf0", ProofId::fromHex("455f34eb8a00b0799630071c0728481bdb1653035b1484ac33e9" "74aa4ae7db6d"), 444638638, ProofValidationResult::NONE}, @@ -329,12 +329,12 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce68095189fd41e" - "e3a637f27ae84b45b0c15ba43e674be4692ec91546941295c5d35c101bf657902bc6a" - "2f64f70bb431f3c9e8d20f0c4081963ca63117df9f471b8991976a914f8172c51efbf" - "34413a308a030fd4b164c5bfcd8f88ac2d805b078f5efe022304f8c6ccd0ef5255d80" - "6a473fc85a5ad1caf1aa94a4e49ef7625b9dc85d263b2829d5822af62226bc50a4a83" - "76a3a6e1cd0a37ea2fbbf9", + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6808e065cd5bd" + "74743504f927d2c5b1d0bf7308f10fbda0e35d91ef3af62c5e2d1d34d68c93bf3daf4" + "e13b60718215114f1a1ffbdd6c5d7d04b3e6c9a0b416c56251976a914f8172c51efbf" + "34413a308a030fd4b164c5bfcd8f88ac84d3aac8f1651a27063314ba8d106a49998f4" + "daede33ca036fbd3d0a795ea214579866abb4ad23d72da97e360d5a68c7aba2a9a71b" + "5bcf9415fe3b9396a86233", ProofId::fromHex("8a2fcc5700a89f37a3726cdf3202353bf61f280815a9df744e3c" "9de6215a745a"), 444638638, ProofValidationResult::NONE}, @@ -342,12 +342,12 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680c2e8203530" - "d213ceef91536cb6167a0cfe4deb9561b938ee54791d51692ef665d87eb23b7f7ddc3" - "6b2d7914ca592bf58f9295ed41015061463315a8ac3bb192b17a914da1745e9b549bd" - "0bfa1a569971c77eba30cd5a4b87fea0a245528a4aadfc1dd5731c0cfe738e276c938" - "15c69789fe97b15a5fb5b4f75b598ed94096205561e8d16203b8ef21763891d8e79a5" - "9862bccbbd5bdf3a58", + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6803bc83486e7" + "9df85454db5ca35b985d226399a7165e11415c2b097cc427d041f2a5c928fee657a8e" + "383da5aa03a75406ef638c69e6a79de25c452abd7f8ff6d2a17a914da1745e9b549bd" + "0bfa1a569971c77eba30cd5a4b875b21b12da19e8438f2be508f86d3680fa654082c6" + "ed5058d1011532dc52ee47e53208fad04b02194b0236d31f39156becec1c6f798055f" + "8061cdb31e423b842e", ProofId::fromHex("c61ee0416eb9549ea0e09dfd2c6062a11aa5d3ab0adcdf59abcc" "02dd0de401fc"), 444638638, ProofValidationResult::NONE}, @@ -355,12 +355,12 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680c5eb5fdf05" - "84d9a6e938d41034daf43d6bac05a9d6132ba0711193279e5f5494cb9d59920bdbd96" - "858162c7226ddfc565dbb3a2e4609a148e67770f09a968582255121023beefdde700a" - "6bc02036335b4df141c8bc67bb05a971f5ac2745fd683797dde351ae29eaecb058c9b" - "b74eef68dbeaa5da8b96aacc00bc89c911095ad016cfbdc53b1eeb10a9f29d6c48a5f" - "b3a1e6e30d332a05bdc67062f94acffbe6d6c909bb5643", + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce68083231b094c" + "bc1dda0b9a26e8cba99169923a1337bc786c1129990ae2f13e1920ead9ddb3bae5fdc" + "e5f06bf57b25f6079b92f0f3f75ece0ca2f89510335857988255121023beefdde700a" + "6bc02036335b4df141c8bc67bb05a971f5ac2745fd683797dde351ae02a933c93d2b3" + "e8c8f7b14bd6345644a73f2140072d27737f0a60d1323fe20f76f7a5a2bd0472b8d36" + "a2ae80a5e3072960ecd1e734b027915da68ac89cad7254", ProofId::fromHex("29deedc94713bbc4d4f88fe96fae6801b91c5ae50601f158fa76" "a036e18ea468"), 444638638, ProofValidationResult::NONE}, @@ -368,14 +368,14 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce68072fb150ce9" - "813a3fe876bac7e2f4806a0f1efdadcfb1970c009a29af212cca0a43555eb1e0e0863" - "a2361244ad282cc9568d1691a582513d9793c0432cb78339e695221023beefdde700a" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6809eb173acd4" + "042f3aa219d6a8bd90e750f8bd8cfd480cd6e95f8edc256adc7de22bc2298b43cb331" + "c38510d856a3b6ae1ed19b30914868ebb6ba916c35a5dd8ed695221023beefdde700a" "6bc02036335b4df141c8bc67bb05a971f5ac2745fd683797dde321023beefdde700a6" "bc02036335b4df141c8bc67bb05a971f5ac2745fd683797dde321023beefdde700a6b" - "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde353ae34814734c1bd2c4" - "76fdae6fb1145530c3244878f3c2e0c2e5c05da14f17456aedee6beb80f68f42248fd" - "89042346be54beaef7da8e549d7d5ff07f9a2cc63c83", + "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde353ae18fb738b3b34a12" + "e30d3fa528277f243c7e0a827590498f8fc3aac484031b8db4a91b5929c1b13154a5b" + "e2d70e0a4a772ae8b69ab1e92dca5ecb3fea0e8478f0", ProofId::fromHex("c24dc13d98d0e0a80c19346b9590368557a66f0f65c0088c179d" "89eca25107c8"), 444638638, ProofValidationResult::NONE}, @@ -383,12 +383,12 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680c48602d78d" - "8ee81361082417c97d94c54648adc9ef7f9047df5d03546ad6a13c6e81a15a4888130" - "161ae29239a2c4d66df72e4bb73036781d96fab810a39a1d71b6a19492077616e7420" - "746f206275726e206d792072657761726473f42ae2e5fa253a700e5dcb3970a894db4" - "48b61960b45c84723bf769d4dab0370994d0163e235b688da2fabc8e5b57e24805dce" - "3baa62e064c32266a723c6adb6", + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6805f39847744" + "c7a52149f3c9449dc02b115d04907811d27beea9991c0deb24bc0c4fcb5c61a77a30e" + "a37c1ededf5140d090cafef5ed7c1f1347076d4a5185b2f261b6a19492077616e7420" + "746f206275726e206d792072657761726473a6e735f7309411431296a923387b561c9" + "99924082b8a206b48f8b610586c238849eb489d81162c525d1133e2a1f76ed05b80e2" + "6824b2df4a1fb1facffc4978ab", ProofId::fromHex("bfc250ca1986177acc779f26eaff80aa8916d23cb3e7e0ce6d35" "89c4f5ea364c"), 444638638, ProofValidationResult::NONE}, @@ -396,11 +396,11 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6805337be85cb" - "44712c830d4fbecb59e89e19f6f77fa3b7cc17e8124e76ebd7626b9ba27d641ec97af" - "9b66bc6b73031e14db10a6e1adae74bf2cdb683eb99475ba50100b71f0e77b4ad5d73" - "d5a872ab43699309b5c194f72be5ee0812236c1a46a5b2c22ddd71d909cf52143f487" - "54a61dfe0c6566342fa50b7d62c40fb44d1ff5abed3", + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680f2c3923c24" + "8f80ce6a0d72af7db35fa14f6b049faace03bc0fcc8477e3e6a6c6f7873f810edcb02" + "5d372c29bb6979fc3eb8e8f2d183a59573187f7e240ea1d2801001343d1439a76e8a2" + "a2621b12524b91eb933717d267c0a8825c9d9649eeb685ade6c4c160558bb102b294d" + "85eae3e5de7ea58def00b3280fac1700084129dc2a2", ProofId::fromHex("046e75fa2d7f0868dcfa683bbdf657fc6a49b8f8b0d5c2dfdf90" "736ded26b076"), 444638638, ProofValidationResult::INVALID_PAYOUT_SCRIPT}, @@ -408,29 +408,30 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6805cada44f47" - "acd1bc0d679f2448f03b56fdf20170add0c44b1cdcb7cc47d388269cdb7d452c0a9b4" - "06ea6de32e6a672ad125c8b54d0511768aa60b0212fbce1b2ad5121023beefdde700a" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680b90f191186" + "c171aa750f6ba852a4f37a7fb0b2a2494e8a35f195be2ca49c85ec2e8d99e9ca11dda" + "bc972dafc8a0862d6d105ca44e91bb156e2d2c0bf0e35b983ad5121023beefdde700a" "6bc02036335b4df141c8bc67bb05a971f5ac2745fd683797dde321023beefdde700a6" "bc02036335b4df141c8bc67bb05a971f5ac2745fd683797dde321023beefdde700a6b" "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde321023beefdde700a6bc" "02036335b4df141c8bc67bb05a971f5ac2745fd683797dde321023beefdde700a6bc0" - "2036335b4df141c8bc67bb05a971f5ac2745fd683797dde355ae005dfe80b01bc99f9" - "3ae1d1c2d7176f7ea54a7f7c76b6eabb1aec5d31de170b0690282f624d01070fb2700" - "18694aea6a73ac5b7a96e30ed69df9b7684298b986", + "2036335b4df141c8bc67bb05a971f5ac2745fd683797dde355ae97d567ad8eff34e8e" + "9778e76414025f08ed344a282bff8d087307ed9961658ec2cfab2ec96f21ef0c2e0ee" + "9cf05372e66e2de959bc62c85124910a833443b6f5", ProofId::fromHex("e66b0ab11de5e2f358d2e1f65b1ebe608e4a1f10a9f5d42f1173" "b262e1a218a6"), 444638638, ProofValidationResult::INVALID_PAYOUT_SCRIPT}, - {"Changing the payout address changes the proof signature (P2PK)", + {"Changing the payout address changes the proof signature (P2PK) but " + "not the stake signature", "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6802249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" - "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde4ac7b0b7865200f63052" - "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" - "4f5ddf7d9865c7fead7e4a840b947939590261640f", + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" + "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde4ac6788bf0373c641dcc" + "cd11299b4bea102a0b3c9ca0f247774bb1cc2b1c3b0d1ecbb0c6f7f93c60a255a0cea" + "aeff34a58544af3445e52b454636b63d45c8c0ddf0", ProofId::fromHex("ce2812a1decdef0267e0266c68ab53c5ecad292f7b7d0fbd3db9" "285a08ccd2a1"), 444638638, ProofValidationResult::INVALID_PROOF_SIGNATURE}, @@ -439,9 +440,9 @@ "da7587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6802249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac7b0b7865200f63052" "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" "4f5ddf7d9865c7fead7e4a840b947939590261640f", @@ -452,9 +453,9 @@ "d97587e6c882615797011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6802249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac7b0b7865200f63052" "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" "4f5ddf7d9865c7fead7e4a840b947939590261640f", @@ -466,9 +467,9 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde40169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6802249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac7b0b7865200f63052" "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" "4f5ddf7d9865c7fead7e4a840b947939590261640f", @@ -479,9 +480,9 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde3016aa79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6802249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac7b0b7865200f63052" "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" "4f5ddf7d9865c7fead7e4a840b947939590261640f", @@ -492,9 +493,9 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91df00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6802249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac7b0b7865200f63052" "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" "4f5ddf7d9865c7fead7e4a840b947939590261640f", @@ -505,9 +506,9 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21814712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6802249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac7b0b7865200f63052" "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" "4f5ddf7d9865c7fead7e4a840b947939590261640f", @@ -518,9 +519,9 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf2180471280659401003ae168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6802249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac7b0b7865200f63052" "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" "4f5ddf7d9865c7fead7e4a840b947939590261640f", @@ -531,9 +532,9 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010039e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6802249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac7b0b7865200f63052" "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" "4f5ddf7d9865c7fead7e4a840b947939590261640f", @@ -544,9 +545,9 @@ "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" - "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce6812249784cdf" - "70222cafa65d71a80d6f588cda6fd7183b67b2e5a9097dd49e3be7ddc24a54ccb393e" - "5c9e51ce3f7e788ff93d19b5954fb61215875a14b34f029272321023beefdde700a6b" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce681732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac7b0b7865200f63052" "ff980b93f965f398dda04917d411dd46e3c009a5fef35661fac28779b6a22760c0000" "4f5ddf7d9865c7fead7e4a840b947939590261640f", @@ -566,6 +567,38 @@ ProofId::fromHex("455f34eb8a00b0799630071c0728481bdb1653035b1484ac33e9" "74aa4ae7db6d"), 444638638, ProofValidationResult::INVALID_STAKE_SIGNATURE}, + {"Changing the sequence and signing the proof again but does not " + "involve changing the stake signature", + "da7587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" + "c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967" + "e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680732388aeeb" + "1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558449bf867630992b2" + "5743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321023beefdde700a6b" + "c02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3acd3545c218e1b0535b" + "8d97a16d89a1528f74161c30112b6da817993ab6032040b2e60089bb829bdb8001972" + "0591c047ab83a6b835e32472cd94a422a9653eeb72", + ProofId::fromHex("37a08e004f35d6410b24a5724b8351b41d4e3ac04f285cd76d73" + "a023b2ae5519"), + 444638638, ProofValidationResult::NONE}, + {"Adding a stake changes the proof signature but does not involve " + "changing the previous stake signature", + "d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b" + "c67bb05a971f5ac2745fd683797dde3026aa79ff23e1d58c64afad42ad81cffe53967" + "e16beb692fc5776bb442c79c5d91df00cf2181471280659401003be168a32102449fb" + "5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680a0a33644dc" + "70cfb362994f96f8d273c7aa06a70575d43f9a601f97f60e706edf54bed2d0ba568ac" + "2f520c4b78e5a688867a9e305ca9ec236ca84343cf0dd114969a79ff23e1d58c64afa" + "d42ad81cffe53967e16beb692fc5776bb442c79c5d91de00cf2180471280659401003" + "8e168a32102449fb5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8" + "bce680732388aeeb1f0c8a777d196b1efc2bb594197702ef6682d12eb3959d7c9e558" + "449bf867630992b25743c883f954a1556d03d7d7885ad7e37932c7a9f69abfd992321" + "023beefdde700a6bc02036335b4df141c8bc67bb05a971f5ac2745fd683797dde3ac8" + "8b1eb25120d11ab68bb99dca24c4760cf1ea375ccb307225dd0e8bfdb95ff508568e6" + "8f07e15a2f1228bc86004f57c10088bfe75dac617ad7bb3c1a19638276", + ProofId::fromHex("6f468e98800d6f0b74452ef9d7ff5f08c4e41354e6479bf5aafa" + "a43d68e93275"), + 2 * 444638638, ProofValidationResult::NONE}, }; auto checkCases = [&](const std::vector &testcases) {