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

两种钱包之非确定性钱包(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 语言创建非确定性钱包

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

你可能感兴趣的文章

更多

热门币种

  • 币种
    最新价格
    24H涨跌幅
  • bitcoin BTC 比特币

    BTC

    比特币

    $ 73926.72¥ 500210.36
    +0.48%
  • ethereum ETH 以太坊

    ETH

    以太坊

    $ 2024.62¥ 13699.18
    +0.73%
  • tether USDT 泰达币

    USDT

    泰达币

    $ 0.9986¥ 6.7568
    -0.01%
  • binance-coin BNB 币安币

    BNB

    币安币

    $ 718.58¥ 4862.12
    +11.86%
  • ripple XRP 瑞波币

    XRP

    瑞波币

    $ 1.3455¥ 9.104
    +2.13%
  • usdc USDC USD Coin

    USDC

    USD Coin

    $ 1.0009¥ 6.7723
    +0.02%
  • solana SOL Solana

    SOL

    Solana

    $ 82.794¥ 560.2
    +1.24%
  • tron TRX 波场

    TRX

    波场

    $ 0.3473¥ 2.3499
    +0.87%
  • dogecoin DOGE 狗狗币

    DOGE

    狗狗币

    $ 0.1011¥ 0.684
    +1.43%
  • hyperliquid HYPE Hyperliquid

    HYPE

    Hyperliquid

    $ 67.3192¥ 455.5
    +3.64%

币圈快讯

  • ClearBank推出数字资产通道

    2026-05-31 05:54
    5月31日,ClearBankEurope今日宣布推出其数字资产轨道,这是一项新功能,可实现可编程流动性,通过SEPAInstant以欧元进行24/7*全天候法币支付,用于跨境结算。该服务面向受监管机构开放,包括电子货币机构(EMI)、支付机构(​​PI)和银行。受荷兰金融监管局(MiCA)监管且拥有非零售用途的公司也可以通过数字资产通道进行资金转移。
  • Meta正成立一个新的企业解决方案部门

    2026-05-31 05:34
    5月31日,据TheInformation报道,Meta正在成立一个新的企业解决方案部门,旨在将工程师和产品经理派驻到企业客户团队中。此举是Meta为向投资者证明其在人工智能基础设施方面巨额投入的合理性而做出的努力。
  • Raydium累计交易量突破1万亿美元

    2026-05-31 05:23
    链上流动性协议Raydium累计交易量超过1万亿美元。RAY代币已在Revolut和Robinhood两大消费金融应用商店上线。本月,该协议的代币化股权交易量突破10亿美元,包括特斯拉和英伟达在内的美国上市股票通过xStocks及相关发行人合作关系,经由Raydium流动性池进行交易。
  • Sella银行获得意大利批准设立加密资产服务

    2026-05-31 04:56
    5月31日,BancaSella已完成按照欧洲MiCA(加密资产市场)条例规定向意大利银行提交的通知程序,成为意大利第一家获准提供加密资产服务的银行,尤其涉及数字资产的托管和转移。
  • 本周比特币ETF净流出1.2531亿美元XRPETF本周净流入1188万美元

    2026-05-31 04:35
    本周加密货币交易所交易基金(ETF)资金流持续承压,比特币基金连续第十个交易日出现资金流出,以太坊基金的资金流出态势则已延续至第14个交易日。本周比特币ETF净流出1.2531亿美元,该类别连续第10个交易日处于负值区间。以太坊ETF同样持续下跌,但情况比前几个交易日更为均衡。该类基金净流出1791万美元,连续下跌天数已延长至14个交易日。瑞波币(XRP)ETF净流入1188万美元,其中Bitwise的XRP产品以736万美元领跑。HYPEETF录得950万美元资金流入,全部来自21Shares的THYP。SolanaETF净流入132万美元。
  • 查看更多