Line data Source code
1 : // Copyright (c) 2019-2020 The Bitcoin Core developers 2 : // Distributed under the MIT software license, see the accompanying 3 : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : 5 : #include <coins.h> 6 : #include <script/signingprovider.h> 7 : #include <test/util/transaction_utils.h> 8 : 9 0 : CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey, int nValue) 10 : { 11 0 : CMutableTransaction txCredit; 12 0 : txCredit.nVersion = 1; 13 0 : txCredit.nLockTime = 0; 14 0 : txCredit.vin.resize(1); 15 0 : txCredit.vout.resize(1); 16 0 : txCredit.vin[0].prevout.SetNull(); 17 0 : txCredit.vin[0].scriptSig = CScript() << CScriptNum(0) << CScriptNum(0); 18 0 : txCredit.vin[0].nSequence = CTxIn::SEQUENCE_FINAL; 19 0 : txCredit.vout[0].scriptPubKey = scriptPubKey; 20 0 : txCredit.vout[0].nValue = nValue; 21 : 22 0 : return txCredit; 23 0 : } 24 : 25 0 : CMutableTransaction BuildSpendingTransaction(const CScript& scriptSig, const CScriptWitness& scriptWitness, const CTransaction& txCredit) 26 : { 27 0 : CMutableTransaction txSpend; 28 0 : txSpend.nVersion = 1; 29 0 : txSpend.nLockTime = 0; 30 0 : txSpend.vin.resize(1); 31 0 : txSpend.vout.resize(1); 32 0 : txSpend.vin[0].scriptWitness = scriptWitness; 33 0 : txSpend.vin[0].prevout.hash = txCredit.GetHash(); 34 0 : txSpend.vin[0].prevout.n = 0; 35 0 : txSpend.vin[0].scriptSig = scriptSig; 36 0 : txSpend.vin[0].nSequence = CTxIn::SEQUENCE_FINAL; 37 0 : txSpend.vout[0].scriptPubKey = CScript(); 38 0 : txSpend.vout[0].nValue = txCredit.vout[0].nValue; 39 : 40 0 : return txSpend; 41 0 : } 42 : 43 0 : std::vector<CMutableTransaction> SetupDummyInputs(FillableSigningProvider& keystoreRet, CCoinsViewCache& coinsRet, const std::array<CAmount,4>& nValues) 44 : { 45 0 : std::vector<CMutableTransaction> dummyTransactions; 46 0 : dummyTransactions.resize(2); 47 : 48 : // Add some keys to the keystore: 49 0 : CKey key[4]; 50 0 : for (int i = 0; i < 4; i++) { 51 0 : key[i].MakeNewKey(i % 2); 52 0 : keystoreRet.AddKey(key[i]); 53 0 : } 54 : 55 : // Create some dummy input transactions 56 0 : dummyTransactions[0].vout.resize(2); 57 0 : dummyTransactions[0].vout[0].nValue = nValues[0]; 58 0 : dummyTransactions[0].vout[0].scriptPubKey << ToByteVector(key[0].GetPubKey()) << OP_CHECKSIG; 59 0 : dummyTransactions[0].vout[1].nValue = nValues[1]; 60 0 : dummyTransactions[0].vout[1].scriptPubKey << ToByteVector(key[1].GetPubKey()) << OP_CHECKSIG; 61 0 : AddCoins(coinsRet, CTransaction(dummyTransactions[0]), 0); 62 : 63 0 : dummyTransactions[1].vout.resize(2); 64 0 : dummyTransactions[1].vout[0].nValue = nValues[2]; 65 0 : dummyTransactions[1].vout[0].scriptPubKey = GetScriptForDestination(PKHash(key[2].GetPubKey())); 66 0 : dummyTransactions[1].vout[1].nValue = nValues[3]; 67 0 : dummyTransactions[1].vout[1].scriptPubKey = GetScriptForDestination(PKHash(key[3].GetPubKey())); 68 0 : AddCoins(coinsRet, CTransaction(dummyTransactions[1]), 0); 69 : 70 0 : return dummyTransactions; 71 0 : }