Bitcoin
Bitcoin Core – How do I modify the transfer function?
This is the log of my source code
(
txid: 'eb31223773c7b86288e16f63ce16d1ed40ca7b308ab612f3d698db87e33de45e',
vout: 1,
status:
confirmed: true,
block_height: 790395,
block_hash: '0000000000000000000481a20c90090f35f5efb9c7633d275ec9bd4a1cc519f7',
block_time: 1684465824
,
value: 546
,
txid: 'd3b262afa2fd6242952bfbed7b6fefd07d1225f58e35c330ca5bae21ad71d9d5',
vout: 0,
status:
confirmed: true,
block_height: 826653,
block_hash: '000000000000000000037cddb5c23599063fbc75a4c701dc143a493a9e1c63c0',
block_time: 1705825641
,
value: 10000
,
txid: '2429d9ad4f66b8eb0ea240033cd53cc0944e3a8dac32bc291a237145c9ab092d',
vout: 0,
status:
confirmed: true,
block_height: 819740,
block_hash: '00000000000000000003043fcdbf1f554027bfe32339c8184382704c6b39e690',
block_time: 1701691113
,
value: 546
)
Deprecation Warning: TransactionBuilder will be removed in the future. (v6.x.x or later) Please use the Psbt class instead. Examples of usage are available in the transactions-psbt.js integration test file on our Github. A high level explanation is available in the psbt.ts and psbt.js files as well.
송금 가능. UTXO 합계: 11092
DEPRECATED: TransactionBuilder sign method arguments will change in v6, please use the TxbSignArg interface
DEPRECATED: TransactionBuilder sign method arguments will change in v6, please use the TxbSignArg interface
DEPRECATED: TransactionBuilder sign method arguments will change in v6, please use the TxbSignArg interface
Test Mempool Accept Result: (
(Object: null prototype)
txid: 'e7b368d5ffea7d47039b59b31d5a8e64e6bd8845d697ecb4bdc9bb8889e5c6ac',
allowed: false,
'reject-reason': 'missing-inputs'
)
Error fetching or processing UTXOs: bad-txns-inputs-missingorspent
But I don’t know why it doesn’t work or how to fix it.
Anyone who knows this problem… please solve or explain this problem..
My source code is here..
async function transferBitcoin(senderAddress, senderPrivate, recipientAddress, amount)
//const network = bitcoin.networks.mainnet;
//getUTX(senderAddress);
// Bitcoin Core RPC configuration
const rpcConfig =
username: 'raspibolt',
password: 'test00000',
port: 8332,
host: 'localhost',
network: 'mainnet',
;
// Private key for sending wallet
const sendingPrivateKeyWIF = senderPrivate;
const sendingKeyPair = bitcoin.ECPair.fromWIF(sendingPrivateKeyWIF, network);
// Private key for receiving wallet
const receivingPrivateKeyWIF = senderPrivate;
const receivingKeyPair = bitcoin.ECPair.fromWIF(receivingPrivateKeyWIF, network);
const receivingAddress = bitcoin.payments.p2wpkh( pubkey: receivingKeyPair.publicKey, network ).address;
amount = parseInt(btcToSatoshi(amount));
// Bitcoin Core client
const client = new BitcoinCore(rpcConfig);
// Mempool.space API for UTXOs
const mempoolApi = 'https://mempool.space/api';
try
const response = await axios.get(`$mempoolApi/address/$senderAddress/utxo`);
const utxos = response.data;
console.log(utxos);
if (utxos.length === 0)
console.error('No UTXOs found. Aborting transaction.');
return;
const txb = new bitcoin.TransactionBuilder(network);
// Iterate through UTXOs
utxos.forEach((utxo) =>
txb.addInput(utxo.txid, utxo.vout);
);
const outputScript = bitcoin.address.toOutputScript(receivingAddress, network);
const outputAmount = 5000; // Adjust this based on your needs
txb.addOutput(outputScript, outputAmount);
// Calculate fee
const fee = 1000; // Adjust the fee as needed
// Calculate total input amount (sum of UTXO values)
const totalInputAmount = utxos.reduce((total, utxo) => total + utxo.value, 0);
const totalOutputAmount = outputAmount + fee;
// 잔고 확인
if (totalInputAmount < totalOutputAmount)
console.error('잔고 부족. 송금 불가능.');
else
console.log('송금 가능. UTXO 합계:', totalInputAmount);
// Calculate change amount (total input - output amount - fee)
const changeAmount = totalInputAmount - outputAmount - fee;
// Add change output if there's any change
if (changeAmount > 0)
const changeAddress = senderAddress; // Change address is the sender's address in this example
const changeScript = bitcoin.address.toOutputScript(changeAddress, network);
txb.addOutput(changeScript, changeAmount);
// Sign inputs
utxos.forEach((utxo, index) =>
txb.sign(index, sendingKeyPair);
);
// Build the transaction
const tx = txb.build();
const rawTx = tx.toHex();
const txid = crypto.createHash('sha256').update(Buffer.from(rawTx, 'hex')).digest('hex');
// Test transaction acceptance in the mempool
const testResult = await client.testMempoolAccept((rawTx));
console.log('Test Mempool Accept Result:', testResult);
// Broadcast the transaction
const broadcastResult = await client.sendRawTransaction(rawTx);
console.log("Transaction broadcasted. Result:", broadcastResult);
catch (error)
console.error('Error fetching or processing UTXOs:', error.message);
if (error.response && error.response.data)
console.error('Error response data:', error.response.data);