Hyperledger fabric EVM 如何从 public 键生成地址?

How does Hyperledger fabric EVM generate the address from the public key?

在以太坊中,钱包地址是钱包的 public 密钥的 keccak256 哈希的最后 20 个字节。

我正在使用 Hyperledger Fabric EVM,我想知道从 public 密钥生成地址的机制是什么。

我将 keccak256、sha256 和 sha-3 256 应用到我的 public 密钥,但我没有得到正确的地址...

这是我的 pem 格式的私钥:

-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgjUp+AWrFlIVp13Dl
rpm/Uu2M++ZhOC4AbmjWdsofP7ihRANCAARWnvMdt+149KEt9yPKoLHG98lL5wPe
cGVMBMxsJhz3JLBSQlBCfLMz8fe5vIng4N7TGYt66P2HNeG/fLjwt7jI
-----END PRIVATE KEY-----

这是我的 public pem 格式的密钥:

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVp7zHbftePShLfcjyqCxxvfJS+cD
3nBlTATMbCYc9ySwUkJQQnyzM/H3ubyJ4ODe0xmLeuj9hzXhv3y48Le4yA==
-----END PUBLIC KEY-----

这是我的 public 十六进制格式的密钥:

Public_key = 0x04569ef31db7ed78f4a12df723caa0b1c6f7c94be703de70654c04cc6c261cf724b0524250427cb333f1f7b9bc89e0e0ded3198b7ae8fd8735e1bf7cb8f0b7b8c8

这是我的地址:

13065B11B498911F2A19815035D0AC24457D1BB6

我正在使用 secp256r1

地址是3059301306072a8648ce3d020106082a8648ce3d030107034200 + public_key_hex

的sha3-256的最后20个字节

在我的示例中,取“结果”的最后 160 位(20 字节):

var Public_key = 0x04569ef31db7ed78f4a12df723caa0b1c6f7c94be703de70654c04cc6c261cf724b0524250427cb333f1f7b9bc89e0e0ded3198b7ae8fd8735e1bf7cb8f0b7b8c8
var result = SHA3_256(0x3059301306072a8648ce3d020106082a8648ce3d030107034200 + Public_key)
var address = last_20bytes(result)

console.log("address = ",address);

//address = 13065B11B498911F2A19815035D0AC24457D1BB6