@ anywalletkit/ keyring (英语)
许多来自许多关键来源的账户,例如MetaMask、Phantom或Tonkeer的操作方式:
安装
npm install @anywalletkit/keyring
# or: pnpm add @anywalletkit/keyring · yarn add @anywalletkit/keyring
时间: @ anywalletkit/ keyring (英语)发表于 发布工作流程 与出处.
- a BIP-39种子 (创建或导入,可选密码句) – 账户 0, 1, 2...在每个已注册链上;
- 导入的私钥 - 一个连锁账户;
- a TON-自定义 24 个词 (Tonkeeper,Tonhub, MyTonWallet) – 一个TON账户.
import { Keyring } from '@anywalletkit/keyring'
import { WalletManagerEvm } from '@anywalletkit/wallet-evm'
import { WalletManagerSolana } from '@anywalletkit/wallet-solana'
const keyring = await Keyring.load({
storage, // KeyringStorage: names, addresses, flags — no secrets
secrets, // SecretStorage: one secure-storage entry per source
chains: { evm: { Manager: WalletManagerEvm, config: { provider } }, solana: { Manager: WalletManagerSolana, config: { rpcUrl } } },
})
const { mnemonic } = await keyring.createMnemonic() // show the backup screen once
const next = await keyring.addAccount(keyring.listSources()[0]!.id)
await keyring.importMnemonic(words, { discover: { isUsed } }) // restore: adds used accounts 1, 2, …
await keyring.previewPrivateKey('solana', key) // show the address first
await keyring.importPrivateKey('solana', key)
await keyring.withAccount(next.id, 'evm', (account) => account.sendTransaction(tx))
// A chain registered after an account was created: derive what it lacks (one secret read per source).
keyring.missingChains(next.id) // ['zcash'] — no secret read
await keyring.completeAddresses(next.sourceId)
衍生(每个账户的变化)
| 链式 | 账户 i | 账户与 |
|---|---|---|
| EVM( 视频) | m/44'/60'/0'/0/i | MetaMask、Rabby、信托、彩虹 |
| 索拉纳 | m/44'/501'/i'/0' | 幽灵 索夫莱尔 后包 |
| 顿 | m/44'/607'/i' (V5R1级) | 信托(BIP-39);保管通关字 importTonMnemonic |
| 龙 | m/44'/195'/0'/0/i | TronLink, 信托公司 |
| 商贸中心 | m/84'/0'/0'/0/i (P2WPKH) (韩语) | BIP- 84 钱包, 地址索引 i |
| 没有 | m/44'/397'/i' | MyNearWallet, Meteor (隐形) (密克罗尼西亚) |
| 兹克什 | m/44'/133'/0'/0/i | Zashi、YWallet、Ledger、Trezor(透明t1...接收器) |
I = 0. 4 的黄金矢量在 test/vectors.test.ts; 账户 0 匹配公众
引用向量和链条管理器本身的导出(没有现有的地址移动).
私钥格式
EVM / Tron: hex → BTC: 压缩 WIF 或 hex → 索拉纳: Base58 64字节秘密, JSON 字节
阵列,或基数58 32字节种子 ^ TON: 六分位种子或64字节秘密 ^ NEAR: ed25519:<base58> · Zcash:WIF或32字节正弦(如BTC).
一个64字节的ed25519密钥必须与其嵌入式公钥相匹配.
尚未: TON V4R2/V3R2 导入密钥的钱包版本( 仅限 V5R1), BTC P2TR/ P2PKH 扫描导入的 WIF (使用 BTC 管理器配置的地址类型), 非英语 BIP-39单词列表.
安保模式
- SDK之间没有秘密 每个信号都读取来源的秘密
SecretStorage,构建链式管理器,返回的手柄将键零化dispose()(单位:千美元)withAccount处理你. KeyringStorage只看到公共数据:标签、地址、索引、旗帜和 指纹( 主人的散列) 公开 或导入的密钥的公用密钥).- 复制品被指纹所捕捉——同种相接,同种相接+口语相接,或同种相接 同样的密钥以另一种形式存在,而不对周围的任何事物保密.
- 出错消息从不回声单词,密钥或密码句.
removeSource在删除密钥前保存元数据( 以 id 为待删除) , 因此,失败的保存从不拖动没有其密钥的源; 失败的删除会在下一个时重试Keyring.load。 。 。 .SecretStorage.delete必须下定决心找到一个不存在的身份证.- 平行导入被序列化: 重复检查和密写在一个队列中运行 变了,所以同一短语 导入两次一次着陆.
exportSecret()返回用于备份屏幕的秘密:在应用中的生物鉴别技术后面的门.