如何在 Remix 中输入 bytes4 类型的参数?
How do I input the parameter with bytes4 type in Remix?
我创建了一个简单的合约,如图所示。当我部署它并尝试调用 get
函数时,我发现我无法输入正确的 bytes4
类型的参数。无论我使用 0x01,11,"11"...
,它总是告诉这样的错误编码参数。
transact to Test.get errored: Error encoding arguments: Error: invalid arrayify value (argument="value" value="11" code=INVALID_ARGUMENT version=bytes/5.5.0)
transact to Test.get errored: Error encoding arguments: Error: invalid arrayify value (argument="value" value="0x6162" code=INVALID_ARGUMENT version=bytes/5.5.0)
我该怎么办?
pragma solidity ^0.4.0;
contract Test {
mapping (bytes8 => string) public map;
function setMapping() public {
map["k1"] = "yes";
}
function get(bytes4 a) public {
}
}
您可以输入十六进制形式的字节,不可分割。由于 bytes4
是四个字节的定长数组,因此您始终需要恰好输入 4 个字节(8 个十六进制字符)。
0x12345678
12
是第一个字节
34
是第二个字节
- 等...
注意:如果要输入空字节,可以在空字节的位置使用00
。示例:0x00340078
(第 1 个和第 3 个字节为空)。
我创建了一个简单的合约,如图所示。当我部署它并尝试调用 get
函数时,我发现我无法输入正确的 bytes4
类型的参数。无论我使用 0x01,11,"11"...
,它总是告诉这样的错误编码参数。
transact to Test.get errored: Error encoding arguments: Error: invalid arrayify value (argument="value" value="11" code=INVALID_ARGUMENT version=bytes/5.5.0)
transact to Test.get errored: Error encoding arguments: Error: invalid arrayify value (argument="value" value="0x6162" code=INVALID_ARGUMENT version=bytes/5.5.0)
我该怎么办?
pragma solidity ^0.4.0;
contract Test {
mapping (bytes8 => string) public map;
function setMapping() public {
map["k1"] = "yes";
}
function get(bytes4 a) public {
}
}
您可以输入十六进制形式的字节,不可分割。由于 bytes4
是四个字节的定长数组,因此您始终需要恰好输入 4 个字节(8 个十六进制字符)。
0x12345678
12
是第一个字节34
是第二个字节- 等...
注意:如果要输入空字节,可以在空字节的位置使用00
。示例:0x00340078
(第 1 个和第 3 个字节为空)。