快速开始
本指南将带你从零开始,将 Turing Wallet SDK 集成到你的 DApp 中。
前置条件
- Node.js 16+ 和包管理器(npm / pnpm / yarn)
- 一个前端项目(React、Vue、原生 JS 等均可)
- 你的 DApp 用户需要安装 Turing Wallet 浏览器插件或移动端 App
安装
sh
npm install turing-wallet-providersh
pnpm add turing-wallet-providersh
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, sendBatchRequest | tbcAddress |
| BTC (Bitcoin) | btc.sendTransaction, btc.signTransaction, btc.sendBatchRequest | btcAddress |
| Ethereum | evm.sendTransaction | ethAddress |
| BSC | evm.sendTransaction | bnbAddress |
错误处理
大多数 API 方法在失败时返回 error 字段而非抛出异常。务必检查错误:
ts
const result = await wallet.sendTransaction(params);
if (result.error) {
// 处理错误 —— 显示给用户、重试等
console.error("错误:", result.error);
return;
}
// 成功路径
console.log("txid:", result.txid);signMessage、encrypt 和 decrypt 等方法通过抛出异常报告错误,需要使用 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:
- connect — 连接管理
- sendTransaction — TBC 交易(P2PKH、NFT、FT、PoolNFT、稳定币)
- evm.sendTransaction — Ethereum & BSC 交易
- btc.sendTransaction — Bitcoin 交易
- signMessage — 消息签名与验证
- sendBatchRequest — 批量操作