博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
智能合约从入门到精通:Lib工具库(一)
阅读量:6856 次
发布时间:2019-06-26

本文共 10204 字,大约阅读时间需要 34 分钟。

简介:,我们介绍了智能合约的开发范例,本节我们将详解智能合约开发中常用的Lib工具库。由于内容较长,工具库我们将分两部分介绍,本文将介绍LibInt和LibString。

  • 常用库简介

在合约开发规范中,我们看到contracts目录下有个子目录utillib,此子目录下,是JUICE开放服务平台提供的一些常用工具库。这些工具库提供的方法,和具体的业务没有关系。它的作用,和JAVA中的各种util工具类似。常用的有:

1.LibInt 封装对整数的操作(支持直接调用、using调用)https://open.juzix.net/api_doc/contract/utillib/LibInt.html

2.LibString 封装对字符串的操作 (支持直接调用、using调用) https://open.juzix.net/api_doc/contract/utillib/LibString.html

3.LibJson 封装对JSON格式的字符串操作(支持直接调用、using调用)https://open.juzix.net/api_doc/contract/utillib/LibJson.html

4.LibStack 封装对堆栈的使用(仅支持直接调用)https://open.juzix.net/api_doc/contract/utillib/LibStack.html

5.LibLog 封装日志操作(仅支持直接调用)https://open.juzix.net/api_doc/contract/utillib/LibLog.html

6.使用方法 在业务合约的头部引入库文件:

pragma solidity ^0.4.2;import "./utillib/LibLog.sol";Copy复制代码

在合约中直接调用方式:

function myLogger() constant public returns(bool _out) {        LibLog.log("here is my logger message");        ...        ...        _out = true;}Copy复制代码

在合约中using使用方式:

pragma solidity ^0.4.2;import "./utillib/LibString.sol";contract StringTest is OwnerNamed {        using LibString for * ;                function myString() constant public returns(bool _out) {                LibLog.log("here is my string test");                string memory _string = "hello world";                //using 方式                bool result = _string.compare("hello world");                        //直接调用方式                //bool result = LiString.compare(_string, "hello world");                  _out = result ;        }        }复制代码

注意:

LibJson虽然支持直接调用、using调用,但是它的using调用方式稍有不同,详情查看LIbJson库说明。https://open.juzix.net/api_doc/contract/utillib/LibJson.html

以下示例都将采用 using for *; 方式进行调用

LibInt

LibInt 主要封装了对整形的一系列操作;

支持直接调用、using for *;调用

uint转为字符串

描述:将一个整数转为指定长度字符串

结构定义

function toString(uint _self, uint width) internal returns (string _ret);复制代码

示例

uint _uint = 1000;string memory _ret= _uint.toString(3);        //  _ret = 100复制代码

uint转字符串

描述:uint 类型转string类型

结构定义

function toString(uint _self) internal returns (string _ret) ;复制代码

示例

uint _uint = 1000;string memory _ret= _uint.toString();        //  _ret = 1000复制代码

uint转十六进制

描述:uint 数据转16进制string

结构定义

function toHexString(uint _self) internal returns (string _ret) ;复制代码

示例

uint _uint = 1000;string memory _ret= _uint.toHexString();        //  _ret = 0x3e8复制代码

uint转十六进制(32字节)

描述:把uint的每个字节转换成十六进制字符串,uint是32字节,需要64个字符来表示,当高位全是0时,补0,到64字符

结构定义

function toHexString64(uint _self) internal returns (string _ret) ;复制代码

示例

uint _uint = 1000;string memory _ret= _uint.toHexString64();        //  _ret = 0x0000000000000000000000000000000000000000000000000000000003e8复制代码

int转字符串

描述:int 类型转字符串

结构定义

function toString(int _self) internal returns (string _ret);复制代码

示例

int _int = 1000;string memory _ret= _uint.toString();        //  _ret = "1000"复制代码

uint(特指address值) 转 string

描述:uint类型转地址字符串

结构定义

function toAddrString(uint _self) internal returns (string _ret);复制代码

示例

address _address =0x8affd1952705d8a908e016695c6e454ad39a1c6f ;uint _uint = uint(_address);string memory _ret= _uint.toAddrString();        //  _ret = "0x8affd1952705d8a908e016695c6e454ad39a1c6f"复制代码

uint转键值对k-v

描述:uint类型转为k-v的键值对

结构定义

function toKeyValue(uint _self, string _key) internal returns (string _ret);复制代码

示例

uint _uint = 1000;string memory _ret= _uint.toKeyValue("key");        //  -> _ret = "key" : 1000复制代码

int转键值对k-v

描述:int类型转为k-v的键值对

结构定义

function toKeyValue(int _self, string _key) internal returns (string _ret);复制代码

示例

int _int = 1000;string memory _ret= _int.toKeyValue("key");        //  -> _ret = "key" : 1000复制代码

addrerss转键值对k-v

描述:address类型转为k-v的键值对

结构定义

function toKeyValue(address _self, string _key) internal returns (string _ret);复制代码

示例

address _address =0x8affd1952705d8a908e016695c6e454ad39a1c6f ;string memory _ret= _address.toKeyValue("key");        //  -> _ret = "key" : "0x8affd1952705d8a908e016695c6e454ad39a1c6f"复制代码

uint内存数据拷贝

此方法主要是由于合约之间调用不能使用字符串,因此将字符转为32字节整数传递

描述:uint的内存数据,以32字节向右对齐,拷贝到一个整数中

如果要传一个小于32字节的字符串,就把字符串的内存向右对齐,存储到这个整数中,出去后,再恢复成字符串

结构定义

function recoveryToString(uint _self) internal returns (string _ret);复制代码

示例

uint _uint = 1000;string memory _ret= _uint.recoveryToString();复制代码

uint[]数组判断

描述:判断某个uint类型元素是否存在某个uint[]数组中,注意:uint[]的类型必须为storage.

结构定义

function inArray(uint _self,uint[] storage _array) internal returns (bool _ret);Copy复制代码

示例

pragma solidity ^0.4.2;import "LibInt.sol";contract TestManager {    using LibInt for *;    uint[] public _arruint;    function test(uint _uint) constant returns(string _ret) {             // if exists , isExists = true,             // if not ,isExists = false;            bool isExists = _uint.inArray(_arruint);    }}复制代码

以下示例都将采用library库的 using for *; 方式进行调用

LibString

LibString主要封装了对字符串的一系列常规操作;

支持直接调用、using for *;调用

字符串比较

描述:比较两个字符串是否相等

结构定义

function equals(string _self, string _str) internal returns (bool _ret);复制代码

示例

string memory _str1 = "1000";string memory _str2 = "200";bool _ret= _str1.equal(_str2);        //  _ret = falses复制代码

字符串比较(忽略大小写)

描述:比较两个字符串是否相等

结构定义

function equals(string _self, string _str) internal returns (bool _ret);复制代码

示例

string memory _str1 = "ABC";string memory _str2 = "abc";bool _ret= _str1.equalsNoCase(_str2);        //  _ret = true复制代码

字符串截取

描述:截取字符串指定长度

结构定义

function substr(string _self, uint _start, uint _len) internal returns (string _ret);复制代码

示例

string memory _str1 = "abcdefg";string _ret= _str1.substr(0,3);        //  _ret = "abc"复制代码

字符串拼接

描述:拼接字符串

结构定义

function concat(string _self, string _str) internal returns (string _ret)复制代码

示例

string memory _str1 = "abcdefg";string _ret= _str1.concat("123");        //  _ret = "abcdefg123"复制代码

字符串拼接(多参)

描述:拼接字符串,一次可传入多个待拼接字符串

结构定义

function concat(string _self, string _str1, string _str2)internal returns (string _ret);function concat(string _self, string _str1, string _str2,string _str3)internal returns (string _ret);复制代码

示例

string memory _str1 = "abcdefg";_str1 = _str1.concat("123","456");        //  _str1 = "abcdefg123456"_str1 = _str1.concat("A","B","C");         //  _str1 = "abcdefg123456ABC"复制代码

去除字符串空格

描述:去除字符串空格

结构定义

function trim(string _self) internal returns (string _ret) ;复制代码

示例

string memory _str1 = "abcdefg";string _ret= _str1.trim("123");        //  _ret = "abcdefg123"复制代码

去除字符串指定字符

描述:去除字符串指定字符

结构定义

function trim(string _self,string _chars) internal returns (string _ret) ;复制代码

示例

string memory _str1 = "abcdefg";string _ret= _str1.trim("a");        //  _ret = "bcdefg"复制代码

字符串按指定字符切成数组

描述:字符串按指定字符切成数组,注意:数组类型一定为状态变量storage

结构定义

function split(string _self, string _delim, string[] storage _array);复制代码

示例

pragma solidity ^0.4.2;import "LibString.sol";contract TestManager {    using LibString for *;    striing[] public _arr;    function test(uint _uint) constant returns(string _ret) {        string memory _str = "A&B&C";        _str.split("&",_arr);             // _arr = ["A","B","C"]    }}复制代码

字符索引

描述:查找指定字符在字符串中的索引位置,从0开始,不存在则返回-1

结构定义

function indexOf(string _self, string _str) internal returns (int _ret);复制代码

示例

string memory _str1 = "abcdefg";int _ret= _str1.indexOf("b");        //  _ret = 1复制代码

字符索引(指定下标)

描述:查找指定字符在字符串中的索引并指定开始位置,从0开始,不存在则返回-1

结构定义

function indexOf(string _self, string _str,uint pos) internal returns (int _ret);复制代码

示例

string memory _str1 = "abcdefg";int _ret= _str1.indexOf("b",0);        //  _ret = 1复制代码

字符串转int

描述:字符串类型转为整数类型

结构定义

function toInt(string _self) internal returns (int _ret) ;复制代码

示例

string memory _str1 = "1111";int _ret= _str1.toInt();        //  _ret = 1111复制代码

字符串转address

描述:字符串类型转为address类型

结构定义

function toAddress(string _self) internal returns (address _ret);复制代码

示例

string memory _str1 = "0x8affd1952705d8a908e016695c6e454ad39a1c6f";address _ret= _str1.toAddress();        //  _ret = 0x8affd1952705d8a908e016695c6e454ad39a1c6f复制代码

字符串转k-v键值对(memory类型)

描述:字符串组装成k-v键值对

结构定义

function toKeyValue(string _self, string _key) internal returns (string _ret)复制代码

示例

string memory _str1 = "aaaa";address _ret= _str1.toKeyValue("name");        //  _ret = "name":"aaaa"复制代码

字符串转k-v键值对(storage类型)

描述:字符串组装成k-v键值对,针对storage类型变量;

注意:生命在函数体外的变量为状态变量storage;

结构定义

function toKeyValue(string storage _self, string _key) internal returns (string _ret)复制代码

示例

pragma solidity ^0.4.2;import "LibString.sol";contract TestManager {    using LibString for *;    string public _str;    function test() constant returns(string _ret) {         _str = "hello";         _ret = _str.toKeyValue("name");             // _ret ="name":"hello"    }}复制代码

字符用uint替代

描述:将一个长度长度小于32字节的字符串用uint进行表示;

结构定义

function storageToUint(string _self) internal returns (uint _ret);复制代码

示例

string memory _str1 = "aaaa";uint _ret= _str1.storageToUint();        //  _ret =复制代码

判断字符串是否在数组中

描述:判断某个字符串是否在指定数组中;

结构定义

function inArray(string _self, string[] storage _array) internal returns (bool _ret);复制代码

示例

pragma solidity ^0.4.2;import "LibString.sol";contract TestManager {    using LibString for *;    string[] public _arr;    function test() constant returns(bool _ret) {        _arr.push("hello1");        _arr.push("hello2");         string memory _str = "hello1";        _ret = _str.inArray(_arr);             // _ret = true    }}复制代码

判断字符串是否在数组中(忽略大小写)

描述:判断某个字符串是否在指定数组中,并忽略大小写判定;

结构定义

function inArrayNoCase(string _self, string[] storage _array) internal returns (bool _ret);复制代码

示例

pragma solidity ^0.4.2;import "LibString.sol";contract TestManager {    using LibString for *;    string[] public _arr;    function test() constant returns(bool _ret) {        _arr.push("Hello1");        _arr.push("hello2");         string memory _str = "hello1";        _ret = _str.inArrayNoCase(_arr);             // _ret = true    }}复制代码

字符串转大写

描述:将一个字符串的所有元素用大写表示

结构定义

function toUpper(string _self) internal returns (string _ret);复制代码

示例

string memory _str1 = "aaaa";string memory _ret= _str1.toUpper();        //  _ret = "AAAA"复制代码

字符串转小写

描述:将所有字符转为小写

结构定义

function toLower(string _self) internal returns (string _ret);复制代码

示例

string memory _str1 = "AAAA";string memory _ret= _str1.toLower();        //  _ret = "aaaa"复制代码

字符串类型转为uint

描述:将字符串类型转为uint,该字符串内容本身为uint才可转换;如:"aa123"不可转换,"123"可以转换.

结构定义

function toUint(string _self) internal returns (uint _ret);复制代码

示例

string memory _str1 = "111";uint _ret= _str1.toUint();        //  _ret = 111复制代码

参考内容:https://open.juzix.net/doc

智能合约开发教程视频:

转载地址:http://fmiyl.baihongyu.com/

你可能感兴趣的文章
如何用手机维护Mysql数据库
查看>>
REACT NATIVE 系列教程之十三】利用LISTVIEW与TEXTINPUT制作聊天/对话框&&获取组件实例常用的两种方式...
查看>>
基于CentOS 5.3平台下搭建PXE部署ESX&ESXi 4.x模板分发服务器 v1.0
查看>>
使用tornado模板引擎配合yaml构建nginx配置接口 [扩展saltstack]
查看>>
网络作者的心声-1、感谢读者,我不会太监
查看>>
WCF分布式开发常见错误解决(1):添加服务引用出错
查看>>
Nginx实战基础篇六 通过源码包编译安装部署LNMP搭建Discuz论坛
查看>>
如何根据指定软件版本制作属于自己的puppet yum源
查看>>
Linux下架设rsync服务器
查看>>
windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
查看>>
在Foreda8上试安装Apchehttpd-2.4.6.tar.gz
查看>>
基于S3C2410的VIVI移植
查看>>
Entity Framwork one to one problem
查看>>
[转] Attach、Detach和DeleteObject
查看>>
[转] C# 获取程序运行目录
查看>>
【OpenCV学习】极坐标变换
查看>>
使用open***构建安全***
查看>>
模仿支付宝支付密码框思路
查看>>
docker 容器的网络配置
查看>>
开源监控软件的配置:cacti,nagios
查看>>