如何在React JS中实现BRC-20代币跨钱包转账?
BRC-20铭文转账第二步(发送铭文)代码实现方案
核心逻辑
铭文转账第二步的本质是构建包含目标铭文UTXO的比特币交易,核心要求是铭文绑定的UTXO必须完整转出到接收方地址(不能拆分,否则铭文会丢失),同时处理手续费与找零逻辑。
核心代码实现(基于Unisat Wallet SDK和bitcoinjs-lib)
以下是简化可复用的代码片段,适配你提到的工具库:
const { bitcoinjs, Psbt } = require('bitcoinjs-lib'); const { getInscriptionUTXO } = require('@unisat/wallet-sdk'); // 1. 获取目标铭文对应的UTXO // 替换为你的钱包地址、目标铭文ID const inscriptionUTXO = await getInscriptionUTXO('你的钱包地址', '目标铭文ID'); // 2. 初始化PSBT(部分签名比特币交易) // 测试网请替换为bitcoinjs.networks.testnet const psbt = new Psbt({ network: bitcoinjs.networks.bitcoin }); // 添加铭文UTXO作为交易输入 psbt.addInput({ hash: inscriptionUTXO.txid, index: inscriptionUTXO.vout, witnessUtxo: { script: Buffer.from(inscriptionUTXO.scriptPubKey, 'hex'), value: inscriptionUTXO.value } }); // 添加铭文输出:必须完整转出铭文UTXO金额,不能拆分 psbt.addOutput({ address: '接收方地址', value: inscriptionUTXO.value }); // 处理手续费与找零:若铭文UTXO不足以支付手续费,需添加额外非铭文UTXO // 示例:添加额外UTXO并计算找零 const extraUTXO = { /* 你的非铭文UTXO数据:txid、vout、scriptPubKey、value */ }; const fee = 1200; // 自定义手续费,建议参考当前网络费率 const changeValue = extraUTXO.value - fee; psbt.addInput({ hash: extraUTXO.txid, index: extraUTXO.vout, witnessUtxo: { script: Buffer.from(extraUTXO.scriptPubKey, 'hex'), value: extraUTXO.value } }); psbt.addOutput({ address: '你的钱包地址', value: changeValue }); // 3. 使用私钥签名交易 // 替换为你的WIF格式私钥 const keyPair = bitcoinjs.ECPair.fromWIF('你的私钥WIF', bitcoinjs.networks.bitcoin); psbt.signInput(0, keyPair); psbt.signInput(1, keyPair); // 若添加了额外UTXO,需对应签名 // 4. 完成交易并广播 psbt.finalizeAllInputs(); const txHex = psbt.extractTransaction().toHex(); // 广播交易(通过Unisat API) const broadcastRes = await fetch('https://api.unisat.io/v1/indexer/tx/broadcast', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ rawtx: txHex }) }); const result = await broadcastRes.json(); console.log('交易广播结果:', result);
关键注意事项
- 铭文UTXO必须完整转出:铭文与UTXO绑定,拆分UTXO会导致铭文永久丢失,因此输出金额必须严格等于铭文UTXO的金额。
- 手续费覆盖:如果铭文UTXO的金额不足以支付手续费,必须添加额外的非铭文UTXO作为输入,不能从铭文UTXO中扣除手续费。
- 网络适配:注意区分比特币主网与测试网,代码中的
network参数需对应调整。 - 签名权限:确保你持有铭文UTXO对应的私钥,否则无法完成交易签名。
参考资源(中文翻译)
- bitcoinjs-lib:比特币JS开发工具库,用于构建、解析、签名比特币交易
- Unisat Wallet SDK 发送铭文模块:Unisat官方钱包SDK中处理铭文转账的核心实现代码
- BRC-20实验文档:BRC-20铭文体系的实验性技术指南
- Unisat开发者服务:创建BRC-20转账的官方API文档
内容的提问来源于stack exchange,提问作者sachin singh jagawat
相关产品推荐
相关产品推荐

