转换为bytes32后出现参数问题

时间:2019-10-14 11:12:35

标签: ethereum solidity web3

  

在合同中,我有一个函数,用于解析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))

1 个答案:

答案 0 :(得分:2)

我想你想要这个:

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

(如果address没有前导“ 0x”,则可以放下.replace(...)。)

您当前的命令正在将一个额外的参数(32)传递到hexToBytes,然后在字节数组上调用padLeft,但没有提供长度。十六进制字符串已经是正确的格式...您只需要将其填充为32字节(64个十六进制字符)宽,并注意0x前缀即可。