个人心得:工具一般都是先收藏,然后记住有哪些功能,然后在应用的时候如果能够用不重复造轮子,就直接拿来用!即快速又不用太担心安全相关的问题。
二、痛点及解决方式
以在Solidity语言中将address类型转为string为例。
过去: 打开搜索引擎或github->搜索关键字“Solidity address convert to string”->找到相关的搜索结果->拷贝相关的代码->粘贴到自己的
测试代码: 开发者引入或拷贝网络上未知来源的代码可能出现重大的bug。同样的,自己重新编写的代码可能因为缺乏测试或实践检验,更易出现风险。
address转换工具 address类型是Solidity特有的数据类型之一。在日常的程序运行逻辑中,常常会涉及到address与bytes和string类型的互转。LibAddress实现了上述的转换功能。 LibAddress下载地址: https://gitee.com/WeBankBlockchain/SmartDev-Contract/blob/master/contracts/base_type/LibAddress.sol 下载之后导入需要使用的sol文件中,然后就可以调用LibAddress相关的方法,具体的如下所示: address转bytes bytes转address address转string string转address 在Solidity中原生支持的数组类型,不支持排序、查找、比较、移除、添加、翻转、合并、去重等众多常用的功能。 SmartDev-Contract
2、大小写转换 下面示例中,将大写转换为小写: 3、相等比较 4、字符串前缀比较 作为一门面向
address set集合 作为多数高级编程语言标配的数据结构,set是一种集合的数据结构,其中每个独特属性的元素都是唯一的。pragma solidity ^0.4.24; import "./LibAddress.sol"; contract Test { function get() public view returns (bytes memory) { address addr = 0xE0f5206BBD039e7b0592d8918820024e2a7437b9; bytes memory bs = LibAddress.addressToBytes(addr); return bs; } }
address addr = 0xE0f5206BBD039e7b0592d8918820024e2a7437b9; bytes memory bs = LibAddress.addressToBytes(addr);
bytes memory bs = newbytes(20); address addr = LibAddress.bytesToAddress(bs);
address addr = 0xE0f5206BBD039e7b0592d8918820024e2a7437b9; string memory addrStr = LibAddress.addressToString(addr);
string memory str="0xE0f5206BBD039e7b0592d8918820024e2a7437b9"; address addr = LibAddress.stringToAddress(str);
痛点三:数组操作不够丰富
pragma solidity ^0.4.25; import "./LibString.sol"; contract Test { function f() public view returns(string memory) { string memory c = LibString.toUppercase("abcd");// Expected to be ABCD return c; } }
pragma solidity ^0.4.25; import "./LibString.sol"; contract Test { function f() public view { bool r = LibString.equal("abcd","abcd");//Expected to be true require(r); } }
pragma solidity ^0.4.25; import "./LibString.sol"; contract Test { function f() public view { bool r = LibString.startWith("abcd","ab");//Expected to be true require(r); } }
痛点五:高级数据结构不完备