Hash 如何将长度为20字节的以太坊钱包地址转换为Metamask中的十六进制格式?

Hash 如何将长度为20字节的以太坊钱包地址转换为Metamask中的十六进制格式?,hash,byte,ethereum,geth,Hash,Byte,Ethereum,Geth,使用Geth源代码中的一些代码,我试图找到一种生成有效以太坊钱包的方法。首先,我使用十六进制版本的secp256k1素数减1,即“FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAEDCE6AF48A03BBFD25E8CD0364140”。将其插入元掩码,我得到一个地址“0x80C0dbf239224071c59dD8970ab9d542E3414aB2”。我想使用这些函数来获得等效地址 到目前为止,我已经将私钥的十六进制格式设置为“ffffffffff

使用Geth源代码中的一些代码,我试图找到一种生成有效以太坊钱包的方法。首先,我使用十六进制版本的secp256k1素数减1,即“FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAEDCE6AF48A03BBFD25E8CD0364140”。将其插入元掩码,我得到一个地址“0x80C0dbf239224071c59dD8970ab9d542E3414aB2”。我想使用这些函数来获得等效地址

到目前为止,我已经将私钥的十六进制格式设置为“fffffffffffffffffffffff ebaedce6AF48A03BBFD25E8CD0364140”。我得到一个长度为20字节的数组[164 121 62 11 173 85 89 159 11 68 30 45 4 221 247 191 191 44 73 181]

具体来说,我定义了secp256k1 prime-1的十六进制值,并使用了Geth的Crypto的newKey()函数

我有两个问题。首先,我是否将私钥正确地作为十六进制输入?其次,如何将这个20字节长的数组转换为“普通”十六进制地址

var r io.Reader
r = strings.NewReader("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140")


tmp, err := newKey(r)

if err != nil {
    fmt.Println(err)
}
fmt.Println(tmp.Address)