testnet : Code Python pour créer une transaction à deux entrées dans Test Net


J'ai effectué une transaction qui peut être dépensée par n'importe qui et maintenant je veux la dépenser et la rapporter à mon adresse. Le problème n'est pas qu'il y ait assez de bitcoins pour les frais de transaction, j'utilise donc une autre entrée pour cela. Voici mon code :

def P2PKH_scriptPubKey(clé) : retour [OP_DUP, OP_HASH160, Hash160(key), OP_EQUALVERIFY, OP_CHECKSIG]

def P2PKH_scriptSig(txin, txout, txin_scriptPubKey, private_key) : signature = create_OP_CHECKSIG_signature(txin, txout, txin_scriptPubKey, private_key) public_key = private_key.pub return [signature, public_key]

testnet : Code Python pour créer une transaction à deux entrées dans Test Net

def get_txout_scriptPubKeys (montant_to_send1, montant_to_send2) : txout1_scriptPubKey = [OP_TRUE]
txout2_scriptPubKey = [OP_FALSE]
txout1 = create_txout(montant_à_envoyer1, txout1_scriptPubKey) txout2 = create_txout(montant_à_send2, txout2_scriptPubKey) return txout1, txout2 def send_from_custom_transaction(montant_à_send, txid_to_spend, utxo_index, txin_scriptPubKey, txin_scriptSig, scriptPubKey) : txout = create_txout(amount_to_send, txout_scriptPubKey) txin = create_txin(txid_to_spend, utxo_index) new_tx = create_signed_transaction(txin, txout, txin_scriptPubKey, txin_scriptSig) return Broadcast_transaction(new_tx) def create_txin(txid, utxo_index) : return CMutableTxIn(COutPoint(lx(txid), utxo_index)) def create_txout(amount, scriptPubKey) : return CMutableTxOut (montant*COIN, CScript(scriptPubKey)) def create_OP_CHECKSIG_signature(txin, txout, txin_scriptPubKey, seckey) : tx = CMutableTransaction([txin]txout) sighash = SignatureHash(CScript(txin_scriptPubKey), tx, 0, SIGHASH_ALL) sig = seckey.sign(sighash) + octets([SIGHASH_ALL]) return sig def create_signed_transaction(txins, txouts, txin_scriptPubKey, txin_scriptSigs) : tx = CMutableTransaction(txins, txouts) pour i, txin dans enumerate(txins) : txin.scriptSig = CScript(txin_scriptSigs[i]) VerifyScript(txin.scriptSig, CScript(txin_scriptPubKey[i]), tx, i, (SCRIPT_VERIFY_P2SH,)) return tx def Broadcast_transaction(tx): raw_transaction = b2x(tx.serialize()) headers = {'content-type': 'application/x-www-form-urlencoded'} return request.post( 'https://api.blockcypher.com/v1/btc/test3/txs/push', headers=headers, data= »{« tx »: « %s »} » % raw_transaction, ) pv_key1 = « … » pv_key2 = « … » my_private_key1 = bitcoin.wallet.CBitcoinSecret(pv_key1) my_private_key2 = bitcoin.wallet.CBitcoinSecret(pv_key2) my_public_key1 = my_private_key1.pub my_public_key2 = my_private_key2.pub my_address1 = bitcoin.wallet.P2PKHBitcoinAddress .from_pubkey(my_public_key1) my_address2 = bitcoin.wallet.P2PKHBitcoinAddress.from_pubkey(my_public_key2) def send_from_P2PKH_transaction(amount_to_send, txid_to_spend1, utxo_index1, txid_to_spend2, utxo_index2) : txout_scriptPubKey = P2PKH_scriptPub Clé (my_public_key2) txout = create_txout (amount_to_send, txout_scriptPubKey) txin1 = create_txin (txid_to_spend1, utxo_index1) txin2 = create_txin(txid_to_spend2, utxo_index2) txin_scriptPubKey1 = [OP_TRUE]
txin_scriptPubKey2 = P2PKH_scriptPubKey(my_public_key2) txin1_scriptSig = []
txin2_scriptSig = P2PKH_scriptSig(txin2, [txout]txin_scriptPubKey2, my_private_key2) new_tx = create_signed_transaction([txin2, txin1], [txout], [txin_scriptPubKey2, txin_scriptPubKey1], [txin2_scriptSig, txin1_scriptSig]) return Broadcast_transaction (new_tx) all_money = 0,00015883 + 0,000001 montant_to_send = 0,00000003 txid_to_spend1 = 'c21f572546f11ab142b3099db329c352937449c1757238c4461b6b1 3de927c7c' utxo_index1 = 0 txid_to_spend2 = '38610341422c10bb433046e7bb200e4015af178d4031ab4be192c3a93a3c8363' utxo_index2 = 0 réponse = send_from_P2PKH_transaction (montant_à_envoyer, tx id_to_spend1, utxo_index1, txid_to_spend2, utxo_index2)

Le problème est que scriptPubKey est renvoyé false pour la deuxième entrée et je ne sais pas pourquoi.