Signet Provider API 全指南:无需代码经验也能让 DApp 调用比特币测试链

·

想让你的去中心化应用在比特币 Signet 测试网上丝滑运行?这篇 2025 最新升级版的 Signet Provider API 教程一次性讲透「连接钱包、签名消息、批量签名 PSBT」全流程,专为中文开发者和产品经理量身打造。

Signet Provider API 到底能做什么?

Signet Provider API(业内昵称 Injection API)是一套由扩展钱包注入到网页里的 JavaScript 接口。借助它,前端 DApp 能够:

一句话总结:Signet Provider 就是能让网页里跑原生比特币 Signet 交易的「万能胶水」。
⚠️ 当前功能需要钱包扩展 ≥ 2.82.32 版本,旧客户端会直接返回 undefined


第一条调用:connect() 打通钱包

核心关键词:connect连接钱包Signet

await okxwallet.bitcoinSignet.connect()

参数与返回值

名称类型说明
无需任何参数
addressstring返回用户当前选中的 Signet 地址
publicKeystring32 字节压缩公钥

实战场景

很多新手把 connect() 误以为需要传参,结果在控制台打出 undefined。实际上,只需一句 await,页面就能自动唤起钱包授权弹窗。
安全提醒: 授权信息只在当前标签页会话有效,刷新页面即失效。


房屋地基:签名消息 signMessage()

核心关键词:signMessage签名消息ECDSABIP-322

await okxwallet.bitcoinSignet.signMessage('登录验证码123', 'ecdsa')
await okxwallet.bitcoinSignet.signMessage('登录验证码123', 'bip322-simple')

两种类型 哈希算法与编码格式不同,别在库里混用。若第一次开发拿不准,用默认的 ecdsa 即可。


集中行动:单 PSBT 与批 PSBT 签名技巧

signPsbt() — 单交易精修模式

核心关键词:PSBT签名 TaprootsighashTypes

const signed = await okxwallet.bitcoinSignet.signPsbt(psbtHex, {
  autoFinalized: false,
  toSignInputs: [
    { index: 0, address: 'tb1p...' },
    { index: 1, publicKey: userPubKeyBuffer }
  ],
  sighashTypes: [1, 3],
  disableTweakSigner: false
})

零弯头 FAQ

signPsbts() — 多交易流水线

const signedArray = await okxwallet.bitcoinSignet.signPsbts([psbt1, psbt2], [
  {
    toSignInputs: [
      { index: 0, address: 'tb1p...' }
    ]
  },
  {
    toSignInputs: [
      { index: 0, address: 'tb1q...' },
      { index: 2, publicKey: userPubKeyBuffer }
    ]
  }
])

批量签名把 signPsbt() 拆成数组输入,提高一次性 UTXO 清算效率,常被空投脚本和 NFT 铸造工厂用于节省用户点击次数。


快速调试:3 个必踩坑

  1. CORS 警告
    只在本地启动一个 http-server 可能报错。请务必使用 HTTPSlocalhost 证书。
  2. 扩展识别失败
    windows 对象没有 okxwallet?可能是用户禁用了内容脚本或使用了夜间版 Canary,引导用户重启浏览器即可。
  3. PSBT 格式错误
    十六进制字符串需忽略空格,且务必大写 0x 前缀会被钱包自动去除,别再手滑加回。

高频 FAQ 速查

Q1:Signet 主网或 Testnet 能否复用同一套 API?
A:不能。Signet 专属命名空间为 bitcoinSignet,用错会直接 undefined

Q2:如何让网页识别不出来 Signet,自动降级?
A:在 try/catch 里检测 okxwallet.bitcoinSignet;没有时提示“当前网络不支持”。

Q3:签名完成后怎样广播交易?
A:Provider API 只负责签名,广播仍需自建节点 或第三方 API。👉 点击这里查看无需搭建节点就能一键广播的极简方案。

Q4:能否一次性请求不同地址签名?
A:可以。只需在 toSignInputs 指定不同 address/publicKey,钱包会逐一匹配并生成签名。

Q5:Taproot 与 P2WPKH 的 PSBT 参数有什么不同?
A:Taproot 多了 disableTweakSigner 选项;P2WPKH 无需添加 publicKey,但两者都支持 sighashTypes

Q6:移动端是否支持?
A:目前仅桌面浏览器扩展。移动端计划 2025 Q3 开放内测,敬请期待。


进阶实战:构建一个「零后端」NFT 铸造页

场景设定:用户前端上传图片 → 生成元数据 → 拼成 PSBT → 用户点击铸造。

代码片段:

// 1. 拿地址
const { address, publicKey } = await okxwallet.bitcoinSignet.connect()

// 2. 获取最新 UTXO(示例使用 fetch)
const utxo = await fetch(`/api/utxo/${address}`).then(r => r.json())

// 3. 组装 PSBT
const psbt = buildNftPsbt(address, publicKey, utxo)

// 4. 签名
const signedHex = await okxwallet.bitcoinSignet.signPsbt(psbt)

// 5. 前端广播
await fetch('https://blockstream.info/signet/api/tx', {
  method: 'POST',
  body: signedHex
})

在线源码已在 README 开源,复制即可跑通。👉 直达开源仓库——无需任何后端即可秒发 NFT。


结语与下一步

读到这里,你已经掌握了从连接 Signet 钱包到批量签名 PSBT 的全部核心 API。下一步建议:

  1. 立即本地试跑一次 signPsbt(),观察返回的十六进制字符串格式。
  2. connect() 封装到单页面组件里,优雅地处理“未安装扩展”场景。
  3. 写下固化日志 console.log('Signet 地址:', address),方便 QA 快速定位。

Signet Provider API 的中文开发者社区正在极速扩张,任何疑问欢迎在官方论坛提问,或者用本文示例直接撸一个 Demo 打怪升级。祝编码愉快,链上见!