当前位置:首页 > 区块链技术 > 非确定性钱包介绍

两种钱包之非确定性钱包(keystore管理私钥)

2026-02-28 12:36:50 | 来源: | 作者:佚名
本文讲解非确定性钱包,因为比较简单,下面会直接给出代码实现,下一篇文章会详细讲解分层确定性钱包,这个已经成为了行业标准,我会重磅介绍,并对比两种钱包的适用场景

以太坊上有 2 种钱包:

  • 非确定性钱包,也叫随机钱包,每个账户通过独立的随机数生成器创建,使用keystore管理账户,没有助记词。
  • 分层确定性钱包,也叫HD Wallet,每个账户通过固定的种子(seed)派生,使用助记词管理所有账户。

本文讲解非确定性钱包,因为比较简单,下面会直接给出代码实现。下一篇文章会详细讲解分层确定性钱包,这个已经成为了行业标准,我会重磅介绍,并对比两种钱包的适用场景。

概念

随机数生成器:如Web3专题(一) 助记词和生成私钥、公钥、地址的基本原理所说,私钥是 256 位随机数字,需要使用安全的随机源生成,并经过一系列算法生成公钥、地址。

keystore:是一种文件格式,称为存储机制,主要目的是提供一种安全的方式来保管私钥,需要用户提供密码来解锁私钥。

通常,用 keystore 文件加密私钥等信息,来保护非确定性钱包。

使用 Go 语言开发一个非确定性钱包

  • 需要引入的包
import (
	"github.com/ethereum/go-ethereum/accounts/keystore"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/crypto"
)
  • 创建 keystore 对象,所有的私钥都由这个 keystore 对象管理。在这里,我们指定./keystore文件夹保存账户。

特别提醒:
NewKeyStore 方法只会加载目录,并监控目录的变化,不会创建账户,创建账户在下面第 3 步。
NewKeyStore 方法内部会自动扫描./keystore文件夹,并加载这个文件夹下的所有账户到 keystore 对象

// 第一个参数:./keystore 指定账户所在的文件夹
ks := keystore.NewKeyStore("./keystore", keystore.StandardScryptN, keystore.StandardScryptP)
  • 创建一个新账户

NewAccount 会利用你指定的密码在./keystore 目录下创建一个 json 文件,这个文件包含了加密过的私钥、公钥、地址等。
每执行一次 NewAccount 都会创建一个新账户。因此,如果只需要加载已有账户,则不需要执行这个方法。
所有的 json 文件都会存放在./keystore 文件夹。

acc, err := ks.NewAccount("your password")
if err != nil {
    panic(err)
}
  • 获取已创建的账户,会从./keystore 文件夹内拿到所有账户

ks对象是第2步创建的,会自动扫描./keystore 文件夹,拿到所有账户。

for _, acc := range ks.Accounts() {
    fmt.Println("账户地址:", acc.Address.String())
}
  • 如果希望签名交易的话,可以使用钱包
for _, wallet := range ks.Wallets() {
    // 这里每个钱包获得的第一个account和上面第4步的账户是一一对应的
    _, _ = wallet.SignTx(wallet.Accounts()[0], nil, nil)
    _, _ = wallet.SignData(wallet.Accounts()[0], "", nil)
}
  • 如果希望导出私钥,则需要密码才可以。PASSWORD是上面第3步创建新账户设置的密码。
// 先把账户的 json 文件导出为[]byte
kjson, err := ks.Export(ks.Accounts()[0], PASSWORD, PASSWORD)
if err != nil {
    panic(err.Error())
}
// 通过kjson+密码可以解密私钥
key, err := keystore.DecryptKey(kjson, PASSWORD)
if err != nil {
    panic(err.Error())
}
privateKey := key.PrivateKey
fmt.Println(common.BytesToHash(crypto.FromECDSA(privateKey)).String())

至此,我们已经学会了如何使用 Go 语言创建非确定性钱包。

免责声明:本文只为提供市场讯息,所有内容及观点仅供参考,不构成投资建议,不代表本站观点和立场。投资者应自行决策与交易,对投资者交易形成的直接或间接损失,作者及本站将不承担任何责任。!

你可能感兴趣的文章

币圈快讯

  • 伊朗媒体:伊朗并未经巴基斯坦向美方提交新方案

    2026-10-25 14:03
    10月25日,伊朗半官方媒体塔斯尼姆通讯社周六晚间援引匿名消息人士消息称,有关伊朗提议重启霍尔木兹海峡通航、换取美方解除海上封锁的报道均为虚假消息,纯属臆想。该消息人士表示:“从根本上来说,伊朗不接受‘霍尔木兹海峡换解除封锁’这种交易条件。”消息同时提到,只有美方满足伊朗诉求,包括停止破坏伊朗港口与航运,围绕海峡的冲突才有望化解。
  • Pump.fun过去24小时收入达200万美元超过Hyperliquid

    2026-10-25 13:45
    10月25日,据HLHUB(Community)披露,Pump.fun过去24小时收入达200万美元,超过Hyperliquid。
  • 特朗普称随时可能再打伊朗

    2026-10-25 13:31
    10月25日,美国总统特朗普当地时间10月24日在佛罗里达州西棕榈滩参加中期选举投票,当被现场记者问及是否可能再对伊朗发动袭击时,特朗普回应称,他不会向媒体透露这种信息,但他同时表示,美国随时可能再对伊朗动手,也可能达成协议。特朗普还说,他本可以在一年前用B-2轰炸机“搞定然后走人”,但他认为伊朗总会想出办法制造出核弹,因此,必须与伊朗达成永久性的协议。(CCTV国际时讯)
  • 某地址做多26974枚ETH目前未实现盈利已达84.2万美元

    2026-10-25 13:10
    10月25日,据Lookonchain监测,交易高手地址0xe813在市场下跌后开立了26,974枚ETH(价值约6,388万美元)的多单,目前未实现盈利已达84.2万美元。该交易者的胜率为100%,此前曾通过交易NEAR获利330万美元。
  • 美股硬科技板块暗盘集体拉升

    2026-10-25 13:01
    周末最新消息,暂停训练一个月后,估值超万亿美元的OpenAI已恢复训练其最先进AI模型。不过,训练期间模型不得直接访问实时互联网,直到OpenAI认为已具备足够的安全保障措施,能够降低未发布模型在训练期间于网上执行未经批准操作的风险。北京时间25日,美股硬科技板块暗盘集体拉升。截至发稿,英特尔暗盘1.86%,美光科技暗盘、闪迪暗盘、康宁暗盘、超威半导体暗盘涨幅均超过1%,希捷科技暗盘涨近0.80%,英伟达暗盘涨近0.50%。有市场分析人士认为,OpenAI恢复前沿模型训练但训练期间断网,对全球AI硬件股算“偏暖”消息:模型重启训练意味着算力消耗回升,芯片、服务器、网络和存储需求预期获支撑,安全隔离也可能带来额外设施需求。不过,这短期难算订单落地式的强利好,更多是情绪和预期修复,而非基本面强催化。(券商中国)
  • 查看更多