@canton-network/core-provider-dapp

中文文档
1.17.0发布于 2026/11/06Apache-2.0TypeScriptESM + CJS近 30 天下载 33.7万

CIP-0103 provider for web dApps, covering both Sync and Async APIs.

原始使用文档
文档目录10 节
  1. Install
  2. Providers
  3. Sync vs Async
  4. Usage
  5. DappSyncProvider
  6. DappAsyncProvider
  7. Events
  8. window.canton
  9. Related
  10. Specs

@canton-network/core-provider-dapp

CIP-103 Provider implementations for Canton dApps. Extends @canton-network/core-splice-provider with wallet-mediated access to the dApp API (and proxied ledger calls).

Most applications should use @canton-network/dapp-sdk, which picks and wraps these providers. Use this package directly when building lower-level integrations or custom discovery / transport wiring.

Published on npm under Apache-2.0.

Install

npm install @canton-network/core-provider-dapp

Providers

ClassAPITypical walletTransport
DappSyncProviderCIP-103 SyncBrowser extension / desktoppostMessage (WindowTransport)
DappAsyncProviderCIP-103 AsyncRemote / custody gatewayHTTPS RPC + SSE
flowchart LR
    dApp["dApp / dApp SDK"] --> Sync["DappSyncProvider"]
    dApp --> Async["DappAsyncProvider"]
    Sync -->|"postMessage"| Ext["Extension / desktop wallet"]
    Async -->|"HTTPS + SSE"| Gw["Remote wallet gateway"]
    Ext --> LAPI["JSON Ledger API"]
    Gw --> LAPI

Both implement the same Provider surface (request, on, emit, removeListener). Method and event types come from the generated OpenRPC clients (@canton-network/core-wallet-dapp-rpc-client and @canton-network/core-wallet-dapp-remote-rpc-client).

Sync vs Async

Sync — user interaction is in-process (popup / extension). Methods return results directly.

Async — user interaction cannot block. Methods that need approval return a userUrl (or similar) for the user to complete the action; the outcome arrives later as an event (for example connected, txChanged, messageSignature).

SyncAsync
ConnectReturns session when readyMay return userUrl; connected after login
prepareExecuteCompletes in the requestReturns userUrl; progress via txChanged
signMessageReturns signaturePending / signed / failed via messageSignature
EventsWallet notifications on the window transportShared SSE stream from the gateway

Usage

DappSyncProvider

Defaults to a WindowTransport bound to window. Pass a custom RpcTransport when testing or bridging a non-browser host.

import { DappSyncProvider } from '@canton-network/core-provider-dapp'

const provider = new DappSyncProvider()

provider.on('statusChanged', (status) => {
    console.log('connected:', status.connection.isConnected)
})

const { isConnected } = await provider.request({ method: 'isConnected' })
if (!isConnected) {
    await provider.request({ method: 'connect' })
}

const accounts = await provider.request({ method: 'listAccounts' })

DappAsyncProvider

Point at the remote gateway base URL. An optional session token opens the SSE event stream immediately; after IDP auth in a popup, the provider updates the token and reconnects SSE.

import { DappAsyncProvider } from '@canton-network/core-provider-dapp'

const provider = new DappAsyncProvider('https://wallet-gateway.example.com')

provider.on('connected', (status) => {
    console.log('session ready', status)
})

provider.on('txChanged', (tx) => {
    if (tx.status === 'executed') console.log(tx.payload.updateId)
})

const connect = await provider.request({ method: 'connect' })
// If not already authenticated, open connect.userUrl for the user to log in.

Events

Subscribe with provider.on / provider.removeListener. Payloads follow CIP-103 / the OpenRPC event schemas.

EventSyncAsyncWhen
statusChangedyesyesConnection / session changes
accountsChangedyesyesParties added/removed or primary changes
txChangedyesyesprepareExecute lifecycle
connected—yesLogin completed after async connect
messageSignature—yesAsync signMessage lifecycle

DappSyncProvider bridges wallet-pushed notifications from WindowTransport into the provider listener map. DappAsyncProvider multiplexes a shared EventSource across instances for the same gateway URL + token.

window.canton

This package augments Window with an optional injected provider:

window.canton?: Provider<DappLedgerRpc>

DappLedgerRpc is the Sync dApp RPC map combined with Ledger ledgerApi operation types, matching a full browser wallet injection that can both speak CIP-103 and proxy ledger calls.

PackageRole
@canton-network/core-splice-providerProvider interface and AbstractProvider
@canton-network/core-provider-ledgerDirect JSON LAPI provider (no wallet)
@canton-network/core-rpc-transportWindowTransport, HttpTransport, …
@canton-network/dapp-sdkHigh-level SDK on top of these providers

Specs

版本与发布记录

@canton-network/core-provider-dapp 共发布 42 个版本,首次发布于 2026/03/02;过去 12 个月发布了 42 个版本。

版本发布日期距今
1.17.0latest2026/11/063 天前
1.16.02026/10/2910 天前
1.12.2-backport.3bugfix2026/10/2613 天前
1.15.02026/10/2317 天前
1.14.02026/10/1227 天前
1.12.2-backport.12026/10/031 个月前

关于 @canton-network/core-provider-dapp 的常见问题

@canton-network/core-provider-dapp 是什么?

CIP-0103 provider for web dApps, covering both Sync and Async APIs.

如何安装 @canton-network/core-provider-dapp?

在项目目录运行 npm install @canton-network/core-provider-dapp,或使用 pnpm add / yarn add / bun add。

@canton-network/core-provider-dapp 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@canton-network/core-provider-dapp 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@canton-network/core-provider-dapp 可以商用吗?

@canton-network/core-provider-dapp 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@canton-network/core-provider-dapp 的下载量有多少?

根据 npm 官方下载统计,@canton-network/core-provider-dapp 在 2026/10/09 – 2026/11/07 这 30 天内被下载 337,464 次,日均约 11,249 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@canton-network/core-provider-dapp 还在维护吗?

最新版本 1.17.0 发布于 2026/11/06(3 天前);至今共发布 42 个版本,其中过去 12 个月发布了 42 个;首次发布于 2026/03/02。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。