dApp SDK (英语)
@canton-network/dapp-sdk - 用于在平台上建立分散化应用程序的SDK类型 广州网。将用户连接到Canton钱包,管理账户,签名消息,以及执行交易——所有交易都通过一个供应商中立的接口,由 CIP-0103 (中文(简体) )。 。 。 .
[注] 每一份释放的移徙指南都公布于 讨论情况。 。 。 .
特征
- 钱包发现 远程网关,EIP-6963型
canton:announceProvider事件和可插接的适配器 - 钱包拾取器 UI – 内置,框架不可知的网络组件,允许用户选择钱包,输入自定义网关 URL,并管理最近使用的连接
- 钱包连接 ——连接,断开,并监视连接状态
- 账户管理 ——清单账户并应对账户变动
- 交易执行 - 要求Daml交易的用户批准和签名
- 编目 API 访问 - 代理认证向Canton JSON Ledger API提出的请求
- 实时活动 订阅状态变化、账户变化和交易生命周期事件
- 多种运输 用于远程钱包网关的HTTP/SSE,
postMessage浏览器扩展钱包 - 提供者接口 - EIP-1193型CIP-103供应商通过
getConnectedProvider()之后connect()
安装
npm install @canton-network/dapp-sdk
pnpm add @canton-network/dapp-sdk
快速启动
最快的前进方式是通过模块级便利API. 它管理着一个单子 DappClient 在幕后,打开取钱包器,为您处理适配器注册.
import * as sdk from '@canton-network/dapp-sdk'
// Opens the wallet picker and connects to the selected wallet
const result = await sdk.connect()
console.log(result.isConnected)
// List the user's accounts (parties)
const accounts = await sdk.listAccounts()
// Execute a transaction
await sdk.prepareExecute({
commands: [
{
CreateCommand: {
templateId: '#MyApp:MyModule:MyTemplate',
createArguments: { owner: accounts[0].partyId },
},
},
],
})
// Listen for real-time updates
sdk.onTxChanged((tx) => {
console.log('Transaction update:', tx)
})
// Disconnect when done
await sdk.disconnect()
建筑
SDK是围绕三层构建的:
┌──────────────────────────────────────────────┐
│ DappClient │
│ Thin wrapper: typed RPC helpers, events, │
│ session persist │
├──────────────────────────────────────────────┤
│ DiscoveryClient │
│ Adapter registry, session restore, │
│ wallet picker integration │
├──────────────────────────────────────────────┤
│ ProviderAdapter implementations │
│ ExtensionAdapter (announce protocol) │
│ (browser / postMessage) │
│ RemoteAdapter (HTTP/SSE gateway) │
└──────────────────────────────────────────────┘
钱包提供者
钱包和扩展作者:参见 钱包提供者(发现) 在dApp 大楼的文档中,说明如何在拾取器中出现(RemoteAdapter, (中文(简体) ), canton:announceProvider,以及 additionalAdapters) (中文(简体) ).
使用量
选项A:模块级API(推荐给大多数应用程序)
导入 SDK 作为命名空间 。 这个 connect() 函数打开内置的钱包拾取器、登记可用的适配器并返回 a ConnectResult。 。 。 .
import * as sdk from '@canton-network/dapp-sdk'
import { RemoteAdapter } from '@canton-network/dapp-sdk'
await sdk.connect()
const status = await sdk.status()
您可以在连接时间提供额外的适配器 :
await sdk.connect({
additionalAdapters: [
new RemoteAdapter({
name: 'My Gateway',
rpcUrl: 'https://gateway.example.com/api/json-rpc',
}),
],
})
备选案文B:与发现对象的匹配
要对适配器注册和连接流程进行更多的控制,请使用 DiscoveryClient 直接传递给生成的提供者 DappClient。 。 。 .
import {
DappClient,
DiscoveryClient,
RemoteAdapter,
} from '@canton-network/dapp-sdk'
const discovery = await DiscoveryClient.create({
adapters: [
new RemoteAdapter({
name: 'Splice Wallet Gateway',
rpcUrl: 'https://gateway.example.com/api/json-rpc',
}),
],
})
await discovery.connect() // opens the picker if configured
const session = discovery.getActiveSession()!
const client = new DappClient(session.provider, {
providerType: session.adapter.type,
})
const status = await client.status()
备选案文C:与供应商直接兼容
如果你已经有一个 Provider<DappRpcTypes> (例如从自己的适配器),你可以完全跳过发现.
import { DappClient, RemoteAdapter } from '@canton-network/dapp-sdk'
const provider = new RemoteAdapter({
name: 'Splice Wallet Gateway',
rpcUrl: 'https://gateway.example.com/api/json-rpc',
}).provider()
const client = new DappClient(provider)
const result = await client.connect()
API 参考
达标
| 方法 | 回返 | 说明 |
|---|---|---|
connect() | ConnectResult | 通过提供者启动连接 |
disconnect() | void | 断开连接并清除本地状态 |
status() | StatusEvent | 当前连接状态 |
listAccounts() | ListAccountsResult | 列出用户账户( 当事方) |
prepareExecute(params) | null | 提交交易供签署 |
prepareExecuteAndWait(params) | PrepareExecuteAndWaitResult | 提交并等待完成 |
ledgerApi(params) | LedgerApiResult | 代理编辑器 API 请求 |
open() | void | 打开钱包 UI |
getProvider() | Provider | 访问基本提供者 |
onStatusChanged(listener) | void | 订阅状态更改 |
onAccountsChanged(listener) | void | 订阅到账户更改 |
onTxChanged(listener) | void | 订阅交易更改 |
Dapplient 选项
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
providerType | ProviderType | 'remote' | 感染 open() 路线('browser' 使用后Message, 其他人使用弹出) |
发现对象
| 方法 | 说明 |
|---|---|
create(config) | 创建初始化客户端并尝试恢复会话 |
registerAdapter(adapter) | 添加一个 ProviderAdapter 运行时间 |
listAdapters() | 列出已注册适配器 |
connect(providerId?) | 连接到特定的适配器或打开取取器 |
disconnect() | 断开活动会话 |
getActiveSession() | 获取当前 ActiveSession 或者说 null |
on(event, handler) | 听着 discovery:connected, (中文(简体) ), discovery:disconnected, (中文(简体) ), discovery:error |
removeListener(event, handler) | 删除事件倾听器 |
内建适应器
| 适配器 | 提供者类型 | 运输 | 说明 |
|---|---|---|---|
ExtensionAdapter | 'browser' | postMessage | 浏览器扩展通过 canton:announceProvider (单位:千美元)钱包提供者指南) (中文(简体) ). |
RemoteAdapter | 'remote' | HTTP/SSE 软件 | CIP-103 钱包 网络上的网关. |
文档
完整的文档,包括详细的使用指南,API参考,以及钱包网关的配置: