Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 62.2MB ·虚拟内存 1300.0MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
以太坊地址类似银行账号,通过该地址可以进行发送、接收以太坊,查询交易或者余额信息等。以太坊地址的表现形式是一串十六进制的数字,它从公钥的 Keccak256 哈希值的最后20个字节导出的标识符。
package main import ( "crypto/ecdsa" "crypto/elliptic" "fmt" "crypto/rand" "golang.org/x/crypto/sha3" "github.com/ethereum/go-ethereum/crypto/secp256k1" ) type KeccakState interface { Write(p []byte) (n int, err error) Read([]byte) (int, error) } func Keccak256(data ...[]byte) []byte { b := make([]byte, 32) d := sha3.NewLegacyKeccak256().(KeccakState) for _, b := range data { d.Write(b) } d.Read(b) return b } func PubkeyToAddress(p ecdsa.PublicKey) string { pubBytes := elliptic.Marshal(secp256k1.S256(), p.X, p.Y) return fmt.Sprintf("0x%x", Keccak256(pubBytes[1:])[12:]) } func main() { privateKeyECDSA, _ := ecdsa.GenerateKey(secp256k1.S256(), rand.Reader) fmt.Println(PubkeyToAddress(privateKeyECDSA.PublicKey)) }
输出结果:
0x310ea38c411754583a87417be91ca235f3cb005c
Geth 在创建账号时会生成一个对应 keystore JSON 文件,Keystore 文件存储加密后的私钥信息,因此我们需要做的就是导入这个 Keystore 文件,这个文件通常在同步区块数据的目录下的 k ...