Проблема с параметрами после преобразования в байты32 - PullRequest
0 голосов
/ 14 октября 2019

В контракте у меня есть функция, которая разбирает массив bytes32, зависимость типа обмена, могут быть разные параметры

При попытке вызвать эту функцию с помощью Remix все работаетну

Когда я пытаюсь через web3js на стороне интерфейса, я получаю эту ошибку для тех же параметров

invalid bytes32 value (arg="_additionalArgs", coderType="bytes32", value=[31,87,61,111,179,241,61,104,159,248,68,180,206,55,121,77,121,167,255,28]

[31,87,61,111,179,241,61,104,159,248,68,180,206,55,121,77,121,167,255,28] этоадрес в байтах32

Я использую это для преобразования адреса в байты32

web3.utils.padLeft(web3.utils.hexToBytes(address, 32))

1 Ответ

2 голосов
/ 15 октября 2019

Я думаю, что вы хотите это:

'0x' + web3.utils.padLeft(address.replace('0x', ''), 64);

(Если address не имеет ведущего "0x", вы можете сбросить .replace(...).)

Ваш текущийкоманда передает дополнительный параметр (32) в hexToBytes, а затем вызывает padLeft в байтовом массиве и не указывает длину. Шестнадцатеричная строка уже является правильным форматом ... вам просто нужно дополнить ее шириной 32 байта (64 шестнадцатеричных символа) и позаботиться с префиксом 0x.

...