Open bolabola opened 5 days ago
import * as bip39 from 'bip39';
import btc from 'bitcore-lib-inquisition';
import BIP32Factory from 'bip32';
import * as ecc from 'tiny-secp256k1';
const bip32 = BIP32Factory(ecc);
const mnemonic = ''
const path = ""
if (!bip39.validateMnemonic(mnemonic)) throw new Error('Invalid mnemonic!');
const seed = bip39.mnemonicToSeedSync(mnemonic);
const mainnet = {
messagePrefix: '\x18Bitcoin Signed Message:\n',
bech32: 'bc',
bip32: {
public: 0x0488b21e,
private: 0x0488ade4,
},
pubKeyHash: 0x00,
scriptHash: 0x05,
wif: 0x80,
};
const root = bip32.fromSeed(seed, mainnet);
const wif = root.derivePath(path).toWIF();
console.log(wif)
const privateKey = new btc.PrivateKey(wif, btc.Networks.mainnet);
console.log(privateKey.toString());
const address = privateKey.toAddress(null, btc.Address.PayToTaproot);
console.log(address.toString());
//示例,一定要换成自己的信息
let utxo = {
"txId" : "115e8f72f39fad874cfab0deed11a80f24f967a84079fb56ddf53ea02e308986",
"outputIndex" : 0,
"address" : "17XBj6iFEsf8kzDMGQk5ghZipxX49VXuaV",
"script" : "76a91447862fe165e6121af80d5dde1ecb478ed170565b88ac",
"satoshis" : 50000
};
let transaction = new btc.Transaction()
.from(utxo)
.to('1Gokm82v6DmtwKEB8AiVhm82hyFSsEvBDK', 15000)
.change(address)
.fee(10000000)
.sign(privateKey)
console.log(transaction.toString())
拿到上面的输出去打cat 的机子上广播
curl --user bitcoin:opcatAwesome --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "sendrawtransaction", "params": ["替换我"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/
你好自己的 utxo 的信息获取?
你好自己的 utxo 的信息获取? 可以
curl -sSL "https://mempool.fractalbitcoin.io/api/tx/15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521/raw"
或者fb节点rpc 来获取utxo
import btc from 'bitcore-lib-inquisition'; import BIP32Factory from 'bip32'; import as ecc from 'tiny-secp256k1'; import as bip39 from 'bip39'; import mempoolJS from "@mempool/mempool.js";
const getUtxo = async (address, script) => {
const {bitcoin: {addresses}} = mempoolJS({
hostname: 'mempool.fractalbitcoin.io'
});
// const address = '1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY';
const addressTxsUtxo = await addresses.getAddressTxsUtxo({address});
// console.log(addressTxsUtxo);
const txId = addressTxsUtxo[0]['txid']
const outputIndex = addressTxsUtxo[0]['vout'];
const satoshis = addressTxsUtxo[0]['value'];
let utxo = {
"txId": txId,
"outputIndex": outputIndex,
"address": address,
"script": script,
"satoshis": satoshis
};
console.log(utxo);
return utxo
};
const sendBoardCast = async (transactionTx) => { const {bitcoin: {transactions}} = mempoolJS({ hostname: 'mempool.fractalbitcoin.io' });
const txHex = transactionTx;
const txid = await transactions.postTx({txHex});
console.log(txid);
return txid
}
const buildTransaction = async () => {
const bip32 = BIP32Factory(ecc);
const mnemonic = '助记词'
const path = "m/44'/0'/0'/0/0"
const seed = bip39.mnemonicToSeedSync(mnemonic);
const mainnet = {
messagePrefix: '\x18Bitcoin Signed Message:\n',
bech32: 'bc',
bip32: {
public: 0x0488b21e,
private: 0x0488ade4,
},
pubKeyHash: 0x00,
scriptHash: 0x05,
wif: 0x80,
};
const root = bip32.fromSeed(seed, mainnet);
const wif = root.derivePath(path).toWIF();
console.log(wif)
const privateKey = new btc.PrivateKey(wif, btc.Networks.mainnet);
console.log(privateKey.toString());
const address = privateKey.toAddress(null, btc.Address.PayToTaproot);
console.log(address.toString());
const script = new btc.Script(address).toHex()
console.log(script);
//示例,一定要换成自己的信息
let utxo = await getUtxo(address.toString(), script);
let transaction = new btc.Transaction()
.from(utxo)
.to('目标钱包', 5231157) //转账的目标地址,转账金额
.change(address) //找零地址
.fee(100000000) //交易手续费,单位是聪
.sign(privateKey); //
console.log(transaction);
const tx = transaction.toString()
console.log(tx)
return tx
}
const sendTransaction = async () => { const tx = await buildTransaction() const txId = await sendBoardCast(tx) }
sendTransaction()
谢谢,能帮忙看一下我上面的代码有哪里错了吗?我运行发送广播总是400,还有就是satoshis,转账金额,fee 这三个的精度各是多少?
import btc from 'bitcore-lib-inquisition'; import BIP32Factory from 'bip32'; import as ecc from 'tiny-secp256k1'; import as bip39 from 'bip39'; import mempoolJS from "@mempool/mempool.js";
const getUtxo = async (address, script) => {
const {bitcoin: {addresses}} = mempoolJS({ hostname: 'mempool.fractalbitcoin.io' }); // const address = '1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY'; const addressTxsUtxo = await addresses.getAddressTxsUtxo({address}); // console.log(addressTxsUtxo); const txId = addressTxsUtxo[0]['txid'] const outputIndex = addressTxsUtxo[0]['vout']; const satoshis = addressTxsUtxo[0]['value']; let utxo = { "txId": txId, "outputIndex": outputIndex, "address": address, "script": script, "satoshis": satoshis }; console.log(utxo); return utxo
};
const sendBoardCast = async (transactionTx) => { const {bitcoin: {transactions}} = mempoolJS({ hostname: 'mempool.fractalbitcoin.io' });
const txHex = transactionTx; const txid = await transactions.postTx({txHex}); console.log(txid); return txid
}
const buildTransaction = async () => {
const bip32 = BIP32Factory(ecc); const mnemonic = '助记词' const path = "m/44'/0'/0'/0/0" const seed = bip39.mnemonicToSeedSync(mnemonic); const mainnet = { messagePrefix: '\x18Bitcoin Signed Message:\n', bech32: 'bc', bip32: { public: 0x0488b21e, private: 0x0488ade4, }, pubKeyHash: 0x00, scriptHash: 0x05, wif: 0x80, }; const root = bip32.fromSeed(seed, mainnet); const wif = root.derivePath(path).toWIF(); console.log(wif) const privateKey = new btc.PrivateKey(wif, btc.Networks.mainnet); console.log(privateKey.toString()); const address = privateKey.toAddress(null, btc.Address.PayToTaproot); console.log(address.toString()); const script = new btc.Script(address).toHex() console.log(script); //示例,一定要换成自己的信息 let utxo = await getUtxo(address.toString(), script); let transaction = new btc.Transaction() .from(utxo) .to('目标钱包', 5231157) //转账的目标地址,转账金额 .change(address) //找零地址 .fee(100000000) //交易手续费,单位是聪 .sign(privateKey); // console.log(transaction); const tx = transaction.toString() console.log(tx) return tx
}
const sendTransaction = async () => { const tx = await buildTransaction() const txId = await sendBoardCast(tx) }
sendTransaction()
谢谢,能帮忙看一下我上面的代码有哪里错了吗?我运行发送广播总是400,还有就是satoshis,转账金额,fee 这三个的精度各是多少?
留个邮箱,我联系你
大佬我遇到了相同的助记词与地址不匹配,非路径问题,这是我的邮箱,想向你请教一下,谢谢! 有以下几个问题
大佬我遇到了相同的助记词与地址不匹配,非路径问题,这是我的邮箱,想向你请教一下,谢谢! 有以下几个问题
- 如何获取UTXO
- 资产救援的原理是什么,是把这个因不匹配导致的账号里面所有的资金都取出来吗 fractalbitcoin_jk@icloud.com
转入的那笔tx可以获取utxo,原理就是用它错误的代码把钱转出来,因为只有它的程序才能签名这个地址,你这地址收不了邮件
谢谢老板,我发现mempool的api不能用,我该怎么从rpc去拿这笔tx的utxo呢,我有一个自建的tracker在跑 换成这个邮箱吧 kevincrypto45@outlook.com
大佬我遇到了相同的助记词与地址不匹配,非路径问题,这是我的邮箱,想向你请教一下,谢谢! 有以下几个问题
- 如何获取UTXO
- 资产救援的原理是什么,是把这个因不匹配导致的账号里面所有的资金都取出来吗 fractalbitcoin_jk@icloud.com
转入的那笔tx可以获取utxo,原理就是用它错误的代码把钱转出来,因为只有它的程序才能签名这个地址,你这地址收不了邮件
原因: cli用的这个btc库有bug https://npmjs.com/package/bitcore-lib-inquisition 导致跟其他库生成的地址不一样 救援资产只需要助记词即可!
skewliness11@gmail.com 老哥你的代码有点问题 我跑不起来 联系一下我 谢谢
原因: cli用的这个btc库有bug https://npmjs.com/package/bitcore-lib-inquisition 导致跟其他库生成的地址不一样 救援资产只需要助记词即可!
skewliness11@gmail.com 老哥你的代码有点问题 我跑不起来 联系一下我 谢谢
代码更新了,再试试,不行再回复
原因:cli用的这个btc库有bug https://npmjs.com/package/bitcore-lib-inquisition导致跟其他库生成的地址不一样,救援资产只需要助记词即可!
skewiness11@gmail.com老哥你的代码有点问题我找不到联系一下我谢谢
代码更新了,再尝试,不行再回复
不行,序列化会报错
原因:cli用的这个btc库有bug https://npmjs.com/package/bitcore-lib-inquisition导致跟其他库生成的地址不一样,救援资产只需要助记词即可!
skewiness11@gmail.com老哥你的代码有点问题我找不到联系一下我谢谢
代码更新了,再尝试,不行再回复
不行,序列化会报错
原因:cli用的这个btc库有bug https://npmjs.com/package/bitcore-lib-inquisition导致跟其他库生成的地址不一样,救援资产只需要助记词即可!
skewiness11@gmail.com老哥你的代码有点问题我找不到联系一下我谢谢
代码更新了,再尝试,不行再回复
不行,序列化会报错
skewliness11@gmail.com
原因: cli用的这个btc 库有bug https://npmjs.com/package/bitcore-lib-inquisition 导致跟其他库生成的地址不一样 资产救援只需要助记词即可!