go - 将参数作为 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 中创建该标识符......
解决方案
要将字符串转换bytes32
为稳固性,您所要做的就是在 Go 中创建一个固定长度的字节数组并将字符串的值复制到其中。
value := [32]byte{}
copy(key[:], []byte("hello"))
然后你可以将值传递给智能合约函数:
hash, err := contract.Send(transaction, "vote", value)
推荐阅读
- json - 如何创建函数以在 Flutter 中传递 Json 数据?
- .net-core - 我们收到一些异常,异常消息:“LINQ 表达式 'DbSet
() - python - 预提交 MyPy 钩子:如何为变量强制执行显式类型?
- python - 如何在 MNE-Python 中读取“.edf”文件。我试过但显示以下错误
- java - 没有正则表达式的 URL 路径匹配器
- git - 如何在 GitLab 中正确使用 git send-email?
- reactjs - 如何从 redux 导入和加载图像?
- c# - 只有一个消费者从 RabbitMQ 的队列中接收消息
- flutter - FLUTTER:在构建 listview.builder 时显示加载指示器
- sql - 为什么连接会给出重复的行?