@exodus/headless

中文文档
5.0.0-rc.105发布于 2026/11/09MITTypeScriptES Module近 30 天下载 1.2万

平台不可知的Exodus 钱包 SDK

中文使用文档
文档目录22 节
  1. 目录
  2. 快速启动
  3. 生命周期
  4. 端口
  5. 适配器
  6. 模块
  7. 创建标记器
  8. 遗产PrivTopub
  9. 不安全storage 中
  10. 可迁移的垃圾堆
  11. 种子集
  12. 密码句缓存
  13. 配置
  14. 调试
  15. 无头 API
  16. 钱包
  17. 钱包账户
  18. 块链元数据
  19. 资产
  20. 语言
  21. 订阅
  22. 特性标记

@ exodus/ 无头

平台-不可知的Exodus钱包 SDK,包括种子短语管理,交易签名,块链元数据,余额等核心功能.

目录

快速启动

import createExodus from '@exodus/headless'
import referrals from '@exodus/headless/src/modules/referrals'
import Emitter from '@exodus/wild-emitter'

// 1. Create port. Acts as an event bus between headless wallet and client
const port = new Emitter()

// 2. Instantiate client-specific adapters and config. More details below
const adapters = {}
const config = {}

// 3. Create Exodus container
const exodusContainer = createExodus({ port, adapters, config })

// 4. Register external modules. Does not support overriding modules at the moment.
exodusContainer.register({
  definition: {
    id: 'remoteConfig',
    factory: createRemoteConfig,
    dependencies: ['config', 'fetch', 'logger'],
  },
})

// see an example feature definition:
// ../../features/geolocation/index.js
exodusContainer.use(referrals())
exodusContainer.use(myCustomFeature({ id: 'myCustomFeature', ... }))

// 5. Resolve exodus instance
const exodus = exodusContainer.resolve()

// 6. Start exodus instance
await exodus.wallet.start()

// 7. Use it!
await exodus.wallet.create({ passphrase: 'my-super-secure-passphrase' })

// 8. Use your custom feature API, if any
exodus.myCustomFeature.doThatThingYouDo()

生命周期

无头钱包实例在一生中通过不同的状态过渡. 相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相相去相相去相相去相去相去相去相去相去相相去相相相相相相相相相去相去相相去相去相相相相相相相相相相相相

  • Fires hook call:允许模块订阅并停止过渡,直到收听者解决.
  • Fires event call:所有钩子被执行并解决后发回.

关于生命周期钩子的更多信息,请参见: 应用程序特性文档。 。 。 .

端口

无头钱包和客户端之间的事件总线

方法类型说明
订阅({ type: string, payload: any }) => void订阅受事.
未订阅({ type: string, payload: any }) => void不订阅接收事件的处理器 .
发射(type: string, payload: any) => void释出一事.

适配器

适配器是针对客户对钱包功能所需的定义API的特定执行.

这个模块需要新的适配器,因为我们将更多的模块迁移到它。 下文解释了本单元当时需要哪些内容.

模块

AssetsModule 执行。 目前正在注入,因为我们的每个客户都有不同的执行方式.

创建标记器

返回带有指定命名空间的 Logger 类实例的函数 .

参数类型说明
命名空间string日志的命名空间 .

返回的 Logger 实例有以下方法:

方法类型说明
追踪(...args: any[]) => void登录带有跟踪级别的信件 .
调试(...args: any[]) => void用调试级别登录信件 .
日志(...args: any[]) => void用日志级别登录信件 .
资讯(...args: any[]) => void用信息级别登录信件 .
警告( e)(...args: any[]) => void以警告级别登录信件 .
错误(...args: any[]) => void以错误级别登录信件 .

每种方法都采用任意数量的参数,这些参数将作为带有相应日志级的信件被记录. 信件会被前缀为日志的命名空间 .

遗产PrivTopub

私自到公钥转换功能.

每个键为资产名称且值为函数的对象 Buffer 返回 a Buffer。 。 。 .

不安全storage 中

不安全( raw text) 存储实例 。 内部被模块用来将数据粘入客户端下层存储层.

在多数情况下, 您可能想要使用加密存储( 尚未迁移) .

检查 存储光谱 关于存储 API 的更详细信息

可迁移的垃圾堆

复制 storage 但仅用于移民。 这样我们就可以解锁存储,但应用程序的其他部分仍然无法访问.

种子集

存储实例被钱包模块用来不稳地存储种子和自动生成的密码句(如果有的话).

检查 存储光谱 关于存储 API 的更详细信息

说明: 因为浏览器扩展需要密码句来加密/解密种子,所以它作为第3个参数被传递来获取/设定

密码句缓存

密码卡切类的例子 .

方法类型说明
设定(passphrase: string) => void用给定的值设置密码句 .
起来() => string获取当前密码句值 .
更改Ttl(ttl: number) => void更改密码句缓存的活取时间值( TTL) .
清除() => void清除密码句缓存 .
排程清除() => void

配置

Exodus 实例附加配置选项的对象.

目前没有使用.

调试

一些功能暴露出API用于易被调试,故障排除和PR测试. 您可以访问这些 API 在外流。 调试 。 要启用它们, 只需通过调试: 真实到无头工厂函数 :

import createExodus from '@exodus/headless'

const exodusContainer = createExodus({ port, adapters, config, debug: true })

exodusContainer.debug.geolocation.merge({ countryCode: 'US' })

无头 API

钱包

类型:对象

方法类型说明
已存在async () => boolean检查设备上是否存在钱包 .
创建async ({ passphrase?: string }) => void创建新钱包
导入async ({ mnemonic: string, passphrase?: string, forceRestart?: boolean }) => void导入已存在的钱包
删除async ({ passphrase?: string }) => void删除钱包。 如果创建了钱包, 密码句是强制的
锁定async () => void锁定钱包
解锁async ({ passphrase?: string }) => void解锁钱包。 如果创建了钱包, 密码句是强制的
已锁定async () => boolean检查钱包是否锁定
获得磁性async () => void将钱包设置为备份
更改密码async ({ currentPassphrase?: string. newPassphrase: string }) => void更改密码句 。 如果创建了钱包, 当前密码句是强制的
从当前措辞恢复async ({ passphrase?: string }) => void恢复当前钱包 。 如果创建了钱包, 密码句是强制的
装入async () => void通过端口补水数据装载 UI(BE Only(中文(简体) )
卸货async () => void通过端口重新加水数据来卸载 UI(BE Only(中文(简体) )
更改锁定时器async ({ ttl: number }) => void更改自动解锁 ttl (BE Only(中文(简体) )

钱包账户

类型:对象

方法类型说明
创建async (walletAccountFields) => void创建一个带有所提供字段的新钱包账户.
更新async (name, walletAccountFields) => void以提供的字段更新现有的钱包账户.
启用async (name) => void启用已存在的钱包账户.
禁用async (name) => void禁用现有的钱包账户.
获取可启用async () => object返回已启用的钱包账户为 { [name]: WalletAccount }。 。 。 .

块链元数据

类型:对象

方法类型说明
获取 TxLogasync ({ assetName, walletAccount }) => TxSet获取提供的 TxSet assetName编号 :walletAccount 组合( 资产来源)
获取已登录的 TxLogsasync () => object全部装入 TxSets 作为 { [walletAccount]: { [assetName]: TxSet } } object
更新 Txsasync ({ assetName: string, walletAccount: string, txs: object[] }) => void添加或更新 txs,其中提供更新 txs
覆盖Txsasync ({ assetName: string, walletAccount: string, txs: object[], notifyReceivedTxs: ?boolean }) => void覆盖指定的 txs .
清除 Txsasync ({ assetName: string, walletAccount: string }) => void删除资产源的 txs .
删除 Txsasync ({ assetName: string, walletAccount: string, txs: object[] }) => void删除已提供的 txs .
获取账户状态async ({ assetName, walletAccount }) => AccountState获取提供的资产来源的账户状态
获取账户状态async () => object全部装入 AccountStates 作为 { [walletAccount]: { [assetName]: AccountState } } object
更新账户状态async ({ assetName: string, walletAccount: string, newData: object }) => void更新资产来源账户状态 .
删除账户状态async ({ assetName: string, walletAccount: string }) => void删除资产来源的账户状态 .
批次() => Batch创建批次更新 。 见 块链元数据 详细批量读取.

资产

类型:对象

方法类型说明
启用async (assetNames: string[]) => void启用资产 .
禁用async (assetNames: string[]) => void禁用资产.
添加可启用的键async (assetId: string, baseAssetName: string) => string添加并启用自定义符号。 返回创建的 asset是因为 .name

语言

类型:对象

方法类型说明
时间async (currency: string) => void更改当前货币.
设置语言async (language: string) => void更改当前语言 .

订阅

类型:函数

参数类型说明
订阅({ type: string, payload: any }) => void订阅受事.
未订阅({ type: string, payload: any }) => void不订阅接收事件的处理器 .

特性标记

类型:对象

方法类型说明
启用async (featureName: string) => void启用特性旗门特性.
禁用async (featureName: string) => void禁用特性旗门特性.

见 更多细节。 。 。 .

版本与发布记录

@exodus/headless 共发布 281 个版本,首次发布于 2023/03/28;过去 12 个月发布了 16 个版本。

版本发布日期距今
5.0.0-rc.105latest2026/11/094 天前
5.0.0-rc.1042026/11/0410 天前
5.0.0-rc.1032026/10/091 个月前
5.0.0-rc.1022026/07/213 个月前
5.0.0-rc.1012026/07/014 个月前
5.0.0-rc.1002026/06/254 个月前

关于 @exodus/headless 的常见问题

@exodus/headless 是什么?

平台不可知的Exodus 钱包 SDK

如何安装 @exodus/headless?

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

@exodus/headless 支持 TypeScript 吗?

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

@exodus/headless 支持 ESM 还是 CommonJS?

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

@exodus/headless 可以商用吗?

@exodus/headless 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@exodus/headless 的下载量有多少?

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

@exodus/headless 还在维护吗?

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