Передайте параметр как 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 из строки ...

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
2
0
1 865
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Другие вопросы по теме