将参数作为 bytes32 传递给 Solidity 智能合约
Pass parameter as bytes32 to Solidity Smart Contract
我正在使用 this 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 中轻松地从该字符串创建该标识符...
我认为你必须对其进行编码
types.ComplexString("myString")
要将字符串转换为 bytes32
以获得稳定性,您所要做的就是在 Go 中创建一个固定长度的字节数组并将字符串的值复制到它。
value := [32]byte{}
copy(key[:], []byte("hello"))
然后你可以将值传递给智能合约函数:
hash, err := contract.Send(transaction, "vote", value)
包的创建者告诉我这是这个问题的原因:https://github.com/regcostajr/go-web3/issues/31
他正在努力解决。
我正在使用 this 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 中轻松地从该字符串创建该标识符...
我认为你必须对其进行编码
types.ComplexString("myString")
要将字符串转换为 bytes32
以获得稳定性,您所要做的就是在 Go 中创建一个固定长度的字节数组并将字符串的值复制到它。
value := [32]byte{}
copy(key[:], []byte("hello"))
然后你可以将值传递给智能合约函数:
hash, err := contract.Send(transaction, "vote", value)
包的创建者告诉我这是这个问题的原因:https://github.com/regcostajr/go-web3/issues/31
他正在努力解决。