在合同中,我有一个函数,用于解析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中的地址
我将其用于将地址转换为bytes32
web3.utils.padLeft(web3.utils.hexToBytes(address, 32))
答案 0 :(得分:2)
我想你想要这个:
'0x' + web3.utils.padLeft(address.replace('0x', ''), 64);
(如果address
没有前导“ 0x”,则可以放下.replace(...)
。)
您当前的命令正在将一个额外的参数(32
)传递到hexToBytes
,然后在字节数组上调用padLeft
,但没有提供长度。十六进制字符串已经是正确的格式...您只需要将其填充为32字节(64个十六进制字符)宽,并注意0x
前缀即可。