【2026】两种钱包之非确定性钱包(keystore管理私钥)(中国用户适用)

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

📊 数据说明:文中数据均来自币安官方披露及第三方链上分析,截止 2026年10月26日,投资有风险,入市需谨慎。

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

以太坊上有 2 种钱包:

  • 非确定性钱包,也叫随机钱包,每个账户通过独立的随机数生成器创建,使用keystore管理账户,没有助记词。

  • 分层确定性钱包,也叫HD Wallet,每个账户通过固定的种子(seed)派生,使用助记词管理所有账户。

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

概念

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

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

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

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

── 相关资源推荐 ──


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🏆 【2026交易所横向对比 · 客观数据】

  • 日交易量:币安 800亿$ > 欧易 200亿$ > Coinbase 50亿$

  • 手续费:币安0.08% = 欧易0.08% << Coinbase 0.60%

  • 上币数量:币安350+ / 欧易300+ / Coinbase200+

  • 中国用户支持:币安✅ / 欧易✅ / Coinbase❌

💡 综合推荐:新手→币安 · 进阶→币安+欧易双开

👉 注册币安·邀请码B2345 →

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


  • 需要引入的包

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 文件夹。

── 读者常用入口 ──

📋 三步完成注册 · 全程中文

Step 1 点击链接进入官方入口
Step 2 手机号/邮箱完成注册
Step 3 填写邀请码 B2345 → 解锁20%折扣

🚀 开始注册 →

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 语言创建非确定性钱包。


❓ 常见问题解答(FAQ)

中国用户能用币安吗?

可以,通过专属渠道访问,建议使用境外手机号注册。

币安注册有什么福利?

邀请码 B2345:手续费永久减免20% + 新手任务奖励最高100USDT。

加密货币交易所哪家最安全?

安全排序:币安 ≥ OKX > Coinbase > Kraken。

币安和OKX哪个适合新手?

币安注册用户超2亿,中文教程最完善,新手首选。

※ ※ ※

── 实用工具推荐 ──


🏆 币安 · 全球最大加密货币交易所

日交易量 800亿美元 · 注册用户 2亿+
中文完整支持 · 手续费全网最低之一

邀请码 B2345 → 手续费减免20%
👉 🇨🇳 中国区注册 →


CC BY-NC-ND 4.0 授权
已推荐到频道:时事・趋势