@anywalletkit/wallet-evm (英语)
EVM账户中的任何钱包套件,来源于 m/44'/60'/0'/0/i 一样
路径作为 MetaMask 和 ethers,由金向量粘住 @anywalletkit/conformance。 。 。 .
安装
npm install @anywalletkit/wallet-evm
# or: pnpm add @anywalletkit/wallet-evm · yarn add @anywalletkit/wallet-evm
时间: @anywalletkit/wallet-evm (英语)发表于 发布工作流程 与出处.
import WalletManagerEvm from '@anywalletkit/wallet-evm'
const wallet = new WalletManagerEvm(seedPhrase, { provider: ['https://rpc-a', 'https://rpc-b'] })
const account = await wallet.getAccount(0)
await account.transfer({ recipient: '0x…', amount: 10n ** 15n }) // ETH
await account.transfer({ token: USDT, recipient: '0x…', amount: 1_000_000n }) // ERC-20
await account.approve({ token: USDT, spender: ROUTER, amount: 1_000_000n })
const sig = await account.signTypedData({ domain, types, message }) // EIP-712
wallet.dispose() // zeroizes seed + keys
离线签名: 省略 provider,通过 chainId (或把它放在tx上)和呼叫
signTransaction 与每一个字段组合——没有任何东西触及网络.
输入信息
getTokenInfo(address) 从其合同中读取了ERC-20: { address, standard: 'erc20', decimals, symbol, name, totalSupply, flags }。 。 。 . bytes32 符号(MKR)被解码;不是UTF-8的文本是
''。 。 。 . flags 持有 upgradeable 当地址是 EIP-1967 / EIP-1822 / 信标/齐柏林飞船
代理服务器。 无代码、EIP-7702-授权账户或无 decimals() (NFT,普通合同)抛出
NotATokenError; RPC 失败按原样投出. @anywalletkit/tokens 构建“ 添加 ”
标志"流动在它上.
安全层
每一次发送都通过,顺序是:静态拒绝 模拟 收费上限 签 广播.
- 你签什么.
describeTransaction(tx, {chainId})财务报告和审定财务报表describeTypedData(typed, {chainId, account})纯的,用于确认屏幕的离线解码器: 等 (native-transfer, (中文(简体) ),erc20-transfer, (中文(简体) ),erc20-approve, (中文(简体) ),contract-call, (中文(简体) ),eip7702-delegation; ; ; ; ;permit, (中文(简体) ),permit2, (中文(简体) ),safe-tx, (中文(简体) ),generic, (中文(简体) ), 已解码的字段和警告approve-unlimited, (中文(简体) ),to-zero-address, (中文(简体) ),chain-mismatch, (中文(简体) ),deadline-passed, (中文(简体) ),owner-mismatch, (中文(简体) ),legacy-fee-fields) (中文(简体) ). - 硬拒绝 在任何签名之前: 为另一个链扔出 tx 或打入的数据域
ChainMismatchError(覆盖输入的数据与allowCrossChainTypedData; 数值为零 地址掷出UnsafeTransactionError(与allowBurn) (中文(简体) ). - 模拟.
simulateTransaction(tx)运行eth_call+ 气体估计和返回{ok, gas, returnData}或者说{ok: false, reason, data}用解码器Error(string)编号 :Panic编号 : 自定义错误选择器.sendTransaction编号 :transfer编号 :approve先模拟后抛出SimulationError而不是广播回放;simulate: false选择退出。 估计气体 重新使用,所以要询问一次网络. - 收费上限.
transferMaxFee编号 :transactionMaxFee检查交易即将进行 签字的气体限制xgasPrice编号 :maxFeePerGas,包括您设置的收费字段—— 之前 每个签名.quoteSendTransaction一样的价格,所以一个包maxFee政策也看待他们. - 收费上限. A 类
gasPrice编号 :maxFeePerGas编号 :maxPriorityFeePerGas你设置自己是 被拒绝(UnsafeTransactionError) 当其比率高于maxFeeRateMultiplier(违约10)× 网络当前引号( 以eth_gasPrice以及EIP-1559估计值)和10克/威以上. 帐单上填写的收费不检查;没有提供者,或者引文不能读取时, 无所拒绝( 使用transactionMaxFee下线签名);引用最多等待 5 s. (英语).maxFeeRateMultiplier: null(或Infinity关闭;低于1的值投掷aRangeError当账户被创建时. - 广播. 丢弃的答案
BroadcastUnknownError用当地计算hash显示 : 别再发了 与几个RPC,already known下一个交易是同一个交易 并决心要完成它.nonce too low仅在下个非ce是 被另一笔交易所证明: 至少两个不同的RPC 计算账户已被布雷 过账(latest他们中没有一个知道被弃绝的大麻。 否则——一个RPC 配置, 或 RPC 不同意 — 发送抛出NonceConflictError联合国BroadcastUnknownError数字 :maybeSent, (中文(简体) ),hash附加时nonce和节点nextNonce),并且没有签署新的文件,因为RPC 被拒绝的字节仍可保留并广播签名的字节。 显示“ 网络没有确认 —— 检查 ” 活动,然后重试";账户的下个发送跳过被拒绝的非ce.replacement transaction underpriced从来没有被重审. - EIP-2612许可.
getPermitInfo(token)读取name/version/nonces/DOMAIN_SEPARATOR财务报告和审定财务报表 报告supported只有在重建的EIP-712域名等于合同本身的情况下;signPermit({token, spender, value, deadline})返回时{signature, v, r, s, nonce, deadline, typedData}。 。 。 . DAI的遗产permit(holder, spender, nonce, expiry, allowed)不被支持.
const d = describeTransaction(tx, { chainId: await account.getChainId() })
if (d.warnings.some((w) => w.code === 'approve-unlimited')) ask(d)
const sim = await account.simulateTransaction(tx)
if (!sim.ok) show(sim.reason)