107-Cosmos离线开发
0x-wen

cosmos地址生成

非确定性钱包地址生成

  • secp256k1.GenPrivKey() 生成私钥
  • 通过私钥->公钥->cmtcrypto.Address->bytes
  • 转换为cosmos中 baseAccount 账户模型并获取地址
1
2
3
4
5
6
7
8
9
func createPrivKey() {
privKey := secp256k1.GenPrivKey()
fmt.Println("privKey:", hex.EncodeToString(privKey.Bytes()))

var privKeyBytes sdk.AccAddress = privKey.PubKey().Address().Bytes()
baseAccount := authtypes.NewBaseAccount(privKeyBytes, privKey.PubKey(), 0, 0)

fmt.Println("address:", baseAccount.Address)
}

确定性钱包生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
	func NewHDWallet() {
// bip39 -> 助记词
entropy, _ := bip39.NewEntropy(128)
mnemonic, _ := bip39.NewMnemonic(entropy)
fmt.Println("助记词:", mnemonic)
// 由助记词生成种子(Seed), password为空可兼容其他钱包
seed := bip39.NewSeed(mnemonic, "")
masterKey, ch := hd.ComputeMastersFromSeed(seed)
priv, _ := hd.DerivePrivateKeyForPath(masterKey, ch, "m/44'/118'/0'/0/0")

privKey := &secp256k1.PrivKey{Key: priv}
fmt.Println("privKey:", hex.EncodeToString(privKey.Bytes()))
accAddr, err := bech32.ConvertAndEncode(sdk.Bech32MainPrefix, privKey.PubKey().Address())
if err != nil {
panic(err)
}
fmt.Println("accAddr:", accAddr)
}
由 Hexo 驱动 & 主题 Keep
总字数 41.3k