最近在研究以太坊,看到智能合约的Event部分,在etherscan上看到下面这张图
就是这个topic0,据说这是Received(blablabal)那一串的哈希值。怀着动手一试的想法,我用golang测了一下,诚不欺我也。代码如下:
t.Run("test keccak256 event", func(t *testing.T) {
var testcases = []struct {
str string
want string
} {
{
//"event Transfer(address indexed from, address indexed to, uint tokens)",
//"event Transfer(address, address, uint)",
"Transfer(address,address,uint256)",
"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
},
{
"Received(uint256,address,bytes)",
"606834f57405380c4fb88d1f4850326ad3885f014bab3b568dfbf7a041eef738",
},
}
for _, oneCase := range testcases {
var keccak256Hash hash.Hash
var eventFunHash string
keccak256Hash = sha3.NewLegacyKeccak256()
keccak256Hash.Write([]byte(oneCase.str))
eventFunHash = hex.EncodeToString(keccak256Hash.Sum(nil))
if eventFunHash != oneCase.want {
t.Error("keccak256 error")
t.Error("want:", oneCase.want)
t.Error("got:", eventFunHash)
return
}
}
})
(全文完)