@canton-network/core-splice-provider

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

一个JavaScript Splice Professor API(EIP-1193 兼容).

中文使用文档
文档目录13 节
  1. 安装
  2. 目标
  3. 提供者接口
  4. AbstractProvider
  5. 打字模式
  6. OpenRPC (dApp API) (英语)
  7. OpenAPI( 编辑 API)
  8. 执行情况
  9. 最小自定义提供者
  10. 活动
  11. 错误
  12. 出口
  13. 相关软件包

@ canton-network/ core-splice- professor

共享 提供者 与Canton分类账交谈的抽象内容(JSON Ledger) API)或通过钱包/dApp API.

消费者从不自己调用分类账或特定运输工具。 他们使用一个接口:

import {
    AbstractProvider,
    Provider,
} from '@canton-network/core-splice-provider'

形状如下 EIP-1193 (英语) (单位:千美元)request + 活动) 没有Ethereum方法语义学。 具体API在其他地方有定义——例如: CIP-103 (中文(简体) ) 用于 dApps 的 和Canton JSON Ledger API进行直接访问.

发表于 无 下级 阿帕奇2.0 (英语).

安装

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

目标

  • 一个接口 直接分类账访问和钱包中介访问
  • 迁移不可知性 - HTTP, , (韩语), postMessage, SSE, 进行中, 或者其他任何东西
  • 权威不可知论 ——实施选择如何获得证书
  • 请求+活动 —— 说 request 用于RPC型呼叫; on 编号 : removeListener 编号 : emit 对流
  • 类型方法 - 从方法名称推断出参数和结果
  • 小面积 ——易用其他语言再实施;可单独发布交通专用供应商

这个软件包做什么 没有 定义: LAPI 或 dApp 方法是否存在, 如何认证 工作,或钱包/UI行为。 这些是密码和混凝土供应商的.

flowchart TB
    subgraph consumers [Consumers]
        DappSDK["dApp SDK"]
        WalletSDK["Wallet SDK"]
        Custom["Custom app / tooling"]
    end

    Provider["Provider / AbstractProvider<br/><i>request · on · emit · removeListener</i>"]

    subgraph impls [Implementations]
        LedgerP["LedgerProvider"]
        SyncP["DappSyncProvider"]
        AsyncP["DappAsyncProvider"]
    end

    subgraph transports [Transports]
        HTTP["HTTP"]
        PM["postMessage"]
        SSE["HTTPS + SSE"]
    end

    subgraph backends [Backends]
        LAPI["JSON Ledger API"]
        LocalW["Extension / desktop wallet"]
        RemoteW["Remote wallet gateway"]
    end

    DappSDK --> Provider
    WalletSDK --> Provider
    Custom --> Provider

    Provider --> LedgerP
    Provider --> SyncP
    Provider --> AsyncP

    LedgerP --> HTTP --> LAPI
    SyncP --> PM --> LocalW
    AsyncP --> SSE --> RemoteW

提供者接口

import type { RequestArgs, UnknownRpcTypes } from '@canton-network/core-types'

export type EventListener<T> = (...args: T[]) => void

export interface Provider<T extends UnknownRpcTypes> {
    request<M extends keyof T>(args: RequestArgs<T, M>): Promise<T[M]['result']>

    on<E>(event: string, listener: EventListener<E>): Provider<T>
    emit<E>(event: string, ...args: E[]): boolean
    removeListener<E>(
        event: string,
        listenerToRemove: EventListener<E>
    ): Provider<T>
}

接口不假定支持哪些方法、认证工作如何,或 电话是否通过钱包, 只有输入 request 还有一辆公共汽车.

AbstractProvider

执行事件映射( E)on 编号 : emit 编号 : removeListener叶子 request 抽象 :

export abstract class AbstractProvider<
    T extends UnknownRpcTypes,
> implements Provider<T> {
    abstract request<M extends keyof T>(
        args: RequestArgs<T, M>
    ): Promise<T[M]['result']>

    // on / emit / removeListener provided
}

子类接线 request (HTTP JSON LAPI,窗口) postMessage页:1 (原始内容存档于2013-10-12). SSE等.

打字模式

每一次通话都用方法名键入 M。参数来自 C[M]['params'] 和结果 从 C[M]['result']。帮助者生活在 @canton-network/core-types数字 :

type UnknownRpcTypes = {
    [method: string]: {
        params: unknown
        result: unknown
    }
}

type RequestArgs<
    T extends UnknownRpcTypes,
    M extends keyof T,
> = T[M]['params'] extends never
    ? { method: M }
    : { method: M; params: T[M]['params'] }

斑点通常来自 开放RPC (JSON-RPC风格)或 打开API (编者API). 代码 生成 TypeScript 模式; 提供者将其映射到此模式 params 编号 : result 形状.

OpenRPC (dApp API) (英语)

将每种方法映射到参数和结果. 使用 params: never 当一个方法不需要参数时:

type DappClient = {
    prepareExecute: {
        params: PrepareExecuteParams
        result: PrepareExecuteResult
    }
    status: {
        params: never
        result: StatusResult
    }
}

class DappProvider implements Provider<DappClient> {
    async request<M extends keyof DappClient>(
        args: RequestArgs<DappClient, M>
    ): Promise<DappClient[M]['result']> {
        // dispatch via transport…
    }
}

await provider.request({ method: 'status' })
await provider.request({
    method: 'prepareExecute',
    params: {/* PrepareExecuteParams */},
})

OpenAPI( 编辑 API)

编目访问被曝光为一种RPC式的方法, ledgerApi,其参数编码 HTTP 业务(resource, (中文(简体) ), requestMethod选项 body 编号 : path 编号 : query) (中文(简体) ).

就操作类型的安全而言,每个Ledger API操作都是工会的单独成员. TypeScript 缩小参数和结果 resource + 键 requestMethod 你也可以通过一个 明确的操作类型参数 :

type LedgerClient =
    | {
          ledgerApi: {
              params: {
                  resource: '/v2/parties'
                  requestMethod: 'get'
                  query: { /* … */ }
              }
              result: ListKnownPartiesResponse
          }
      }
    | {
          ledgerApi: {
              params: {
                  resource: '/v2/parties'
                  requestMethod: 'post'
                  body: AllocatePartyRequest
              }
              result: AllocatePartyResponse
          }
      }
    | /* … */

股票 OpenAPI 代码源不会释放出此形状; 专用生成器将生成 使用面向提供者的操作类型 @canton-network/core-provider-ledger。 。 。 .

执行情况

软件包类访问模式典型运输
@canton-network/core-provider-ledgerLedgerProvider直接JSON LAPIHTTP 密码
@canton-network/core-provider-dappDappSyncProviderCIP-103 同步( 扩展/ 桌面)postMessage / 窗口桥
@canton-network/core-provider-dappDappAsyncProviderCIP-103 Async(间接/监护)HTTPS + SSE 组合键

高级SDK(@canton-network/dapp-sdk, (中文(简体) ), @canton-network/wallet-sdk坐在这些上 提供商因此应用代码为本地和远程钱包保留了相同的接口.

最小自定义提供者

import { AbstractProvider } from '@canton-network/core-splice-provider'
import { RequestArgs } from '@canton-network/core-types'

type MyRpc = {
    ping: { params: { message: string }; result: string }
}

class MyProvider extends AbstractProvider<MyRpc> {
    async request<M extends keyof MyRpc>(
        args: RequestArgs<MyRpc, M>
    ): Promise<MyRpc[M]['result']> {
        if (args.method === 'ping') {
            return `pong:${args.params.message}` as MyRpc[M]['result']
        }
        throw new Error('Unsupported method')
    }
}

const provider = new MyProvider()
provider.on('ready', () => console.log('ready'))
await provider.request({ method: 'ping', params: { message: 'hi' } })

活动

AbstractProvider 维护内在的收听器地图 :

  • on(event, listener) 登记
  • removeListener(event, listener) - 未登记
  • emit(event, …args) ——通知;返回 false 如果没人听

事件名称和有效载荷来自混凝土API(例如CIP-103) statusChanged, (中文(简体) ), accountsChanged, (中文(简体) ), txChanged,加仅使用自动同步 connected 财务报告和审定财务报表 messageSignature) (中文(简体) ). 这个 软件包只提供订阅机.

错误

执行应披露一致的错误形状(代码+消息),无论 / JSON-RPC故障。 (单位:千美元) 供应商通常遵循EIP-1193 / EIP-1474式代码;见 dApp SDK 错误引用。 。 。 .

出口

导出说明
Provider<T>类型提供者接口
AbstractProvider<T>有活动的基础类; 执行 request
EventListener<T>收听器召回类型

RPC 地图助手(UnknownRpcTypes, (中文(简体) ), RequestArgs)为 @canton-network/core-types。 。 。 .

软件包作用
@canton-network/core-types共享 RPC 输入助手
@canton-network/core-provider-ledger直接分类账提供者
@canton-network/core-provider-dapp同步 / Async dApp 提供者
@canton-network/core-rpc-transportRPC客户使用的运输工具
@canton-network/dapp-sdk高级 dApp SDK
@canton-network/wallet-sdk钱包 SDK

版本与发布记录

@canton-network/core-splice-provider 共发布 78 个版本,首次发布于 2025/08/29;过去 12 个月发布了 64 个版本。

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

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

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

一个JavaScript Splice Professor API(EIP-1193 兼容).

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

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

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

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

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

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

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

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

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

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

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

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