关键词:BRC20、Ordinal、PSBT、比特币、bitcoinjs-lib、交易市场、数字资产、去中心化
随着比特币生态的持续扩张,BRC20 与 Ordinal 协议让开发者第一次能够在比特币主链上发行与交易同质化代币与独特数字资产。本文将用通俗的中文,带你一步步完成一个基于 PSBT(Partially Signed Bitcoin Transactions)的去中心化 BRC20 Ordinal 交易市场 后端雏形,核心代码仅需 Node.js 与 bitcoinjs-lib 即可跑通。
一、背景速览:BRC20、Ordinal 与 PSBT
- BRC20 ≈ “比特币链上的 ERC20”。借助 Ordinal 理论,把代币的发行、余额信息写入单个 Satoshi 的元数据。
- Ordinal 让每一枚聪(Satoshi)携带独一无二的数据铭文,成为 NFT、代币或证书。
- PSBT(BIP-174)则把多签、冷热钱包、订单撮合甚至离线签名都标准化,天然适合去中心化交易市场的支付/交割流程。
二、动手前的环境准备
- 安装 Node.js ≥ 18
初始化项目:
mkdir ordinal-marketplace && cd ordinal-marketplace npm init -y npm install bitcoinjs-lib bip32 tiny-secp256k1- 测试网或主网 Electrum / 本地节点 / API 任选其一,用于查询 UTXO、广播最终交易。
- 对 比特币交易结构、UTXO、见证脚本 有基础认识,否则先速览 UTXO 入门 再回来看效果更佳。
三、逐步实战:PSBT 构造、签名、广播
3.1 创建 PSBT 骨架
import * as bitcoin from 'bitcoinjs-lib';
const network = bitcoin.networks.testnet; // 主网改成 bitcoin
const psbt = new bitcoin.Psbt({ network });核心关键词已在第 1 行自然嵌入:bitcoinjs-lib、PSBT。
3.2 填入买方 UTXO(用作购买支付)
psbt.addInput({
hash: buyerUtxo.txid,
index: buyerUtxo.vout,
witnessUtxo: {
value: buyerUtxo.value,
script: buyerScriptPubKey
},
tapInternalKey: Buffer.from(buyerPubkey, 'hex').slice(1, 33)
});3.3 构建两笔输出
- 输出 1:付给卖家的 BTC(支付费用)
- 输出 2:把携带 BRC20 的 1 sat+satoshi 转给买方
psbt.addOutput({ address: 'seller-address', value: 50000 });
psbt.addOutput({ address: 'buyer-address', value: 1 });👉想跑起完整 Demo? 一键获取开源代码仓库并阅读注释
3.4 买卖双方离线签名
- 买方签名:
const buyerKey = bitcoin.ECPair.fromWIF('your-wif');
psbt.signInput(0, buyerKey);
psbt.validateSignaturesOfInput(0);- 卖方将其部分签名的 PSBT 回传后,再拿
psbt.combine()融合到同一份交易中;最后调用extractTransaction()提取十六进制广播即可。
四、从单笔交易到完整交易场所
| 模块 | 功能建议 |
|---|---|
| 1. Token Listing | 卖方上传 Ordinal ID、价格、可选买断/挂单 |
| 2. Escrow 托管 | 使用 2-of-2 多签+时间锁解决信任问题 |
| 3. Order Book | Redis 实时撮合,前端 WebSocket 推送 |
| 4. 用户界面 | Next.js 或 React+Vite,调 Metamask 整合 UniSat |
所有订单逻辑在 后端 跑 PSBT 轮询签名,再把最终交易广播即可,用户无需暴露私钥。
五、FAQ:常见疑问一次说清
Q1:BRC20 能和以太坊 NFT 一样挂图片吗?
答:可以,但图片通常嵌入在 单个 Satoshi 的铭文中,文件体积受区块限制,需控制 < 4MB。
Q2:测试网没有真实 Satoshi,能正常调试 Ordinal 吗?
答:切换到 Signet 或使用 ord wallet --signet,Signet 支持完整铭文链。
Q3:为什么同样的脚本,发主网就失败?
答:主网 dust limit 不同、确认费须严格高于每小时 fee rate。提前用 bitcoin-cli estimateFee 或 API 获取。
Q4:PSBT 是否支持硬件钱包?
答:完全支持,硬件钱包通过标准 “ledger-btc-app” 导出待签名 PSBT; 返回签名后合并即可。
Q5:Ordinal 未来会跟 Taproot 升级冲突吗?
答:不会,Ordinal 本就基于 Taproot 的脚本路径;新版软分叉只会带来更低的手续费和更大的铭文空间。
Q6:如何保证流动性,避免“无人接盘”?
答:在首次部署时提供官方做市 中继撮合+链上流动性挖矿,并对前 30 天成交订单减免链上手续费。
六、结语:成为比特币原生应用先锋
在这段动手之旅中,我们完成了:
- 环境搭建与 bitcoinjs-lib 初始
- 轻量级 PSBT 拼接 + 买卖方双签
- 未来可扩展的 BRC20 Ordinal 交易市场 架构
Ordinal 与 BRC20 正在重塑“比特币只有转账”的刻板印象;从 NFT、游戏资产到票据、债券,只要想象力在线,Bitcoin Layer 1 都能跑。今天的代码片段也许只是 MVP,却可能是下一波 比特币原生 DeFi 浪潮 的起点。祝编码愉快!