Передайте параметр как bytes32 в смарт-контракт Solidity

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

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

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

звонящий

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

приведет к 0x0000000000000000000000000000000000000000000000000000000000000000

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

Как мне передать параметр в свой смарт-контракт из Go, чтобы твердость имела правильное значение?

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


person bergben    schedule 06.06.2018    source источник


Ответы (3)


Я думаю, тебе нужно это закодировать

types.ComplexString("myString")
person mirg    schedule 07.06.2018

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

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

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

hash, err := contract.Send(transaction, "vote", value)
person Miguel Mota    schedule 08.06.2018

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

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

person bergben    schedule 10.06.2018