智能合约中判读字符串相等
Solidity中很多方法都很底层,比如开发中很常见的迭代和判断字符串相等的方法都没有,必须要自己写个方法来实现。可能已有些库已实现类似的方法,不过总归是要麻烦不少。相比起来,JavaScript自己就带了很多原生的方法,用起来也很顺手。
判读字符串相等不能直接使用==这样的方法,我也搞不清为什么,很多语言都是直接支持的,只有Solidity不支持。没办法,只能自己设计个方法来实现。
function compareStr (string _str1, string _str2) public returns(bool) { if(keccak256(abi.encodePacked(_str1)) == keccak256(abi.encodePacked(_str2))) { // 如果二者相等,使checkResult为true checkResult = true; }else { checkResult = false; } // 返回checkResult return checkResult; }
对两个字符串进行哈希运算,结果一致就证明两个字符串相等。这个哈希运算有点费时,可以在这之前做个长度判断以节约点时间,达到一个平衡。改进后的方法:
function compareStr (string _str1, string _str2) public returns(bool) { if(bytes(_str1).length == bytes(_str2).length){ if(keccak256(abi.encodePacked(_str1)) == keccak256(abi.encodePacked(_str2))) { retrun true; } } return false; }
如果是频繁地运用这个方法,或者是对很多的字符串组进行比较,则改进后的方法会优良不少。
声明:本站所提供的资讯信息不代表任何投资暗示, 本站所发布文章仅代表个人观点,仅供参考。