用途:把外部钱包(签名器)接入 IC dapp,让用户在钱包内批准操作,应用不持有私钥。@icp-sdk/signer 是依赖方客户端,应用为依赖方、钱包为签名器,双方按 ICRC 签名器标准通过传输层交换 JSON-RPC 2.0 消息。示例使用 OISY,但非 OISY 专属;换其他 Web 签名器通常只需改传输 URL。
主要能力:ICRC-25 能力发现与权限生命周期(getSupportedStandards、requestPermissions、getPermissions);ICRC-27 获取用户账户(getAccounts);ICRC-29 弹窗 postMessage 传输;ICRC-49 执行 canister 调用(SignerAgent 或 callCanister);ICRC-94 浏览器扩展发现;ICRC-167 顶层重定向传输(signer 6 新增 UrlTransport)。每次写入都是用户单独批准的动作,适合转账、授权、铸造等低频高价值操作,不适合频繁或不可见操作。
使用方式:安装 npm i '@icp-sdk/signer@^6' '@icp-sdk/core@^6',调用 ICP/ICRC 账本时加 @icp-sdk/canisters@^4。传输 URL 须为安全上下文(HTTPS、localhost 或 127.0.0.1)。按场景选传输:PostMessageTransport(Web 钱包默认)、UrlTransport(移动端或弹窗被拦截)、BrowserExtensionTransport(扩展钱包,用 discover 发现)。用 SignerAgent 接入账本客户端或 actor,读操作走普通 HttpAgent(默认匿名、无提示),写操作走 SignerAgent。重定向传输需每次加载按相同顺序发相同请求,非确定值用 memoize()。连接不跨页面刷新,应持久化账户、用匿名 agent 渲染只读状态、首次写入时惰性重建。autoCloseTransportChannel 默认 true,多步流程需关闭。错误处理区分 SignerError 代码(3001 用户取消、3000 权限拒绝等)。
限制:不适用于会话式登录(应使用 internet-identity 技能)、Internet Identity 登录、让代理或 CLI 以用户身份操作(agent-web-identity 技能);实现钱包本身不在范围内。资料未提供收费、价格与平台信息。