mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-14 12:43:40 +02:00
HF: peg-in outputs in parent chain are p2sh-pw2sh
This commit is contained in:
parent
f6a0f1f603
commit
7c7e23b898
4 changed files with 12 additions and 13 deletions
|
|
@ -65,6 +65,7 @@ struct Params {
|
|||
int64_t nPowTargetTimespan;
|
||||
int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; }
|
||||
uint256 nMinimumChainWork;
|
||||
// The redeemscript that the peg uses. Uses p2sh-p2wsh
|
||||
CScript fedpegScript;
|
||||
CAsset pegged_asset;
|
||||
uint256 defaultAssumeValid;
|
||||
|
|
|
|||
|
|
@ -28,14 +28,14 @@ std::vector<std::vector<unsigned char> > witness_stack = {
|
|||
ParseHex("00ca9a3b00000000"),
|
||||
ParseHex("e48a1a02a8f799892fda58347c2d794144311d4307dbfd10f77ffe28088c60be"),
|
||||
ParseHex("06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f"),
|
||||
ParseHex("001490d2639f54fe5ef68765e6436fdcd026d373f6a2"),
|
||||
ParseHex("0200000001ddd30904ddd0876eb39c718615257cb18685dccf1ca729476c01fdb1ac81bc76000000006a473044022060210291ad3cc5ce4dcfde66f9f2e838bd1f99035630902c4e839c6e8a90cb1002205c63da2b84ba624faf3d349d35a637f50b071dfe008ca2bff1cc91be8c77b1c00121029d2bc6d7ca682460e19ffc7a5bb4ec644015e4a4eef2e69706cc25869ddbf0f9feffffff0200ca9a3b0000000017a914a7b4a529506168a41ffb6de37c001fbf50086fbc87802675e8000000001976a9144a51d6e1deaee9a8d1d9e9ff9667af617c5bbb9d88ac65000000"),
|
||||
ParseHex("00000020370e2e1744d6a7737760a613785ca4c2e63859bbe496a4debc856474bd0a2a52d9d53f142aaeeacf803cd244bb00d505bbc3ef56868fe12f79c843a4fcd68e898172fb59ffff7f20010000000300000002b10cff03945bc3d0efd5c7228367c2b4b015dc94595e22ef8d09712ffca39df3c63123fe899e560e5b1060cb0cb16555acf166fa060cc4e8bfc22a812bbd3616010d")
|
||||
ParseHex("00141eef6361cd1507a303834285d1521d6baf1b19ae"),
|
||||
ParseHex("0200000001b399292c8100b8a1b66eb23896f799c1712390d560af0f70e81acd2d17a3b06e0000000049483045022100c3c749623486ea57ea93dfaf78d85590d78c7590a25768fe80f0ea4d6047419002202a0a00a90392b86c53c0fdda908c4591ba28040c16c25734c23b7df3c8b70acd01feffffff0228196bee000000001976a914470dd41542ee1a1bd75f1a838878648c8d65622488ac00ca9a3b0000000017a914cb60b1d7f76ba12b45a116c482c165a74c5d7e388765000000"),
|
||||
ParseHex("000000205e3913a320cd2e3a2efa141e47419f54cb9e82320cf8dbc812fc19b9a1b2413a57f5e9fb4fa22de191454a241387f5d10cc794ee0fbf72ae2841baf3129a4eab8133025affff7f20000000000200000002f9d0be670007d38fceece999cb6144658a99c307ccc37f6d8f69129ed0f4545ff321df9790633bc33c67239c4174df8142ee616ee6a2e2788fe4820fe70e9bce0105")
|
||||
};
|
||||
|
||||
std::vector<unsigned char> pegin_transaction = ParseHex("020000000101c63123fe899e560e5b1060cb0cb16555acf166fa060cc4e8bfc22a812bbd36160000004000ffffffff0201e48a1a02a8f799892fda58347c2d794144311d4307dbfd10f77ffe28088c60be01000000003b9ab240001976a914e642eae0e083e8d2dfacd626a7aedd07ee454a2688ac01e48a1a02a8f799892fda58347c2d794144311d4307dbfd10f77ffe28088c60be0100000000000017c00000000000000000024830450221009ed9f3ae842b4fef4f47e64699d5ef6b7d647208751fdfe76c884f418a2582330220233a39e6cf24b716809dd6ef4beecc62e2ac8036fd66b03fd48a40a0e279062f0121033e00debbdcbe0f42f855fa64099a8984fba6f60d639a577f35c8bbf60d3d9a27060800ca9a3b0000000020e48a1a02a8f799892fda58347c2d794144311d4307dbfd10f77ffe28088c60be2006226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f16001490d2639f54fe5ef68765e6436fdcd026d373f6a2df0200000001ddd30904ddd0876eb39c718615257cb18685dccf1ca729476c01fdb1ac81bc76000000006a473044022060210291ad3cc5ce4dcfde66f9f2e838bd1f99035630902c4e839c6e8a90cb1002205c63da2b84ba624faf3d349d35a637f50b071dfe008ca2bff1cc91be8c77b1c00121029d2bc6d7ca682460e19ffc7a5bb4ec644015e4a4eef2e69706cc25869ddbf0f9feffffff0200ca9a3b0000000017a914a7b4a529506168a41ffb6de37c001fbf50086fbc87802675e8000000001976a9144a51d6e1deaee9a8d1d9e9ff9667af617c5bbb9d88ac650000009700000020370e2e1744d6a7737760a613785ca4c2e63859bbe496a4debc856474bd0a2a52d9d53f142aaeeacf803cd244bb00d505bbc3ef56868fe12f79c843a4fcd68e898172fb59ffff7f20010000000300000002b10cff03945bc3d0efd5c7228367c2b4b015dc94595e22ef8d09712ffca39df3c63123fe899e560e5b1060cb0cb16555acf166fa060cc4e8bfc22a812bbd3616010d00000000");
|
||||
std::vector<unsigned char> pegin_transaction = ParseHex("020000000101f321df9790633bc33c67239c4174df8142ee616ee6a2e2788fe4820fe70e9bce0100004000ffffffff0201e48a1a02a8f799892fda58347c2d794144311d4307dbfd10f77ffe28088c60be01000000003b9ab2e0001976a914809326f7628dc976fbe63806479a1b8dfcc8c4b988ac01e48a1a02a8f799892fda58347c2d794144311d4307dbfd10f77ffe28088c60be010000000000001720000000000000000002483045022100ae17064745d80650a6a5cbcbe15c8c45ba498d1c6f45a7c0f5f32d871b463fc60220799f2836471702c21f7cfe124651727b530ad41f7af4dc213c65f5030a2f6fc4012103a9d3c6c7c161a565a76113632fe13330cf2c0207ba79a76d1154cdc3cb94d940060800ca9a3b0000000020e48a1a02a8f799892fda58347c2d794144311d4307dbfd10f77ffe28088c60be2006226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f1600141eef6361cd1507a303834285d1521d6baf1b19aebe0200000001b399292c8100b8a1b66eb23896f799c1712390d560af0f70e81acd2d17a3b06e0000000049483045022100c3c749623486ea57ea93dfaf78d85590d78c7590a25768fe80f0ea4d6047419002202a0a00a90392b86c53c0fdda908c4591ba28040c16c25734c23b7df3c8b70acd01feffffff0228196bee000000001976a914470dd41542ee1a1bd75f1a838878648c8d65622488ac00ca9a3b0000000017a914cb60b1d7f76ba12b45a116c482c165a74c5d7e38876500000097000000205e3913a320cd2e3a2efa141e47419f54cb9e82320cf8dbc812fc19b9a1b2413a57f5e9fb4fa22de191454a241387f5d10cc794ee0fbf72ae2841baf3129a4eab8133025affff7f20000000000200000002f9d0be670007d38fceece999cb6144658a99c307ccc37f6d8f69129ed0f4545ff321df9790633bc33c67239c4174df8142ee616ee6a2e2788fe4820fe70e9bce010500000000");
|
||||
|
||||
COutPoint prevout(uint256S("1636bd2b812ac2bfe8c40c06fa66f1ac5565b10ccb60105b0e569e89fe2331c6"), 0);
|
||||
COutPoint prevout(uint256S("ce9b0ee70f82e48f78e2a2e66e61ee4281df74419c23673cc33b639097df21f3"), 1);
|
||||
|
||||
// Needed for easier parent PoW check, and setting fedpegscript
|
||||
struct RegtestingSetup : public TestingSetup {
|
||||
|
|
@ -63,7 +63,7 @@ BOOST_AUTO_TEST_CASE(witness_valid)
|
|||
|
||||
// Test mismatched but valid nOut to proof
|
||||
COutPoint fake_prevout = prevout;
|
||||
fake_prevout.n = 1;
|
||||
fake_prevout.n = 0;
|
||||
BOOST_CHECK(!IsValidPeginWitness(witness, fake_prevout));
|
||||
|
||||
// Test mistmatched but valid txid
|
||||
|
|
|
|||
|
|
@ -2462,12 +2462,10 @@ bool IsValidPeginWitness(const CScriptWitness& pegin_witness, const COutPoint& p
|
|||
return false;
|
||||
}
|
||||
|
||||
// Check that the witness program matches the p2ch on the transaction output
|
||||
// Check that the witness program matches the p2ch on the p2sh-p2wsh transaction output
|
||||
CScript tweaked_fedpegscript = calculate_contract(Params().GetConsensus().fedpegScript, claim_script);
|
||||
|
||||
// Check against expected p2sh output
|
||||
CScriptID expectedP2SH(tweaked_fedpegscript);
|
||||
CScript expected_script(CScript() << OP_HASH160 << ToByteVector(expectedP2SH) << OP_EQUAL);
|
||||
CScript witness_output(GetScriptForWitness(tweaked_fedpegscript));
|
||||
CScript expected_script(CScript() << OP_HASH160 << ToByteVector(CScriptID(witness_output)) << OP_EQUAL);
|
||||
if (pegtx->vout[prevout.n].scriptPubKey != expected_script) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3426,7 +3426,7 @@ UniValue getpeginaddress(const JSONRPCRequest& request)
|
|||
CScript witProg = GetScriptForWitness(destScript);
|
||||
|
||||
//Call contracthashtool, get deposit address on mainchain.
|
||||
CParentBitcoinAddress destAddr(CScriptID(calculate_contract(Params().GetConsensus().fedpegScript, witProg)));
|
||||
CParentBitcoinAddress destAddr(CScriptID(GetScriptForWitness(calculate_contract(Params().GetConsensus().fedpegScript, witProg))));
|
||||
|
||||
UniValue fundinginfo(UniValue::VOBJ);
|
||||
|
||||
|
|
@ -3502,7 +3502,7 @@ unsigned int GetPeginTxnOutputIndex(const Sidechain::Bitcoin::CTransaction& txn,
|
|||
{
|
||||
unsigned int nOut = 0;
|
||||
//Call contracthashtool
|
||||
CScript mainchain_script = GetScriptForDestination(CScriptID(calculate_contract(Params().GetConsensus().fedpegScript, witnessProgram)));
|
||||
CScript mainchain_script = GetScriptForDestination(CScriptID(GetScriptForWitness(calculate_contract(Params().GetConsensus().fedpegScript, witnessProgram))));
|
||||
for (; nOut < txn.vout.size(); nOut++)
|
||||
if (txn.vout[nOut].scriptPubKey == mainchain_script)
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue