@carbonx3/cx3-iife

中文文档
0.2.9发布于 2026/11/01UNLICENSEDCommonJS零依赖近 30 天下载 1721

CarbonX3绿色链的官方浏览器脚本(window.cx3): CX3 钱包连接和签名(浏览器扩展名,或电话应用由 QR 编码),通过您自己的同源代理读取

中文使用文档
文档目录15 节
  1. 特征
  2. 安装
  3. 从 CDN (推荐)
  4. 自办
  5. 带着捆绑机
  6. 所需资源
  7. 快开始
  8. 您的代理( 申请资格 )
  9. API 密码
  10. 发送
  11. 电话钱包( QR 代码)
  12. 私人纪念品
  13. 错误
  14. 文档
  15. 许可证

@ carbox3/cx3- ife (中文(简体) )

npm version jsDelivr

官方浏览器脚本( O)CX3 IIFE 数据用于 碳X3 绿色链。 。 。 .

一个 <script> 文件添加 window.cx3 (别名) window.CX3)到网页。 该页面连接了访客的 CX3 钱包(浏览器扩展名,或用QR代码的手机应用),拥有钱包标志并发送交易,并通过您自己的服务器上的一个小代理读取链条数据. 没有建设步骤和依赖性.

网络状态 : CarbonX3绿色链目前作为一个开发网络(devnet)运行. Devnet CX3,令牌和合约是没有货币价值的测试数据,在devnet被重置后可能会被清除.

对于Node.js服务器则使用SDK: @carbonx3/cx3.js。 。 。 .

特征

  • 钱包连接和签名 通过 CX3Wallet 扩展:私人密钥从未到达页面.
  • 电话钱包通过 QR 代码数字 : cx3.connectPhone() 显示一个 QR 代码; 访客用 CX3 钱包应用程序扫描并批准 。 从那时起,每封寄件都得到批准,并在电话上签名,钥匙从不离开. 包含一个内置对话框,或者用 cx3.qrSvg()。 。 。 .
  • 通过您的同源代理读取:余额,符号目录,转账,钱包的符号和活性,CarbonFi池,ABI和WIT.
  • 合同助手数字 : cx3.contract(address).balanceOf(owner), (中文(简体) ), .transfer(to, amount), (中文(简体) ), .call(...), (中文(简体) ), .send(...)。 。 。 .
  • 私人纪念品: 发件人和收件人在钱包请求批准前接受检查.
  • 交易跟踪数字 : tx.wait() 民意调查直到交易得到确认或永远失败. 一个待发(从块排出或从块中掉出)的发件被跟踪到最后,因此页面从不要求第二次签名.
  • 钱包活动数字 : cx3.on("accountsChanged", fn) 当用户删除钱包中的您网站时, 告诉页面, 因此它会再次显示“ 连接钱包 ” , 而无需重新加载 .
  • 浏览器中没有证书数字 : setRpc 滴数 Authorization 财务报告和审定财务报表 X-Api-Key 信头且没有登录选项 .

安装

每个版本都有自己的固定地址. 装入您页面测试的确切版本 :

<script src="https://cdn.jsdelivr.net/npm/@carbonx3/[email protected]/min/cx3-0.2.9.min.js"
        integrity="sha384-erEAYMO5XonBabdhCYNtLWkrGwnht9Me0rKYwq0GlF31pNaOabEzWp645FAkQHtE"
        crossorigin="anonymous"></script>

这个 integrity 值使浏览器拒绝文件,如果一个字节不同。 相同文件在 unpkg 上 : https://unpkg.com/@carbonx3/[email protected]/min/cx3-0.2.9.min.js。 。 。 .

自办

下载 cx3-0.2.9.min.js,放在页面旁边并装入:

<script src="cx3-0.2.9.min.js"></script>

带着捆绑机

npm install @carbonx3/cx3-iife
import "@carbonx3/cx3-iife"; // sets window.cx3

文件是纯浏览器脚本:它指定 window.cx3 并且不出口任何东西.

所需资源

  • 现代浏览器( A)fetch, (中文(简体) ), Promise) (中文(简体) ).
  • CX3 钱包 0.1.74 或以后用于连接、签署和 accountsChanged。扩展在开发期间连接到每个https网站和您自己的机器;用户批准每个网站一次,每次发送或签名再次询问。 Iframes 没有钱包(cx3.wait() 决定 false) (中文(简体) ).
  • CX3 钱包应用程序 (Android) 0.2.91 或以后的电话钱包(connectPhone) (中文(简体) ).
  • 开发者符号 (您的申请是OAuth2的证明,由您的代理持有). 虽然它有效,但每个钱包都可以连接到您的页面; 由 : setRpc 钱包询问 GET <proxy>/api/v1/whoami?address=… 当您源代码连接时,一个缺失、无效或被撤销的令牌会停止连接.
  • 更多信息:您服务器上持有您申请证书的同源代理(见下文).

快开始

<button type="button" id="connect">Connect wallet</button>
<p id="address"></p>

<script src="https://cdn.jsdelivr.net/npm/@carbonx3/[email protected]/min/cx3-0.2.9.min.js"
        integrity="sha384-erEAYMO5XonBabdhCYNtLWkrGwnht9Me0rKYwq0GlF31pNaOabEzWp645FAkQHtE"
        crossorigin="anonymous"></script>
<script>
  const cx3 = window.cx3;
  cx3.setRpc(location.origin + "/my-dapp", { apiPrefix: "/api/v1" }); // your proxy

  document.getElementById("connect").onclick = async () => {
    if (!(await cx3.wait(2500))) {
      document.getElementById("address").textContent = "CX3Wallet not found";
      return;
    }
    const me = await cx3.connect();
    document.getElementById("address").textContent = me;

    const balance = await cx3.getBalance(me);
    const page = await cx3.listContracts({ limit: 50 });
    console.log(balance, page.contracts);
  };

  // The user removed this site in CX3Wallet (Settings → Connected Sites → Remove)
  cx3.on("accountsChanged", (accounts) => {
    if (accounts.length === 0) document.getElementById("address").textContent = "";
  });
</script>

您的代理( 申请资格 )

一页从不持有证书。 在 CX3WebUI 设置 API 应用程序 并保留客户端身份和客户端在您的服务器上的秘密。 代理交易他们到 POST https://cx3api.carbonx3.com/oauth/token (单位:千美元)grant_type=client_credentials) 对于一个一小时的访问符,缓存它,并用 Authorization: Bearer <token>。页面既不看到秘密,也不看到标志.

代理回复在 apiPrefix (默认) /api/v1)并仅转发您页面使用的路径 :

window.cx3 调用代理路径网关路径
getBalanceGET getBalanceAndNonce?address=GET /wallet/getBalanceAndNonce?address=
listContractsGET contracts?limit=&offset=GET /contracts/list
listTransfersGET contracts/{address}/transfersGET /contracts/:address/transfers
getAbi • 妇女 getContractInfoGET contracts/{address}/abi • 妇女 GET contract/{address}GET /contracts/:address/abi • 妇女 GET /contracts/:address
call, (中文(简体) ), balanceOfPOST contract/callPOST /contracts/:address/call
bindApiKeyGET whoami?address=GET /wallet/api-key/bind?address=
waitForTransaction • 妇女 getStatusGET tx/{hash}/status • 妇女 GET getLastBlockGET /tx/:hash/status • 妇女 GET /getLastBlock
getWitGET contracts/{address}/witGET /dapp/v1/contracts/:address/wit
getTokens • 妇女 getActivityGET accounts/{address}/tokens • 妇女 /activityGET /dapp/v1/accounts/:address/tokens • 妇女 /activity
getDexPairs • 妇女 getLpBalanceGET dex/pairs • 妇女 dex/pairs/{id}/lp/{address}GET /dapp/v1/dex/pairs • 妇女 /dex/pairs/:id/lp/:address
connectPhonePOST link/pair • 妇女 GET link/pair/{32 hex} • 妇女 POST link/pair/{32 hex}/bindPOST /wallet-link/pair • 妇女 GET /wallet-link/pair/:id • 妇女 POST /wallet-link/pair/:id/bind
restorePhone, (中文(简体) ), disconnect (电话)GET link • 妇女 DELETE linkGET /wallet-link/link • 妇女 DELETE /wallet-link/link
与电话一起发送POST link/sign • 妇女 GET link/sign/{24 hex} • 妇女 DELETE link/sign/{24 hex}POST /wallet-link/link/sign • 妇女 GET 编号 : DELETE /wallet-link/link/sign/:id
一份合同 发送电话签署POST contract-send/{address}POST /dapp/v1/contracts/:address/send

网关的合同发送 最多25秒 的块,和脚本给予 contract-send 35秒(其他呼叫12秒),所以给路径一个超过25秒的代理超时,并传递网关状态代码和JSON机身不变(202,409,503和504携带) requestId, (中文(简体) ), txHash 财务报告和审定财务报表 hint) (中文(简体) ). 两种地位路线(/tx/:hash/status, (中文(简体) ), /dapp/v1/tx/:hash/status)回答一个丢弃的发送为 pending 与 dropped 财务报告和审定财务报表 finalAfter。 。 。 .

用扩展写字从不通过代理:钱包符号并发送. 通过电话,应用标志和中继带去请求(见下文). 一个完整的 PHP 代理示例在 CX3 IIFE 指南。 。 。 .

API 密码

window.cx3它会做什么
VERSION剧本版本,例如:. "0.2.9"
setRpc(url, { apiPrefix }) 编号 : getRpc()设置/ 读取您的代理服务器的基址
wait(maxMs)等待 CX3Wallet 准备好( 默认 2500 ms); 解析 true 编号 : false
isAvailable() 编号 : wallet()钱包在那里 / 注射 window.carbonx3
connect() 编号 : accounts() 编号 : disconnect()连接扩展名( 集) cx3.address),列表账户,删除会话(有电话:结束链接)
connectPhone({ onQr, signal, texts })通过 QR 代码( 内建对话框, 或) 对 CX3 钱包应用 onQr(uri, expiresAt) 电话地址
restorePhone()重新装入后: 如果链接仍在运行中, 此标签中较早时链接的电话; 地址或 ""
via哪个钱包标志 : "extension", (中文(简体) ), "phone" 或者说 ""
qrSvg(text, { size, margin, dark, light, label }) 编号 : qrMatrix(text)QR 编码为 <svg> 元素 / 作为布尔数行
on("accountsChanged", fn) 编号 : off("accountsChanged", fn)fn(accounts) 获得 [] 当用户从钱包(连接站点 去除站点),扩展或电话app中移除您的站点; cx3.address 已经清除。 在不重新装入的情况下再次显示"连接钱包" 。 需求 CX3Wallet 0.69+
address连接地址( 小写) 或 ""
request(method, params)原始钱包请求( R)cx3_*(中文(简体) )
getBalance(address?)原生 CX3 余额
listContracts({ limit, offset, viewer, owner, standard, live })托肯目录(最多500个)
listTransfers(address, { limit, offset })代币转帐
getTokens(address?) 编号 : getActivity(address?, { limit, before })钱包有余额的符号 / 它的历史
getDexPairs() 编号 : getLpBalance(pairId, address?)CarbonFi 池/ 一个钱包的 LP 余额
call(address, method, params, sender?)只读合同电话
getAbi(address) 编号 : getWit(address)CX3WASM合同的ABI / WIT
getStatus()链头 { height, hash, timestamp }
getContractInfo(address)书记官处记录
isPrivateToken(address) 编号 : isTokenAuthorized(token, wallet)私人代币支票
contract(address)帮助者 : balanceOf, (中文(简体) ), transfer, (中文(简体) ), call, (中文(简体) ), send, (中文(简体) ), transfers, (中文(简体) ), isPrivate, (中文(简体) ), isAuthorized
sendTransaction({ to, amount }, opts?)原生 CX3 传输,在钱包中签名; amount 在CX3中,最多6个小数(电话: opts.onSeen() 当应用程序收到请求时)
contractSend(address, method, params, opts?)合同交易,在钱包中签名(opts.privateCheck, (中文(简体) ), opts.onSeen(中文(简体) )
waitForTransaction(hash, { timeoutMs, intervalMs, finalAfter }) 编号 : tx.wait()投票直到确认或失败:默认为30 s,或直到 finalAfter 每1 s(每5 s),每1 s(每5 s),每1 s. timeoutMs 是你自己的极限
bindApiKey(address?)连接的钱包是你的吗? 你的应用程序属于它吗? 只针对所有者的页面; 访问者的钱包答案 wallet_mismatch 还可以使用该应用程序

参数取名为JSON,而不是ABI调用数据: contract(token).transfer(to, amount) 发送 { to, amount }。金额是合同所期望的原始整数字符串("1000000000000000000" 以 18 小数表示 1 个符号.

发送

await cx3.connect();

const tx = await cx3.contract("0x…token").transfer("0x…recipient", "1000000");
await tx.wait();                      // confirmed, or throws TX_FAILED / TX_TRACK_TIMEOUT

const native = await cx3.sendTransaction({ to: "0x…recipient", amount: "10" });
await native.wait();

钱包显示收件人,金额和费用,用户批准或拒绝每次发送.

发送答案 txHash, (中文(简体) ), status, (中文(简体) ), dropped, (中文(简体) ), finalAfter, (中文(简体) ), requestId 财务报告和审定财务报表 hint数字 :

  • 待定没有失败. status 实值 "pending" (或 "submitted" 当交易被排入队列但尚未排入块时, 重复相同的签名发送) : TX_TIMEOUT (节点的25秒等先结束) 或从它的块中发出节点(HTTP 202, dropped: true) (中文(简体) ). success 留下来 true,以及 tx.wait() 跟着它.
  • 已丢弃信件 . 直至 finalAfter (时间,签名后12分钟左右)另一个验证员可能仍然包括一个被丢弃的发件,所以 tx.wait() 一直等到那个时候 之后 状态说 failed 财务报告和审定财务报表 tx.wait() 拒绝方式 TX_FAILED。 。 。 .
  • TX_TRACK_TIMEOUT 表示待定,没有失败(err.dropped, (中文(简体) ), err.finalAfter) (中文(简体) ). 在用户仍然可以运行时再不要要求其签下同样的付款:新签名是第二笔交易.

电话钱包( QR 代码)

没有浏览器扩展的访客可以在手机上使用CX3钱包应用. 页面显示一个QR代码,用户在app(QR扫描器)中扫描并批准连接. 配对通过你的代理到CarbonX3网关的中继,所以你的开发者令牌决定了该手机所看到的应用:该应用显示您的应用程序名称和站点.

cx3.setRpc(location.origin + "/my-dapp", { apiPrefix: "/api/v1" }); // your proxy, with the link routes

// the built-in dialog: QR code, "Waiting For Approval In The App", Cancel
const me = await cx3.connectPhone();          // cx3.via === "phone", cx3.address === me

// sends now go to the phone: the user approves them in the app
const tx = await cx3.contract("0x…token").transfer("0x…recipient", "1000000", {
  onSeen: () => console.log("the app received the request")
});
await tx.wait();

您自己的对话框而不是内置的对话框 :

const box = document.getElementById("qr");
const stop = { cancelled: false };            // set stop.cancelled = true (or pass an AbortSignal) to give up
const me = await cx3.connectPhone({
  signal: stop,
  onQr: (uri, expiresAt) => {
    box.replaceChildren(cx3.qrSvg(uri, { size: 220 }));  // an <svg>: no images, no inline styles
  }
});
  • 重新装入后 : await cx3.restorePhone() 提供手机的地址, 而其链接仍在运行( 链接密钥在 sessionStorage,或 ""。 。 。 .
  • 当用户删除应用程序中的您的站点时 : 脚本每隔几秒钟检查一次链接,然后呼叫您 accountsChanged 听众 [],如同扩展.
  • cx3.disconnect() 也结束网关上的链接 . cx3.connect() (分机)从一个连接的电话接管.
  • 内置对话框文本 : connectPhone({ texts: { title, hint, preparing, waiting, valid, cancel } })例如在另一种语言中。 对话框通过 DOM 样式,所以一个内容- 安全政策没有 'unsafe-inline' 允许它.
  • 您的代理服务器 转发 link/… 财务报告和审定财务报表 contract-send/… 上表中的路径,带有 X-CX3-Pair-Key 财务报告和审定财务报表 X-CX3-Link-Key 脚本寄出的信头,以及 DELETE 页:1 link 财务报告和审定财务报表 link/sign/{id}。对齐的 origin 应当由您的服务器设置(它是应用程序显示的站点),而不是取自浏览器.

私人纪念品

在钱包申请批准之前 transfer, (中文(简体) ), transferFrom 或者说 mint ,脚本则询问发件人和收件人是否获得授权。 如果不是,电话就拒绝 PRIVATE_TOKEN_SENDER 或者说 PRIVATE_TOKEN_RECIPIENT 钱包没有显示什么. { privateCheck: false } 由于最后的论点跳过检查;合同仍然决定链条.

getTokens() 仅列出公共指使符: 网关只提供钱包的私人指使符, 仅提供钱包自己签名的证明, CX3Wallet 发送到自己的列表中, 从未到页面.

错误

条件结果
没有 setRpcError: RPC not set (CX3.setRpc)
没有钱包Error: CX3Wallet not found
没有有效证书的代理HTTP 401 (韩语) oauth_required (或 api_key_required(中文(简体) )
应用程序已撤销HTTP 401 (韩语) invalid_token
范围太小HTTP 403 (韩语) insufficient_scope
不是应用程序的钱包wallet_mismatch
合同中缺少的方法METHOD_NOT_FOUND
call 写入方法CALL_REQUIRES_VIEW (使用时 contractSend(中文(简体) )
私人代号, 钱包未授权PRIVATE_TOKEN_SENDER 编号 : PRIVATE_TOKEN_RECIPIENT
交易失败( 仅在交易结束之后才发送) finalAfter(中文(简体) )TX_FAILED
tx.wait() 交易仍未完成时停止(不是失败)TX_TRACK_TIMEOUT
QR 代码已过期( 5分钟) / 对话框已关闭 / 中继答差PAIR_EXPIRED 编号 : PAIR_CANCELLED 编号 : PAIR_INVALID
在电话应用中被拒绝 / 在大约2分钟内没有回复 USER_REJECTED 编号 : REQUEST_EXPIRED
应用程序已移除网站( 页面已取消连接)REQUEST_ENDED
电话发送的收件人或数量差 / 小数超过 6 (CX3 有 6)INVALID_RECIPIENT 编号 : INVALID_AMOUNT 编号 : INVALID_AMOUNT_PRECISION
电话合同发送: 已排队, 不在节点的 25 s 的块内( 有散列等待, 不是错误)TX_TIMEOUT
电话合同发送:网关无法记录(503);没有发送, err.retry() 稍后再次发送相同的签名请求LEDGER_UNAVAILABLE 编号 : LEDGER_FULL
电话合同发送:已经收到这份签名请求(409);其结果尚未确定,不再签署REPLAYED_REQUEST
电话合同发送:35s没有答复/没有连接(结果打开; err.retry()(中文(简体) )RPC_TIMEOUT 编号 : NETWORK_ERROR
链条拒绝交易:其数据太大或巢穴过深,或其非ce不是下一个DATA_TOO_LARGE 编号 : DATA_TOO_DEEP 编号 : INVALID_NONCE_ORDER
链条拒绝天然气限值:低于最低限值,或高于合同发送的最大限值GAS_LIMIT_TOO_LOW 编号 : GAS_LIMIT_EXCEEDED

编码错误将代码带入 err.code。合同发送的错误,连同电话或扩展,也有 err.status (HTTP), (韩语), err.requestId, (中文(简体) ), err.hint, (中文(简体) ), err.txHash 财务报告和审定财务报表 err.body (网关的答案);a TX_TIMEOUT 表示其散列名称不是两个路径上的错误,而是待决tx. err.retry() 是否只有再次发送相同的签名请求是安全的(没有发送,或者没有回答):网关按它的请求 id 键,所以它永远不会成为第二次交易,并且在签名后被接受几分钟.

显示错误文本 textContent永远 innerHTML。 。 。 .

文档

许可证

UNLICENSED:Mersolution科技有限公司的专有软件. 使用取决于 CX3 脚本使用术语 (项目03):你可以从自己的服务器或CDN上装入与CarbonX3 Green Chain连接的应用程序,包括商业应用程序,并不加修改地为它们服务 integrity 散列;您不得自行修改、出售或重印,也不得与其他网络使用.

第三方代码: QR编码器基于 JavaScript 的 QR 代码生成器,版权 (c) 2009 Kazuhiko Arase,麻省理工学院许可证;其通知留在档案中。 "QR代码"是DENSO WAVE INCORPORATED的注册商标.

版本与发布记录

@carbonx3/cx3-iife 共发布 11 个版本,首次发布于 2026/10/17;过去 12 个月发布了 11 个版本。

版本发布日期距今
0.2.9latest2026/11/018 天前
0.2.82026/10/2911 天前
0.2.72026/10/2416 天前
0.2.62026/10/2318 天前
0.2.52026/10/1921 天前
0.2.42026/10/1921 天前

关于 @carbonx3/cx3-iife 的常见问题

@carbonx3/cx3-iife 是什么?

CarbonX3绿色链的官方浏览器脚本(window.cx3): CX3 钱包连接和签名(浏览器扩展名,或电话应用由 QR 编码),通过您自己的同源代理读取

如何安装 @carbonx3/cx3-iife?

在项目目录运行 npm install @carbonx3/cx3-iife,或使用 pnpm add / yarn add / bun add。

@carbonx3/cx3-iife 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/carbonx3__cx3-iife 是否存在。

@carbonx3/cx3-iife 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@carbonx3/cx3-iife 可以商用吗?

@carbonx3/cx3-iife 使用 UNLICENSED 许可。作者声明为 UNLICENSED,即不授予公开使用许可(与公共领域的 Unlicense 不同)。使用前需获得作者授权。以上为概括,不构成法律意见,请以许可原文为准。

@carbonx3/cx3-iife 的下载量有多少?

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

@carbonx3/cx3-iife 还在维护吗?

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