Ошибка Byte32 даже после преобразования строки в шестнадцатеричный формат

Везде искал людей с похожими проблемами, но ничего не нашел.

Я не понимаю, почему я продолжаю получать эту ошибку (да, я знаю, что у других тоже была эта ошибка, но не по той же причине, что и у меня):

>Error: invalid bytes32 value (arg="_orgName", coderType="bytes32", value="0x7b22436f6e74656e742d54797065223a226170706c69636174696f6e2f782d7777772d666f726d2d75726c656e636f646564222c224e616d65223a22546573742075736572227d")

1) Информация, которую сервер узла передает контракту, представляет собой полезную нагрузку с веб-страницы.

2) Собственно вот что происходит:

  • Узел принимает форму полезной нагрузки, которая является объектом json, и преобразует ее в шестнадцатеричный формат.

  • Отправить hex в контракт с 3 полями orgName, helloId, fctChain.

Я знаю, что передаю правильные данные, но продолжаю получать сообщение об ошибке. Когда я сделал, typeof convertToHexя получил string.

Любое руководство полезно.

Спасибо,

Вот как выглядит мой код:

function sendToContract(req, res, next) {

  let convertToHex = web3.utils.toHex(JSON.stringify(req.body));

  ACF.methods.registerNewAsset(convertToHex, convertToHex, fctAddress).send()
    .then(results => {
      res.send(results)
    })
    .catch(err => {
      // console.log(err)
    })
  res.send(results);
}

Вот как выглядит контракт:

function registerNewAsset(bytes32 _orgName, uint _hellId, bytes32 _fctChain) external onlyOwner {

        NewAsset storage asset = hercIdToAsset[_hercId];

        asset.orgName = _orgName;
        asset.helloId = _helloId;
        asset.fctChain = _fctChain;

        addressToAssetArray[msg.sender].push(asset);

    }

Моей целью было реализовать транзакцию отправки на основе этой документации: https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-send .

Я использую web3js + узел + солидность.

Я предлагаю вам console.log(JSON.stringify(req.body))посмотреть, что именно вы пытаетесь преобразовать в шестнадцатеричный формат.
@goodvibration я преобразовывал всю полезную нагрузку формы в шестнадцатеричный формат. Оказывается, мне нужно было только 3 его части, поэтому теперь я переназначаю переменные для определенной части полезной нагрузки и преобразовываю ее в шестнадцатеричный формат, а затем помещаю в смарт-контракт, однако я не уверен, что это сработает.

Ответы (1)

ИМО, в коде много ошибок.

let convertToHex = web3.utils.toHex(JSON.stringify(req.body));

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

function registerNewAsset(bytes32 _orgName, uint _hellId, bytes32 _fctChain)

Кроме того, в этой строке у вас есть второй параметр, uintно вы отправляете тот же шестнадцатеричный код (т.е. convertToHex) для _helloId.

Кроме того, из имени третьего параметра (т.е. fctAddress) кажется, что вы передаете адрес bytes32переменной типа _fctChain.

Я думаю, исправление каждого из них заставит его работать.