Передать параметр как bytes32 в Solidity Smart Contract - PullRequest
0 голосов
/ 06 июня 2018

Я использую этот Ethereum Go Client и пытаюсь передать строку / байт32 в Solidity.

Функция в смарт-контракте очень проста (для тестирования сейчас):

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

вызов

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

приведет к 0x0000000000000000000000000000000000000000000000000000000000000000

для идентификатора параметра bytes32 ...

Как бы я должен был передатьпараметр для моего Smart Contract от Go, чтобы прочность имела правильное значение?

В качестве альтернативы мне просто нужно передать уникальный идентификатор для этой строки, который я могу легко создать в Golang из строки ...

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

Чтобы преобразовать строку в bytes32 для надежности, все, что вам нужно сделать, - это создать байтовый массив фиксированной длины в Go и скопировать в него значение строки.

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

Затем вы можете передатьзначение для функции смарт-контракта:

hash, err := contract.Send(transaction, "vote", value)
0 голосов
/ 10 июня 2018

Создатель пакета сказал мне, что причина этого заключается в следующем: https://github.com/regcostajr/go-web3/issues/31

Он пытается ее решить.

0 голосов
/ 07 июня 2018

Я думаю, вы должны закодировать его

types.ComplexString("myString")
...