钱包管理器
WalletManager 是一个强大的钱包管理工具,设计用于安全地管理和存储多个钱包的保险库。
主要特性
使用 WalletManager 管理库
这包括向特定保险库添加新钱包、从保险库中检索所有钱包、导出特定保险库以及导出私钥。WalletManager类目前支持两种类型的保险库:PrivateKeyVault和MnemonicVault。
自定义存储解决方案
WalletManager 支持定义自定义存储解决方案,允许你指定加密库的存储方式和位置。有了自定义存储的支持,你可以使 WalletManager 适应你的特定需求和安全要求。
锁定和解锁 WalletManager
WalletManager 实现了自动加密机制,安全地保存钱包的保险库。这不仅保留了你的库的状态,还确保了对存储信息的强大保护。当需要时,你可以使用之前定义的密码轻松解锁和解密库。
WalletManager 入门
本指南提供了如何使用 WalletManager 的逐步说明。
实例化 WalletManager
WalletManager 构造函数接受一个可选对象来定义其存储。存储描述了 WalletManager 将如何以及在何处存储其钱包库。如果没有提供存储,WalletManager 使用一个不持久化数据的默认存储。
现在,让我们简单点,不必考虑存储。稍后我们会更详细地讨论它。
要实例化一个 WalletManager,你只需:
const walletManager = new WalletManager();设置 WalletManager 密码
默认情况下,创建时 WalletManager 实例处于锁定状态。在使用之前,你需要通过调用 unlock 方法来设置密码来解锁它。
const password = 'my-password';
await walletManager.unlock(password);一旦你的 WalletManager 解锁,它就可以管理你的钱包了。
使用 WalletManager 管理库
WalletManager 中的库充当钱包的安全容器。WalletManager 通过与这些库交互来管理钱包,支持诸如 getAccounts之类的操作,它返回存储在库中所有钱包的公共信息,以及 exportAccount,它导出给定钱包地址的私钥。
要添加一个库,我们使用 addVault 方法。以下是我们如何创建一个私钥库并添加一个我们拥有的钱包的私钥:
const myWallet = Wallet.generate({
provider,
});
const privateKey = myWallet.privateKey;
await walletManager.addVault({
type: 'privateKey',
secret: privateKey,
title: 'My first private key vault',
});addVault 方法需要一个具有三个属性的对象:type、secret 和 title。WalletManager 目前支持两种类型的库:privateKeyVault 和 mnemonicVault。对于 secret,我们使用我们钱包的私钥,对于 title,我们可以提供一个自定义名称。
运行此代码后,WalletManager 将创建一个新的 privateKey 类型的库实例,并将一个账户(我们的钱包)添加到这个新创建的库中。
WalletManager 的一个关键特性是其能够管理多个库,甚至是同一类型的。这意味着如果你再次运行 addVault 方法,使用相同的参数,WalletManager 将创建另一个 privateKey 类型的库,持有同一个钱包。以下是示例:
await walletManager.addVault({
type: 'privateKey',
secret: privateKey,
title: 'My second private key vault',
});执行此操作后,你将发现你的 WalletManager 正在管理两个 privateKey 库,这两个库都存储着同一个钱包。
记住,添加库时 title 和 secret 都是可选的,但提供 title 可以更方便地管理你的库和钱包。如果你在添加库时没有提供 secret,这将导致库本身生成一个新账户(钱包)。
使用 WalletManager
设置好 WalletManager 后,你现在可以访问你的库和钱包。以下是如何检索你的库的详细信息:
const vaults = walletManager.getVaults();
// #context console.log(vaults);这将输出类似于:
// #context [
// #context {
// #context title: 'My first private key vault',
// #context type: 'privateKey',
// #context vaultId: 0
// #context },
// #context {
// #context title: 'My second private key vault',
// #context type: 'privateKey',
// #context vaultId: 1
// #context }
// #context ]如你所见,WalletManager 为每个库分配了唯一的 vaultIds。你添加的第一个库有一个 vaultId 为 0,第二个有一个 vaultId 为 1。
让我们使用 getWallet 方法检索你的钱包实例:
const retrievedWallet = walletManager.getWallet(myWallet.address);本指南介绍了如何实例化 WalletManager,设置它的第一个库,并检索库信息的步骤。接下来的部分将探索 WalletManager 的更多功能,并深入了解其库的使用和其存储系统的详细信息。
锁定和解锁 WalletManager
本指南将向你介绍如何使用 WalletManager 管理你的钱包的锁定状态。
初始化和解锁 WalletManager
如前所述,WalletManager 实例一开始处于锁定状态。在使用之前,你需要通过 unlock 方法提供密码来解锁它。
const walletManager = new WalletManager();
// #context const password = 'my-password';
await walletManager.unlock(password);锁定 WalletManager
当你使用 lock 方法锁定 WalletManager 时,它所有的库和关联账户(钱包)都会被清除。由于存储系统对所有数据进行了加密和保存,这种清除是可能的。WalletManager 频繁使用存储系统来保存其状态。因此,当它被锁定时,包括导出库、私钥、访问钱包和保存/加载 WalletManager 状态在内的敏感操作是不可能的。
await walletManager.lock();记住,使用完毕后锁定你的 WalletManager 是确保资金安全的关键步骤。
通过解锁 WalletManager 重新访问你的钱包
unlock 方法需要之前设置的密码来解锁 WalletManager 及其所有库。密码解密了存储的库,允许 WalletManager 加载其保存的数据。
await walletManager.unlock(password);提供错误的密码将导致错误。然而,当成功解锁时,WalletManager 又可以再次使用了。
验证锁定状态
你可以使用 isLocked 方法来确认 WalletManager 的当前锁定状态:
const isLocked = walletManager.isLocked;
// #context console.log(isLocked); // Outputs true if locked, false if unlocked更新密码
要更改当前密码,请调用 updatePassphrase 方法,并提供旧密码和新密码:
const newPassword = 'my-new-password';
await walletManager.updatePassphrase(password, newPassword);提醒: 始终锁定你的 WalletManager
始终确保在完成后锁定 WalletManager。这一步对于保护你的钱包至关重要。
await walletManager.unlock(newPassword);
// perform your tasks...
walletManager.lock(); // Always lock your WalletManager when you're done通过使用 WalletManager 来管理锁定和解锁状态,你引入了额外的安全层。当不使用时,切勿忘记锁定你的 WalletManager。