以太坊智能合約Event的哈希值驗證

最近在研究以太坊,看到智能合約的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
			}
		}
	})

(全文完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章