个人心得:工具一般都是先收藏,然后记住有哪些功能,然后在应用的时候如果能够用不重复造轮子,就直接拿来用!即快速又不用太担心安全相关的问题。

一、

二、痛点及解决方式

以在Solidity语言中将address类型转为string为例。

过去: 打开搜索引擎或github->搜索关键字“Solidity address convert to string”->找到相关的搜索结果->拷贝相关的代码->粘贴到自己的

微众银行《Solidity智能合约库》区块链工程师的随身工具箱之初体验 测试代码:

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;     } }

微众银行《Solidity智能合约库》区块链工程师的随身工具箱之初体验

开发者引入或拷贝网络上未知来源的代码可能出现重大的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

address addr = 0xE0f5206BBD039e7b0592d8918820024e2a7437b9; bytes memory bs = LibAddress.addressToBytes(addr);

bytes转address

bytes memory bs = newbytes(20); address addr = LibAddress.bytesToAddress(bs);

address转string

address addr = 0xE0f5206BBD039e7b0592d8918820024e2a7437b9; string memory addrStr = LibAddress.addressToString(addr);

string转address

string memory str="0xE0f5206BBD039e7b0592d8918820024e2a7437b9"; address addr = LibAddress.stringToAddress(str);

痛点三:数组操作不够丰富

在Solidity中原生支持的数组类型,不支持排序、查找、比较、移除、添加、翻转、合并、去重等众多常用的功能。

SmartDev-Contract

2、大小写转换

下面示例中,将大写转换为小写:

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;     } }

3、相等比较

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);     } }

4、字符串前缀比较

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);     } }

痛点五:高级数据结构不完备

作为一门面向

address set集合

作为多数高级编程语言标配的数据结构,set是一种集合的数据结构,其中每个独特属性的元素都是唯一的。

SmartDev-Contract

除了上述的几个工具,开源库中还有很多值得学习和应用的工具,有兴趣的小伙伴可以自行研究,如下图所示: 微众银行《Solidity智能合约库》区块链工程师的随身工具箱之初体验

总结

个人心得:工具一般都是先收藏,然后记住有哪些功能,然后在应用的时候如果能够用不重复造轮子,就直接拿来用!即快速又不用太担心安全相关的问题。

本文内容参考: https://mp.weixin.qq.com/s/TibfdZohpbppqz4ZuBItaA

GitHub代码库地址: https://github.com/WeBankBlockchain/SmartDev-Contract

gitee代码库地址: https://gitee.com/WeBankBlockchain/SmartDev-Contract

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注