本文档详细介绍了比特币核心钱包的管理,包括创建、加密、解锁、备份和恢复钱包的步骤,以及钱包口令的重要性。同时还介绍了将旧版钱包迁移到描述符钱包的方法,以及迁移后可能产生的新钱包。
从 0.21 版本开始,Bitcoin Core 不再有默认钱包。
可以使用 createwallet
RPC 或 Create wallet
GUI 菜单项创建钱包。
在 GUI 中,当没有加载任何钱包时,主屏幕上会显示 Create a new wallet
按钮。或者,可以选择 File
-> Create wallet
。
例如,以下命令创建一个描述符钱包。可以通过运行 bitcoin-cli help createwallet
找到有关此命令的更多信息。
$ bitcoin-cli createwallet "wallet-01"
bitcoin rpc
也可以代替 bitcoin-cli
。
默认情况下,钱包创建在数据目录的 wallets
文件夹中,该文件夹因操作系统而异,如下所示。用户可以使用 -datadir
或 -walletdir
初始化参数来更改默认设置。
操作系统 | 默认钱包目录 |
---|---|
Linux | /home/<user>/.bitcoin/wallets |
Windows | C:\Users\<user>\AppData\Local\Bitcoin\wallets |
macOS | /Users/<user>/Library/Application Support/Bitcoin/wallets |
默认情况下,wallet.dat
文件未加密,因此,如果攻击者可以访问存储钱包或备份的设备,则很容易受到攻击。
钱包加密可以防止未经授权的访问。但是,由于忘记密码,这会大大增加丢失币的风险。没有办法恢复密码。用户应该好好考虑这种权衡。
钱包加密也可能无法防止更复杂的攻击。例如,攻击者可以通过在用户的机器上安装键盘记录程序来获取密码。
加密钱包或更改密码后,需要立即创建新的备份。原因是密钥池被刷新,并且在加密后生成了一个新的 HD 种子。使用新种子收到的任何比特币都无法从以前的备份中恢复。
可以使用以下命令加密钱包的私钥:
$ bitcoin-cli -rpcwallet="wallet-01" encryptwallet "passphrase"
加密后,可以使用 walletpassphrasechange
命令更改密码。
$ bitcoin-cli -rpcwallet="wallet-01" walletpassphrasechange "oldpassphrase" "newpassphrase"
传递给 -rpcwallet
的参数是要加密的钱包的名称。
只有钱包的私钥被加密。所有其他钱包信息,例如交易,仍然可见。
也可以通过 passphrase
参数在 createwallet
命令中加密钱包的私钥:
$ bitcoin-cli -named createwallet wallet_name="wallet-01" passphrase="passphrase"
请注意,如果密码丢失,钱包中的所有币也将永远丢失。
如果钱包已加密,并且用户尝试任何与私钥相关的操作(例如发送比特币),则会显示错误消息。
$ bitcoin-cli -rpcwallet="wallet-01" sendtoaddress "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx" 0.01
error code: -13
error message:
Error: Please enter the wallet passphrase with walletpassphrase first.
要解锁钱包并允许它运行这些操作,需要 walletpassphrase
RPC。
此命令采用密码和一个名为 timeout
的参数,该参数指定将钱包解密密钥存储在内存中的时间(以秒为单位)。此时间段到期后,用户需要再次执行此 RPC。
$ bitcoin-cli -rpcwallet="wallet-01" walletpassphrase "passphrase" 120
在 GUI 中,没有用于解锁钱包的特定菜单项。当用户发送比特币时,系统会自动提示输入密码。
要备份钱包,必须使用 backupwallet
RPC 或 Backup Wallet
GUI 菜单项,以确保在复制时文件处于安全状态。
在 RPC 中,目标参数必须包含文件的名称。否则,该命令将返回一条错误消息,例如“Error: Wallet backup failed!”。
$ bitcoin-cli -rpcwallet="wallet-01" backupwallet /home/node01/Backups/backup-01.dat
在 GUI 中,在右上角的 Wallet
下拉列表中选择钱包。如果未显示此列表,则可以在 File
-> Open Wallet
中加载钱包(如果需要)。然后,可以在 File
-> Backup Wallet…
中完成备份。
此备份文件可以存储在一个或多个脱机设备上,这些设备必须足够可靠才能在紧急情况下工作并且没有恶意软件。可以定期测试备份文件,以避免将来出现问题。
如果计算机感染了恶意软件,则在恢复备份文件时可能会危及钱包。最大程度地减少这种情况的一种方法是不将备份连接到在线设备。
如果由于任何原因而丢失了钱包和所有备份,则与此钱包相关的比特币将永久无法访问。
最初的 Bitcoin Core 钱包是不相关的私钥的集合。如果一个非 HD 钱包收到发送到某个地址的资金,然后从在该地址生成之前制作的备份中恢复,那么发送到该地址的任何资金都将丢失,因为没有确定性的机制来再次派生该地址。
Bitcoin Core 0.13 版本 引入了具有确定性密钥派生的 HD 钱包。使用 HD 钱包,用户在恢复旧备份时不再会丢失资金,因为所有地址都是从 HD 钱包种子派生的。
这意味着单个备份足以随时恢复币。仍然建议定期备份(每周一次)或在大量新交易后备份,以维护元数据(例如标签)。无法从区块链重新扫描中检索元数据,因此,如果备份太旧,元数据将永远丢失。
在 0.13 版本之前创建的钱包不是 HD 钱包,必须每使用 100 个密钥备份一次(自上次备份以来),或者更频繁地备份以维护元数据。
要恢复钱包,必须使用 restorewallet
RPC 或 Restore Wallet
GUI 菜单项(File
-> Restore Wallet…
)。
$ bitcoin-cli restorewallet "restored-wallet" /home/node01/Backups/backup-01.dat
之后,可以使用 getwalletinfo
检查钱包是否已完全恢复。
$ bitcoin-cli -rpcwallet="restored-wallet" getwalletinfo
也可以通过 File
-> Open wallet
在 GUI 中加载恢复的钱包。
了解钱包安全性对于安全存储你的比特币至关重要。一个关键方面是钱包密码,用于加密。让我们探讨一下它的细微差别、作用、加密过程和限制。
不是种子: 钱包密码和种子是钱包安全中的两个独立组件。种子,或 HD 种子,充当在分层确定性 (HD) 钱包中派生私钥和公钥的主密钥。相比之下,密码充当额外的安全层,专门用于保护钱包中的私钥。密码充当保障措施,需要额外的身份验证层才能访问钱包中的资金。
防止未经授权的访问: 在未经授权的用户访问到你的未锁定的计算机或设备,而你的钱包应用程序处于活动状态时,在这些情况下,密码可以作为保护措施,保障你的资金安全。如果没有密码,他们将无法访问你钱包的资金或执行交易。但是,请务必注意,有权访问的人员可能会通过安装键盘记录程序来损害你密码的安全性。
不加密元数据或公钥: 重要的是要注意,密码主要保护私钥和对钱包中资金的访问。它不加密与交易或公钥关联的元数据。有关你的交易历史记录和所涉及的公钥的信息可能仍然可见。
如果忘记或丢失,存在资金损失的风险: 如果钱包密码过于复杂,随后被忘记或丢失,则存在永久丢失对资金访问权限的风险。忘记密码将导致无法解锁钱包和访问资金。
可以使用 migratewallet
RPC 将旧钱包(传统的非描述符钱包)迁移到描述符钱包。迁移后的钱包的所有地址和私钥都将被添加到新创建的描述符钱包中,该钱包的名称与原始钱包相同。由于描述符钱包不支持拥有私钥和仅观察脚本,因此迁移后最多可能会创建两个额外的钱包。除了名称相同的描述符钱包外,还可能存在一个名为 <name>_watchonly
和 <name>_solvables
的钱包。<name>_watchonly
包含所有仅观察脚本。<name>_solvables
包含钱包知道但未观察相应 P2(W)SH 脚本的任何脚本。
迁移后的钱包也会以不同的方式生成新地址。虽然将使用相同的 BIP 32 种子,但将使用BIP 44、49、84 和 86 标准派生路径。迁移后,需要创建钱包的新备份。
鉴于旧钱包可以了解、观察和签名的脚本的可能配置数量非常多,migratewallet
仅尽力将所有这些内容捕获到描述符钱包中。可能存在一些不可预见的配置,导致某些脚本被排除在外。如果迁移意外失败或以其他方式错过了任何脚本,请在 GitHub 上创建一个 issue。原始钱包的备份可以在钱包目录中找到,名称为 <name>-<timestamp>.legacy.bak
。
可以使用从备份恢复钱包部分中讨论的方法恢复备份。
- 原文链接: github.com/bitcoin/bitco...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!