diff --git a/src/primitives/transaction.cpp b/src/primitives/transaction.cpp index 61fa8fd756..5eda0a28a6 100644 --- a/src/primitives/transaction.cpp +++ b/src/primitives/transaction.cpp @@ -97,29 +97,18 @@ CMutableTransaction::CMutableTransaction() : nVersion(CTransaction::CURRENT_VERS CMutableTransaction::CMutableTransaction(const CTransaction& tx) : nVersion(tx.nVersion), vin(tx.vin), vout(tx.vout), wit(tx.wit), nLockTime(tx.nLockTime) {} /** - * The input witness consists of three elements, two of which are + * The input witness consists of four elements, three of which are * optional. The optional elements have to do with asset issuance - * and are not normally present, most of the time. For this reason - * the optional elements are places in a lower branch of the Merkle - * tree. When not present, they take on constant values in the hash - * tree. + * and peg-in transactions, nor present most of the time. * - * S : script witness - * A : issuance amount rangeproof - * I : inflation keys rangeproof - * - * . - * / \ - * . S - * / \ - * A I - */ + */ uint256 CTxInWitness::GetHash() const { std::vector leaves; leaves.push_back(SerializeHash(vchIssuanceAmountRangeproof, SER_GETHASH, 0)); leaves.push_back(SerializeHash(vchInflationKeysRangeproof, SER_GETHASH, 0)); leaves.push_back(SerializeHash(scriptWitness.stack, SER_GETHASH, 0)); + leaves.push_back(SerializeHash(m_pegin_witness.stack, SER_GETHASH, 0)); return ComputeFastMerkleRoot(leaves); } diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 60ab429724..bd568342da 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -509,9 +509,12 @@ class CTxIn class CTxInWitness { public: + // TODO generalize CScriptWitness into just CWitness std::vector vchIssuanceAmountRangeproof; std::vector vchInflationKeysRangeproof; CScriptWitness scriptWitness; + // Re-use script witness struct to include its own witness + CScriptWitness m_pegin_witness; ADD_SERIALIZE_METHODS; @@ -521,19 +524,21 @@ class CTxInWitness READWRITE(vchIssuanceAmountRangeproof); READWRITE(vchInflationKeysRangeproof); READWRITE(scriptWitness.stack); + READWRITE(m_pegin_witness.stack); } CTxInWitness() { } bool IsNull() const { - return vchIssuanceAmountRangeproof.empty() && vchInflationKeysRangeproof.empty() && scriptWitness.IsNull(); + return vchIssuanceAmountRangeproof.empty() && vchInflationKeysRangeproof.empty() && scriptWitness.IsNull() && m_pegin_witness.IsNull(); } void SetNull() { vchIssuanceAmountRangeproof.clear(); vchInflationKeysRangeproof.clear(); scriptWitness.stack.clear(); + m_pegin_witness.stack.clear(); } uint256 GetHash() const; diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp index 108fc91777..e9518e90d7 100644 --- a/src/test/rpc_tests.cpp +++ b/src/test/rpc_tests.cpp @@ -82,14 +82,15 @@ BOOST_AUTO_TEST_CASE(rpc_rawparams) BOOST_CHECK_THROW(CallRPC(std::string("sendrawtransaction ")+rawtx+" extra"), std::runtime_error); // Check a more advanced rawtx case with blinds and witness data (elements specific) - std::string rawtx2 = "0200000001013dbc5d47f9275524ed705eddf72a53fef4adcc6f72862307bbd53f767285babd0000000000ffffffff040a2a8f37f85eacbe4435f078d03536bda4903a746ce6e42cb7faad7c782366c37408c268a0afce0f59f70d022e105d607fa0a4c6f65110e73ccd9640ebdd1272e4cf02955a2594eec93612be0012f572a8b0462b1d30d222042a08e342eaa3bec724de1976a91480b13c111909db1f7acfaffb9bcdb1fda579d08588ac0a27d954a5459ab030f832a32e96d0bc8c7aec911dca1460b1395ace8bf5bc667008b20395fc3202f78253102cc7c5206fafd2560bee394f36883249e32765402dd60276b93cc268ffbbe61f3a159127a5bfbb41b72cad63352000e42e55383c8b1fd11976a91474ce2e414059470ddfc7b5e21370e1d00e7bc9d988ac0121667c3dcc51290904a6a9eae27337e6ff5602d0deb5ca501f77be96de63f60901000000000000000000036a01de0121667c3dcc51290904a6a9eae27337e6ff5602d0deb5ca501f77be96de63f609010000000000989680000000000000000000430100016c8d770ce2bfba6b762b4394eff906ef161069eecd547c8c657985c3d2485f85c69ff9f0ba30ae987a2f5a84a95a96185393a8a9db4762484b10214a15c7d940fd2d0e602c00000000000000016f0c18bc2c107e145ed45bf1d8b7c472b154d793a29df614a925fd5625a91fed6af77ac202b1b71a85995c93130a8a316af237834d35d2eff90d02da59134e5de7c38ace2f5d7f60a6a25340d9bd4f1ea15cc629869038027a9a09dbbafa331d85670df92781c988b1ef10b67f56e0fb968b4546959c2e1e61993c2ab55e45e509d5f243dbaab91e1d08d11ad6e6b0c8c3bab337fa84e07fa80794e302c33cfe2b464646fdcd60f11c8a47528c7962618820d9f135cdb2cf6855c6a15aebab128c44b86d9fa0e97594af9d5965f80cd819f983e8557869a145870b22ce921091ec5bd40983b234d2deb7f24355b4f9dc6ced58f8e301fc55551565feb19287e66a5df9c5c811f5475d782bee65e4da026f767a9d0820f16c24f9eca3d2a507389fb14a6476fb03641c3a1c256d3e4abaa44fb26daf017ccaad5c48f9afb7192e42595a99e94c3be7e54bcaf27e24c8376473a8f1e56727bd2d0277d4b919a8717fa64e0ceb332efecaae10efd17bc51e91a70baefbda21384aa2766ba752bb51399e50c7787b807cd5c7fff24e82f475d157f71f4ceb865ad89a782a6192bb0f056023729ed83119512f3dd5b9176e4044ba159007beadf32b1cbf5b5c5a9c925e6a7555e18ed8266b204b68c07e8e84554b0e809dcd683b011b2f561a2d7aca966322565aa0c1551ea72e0d9a11b69de9a60cb65b04705bad4915c6e7eba96fa697efcf975c14e2f2737099739c9724de01ca5a67c596b02fa14ebcfca6dfec4d0e200ddfa8e447412323ca3692cc4b88d5d49896c82c63295a3a5d958485f5ec5745ff609f2dcaf6469806cbd2479eabcaa93019bd7abf7da5db540976991db78fde76d159492cdff9d5ee4d9a7cf8f43c7017b26fc6b6de26816517ec0b29c4bdf56b5945306db025170b4ed589bc17bb069943397ad707986dc46f43ca2b1c90277a3c03ebc6775f6374271cf8a6606e14bddb200cd03296341c5072fb39e29b1dca4a1b5685ca9fbfbf918b259a79fc5061a758219156ffea253f046baef21cdc79be037f398f08fb0dcad33f5ea1fbbcd236422d6199738a838322b2684e5d3344fac185034c7653577002edde48fd8bacd79db70fa7b3faf0c060d308768b782c005dbf865a55bd4fbdb3c9f4d29cb2cf5da6253ad9d5ece5adadb95c4f354a2f818a4d2dc99e02ba2a2ef0c70a995579f606666b1f105e736f15fc83f791939d1d4a3806d5541e83564647831df83c79436189b1d63e44b210dadecd4f645a3002f83e928149cf21c73b711b17a1375d7c2c41e94801e80e55765302c2c764c6496b024a07277c41d84653c52659267f62311c9fbb4e087e72082115b8f21230f5c6f801393f112263ff6de101928695715a1caabb4af540c739b7252615a475b75b4e9d73e9b012a897c917c0fb2fa578cb51af2ccd492a0246c0264a0c10d003f8b738feaa2827e1a10bffcac3f0d17e4a11f4c8ac7ad0a6281e79d0a418af0b9bbe1039d2e59b47eb6ab3d9a91f00dbebda40e8f3b3e5b5ec2bbf5f65178844705a2aeff0e723bdbec91a829e4060d6c4ba2c7891b5c84d31b10fb281d2f7488869428820254470ab8f4a4f5be97e3c47ddab99607a618be9a177a217ac794773874b426c02cc8702d4850ec3b4c6d4d0c31e2853813fa42cec6645e743e1971fc68b4e47a568e431e22c7226bba99d65b4550939deaa9ab618e8c25cfa34c21aabc1b4be0a50b685f1d25cc5df3090da131a74ee5108c65778c173572c1ba483cd460bc012c8d3db9aef167776c3090a3cfe3624f07cf2dda869743fd5a6143f87b55618c80eaad35aee5c7f5497e037038de5c93521a1ea60e76c9e435e88eb72c9046f1d8ae2338e7c6826793a2c22741ac8d19ebbce55d3792dbcd88ef64f177e2280be47b35256c7a50c9de8c5ba72385bed43aaec1a65d4b27bb850f78888625645216592a2c65c5e2f97042e1b399a6e9de452676a3fbbf6c5eaf6a08b733f2f4c28d4be6f93c0b02615faa089bd3d8c5f0db540b740aae54bc629b8d34588bda43cfe89c737aa0c08990b10f9054745ef9a5b756029e885af52b8dcdad07d1d4bc431cfb9f194f270d7bb4b66db7f0d8ca603cd2241a8a88d4623f1664544d05515875af3ddb125f141477f65504fa960c8dd63adfbc31a719a316c097097f114ea9c695c0ed72d2387ba4ea7fbaba8c5de546a0d0cffce153901310a0557acadc920a7032cf924e551559aecfce02f0de1f06c2ee2a85f612c3b95ad020ea26a88e2b42ea40dc1ed1f6e893145465981fd136163531284b62c21d858127bb13d5435e610ff00787cabe5c8822c9f4ab88661d32bfc6c2042a53a385b0832aa2b17f50303fc09ce77011c1437673a2b505491322796e95c2efdc40daf8cca242b75bf27fc19d09a2045d27608c2e0313244b74bde6bc411070bec4fec0267739e97f8a9c38e569e204b4d6cfc2f1c21d2efb2d20ec8806eb6a4bb1187a3f69d2993c621a1e5c986ba8fbaa4310363eaeabb085ab8404d8cd0e17ac9438d34f2e33d563487920bd0356d5313625b124cdb774f521e7b6776dad15f5511d60882a21cff1e604ae0dc25a3e58bc038884af68dce99375b3664c43b44c0ccdb65663fdaadc52a7f6190e6bf70c3023e0912e7154c782770fdeb73d614f944b7aa4fba7acee9a514299974523f55c38e3e94b5dfacbd6ebd107881378a5c81cfa19c2875024d0feed0efa12e347d25a040e3bfb620e8d3c0de2c8f249fa242fbc37decb154aad67ba8c03854ffd93a5b2e8a92a0fb934c8634f2f28788a2b56174f99b8e2c9b2626ec3a828a17ce408d600cbfb7b9913b9b33546a65c1eb5b31a0609c3915dc68547233f79f37f65c63e96a91be5045b97944156d77cf716c93e967c7e6d2b29b65081408a4d632027659f5e1fc944875821f9dafc6ad03deceb3227abdd3bdbb5ef0a67f3375406dbdca8d56b26bb0953607830748b178a4dfd0a0c1c1e50d80fe546309ff1facc47e21c3ba7956c531049aac0971bbdfbf08e6a5d8aa89b810b6db441eb24aafc5dafcd5f4e9f927ca965d1408db2607f5d932c7cf0bf12e2e2a397b6c2f9e821525ba2a0be92d8c18216a4ec6257e0c797f655c487cf520f838343c882f763e7ed457783b144330243d8a2cea784d28a43bd8e5c3a77fdaec4f32e44c179190c8324aebd68b422027a59ed501a41a638bd07843d80c96972d9378acf1e87002377b3ffc5d82e85e06a02d318a5c62eca9d744880b132d591e2af0118452041f851a6fcdbee2bec7e7a3a7921659171b2e8aae2af4b81f5cd4ebc1fe42a5034a79c8b805a51d93e8c053fd8fdc9b2940f5ea434e89cd82cca63d722cd3de0a3d879210162bd336ebac191c4e3f4612169f6e353e1181693ba83b57c553620e88ad12a5427bb01dcd287238b0b49acac2068360142ac1073525e8deac7e4065664d8c76d9aecc94adfb07c2d0363bc9bdb4906c2ab8a85717df225f217dca18ca72910a58b1f6f9be5bfc0d1b0b2dc1fdd705821e395ac2da06308ddb8fd5e824bc1fe4a0fe76f3999d1028a0367638878652c02cd61834c122a248532babbd41adf6dbeaf05686f655f44ab540bf6ca78b2d646cd46c947f6b55d60d8ec96ecf7e671877a664e73711504d288f8d285cd1eb982feffb364c833dbeca3c57dff2120d9903557837b2897238b5269cfd25aaecef0444d1a32fc5e9f9b85886c6a1b75a939ba645aa23c778d77027b4148a76e8fdb1a12ba265d0e5ca1acca724c91455c46900d3362537aaefc6e0d34a89d0a09831e0457f62a40f9795bfd886c29bbd140bc3dacd2f0da2dbccc4f4a4f5f1ab7c7d85a92280ade2bd5ad4b5ab1458fa6ef2fdc66beb70a7a1334c84d078e5ae799eb755f97a3ee0e361299acd28fcc9cebfaf86f2cf0d9480fa2e5b5830e94df05466165970d07e6f19ff7f8bd069574c8cc19bc4073f57df5ef5cee2fb80a5df6bad010683fa288ca9737c20d80e7585b9b2e30e93afdf3182614037d323e77d6ca91b5cd3b39f82ba9fc81b2176c33b76ce4bfd58987e7807db46c232832303ba34599d6a0b71c9b3ff0cd9696bc19e4ffd21d5afbd4f98bb6b3cb6585ff0e8f6bc313ddcefb0e54f088cd1d6ef02a1a2b84b45beb6d6b439011b4c8db2395395602fccbe0d8e57851ece3855736fc251bbc5068e1f515800caf804646b8d61f496804f6d8b24e79fc4ab775b58a6a2907d674893f183e9c6acb4a2244ff5ffb37f7343dc3dcdbed9b0892a5cfebac74da7b224b24636b6f7a72f9067ad56b76eafc7add0b57493c6d70ba148b055b331e38b5b9b509f2c2e0c92cee82043189ba3a987d3804d896478a341e5453be25868cf2b403d736c4e6a86f4f8ca47eddc2830a5ecd47516ffda50d5efbe6b83c65f74c065e55854314149949bdfb8f476f1ce43e85720c2ed16be60b68b614820438c248a6eade0d070d591464ec0be7adb403decaad1f5ca64f4fcc084b82bc85e35fb7f62305168f01e23090e1a08e9f27e68739b97a9038e77287af0762ca5110e54345ff28fed6df0d30d701f2f11b01d7c7ac1726c7b065b43ab48931dd6ad2f3d7daa4b9ea17fec6d9dc1094585ea64ab61f36584da480465f340605cda88095d8eca27aa1c0f910adbb551fdefaabee636eb5dc5c458dcf371bc61341aec73f438bc70b81f881ca4004ab70b932e6b1572a6622e55848b499783621f00f60856d252cc8d85cbe89a97bb4c03a76513860914ef766748c810caa4a3ea6df6b4c1878a40b822d5e806f6ce285d170d1d797d9a5c46b3a52898c9dc83e720efbc81b5beaed82da200d72b77782d86eb6054ce2ce9a8b92b6522a90bd83b5d071ab110a03df53ae44185bca738c5d8bb621c4c00eccc9dd57d332d4787ca73b0d8122c0a3c7e81c708476bff174b734acc43a6c2dacc0b5fa69e4b20713b28477a12c88b13b6840c5de997f6779fadfb072ba295a8665d52101b5ae5a14cfd78913a00924c1dfaa8bb73b79b877221b381d15dc02e883086802a963cb00ee53ed246155286881857b790779a8f823d649a58d8eadf653cf2a5dd03b1f86164591a1ed71fbad130258143010001bd1504b715e5c76a61a6a7bf3c33df202d74a99c4d752dc4d8da37ee12479a64c61621261aad42b1451b6056e1fad40625330ff434126c175704712486121034fd0c0a601f0000000000000001770ea866172e8d40a5ec75be01fe745fe8af2204fe50370c19d943c2e806987a82cda62aab3db7f5166c41a65094843a6a4f9bf185f6f9c39dd5203a8e7820f59884d688790a3dfd208459487be405b1ab310332bc1a62559664eff47126afb7d9a6006ea825bf06dbb7b28b8aff1ec81200d8d7420bf1daf81bc004442b3fae2b4f3b0048354d15b916877943ac862c46688e745d4af459f7caff0cb14753d7a3f993ba74abbc53c7ce25d50f099db363cb21463dd202f00154c83d5d4c8552613853c7991e6f477cb4a7c85c92d51a20040d5c86efdc02d0a9916e301fbb2d598b8ce5486e0928c811ea79daa67a11fed57b2a5159f8966f8a3564e4078921930a49f9bd5be5a4b32f2dba7b16075507f0ebf5e4e47afa4e54881a4e3700c91d5aa44d95fa6b8a167f1c5d90ae927044985b18b8efa095420aa689889b504371558605a4ec42f86bb43700e8b7ebcae5f613107cfc28fd80dfef9bd4240d925449b64189a615d708af55cd334a51c43b7564c342187595b594789d99d09872bb7ed53207d29f02d0d17b27e8a9a68639341d2aad8edec2dd2d58d091e960250d8252e709f887f5e355e840fe7f84243d55166cfbfb2f475b33e0f853bca789909877cadb5aa305564691755c1b2f00d38844ec75e112dfb4aefe94f21e3732cbccdf63030850e2719d2fcf2170736f98485cdc3f49006f41a17259cd5f94840bc50ad335829157de38b7abefe00bfeff06b3059baa2df8715f7336bf118ae7c10e64e4bfaae047275c0493f241a9c6734d971d54eb544039ca748801c004c44b2d24d507352dd229730a206c60a0aceb028639690944f3d99b4b31dae85bfc853ccf78510c24eb85baae0dad2afe092c00448656a3b9410fd13472c407a3d2d699e226463dc035b9217bd7a67181df76c7eba5f769212e6b9cf01fb056203422e1f92ec75591d34daf2c63d8730e1bf2db00a9f335262e57841e75bcce714b155926ffc4d97d4cb0a3c339f13f5220737e741abacc6027402c5b8a4083cb4667a11abc2c889fb6aa67971fcd6e544f49de560fb39a883405deded3693e5ca97741ef11f139dab38944d99f22a59c5cc8fc8f6182216bd0e00e0de57a3d7924ddf6c3fdc32c8b973f38de485f6a81efbf9a0efa569e267da5d7d118e8c776e2521dc355112bdfdafa6f67dbdb0c1fa454c067789e4458aa7c27fb96e03d12cdf1a6eb6c4dbdb7ffa5987170e38b4b393857853a700a0426aaf577d75a08921da9ba3bb8406c5b763e2fb841af25abd2b7d9d0d91d09ccae2bb98b7ffaf041e056aaad22c8ac87ab4458cc3cbd9b3b7c96afaca3641e1c5647c58b888ddbc6b1f5dcf47d4d98f966210ac14505d9ef45b344d70c0317b254390e4de091b1d0119246a145c64e53eea42310f1587c101cc48a8bbab0f4e569198ed020e25dd8b6e3ba1ae91558518a09fee2897c2917280b5f55678fa5bce141f9743fb82be4c4ab561e74ee0c13b0d35ca4d69110c2b81146652450e185277823e3aef3ae53c2a795cfc73f65d2bebea6f221830aa95d9492b4bdd69d2657e82dddaa28aae2cc7b2ec78778b43f7f1fda91246e8935d1baad16ea90ddf6008caa809ccd46d09df6dc86b49530891301f6d3ec0d994a8bb206423062e204dcc6372f57d740bdcca6dcc1144223cf827ee95a27aa32147d001ac4b40ced09ec8ae0041e52f51b2d591da7baebad889ee058a8cc4a07e34de321b65485307771487eb5de6dd75004042452799686eba9cb54d88f4b91f0b77198b27cff96c00761e527e0a9c11f780105987d02623590e09c45690cd9e8a787caa0f14cff54b17918c3cab79327afd275821a084e4e7a169717560932f8cdc5351b4895c3e7c83e2e167bb01bfc898bb70558ddd91c736f634b9217d67be66a93635097e64e0fe3eb8d9007305e2f6ca99b587dbe00bd780725857bfb36796068bb57f01df7ba010920816a4215d999e9b9acfc7437d2c7f2f563c4618574f3279ccf80dd6c23cd313064e7f75c3ddb0efbd5f948893bfc1d24e937a000f90ccf8ceaf57461345d9a00f61e7de0ccd5cc00fa9c03a0764ca22d3486bd07105340ac4d26666fcb930520a733647c215bd326a00f08450e7efff68e95ef34695d20c08c113b9c9040125d668fd07093742b292749b534dbe84155002c02ca887989d8900f8e7eca1dc9363f5722162c62382f41eb2ed91c0e7375901f803951f1504b5bbcecc6388e756f3dd038a303d9f1a7212f9c60e3dbfa7b06e64a3564ff4296f15730c0eb6028429c3bf5d1e3b8f46ab649db9fb457d22e470ca7c7793e53fce7c07a3cd71b49cbad32900f94f076cdf1c039d9d50625f5b883e33c6e5320d5d061a490b8ababfe6f1277f2bfd77f658b497b7217dcbc4e3dfecb4b08d99343e87313eb27f102a1bcb74be5790f89721bfce7b42661fbf84ffcd29be6b45be448f66f816215914cabce764023f5cd5ba27fd574155b2e8ee4171c1511fe48ab3eca9f7c5115ee4017632b38b078678cd7ec139022b3abbea5ae2178872c3ca9708c99af29ce1502dadd3ef273576a798155f06bf0dd877b1462848539a351658f18d8ccf845822594d1965c1c3a825aed86f0683f63b20d1df46c0490852c73b775917bc63015f4df4669c39edc50b69d1910d152004afbeaaa3e9d8980ddd96c5e81c83e9770086b1942ae9cc2488eb99a7280210ec559533640ed0a59b397f53909edfcf81ccbf46d164c3dad7fe786eab68701b1a88a87670cbfe98b8dfbe808290cb737184f8a35bcfa6a27d236edad1855ac67450b79eb2973802eb10737bbe3953f3b26d0d70ac95c30954d222bbfa27d31bd083d27f45edbdc560f557e57a71e59554f2efc38d41bb2730f794d514c03398374ef73de279934f0fb6399946cbdcc61003ec29f9e82352bba0985ed9e29dbc18fc24e0a01fd8045dcbece21de4bb52af36830d933b0e222a35ada06cfef4308a42d8d9d4c84d7dc439b3f51eacb71412a20c77a5b8a8cb72ad73f4f51eaa842d3ca6111a484eb1cec8a1e480ec8cd1ad6d0607cd62b37bde02d8ea8bf3fb62fe30b945e0f566217a096a32662154b8f39d58c5c4166991d1086a831727ff86cb405ebeae0ead1848611441e1dfcf1fe17ceff7b808ebb5f9fcb7da734e6f742e276fde75f7249869f882aba7d85a9b795b1ba7726b69b0a2b375b97d2889e4d7e5fbf7659f046593448ad1aae569254b2c5b54b02df1d285124ee818cf63a54db498d61ffb7b0d8897e48933effa2bfa43284b06718eac8977589462621981818d60f54eeb16d4e0c123e8915a76f7d5a82beb90378b1c8ebe353414a94d969e16737a5d1fe7a66b175d949a62dc8416336e9233604db1656bc35d4d2fe98809f5111c7ad73aabbfd690d165088133fa7ca217d98d345afa8cb7745719a5ed89450b76f731ca6bdb7daa3559161441ad7b07406cc15c114171b685380e16b138f4b94907f3c77c4f463f520921828fbf83b92fa0d28795caa7819daa9e6e13884db30868dfb355211ab6e934d3a9ccda3453790bfc83bb652a18d777a056cad0078d815d92714871a27ceb1801a8ebd4555b5570130bf531300000000"; + std::string rawtx2 = "020000000101d591f7259fded69811c82a4100055148c070add33fa3d7e6fe48eb0cc3a0bb471300000000feffffff030ba0ac82e2ef758f2162fa741cd0f719028e530690bf42e2fe61b252f9a10e3c9308ba1325167710a3aef9b68f60397bc28610bd5f7cdd9c2893206cd85efbbd4972022313a4a559d45615027d501524495c6df99dd25ce7b763400b23b34319c8cd521976a914147845e13196bb2994d981277c8be8740af71b0888ac0b38b5af7598350a4c539079ac3276ba89f2d11ff6299e740e85977daef5557d0409466d97966b7db2bb8f7bc77bddcacaa20b2c014e3c03cc3a7c205c802b0277d3030eaf54cac9a1aced68ab0ba57605ad73974f1950f44d2b44c81cd1b57f9303551976a9145d00f031bcb6ea91f0b094b3add79d01f964612588ac01230f4f5d4b7c6fa845806ee4f67713459e1b69e8e60fcee2e4940c7a0d5de1b2010000000000009718000000000000000000004301000184d953c6a1daa32febe274772e908764a61e02e207a4adf75092394fdaa32fe0a96c01fc837b35a379fed927baef8b80d5a9439a591b19234e2f0b9a73cdcce9fd0c0a601f000000000000000133208b0edf417bdc4b07edd0914b6d057bccca355536cec721f50211234d4c83c89b5c9da1c2497fb5b443c59a71a8b9b0c2134eb34f74be863af973a3fa5205086c208da851cd1070d9ed1e2a3d7854c074de4a25628a291d27dbf07cae1d761a3e24044d29d1b6891dd58b36d5b1f0f4d709fbc84618529ef2e96c5824bb6766d3cfdd7787f77d9a636a23aea8c8e15b4f855424d02b31e1442115d55e6c7387c99a46b131cee2fdad1dfdc29a27a109e728068cdc977d2e25b53d1ebbd4aecdd513b815a998d394988eca5d2f2dd3ccb0ecedcce6b3987bbb5b5889c8d48fede605dc4eb3630574373f897b54e58abd58f0f67bed2a29427bf78928b04be307a96a45af21f9f37515344a9e8052b33067c2cdd03d3dba60b88f901a2b823f83e2bedaf007b4190007116b2bfb47a886d3d852ccb8ddd838a37bea04304e9ad3fe176b0669f6213eba9d22549d81febfda82a011b7d25b7adf54656e72fc057ea9d3d07ef44c36c1b8908be63b8da85b033f55b51da3273152ec6604fa0ebd818768bb8fec080611e0b4626203257d7a72025e93014618231c96d430bcb59d27d12f8b0bd1b6213e07b7bb1a52b9ca56c001921a24980d0e191134aa87c49b52865c5afac20a3bf3df2ca5bd899842ca04786a403d4a19d37d6946f7e2f504969a4e5470973b96701ea4141816f7326453e0ba7e55a9384ba822cf3c5719f553dfa0184bc03cfc64227dc8aebd6dfd8ead916fca9856306f501b45af23cc87d4fed85350303b0c48450ea44e1de813c9ca495e9a7b9405f1cd303084bba97f5ccc32a5e77c496557a57126c524d8d813a23c53658bffb8212056009763837223f546a7846f43a604ae0ad3d11dec91f3e7441aa9c47fc801743bba0cfc75bbb344cd92c132aa5573306a3a6d9357df6bb3816e20ca78d319abf80298de7565205c1b0183399c5d75c8ff2c239f9fc2ca90bd244bd6cdbc17da2648b107d3e490a97c4a6cc6450ffa7ec0a801e67961306bfdee6b6887ceb26a9e8275b34c87d809815f774a52a82a28a4ce5f8c6dbbbb9ffd24c3da93c3a2b091f938af6053d36bce4ebbea82048af132034154a4dc0ddfd5758fb1e1ca2e914ef305b1a04748ebaff0ef897c8ddc1734ad3079ea266d2de1035b7993196e7e962fbe9287df14da9aed4d9897c6798868a67a4e79683a25b2c3ce938bfd56e72f4d9498ac0819d13a77573f76cbbafcea2c57d39058946bba370dbfb8b09fb825358d032a5d291271a3bb45ea822a06a0f03aa3a78f1c70771bfc364e5081e14016f10b60fa0d0f686390e483b1cba81dfc7c53dc6adab89621a636273aabaf3d029ef6bbe678549024bf3c6fa2041e8a88fd223af48e8e69328f33c6a39ef200a90959897249a75eb1af37339547d769c0af53cfee90d14f83ce52209a8afdf9ce92fd573f37f28de3ebefc6526134f0ea59bb3ff58fa1d95b36d23447ae527446d8f56e0bf09468d510edab595ef7bf0f22cc74333ba9cbe38f304e693f14e8f8a934abff2d84bc7777b92bf02ebe616d8e057137fb5dea30088794536c7c7959aa54ea6b85c99e178a2f174fe7b707bcd5620bd6e5e537ab5e195269818528458c56059e081b35e6f2c80f4c31e0993ccdc5acf123c8d88c6071897168fac1d9044918e0d17fa4ccf9445aafd6bbe7adc4310c7cb10b65578c171f617ecea3d6a0a2a6da1099402e7d34576412a44df7ad60cca300491ca1e3439b65a59d3c0e9b2340eb29b25ad8a7063424dc4ebd8c6994213cf9489b1fcbd514a88bd801a54cacb1f26414ae0420f5ed788bd3e4382ea5ce3b46ea6583ee4a5beb31a9322d4d402871d0db4eff9e2e75403f4d325caaef63518645ffe1ef7e8ac73e055e7b64db4f2efdc0158e3d5ec08d3ea415fd65fa396f873c318f1933d242137553aebe6088c858e7baa8ebf33582d8b293d665c417e6425f1841903901ff7af295baf64872df39465cf0a4a0ed755a353316c7727142df0f78915ae336f134ea8b2ece84c2100f652a0e38043804f6e45f8e3c76f7b815b3cdbb5481d2cc01b4be17ccad95cbf9a1142b43498a8289793bd4e71765b59666c2b762296a9c4a7dfb16555713095c383ee64c8cd95085c35f999b77d4e5c87cf1f8457306176224a9b342bc289627d6b9953e472f594e9b1fe286659571b0ce1fc0d6f71d39494415dd2ff21976808084bede3c60c7bef6dc2fc1f1c8fe3a4955944edd444b49db31b4c1d932b50566aa0fafbc7fc183e41e67270681bc38417bbfad1d1cc0bb0a3f05bd9b0be41a9c6119010d90a766ceb2b28df5c034cd5e0ef10ef763ecbf205e43276ab7730d8537f13ffe380aff0552663cdc02060128848f2bfea6e30f4c8cc96b5ae6ab08afa6ec3439b780336dea8994274a9a3330cb01a3e54088bfbdfd4134cf8551fefe2cb332f08dfba0c098e9bf529e6635edad6ce272b2b268a690b212d95acb2041fb711a48725216fb91fe12ebb3720e48945f3187b96867772d8e36911b7b579e2ad59b6939c48b36693a51b70e96cc577c13b6155f8191510b183a1e9e4abcfcc1e6cba1b200bedb2a0a5d2e0dc61fe29c2aa02e7de658538ec0e8fdb5f9954310933ed1f234640216a9721d7746cb10c47929c109799b724f7fb94d9dd146f42e5dbd252a7bb48f97ac7af30b5d7393d1ecb6c0d60068346cb5340eaf67cbcbf4db057352ee5afc573c40b095b18269cb796927a67601835360f7c625cb46899d255ec3425e0e34e1ed098719ca7341a4ca87ee36daf0999f371707d041daca6039a1bee1bb21d6e02c17dcd6fad7424b4159f52464c92990c2baca5e4dc5967359218d15ce0ca7a203ee328a6e54f9cb89cf2dd5a7612441090c5df91bf6e3bb806e46920f0d6ee0617bd85f9bd09a957c63c43f3cb10df052ece5ddd07d83c90e4f2a78247defec586c3af4af6c6edcbc8f5497a95428ec320d582ffd2a96b3a00aaa460986e1f2808bdae9c8de93ace89025f495c37fa3c2f7d3026d9a9b813a558b94d6e5d580fe1a2b3529a759dd65f81f02e4f30c8371271d7ee59d1a0570e933381c26770a83e7aefbcddb963c024c4ef6f8fd09723851978fd9925ad81b2b4c39f31278989fa9f973f86fdb9a00ea9f4b3e98d30a27612566747bbd5f924ec0c838123f6536ce1689c8636443a92096cabc7dbb0f2065a5cf1d4a3219b9c6b685fb10d3785c6fa469cfcc6e97a825e0b7a85dd97a3617865abe823d6c096dc61fcccedef0fba73ecd7fa725d3c64ab2f00da04e80ef22c87500f06917f3a87f2b2898b448f5a663a5d0705e1a5d7f8e57f37bdbfa008e47df5ead1aebb4097186902d85654678dc564aeb23e250a72d7354ba40e14788db4ac217d0fab5bb3f1b609df8d3802e2a1857b1339e114e3889bf16c8710228c92790b9e301aa225dfcd62ea5c2279be9550af6a2dc1860adeef9ab424d703afcbd90d930f7dedaa765783159ddce03fd9330edeb6fbf39622e80c5bd4daaefb3387b74d35c6d02e14d6344a6ddfcd716530f75bb9503d37fb54e5237eb83e33f1d76650d45cb8aea33dc72cf7d5fc5d3e91b7ef53fa7badcab7e47023181677c6e721197430100019500f90b308316402b8bdb6e7059684cd4456d5b97b6867642545d6c124a6135da514c72045e675fc2f7a592d9da29dfe221d65ad6ce1d39d5efb6f6c1aa5d69fd2d0e602c00000000000000012e63386a0f0d72de7dab42e60f8d077837b86773ffc62eaa1e10158b7b4cdad4c68f4426c4b6a33659dc5c4f0ccc0e8b4831bb2cf5889feba458d7d9b0aecc95da8eb33c3366e3c3fff80cef436ab0b3ca9806f6acf700a4233119ea661db6a90a9b3509d2c3c6f083ada521c3d48b3e2406e473d85c9de5101005ba5a8b07dabc3657b9d47d92c049c3ddf85bf39c59df39d79728ee99799989bbb86c98bce11799f68243dd4a947b510fea0be52ab5b79176a44b5186ec22481e8a9d15fb730aeb29a68f0e3f2e1616f9a03312c65c66cdc03a37095d7e8f6eca40e95c3702e30b578510e3190cccd511a5670e56cc7f76c5be9ae9a4065614e89b8f8a76d999e1be8ffd3b4f3aab58cb6deec120506880f704dda2c0cd3dfa437b17289850fb857dbc399cf01361e1e683edfe9fe056e868d7758a996900a42b4aa985573b135fef949722254088656b9af2664cb707632407bc400af64d7ce937cde30bbe1f6012f92b7a76852c174ea159fc270b6119215e7fa315fbaeb8ce1fbcd3d385498295816c65938bb4dbcc25a7a6c55d7292b1a508cf4709d574c2e771a65a02ea74509004239a95ef67470b6e33a37338875bc210611c4174ec3e694e8654967266fb3d4f95eb6d54678aff5ed862c522ef45e3d0068b2d2da00dfa0e3ea668fc3d899810aefcabb4c6acf839e4f284841a2bd473d22291ab7b6fb9c99adb545bc7658794402d866f5bc414d60ae23b6dd297c38d86c88fd2c09b8ae0a6c3c3621785f11727477d9d2f83915231c84cf9de7c6c6d4dee4a1ee246e6184a3b9b5755db2a615d7ef3f4f6d13b1bf0bd70843b12748cf9fc4f06631368d2eead8deedc336a4ce02f0b222a179a1adda25e08a3c0b2d55d86b949b00dd2114c8d681bcae510b7513bbc7d77b19b4138650e253bee180e2d208a9596ed5ac1c10f0aeab771cb7b0e4539ba65c78730904dac974ec5bb43b19f961e57c2095781c6bd3d505f352175c679857a698c1ed5cd2b9812af7b75947b01695bacb106e062d077fff22f92656387ae5c02c980f83929e6b793f9c93c26e47b91bf10d73be2f344ff1bf4245cd3a5bb017222ea1081289e3a993adedaa7641957a29468f036b88aaf0aec22d948aeff5c4f53020220dfd146e211290476164635754508058c75d9229a688a0a0aea5f49f3ad0c72b6d7de2ae4fcfbe1fff15823b4643f11c188290de334bae6b22ab4a6bfd509f8cd989040bf5830e60259f34b97ee46d07e03025f8b6ecd49053c2881f1764c283c4cdbdda8c6f6177655eb7a2fbb506e33005a973a105fbefdbbcd0221f297b872b7213bb87cdce54690bdca0fef540b9df631a885a4f3905b2c635ca49a26c7d393a56de440765dbe48f85a7439582af0e6ff301f2a025413db9190e0cb41ebb0481f5dfc3c6468f55f95dedb43f366cf48af19ab6d4d0fe1511bb77992cfa119a990dec26ee6a95d465eb4da1e79e82e737f936b670a0c86196d02fd659014b3b1b3900f005f0818c5fb128a75671dbb436b998b1178ccca389555dec01a0d21fb599f608820887cbf7cc5f0cb3d58469091341794f0c68d040003621acfa2c7a3afff3ea9577f41d5ead8825eeb8808d6bd2c6b051ccb8f6a945475ca727f95d0ff52ba56e923e30b50f129d60083d6492c4233cb724b56b5cdd2d5764aaaa849bc046c8cc6dff65f8b74262f9248978cee12bb5f2505543235baf71aa0f501099e587a89815848b6f32e449c2cb7d8ef636a8fa08030172f1300f9f951dce8f8446c8f6d6e25aba12c95b9eb9bacbb4b49973e13785c53515949dae502860e681efef83e742edc0e9c594cf0c365a9825d32c8d434a4110393d3d44751f51f6b5f75782a419c19f3fa2c7d2ca5f11674da5ed10e45abfdd1f5f9a54361e4087071196834895922a1d974c7c4bb9898cf493704be17c086087ec6097cd30c02f6affeee3a0c946f58a61175ca3542b8852587d1dc86a1822f92214caf538519387da469166454532e8c1fcffbad4536078b53bdae5b81f2c00ca442530cb51bdee3f5363568a0b651c1459cb6c0e240c1dafe8f7da245427e3a126d544b343fc21bfff350a3267189e8808b5de5f386138efc0bc66413ac5fe32e13ad27cab2b8cdc2b7e2e19af39a6e0dbe4df4789161881080a53efecf1a1d40768b9edd9f07df9dc09d13592011fb19f1b1076bb3c1b1844e8423fbf48b0cf47fbcc9583d333edd2a559d1db72a2ce9a594fac9bced219c91b7453b0c2d2271760ed3d3cca940b1b383a7ee78165892b8f247eab95e0da506fae1e26815c651c30fdd0c14db08b9f41b0abe06aa5e167b2abc24399753f73a0246a66039cc5da16b1c3e4267ca093995e2521f600b39e150bc2a029212c3bf7e1528fe40893d196973d7e4e03ee754266d0766c44443f2da3199a9ffef4c598731353e710a16396078b89b6fe263e0dee52719cd38797ce263ce00ed7f8bd975171a9bf4adf5b841f9562c56defc15bf7abecbac2f5105ff7374d652f112733e296da779626d69db3ee4968776b97d431820dee2459408580f5eb515b7b12cf6174cec356288b3802a8af80bd8392dbe10159acf5502ec21c252dca61d598fe52703af4e3db32f9bdbde268451749a2a323574464066e82a24a191255802afea5803ebdaa52fc00d21e22a1a75bff7936e6a78de2eeea2fc2e9244fba601d4238bd1d920ba7437db789acfb0226fd97723d7ba4d502a6440d558c61f62690eb168429ee6f44fa0d014aeb52e177bff8159c532b68674fc8f279d61eaad6387dd317ce25ca02ca6095efa6a1615d6c29d132c67a26ee98a7e5157557530b2a5b9341cf8f83bc0a80c79b5a7a44aff0cebe1bfd100450004aa8ccc31fe2578f7ba3ff38de8d4d9b2cea03136f62fe9120b4b06ba290e80fa27ba39c5c95087998d4e80e436c7d9557302241ec99d5617b6f433e73323bd40c22cc20ec1464c843175abd5d056f6eb282b58ff8ab3938ec625835b66567bad93537146588231c31cb2420c8f3f4af7195395e3590e38cd2d8299a14f0c0a5e1118c0b70c86a5adc60846737d58d9605339a17d5ec700d480359a198101b9893c7b0de04d8043d09e61a8a667b45b4872f58a38d76bc8cee7cd598422a22924e6ebb5527a61524f76ab87027d2329544839ed320d8385e62d0868efd0b25e243b66ba0739227dc88b6dc84eaa37d7b1e0f342338f6562f920c821d9eeae2f3621bc4873f29e18bfb052ae9ed5b5cc05149d6d143afa00b9320dcdab8e7c5492a3d03435fe136a7f938e737662c6aada2427054bd8ce83f9c78785a9ca7003c38dd507c281c5947d31d82480e4f676279a62eb729846d234c21398a309349b91f6b95b9576adf47e9cf0a2696c456bd8167217951f83e1181244d58ac74a3c657ae1e8291521382d7ccbdc0ad84dab67d694ea7a811a733c57cd6d8d774da71d996f2db7ac6665a2d532cbdd36c07b439fb5c9502e0ec12d7a882af1a598261312fc91a351a64faea8c9399375506e0d3ce9b6805b7c2935566e9b886b9a40e2d0878f25bcbb2fffa52c14fb759051098f6037ae8b5e45979f84d3136eace071823fe827208dd82e7c94a4952296998c2d43cdb9d392aa9da6df55d4d3d364c5889d8c007858731df7102670101211574fe16bb9d7dda234175043ad31ec86fcb42735eed139943c8cffa592c47e074ea7625646fb35d9bf2c8ec79aa472b11ed551769170936423c6c0c6d686a737ec4568be08e718ef91b0df8fc197b241d22ecc9c1246aedab8d07bbcbcda7258f703c63336f34811b86a8a2d2a8e75ccbb2db336c905df51218c542b05b6dd53a55eee287a9c6fec8edd7f77a7597d3c6201fd5f1d72a7cf5eafaa56d4eea9bb59065b98d8761675844bed56b61d2ac2e95f1c737ed8c487066524cbcfb48e3a6d90eedff04c837135b231a1e8afc714e8ecaa25699e4308968a73924f21aa911fdf8e6ea3d912382bf1acb221b20b24578c9ac66d9e01cab9a75db0169814052261408b87ef94709d656bca2fd67bd3d9f813c7969d89a760473fba47a110e23bb6b62f8b2ba5d72df92c5640da00669cab7a9a92d69ed76566e8fa7183634abe25ffe62e1e8414480f847c3df9137e6535e46fa6e07af5e0ee8e22203b36793232d4a4bff3d8a0e2aa411c0c9fd1d32a4cf77281a664fbdf6f36c8712362a841afd0a5f432118e4ff6017369fd4b5252c663c2f9ec2fab4085551779cd1693630bcac744247216c71fcbf1b2ef74cf36e200d838bbc2188cd90895c168d4baaf1278728c8b959ab250d58504af5f1f30777529d6f44c17ddb5df640367aee115bc77aa0d63ae8ff82771fc35450f17e00ae2a96b623af9df80825f1d1610159e791fa3491ff872d4266feeace014dec77307f272f2a9d6d0e345b8947415d18aa697568840928bd576087ceb94d3070853c8abedc94a069d5654180301e1000f43977bd21eee5f0bd557d9bf5701bd7821f06cb510c271437c5cc68529587a3359be7fab0c2492984f9c01d5226096f020e586cacbdeb10fcaee578fc2dc91d34ae6680f553a78c4025a3885bae674460f2ff9e40cc3de6cc29c03d605a5cc33bdd82b673c2149bfdf4d0c861f8c19fc4ba540693516435d53e3e9eec2fcdfdfd4f7af0ad97af66b3294234e4b27ad3f3c83abe11f81f6abd102259d329a732df2047e54c8cf2924d4acbe7adcb49ceb2093fec928d5247a15b29f60011b1bfaa287f13a338827015b5f35f62dc64f9e12f6aa402de67ce1647628228e09a302ff9b0c8184501b5632be947374ed984de3ad0c7ef4a2bb69cd9c746edbc9e8144c5ead0c92a15c3da2fbf1b755e70c076ee80fa88d9dfa6a7027ad2c5213c88fe57415c7652ba003846d076134426665239e9b7b2d9367b27225b7a19ff99c20dbaa3f833e874b7edcfbb54a0097fcdcc41451ec718a29dd4f1e44b4200b6734dc9514090e119d57106577ef3431d8ab0e8c7253cb02e204232eec3370d806e99808b5d9a2e0986bfc34ec94a9107cc3799d238a29c235a869b7014226bdd6d7a476380dea0ed3107da8ba7af5842e675ff7a39fe1bd54b80000"; + BOOST_CHECK_NO_THROW(r = CallRPC(std::string("decoderawtransaction ")+rawtx2)); - BOOST_CHECK_EQUAL(find_value(r.get_obj(), "size").get_int(), 6743); + BOOST_CHECK_EQUAL(find_value(r.get_obj(), "size").get_int(), 6695); BOOST_CHECK_EQUAL(find_value(r.get_obj(), "version").get_int(), 2); BOOST_CHECK_EQUAL(find_value(r.get_obj(), "locktime").get_int(), 0); BOOST_CHECK_EQUAL(find_value(r.get_obj(), "vin").get_array().size(), 1); - BOOST_CHECK_EQUAL(find_value(find_value(r.get_obj(), "vin").get_array()[0].get_obj(), "txid").get_str(), "bdba8572763fd5bb072386726fccadf4fe532af7dd5e70ed245527f9475dbc3d"); - BOOST_CHECK_EQUAL(find_value(r.get_obj(), "vout").get_array().size(), 4); + BOOST_CHECK_EQUAL(find_value(find_value(r.get_obj(), "vin").get_array()[0].get_obj(), "txid").get_str(), "47bba0c30ceb48fee6d7a33fd3ad70c048510500412ac81198d6de9f25f791d5"); + BOOST_CHECK_EQUAL(find_value(r.get_obj(), "vout").get_array().size(), 3); } BOOST_AUTO_TEST_CASE(rpc_togglenetwork)