Везде искал людей с похожими проблемами, но ничего не нашел.
Я не понимаю, почему я продолжаю получать эту ошибку (да, я знаю, что у других тоже была эта ошибка, но не по той же причине, что и у меня):
>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 + узел + солидность.
ИМО, в коде много ошибок.
let convertToHex = web3.utils.toHex(JSON.stringify(req.body));
В этой строке вы пытаетесь преобразовать полное тело запроса в шестнадцатеричный формат, а не в его свойство, что не кажется желаемым поведением.
function registerNewAsset(bytes32 _orgName, uint _hellId, bytes32 _fctChain)
Кроме того, в этой строке у вас есть второй параметр, uint
но вы отправляете тот же шестнадцатеричный код (т.е. convertToHex
) для _helloId
.
Кроме того, из имени третьего параметра (т.е. fctAddress
) кажется, что вы передаете адрес bytes32
переменной типа _fctChain
.
Я думаю, исправление каждого из них заставит его работать.
хорошая вибрация
console.log(JSON.stringify(req.body))
посмотреть, что именно вы пытаетесь преобразовать в шестнадцатеричный формат.новыйФинансист