@asevault/connect

中文文档
0.3.3发布于 2026/10/19Apache-2.0TypeScriptES Module零依赖近 30 天下载 2299

在Asentum上将 dApps 连接到 AseVault 移动钱包 - 深通/QR连接,ML-DSA-65签名请求,交易批准. Asepad.fun的产品.

中文使用文档
文档目录7 节
  1. 使用量
  2. 运输
  3. 延迟和故障
  4. 阅读器 API
  5. 自动检测
  6. 议定书(v1)
  7. 警卫

@ asevault/ 连接

将 Asentum dApp 连接到 AseVault 移动钱包(ML-DSA-65签名). 密钥留在设备上;每个请求都需要在申请中获得批准. 零从属.

npm install @asevault/connect

使用量

import { AseVaultProvider } from '@asevault/connect';

const wallet = new AseVaultProvider({ name: 'My dApp' });

await wallet.connect();            // approve in AseVault -> session
const address = wallet.address;    // ase1...

const { txHash } = await wallet.callContract({
  to: 'ase1...',                   // or 0x...
  method: 'swapExactIn',
  args: ['1', '0xeeee...', '1000000000000000000', '990000000000000000'],
});

const { txHash: deployTx, address: contract } = await wallet.deploy(source);

const { txHash: sendTx } = await wallet.sendTransaction({ to: 'ase1...', amount: '1000000000000000000' });

const { signature } = await wallet.signMessage({ message: 'hello' });

const { status, receipt } = await wallet.waitForTx(txHash);
// status: 'confirmed' | 'reverted' | 'timeout'
// timeout: no receipt landed. Reverted txs are dropped without a receipt
// on Asentum, so a timeout usually means dropped or reverted.

const gas = await wallet.estimateGas({ to: 'ase1...', method: 'swapExactIn', args });

wallet.on('chainChanged', (id) => {});
wallet.disconnect();

EIP-1193样式请求()与被注入的提供者使用相同的方法名支持:

await wallet.request({ method: 'ase_sendCall', params: { to, method: 'mint', args: [] } });
await wallet.request({ method: 'eth_blockNumber' });
await wallet.request({ method: 'estimateGas', params: { to, method: 'mint', args: [] } });
await wallet.accounts();
await wallet.getAddress();
wallet.selectedAddress;
wallet.chainId;

运输

自动选择,或强制通过 new AseVaultProvider({ transport })数字 :

DApp运行的地方运输UX 密码
AseVault 应用浏览器InAppTransport现场核准单
移动浏览器DeepLinkTransport应用切换、批准、返回标签
桌面浏览器RelayTransport屏幕上的QR,电话批准

在桌面上,提供者默认为公共中继器(relay.asepad.fun和 connect() 显示内置的 QR 模式。 过 relay: false 选择退出( 然后连接失败) WALLET_NOT_INSTALLED) (中文(简体) ).

const wallet = new AseVaultProvider({ relay: true });
await wallet.connect();              // QR modal opens automatically

// Per-call override:
await wallet.connect({ ui: 'none' });

// Render the QR yourself:
const wallet2 = new AseVaultProvider({ relay: true, ui: 'none' });
wallet2.on('uri', (uri) => renderQr(uri));

// Custom renderer:
const wallet3 = new AseVaultProvider({ relay: true, ui: (uri) => myQr(uri) });

// Custom relay URL:
const wallet4 = new AseVaultProvider({ relay: 'https://your-relay' });

// Explicit transport:
import { RelayTransport } from '@asevault/connect';
const wallet5 = new AseVaultProvider({
  transport: new RelayTransport('https://your-relay', { onUri: (uri) => renderQr(uri) }),
});

延迟和故障

钱包在预测时每~2.5 s 进行请求队列投票,结果投票为 1 s. 等待几秒钟之间 callContract() 电话里有批准表 如果钱包是背景的,OS会决定何时醒. 在~5 s后显示"检查你的手机"提示.

connect() 在显示 QR 之前探测中继器。 如果无法到达,它会抛出 RELAY_UNREACHABLE在一项待决请求中,连续三次无法到达的投票也以 RELAY_UNREACHABLE。 。 。 .

零依赖 Dev 中继器在 scripts/dev-relay.mjs运行它,在你的局域网IP上服务DApp,扫描QR.

阅读器 API

wallet.client (或 new AseVaultReader())手柄读取端点故障和超时:

方法回返
view(contract, method, args)未包装的 returnValueJSON 字符串解析后, 缩写为字符串
getBalance(address)(威仪)
balanceOf(contract, address)通过 view
getBlockNumber()编号
getBlock(n){ receipts: [{ txHash, success, error, recipient, events }] }
getReceipt(hash)收讫或 null (待定/未找到)
getTxState(hash)“待决”
waitForTx(hash, timeoutMs?)状态 : “ 确认 ”
waitReceipt(hash, timeoutMs?)收件或超时抛出
getContractEvents(contract, { event?, fromBlock?, toBlock?, limit? })匹配事件, 最新第一
estimateGas(contract, method, args)bigint 气体单位
chainId()小数字符串
useRpc(urls) 编号 : validateRpc(url)终点池+健康探测器

这个 /view RPC 返回 { ok, returnValue, gasUsed }。 。 。 . view() 决定: returnValue 直接,不是信封.

自动检测

在 AseVault 浏览器内插入钱包 window.__asevaultBridge 加号 window.asevault编号 :window.asentum 别名( n)request(), (中文(简体) ), connect(), (中文(简体) ), disconnect(), (中文(简体) ), accounts(), (中文(简体) ), getAddress(), (中文(简体) ), sendCall, (中文(简体) ), sendTransfer, (中文(简体) ), signMessage, (中文(简体) ), ase_deploy) (中文(简体) ). InAppTransport 约束 __asevaultBridge这样 installAseVaultProvider() 可替换 window.asevault 没有打破频道。 钱包推出 accountsChanged编号 :disconnect编号 :connect 将事件输入页面.

议定书(v1)

  • asevault://v1/connect?origin=&name=&permissions=&callback=&nonce= - > (中文) callback?asevault=1&session=<b64> (会议载有ML-DSA-65的证明) ASEVAULT_CONNECT|<nonce>|<address>(中文(简体) )
  • asevault://v1/sign?session=&payload=<b64url>&callback=&nonce=&kind= - > (中文) callback?asevault=1&tx=<hash> 或者说 ?error=<code>&message=
  • asevault://v1/disconnect?session=
  • 中继 : POST/GET {relay}/r/<nonce> 结果, POST/GET {relay}/q 已排队的请求

警卫

  • 钥匙从不离开AseVault。 dApps只看到地址,公钥,签名和广播结果.
  • 每一份申请都需要得到明确的申请批准.
  • 会话是来源范围并可在AseVault(Connected Apps)内部被撤销.

全面整合指南: CONNECT.md。 。 。 .


产物: Asepad.fun (英语)。 。 。 .

版本与发布记录

@asevault/connect 共发布 16 个版本,首次发布于 2026/10/16;过去 12 个月发布了 16 个版本。

版本发布日期距今
0.3.3latest2026/10/1919 天前
0.3.22026/10/1919 天前
0.3.12026/10/1919 天前
0.3.02026/10/1919 天前
0.2.82026/10/1622 天前
0.2.72026/10/1622 天前

关于 @asevault/connect 的常见问题

@asevault/connect 是什么?

在Asentum上将 dApps 连接到 AseVault 移动钱包 - 深通/QR连接,ML-DSA-65签名请求,交易批准. Asepad.fun的产品.

如何安装 @asevault/connect?

在项目目录运行 npm install @asevault/connect,或使用 pnpm add / yarn add / bun add。

@asevault/connect 支持 TypeScript 吗?

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

@asevault/connect 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@asevault/connect 可以商用吗?

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

@asevault/connect 的下载量有多少?

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

@asevault/connect 还在维护吗?

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