Skip to content

快速开始

本指南将带你从零开始,将 Turing Wallet SDK 集成到你的 DApp 中。

前置条件

  • Node.js 16+ 和包管理器(npm / pnpm / yarn)
  • 一个前端项目(React、Vue、原生 JS 等均可)
  • 你的 DApp 用户需要安装 Turing Wallet 浏览器插件或移动端 App

安装

sh
npm install turing-wallet-provider
sh
pnpm add turing-wallet-provider
sh
yarn add turing-wallet-provider

两种调用方式

SDK 提供两种完全等价的 API 使用方式:

方式一:useTuringWallet() Hook(推荐)

适合 React 和组件化框架,返回一个绑定到当前上下文的钱包实例。

ts
import { useTuringWallet } from "turing-wallet-provider";

const wallet = useTuringWallet();
const addresses = await wallet.connect();

方式二:Turing 全局对象

钱包插件注入页面后即可使用,适用于任何环境。

ts
const addresses = await Turing.connect();

应该使用哪种方式?

两种方式提供完全相同的 API。如果使用 React 等框架,推荐使用 useTuringWallet() 以获得更好的生命周期管理。如果使用原生 JavaScript 或脚本开发,使用 Turing 全局对象即可。

最小 DApp 示例

以下是一个完整的端到端流程 —— 检测钱包 → 连接 → 获取地址 → 发送交易:

ts
import { useTuringWallet } from "turing-wallet-provider";

const wallet = useTuringWallet();

// 1. 连接钱包
const addresses = await wallet.connect();
console.log("已连接:", addresses);
// BVM 账户: { tbcAddress, btcAddress }
// EVM 账户: { ethAddress, bnbAddress }

// 2. 检查连接状态
const connected = await wallet.isConnected();
console.log("是否已连接:", connected);

// 3. 获取钱包信息
const { name, platform, version } = await wallet.getInfo();
console.log(`钱包: ${name} v${version} (${platform})`);

// 4. 获取公钥
const { tbcPubKey } = await wallet.getPubKey();
console.log("公钥:", tbcPubKey);

// 5. 发送 P2PKH 交易
try {
  const { txid, error } = await wallet.sendTransaction([
    {
      flag: "P2PKH",
      address: "收款地址",
      satoshis: 10000,
      broadcastEnabled: true,
    },
  ]);

  if (txid) {
    console.log("交易发送成功!txid:", txid);
  }
  if (error) {
    console.error("交易失败:", error);
  }
} catch (err) {
  console.error("未知错误:", err);
}

// 6. 断开连接
await wallet.disconnect();

支持的链

Turing Wallet 是一个多链钱包。不同的 API 方法对应不同的链:

方法地址字段
TBC (Turing BitChain)sendTransaction, signTransaction, signAssociatedTransaction, sendBatchRequesttbcAddress
BTC (Bitcoin)btc.sendTransaction, btc.signTransaction, btc.sendBatchRequestbtcAddress
Ethereumevm.sendTransactionethAddress
BSCevm.sendTransactionbnbAddress

错误处理

大多数 API 方法在失败时返回 error 字段而非抛出异常。务必检查错误:

ts
const result = await wallet.sendTransaction(params);

if (result.error) {
  // 处理错误 —— 显示给用户、重试等
  console.error("错误:", result.error);
  return;
}

// 成功路径
console.log("txid:", result.txid);

signMessageencryptdecrypt 等方法通过抛出异常报告错误,需要使用 try-catch:

ts
try {
  const { sig } = await wallet.signMessage({
    message: "hello",
    encoding: "utf-8",
  });
} catch (error) {
  console.error("签名失败:", error);
}

离线签名(broadcastEnabled)

许多交易方法支持 broadcastEnabled 参数:

  • true(默认)—— 钱包签名并广播交易,返回 txid
  • false —— 钱包仅签名,返回 txraw(签名后的原始交易 hex),由你自行广播。
ts
// 获取签名后的原始交易,不广播
const { txraw } = await wallet.sendTransaction([
  {
    flag: "P2PKH",
    address: "收款地址",
    satoshis: 10000,
    broadcastEnabled: false,
  },
]);

// 后续通过你自己的节点或 API 广播

下一步

掌握了基础用法后,可以深入探索完整的 API: