Golang

如何在golang中計算CREATE2地址?

  • July 22, 2020

我有一個工廠模式智能合約,它通過最小代理合約和 CREATE2 操作碼複製主智能合約來創建其他智能合約。在 golang 中計算 CREATE2 最終地址的正確方法是什麼?

go-ethereum有這個功能https://pkg.go.dev/github.com/ethereum/go-ethereum/crypto?tab=doc#CreateAddress2

func CreateAddress2(b common.Address, salt [32]byte, inithash []byte) common.Address

b工廠在哪裡,salt使用的鹽,inithash是你的初始化數據雜湊。

你可以inithash這樣計算

func getInithash(contractABI, contractBin string, params ...interface{}) []byte {
   parsed, _ := abi.JSON(strings.NewReader(contractABI))
   packedArguments, _ := parsed.Pack("", params...) // constructor params

   initData := append(common.FromHex(contractBin), packedArguments...)
   return crypto.Keccak256(initData)
}

引用自:https://ethereum.stackexchange.com/questions/85187