【问题】Remix中bytes32类型传参错误

  • Post author:
  • Post category:其他




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表示一定长度的字符串

参考内容:

Example for type bytes32 in Solidity



版权声明:本文为m0_52739647原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。