首页 > 解决方案 > 将参数作为 bytes32 传递给 Solidity 智能合约

问题描述

我正在使用这个 Ethereum Go Client并尝试将字符串 / bytes32 传递给 Solidity。

智能合约中的功能非常简单(现在进行测试):

  function vote(bytes32 id) {
    //id has the value 0x0000000000000000000000000000000000000000000000000000000000000000
  }

打电话

hash, err := contract.Send(transaction, "vote", "myString")

将导致0x0000000000000000000000000000000000000000000000000000000000000000

对于 bytes32 参数 id...

我如何必须将参数从 Go 传递给我的智能合约,以便solidity 具有正确的值?

或者,我只需要传递该字符串的唯一标识符,我可以轻松地从字符串在 Golang 中创建该标识符......

标签: goethereumsolidityweb3go-ethereum

解决方案


要将字符串转换bytes32为稳固性,您所要做的就是在 Go 中创建一个固定长度的字节数组并将字符串的值复制到其中。

value := [32]byte{}
copy(key[:], []byte("hello"))

然后你可以将值传递给智能合约函数:

hash, err := contract.Send(transaction, "vote", value)

推荐阅读