Remix中bytes32类型传参错误
问题描述
合约使用过程中对于bytes32类型出入类似
“abcdef”
的字符串参数后无法正常运行
报错:“Error:invalid arrayify value…”
解决方案一
要转换
string
为
bytes32
,并进行相应的填充
举个例子
string = blue
bytes32 = 0x626c756500000000000000000000000000000000000000000000000000000000
这里推荐一个网站方便完成转换:https://web3-type-converter.onbrn.com/
解决方案二
将此功能添加到 Remix
pragma solidity 0.8.15;
contract StringToBytesConverter {
function stringToBytes(string calldata str) public pure returns (bytes memory) {
return abi.encodePacked(str);
}
}
说明
在合约运行中需要消耗Gas费,bytes32使用较少的Gas,比较适合在 EVM 中表示一个单词。string是动态大小类型,而且在 Solidity 中有当前限制(例如不能从函数返回到合约)。因此在合约中常使用bytes32表示一定长度的字符串
版权声明:本文为m0_52739647原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。