golang 代码 需要找到对应solidity方法的abi。
package main
import (
"fmt"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"math/big"
"strings"
)
func main() {
abiString := `
[
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "string",
"name": "data",
"type": "string"
}
],
"name": "gg",
"outputs": [],
"stateMutability": "pure",
"type": "function"
}
]`
contractAbi, _ := abi.JSON(strings.NewReader(abiString))
val1, _ := new(big.Int).SetString("100", 10)
bytes, _ := contractAbi.Pack("gg",
common.HexToAddress("0x5B38Da6a701c568545dCfcB03FcB875f56beddC4"),
val1,
"aaaa",
)
bytes = bytes[4:]
hash := crypto.Keccak256Hash(bytes)
fmt.Println(hash)
}
solidity 代码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract Test {
function gg(
address to,
uint256 value,
string calldata data
) external pure returns (bytes32) {
bytes32 hash = keccak256(abi.encodePacked(to, value, data));
return hash;
}
}