一、什么是库
特殊的合约,可以像合约一样进行部署,但是没有状态变量、不能存以太币

可重用
部署一次,在不同合约内反复使用
节约gas,相同功能的代码不用反复部署

1.定义库、使用库
library mathlib{
plus();
}
contract C{
mathlib.plus();
}

库函数使用委托的方式调用delegateCall,库代码是在发起合约中执行的。

2.using for 扩展类型
A是库library
using A for B 把库函数(从库A)关联到类型B
A库有函数add(B b), 则可使用b.add()

mathlib.sol

pragma solidity ^0.4.24;library mathlib {uint constant age = 40;function plus(uint a, uint b) public pure returns (uint) {uint c = a + b;assert(c>=a && c>=b);return c;}function getThis() public view returns (address) {return this;}}

testLib.sol中引入上面的库

pragma solidity ^0.4.24;import "./mathLib.sol";contract testLib {using mathlib for uint;function add (uint x, uint y) public returns (uint) {return x.plus(y);// return mathlib.plus(x,y);}function getThis() public view returns (address) {return mathlib.getThis();}}

二、第三方库
OpenZeppelin
https://github.com/OpenZeppelin/openzeppelin-contracts
最佳实践案例
safeMath
ERC20
ERC721
Ownership
Whitelist
Crowdsale

ethereum-libraries
https://github.com/modular-network/ethereum-libraries

dapp-bin
https://github.com/ethereum/dapp-bin
https://github.com/ethereum/dapp-bin/tree/master/library
iterable_mapping.sol // 遍历map
linkedList.sol //双向链表

stringutils
https://github.com/Arachnid/solidity-stringutils


//SPDX-License-Identifier: MIT
pragma solidity  ^0.8.0;import "./strings/strings.sol";
// import "github.com/Arachnid/solidity-stringutils/blob/master/src/strings.sol";contract C {using strings for *;string public s;function foo(string memory s1, string memory s2) public {s = s1.toSlice().concat(s2.toSlice());}
}

solidity库的使用相关推荐

  1. Solidity智能合约库:区块链工程师的随身工具箱

    编者荐语: Solidity使用起来不如其他语言那般丝滑顺畅?安全事故难以避免?社区迎来适用于FISCO BCOS的Solidity智能合约库,轻松破解合约的各种小难题,让合约开发更加快速高效.省时省 ...

  2. 微众银行Solidity智能合约库:区块链工程师的随身工具箱

    区块链技术在经历了十余年的发展后,渐呈"燎原之势",不断在各行业落地生根.但同时,从技术的角度看,区块链应用开发仍然有着较高的门槛,存在不少痛点.为了提升应用开发各环节的用户体验, ...

  3. 《solidity学习笔记》chapter 3-solidity其他知识

    Ownable contracts OpenZeppelin Solidity库里的合约之一,可以通过继承使用. /*** @title Ownable* @dev The Ownable contr ...

  4. c++ 数组引用_在 Solidity中使用值数组以降低 gas 消耗

    背景 我们Datona Labs在开发和测试Solidity数据访问合约(S-DAC:Smart-Data-Access-Contract)模板过程中,经常需要使用只有很小数值的小数组(数组元素个数少 ...

  5. solidity代码

    http://www.tryblockchain.org/ 教你如何舒服的看solidity代码 最近智能合约随着区块链技术的发展越发收到广大技术人员的重视! 其中最被看好的以太坊就是一个提供智能合约 ...

  6. Solidity – 代码注释

    章节 Solidity – 介绍 Solidity – 环境搭建 Solidity – 基础语法 Solidity – 第一个程序 Solidity – 代码注释 Solidity – 数据类型 So ...

  7. Solidity - 介绍

    章节 Solidity – 介绍 Solidity – 环境搭建 Solidity – 基础语法 Solidity – 第一个程序 Solidity – 代码注释 Solidity – 数据类型 So ...

  8. Solidity语言开发基础教程

    Solidity语言是开发以太坊智能合约的不二选择,本文列举了在solidity学习和开发 中可能对你有帮助的18个资源,包括示例代码.solidity库和预置dapp开发环境的docker镜像. D ...

  9. solidity修饰符、节省gas技巧

    目录 一.智能合约的永固性 二.OpenZeppelin库的Ownable合约 三.函数修饰符modifier 四.Gas - 驱动以太坊DApps的能源 五.省 gas :结构封装 (Struct ...

  10. 使用Hardhat验证 Solidity 源码 (Ethereum or BSC)

    hardhat-etherscan 这个插件可以帮助你在Etherscan上验证 Solidity 合约的源代码. 只需提供部署地址和构造函数参数,插件将在本地检测要验证的合约. 如果您的合约使用 S ...

最新文章

  1. rest post无法取到request_小白学Flask第五天 | 详解很重要的request对象
  2. 解决Web部署 svg/woff/woff2字体 404错误
  3. 读书印记 - 《异类:不一样的成功启示录》
  4. 对jvm 同步锁的理解
  5. codewars033: Duplicate Encoder 重复编码器
  6. synchronize——对象锁和类锁
  7. 如何让网页字体文件大瘦身?前端字体优化知多D
  8. csapp-深入理解计算机系统学习记录
  9. 小程序 - 修改头像功能
  10. 制作U盘启动时的写入模式HDD-FAT32、ZIP-FAT32、HDD-FAT16、ZIP-FAT16有什么区别?
  11. 搜狗拼音输入法2015 v7.5 官方版​
  12. removeclass 传入两个类_jQuery removeClass() 方法
  13. 要求:弹出框接收字符串输入 输入aaabbbcccddd 输出3a3b3c3d
  14. 计算机视觉之--使用opencv生成简笔画小视频
  15. Hi!亲爱的朋友们,欢迎您光临Glac…
  16. java获取手机号归属地
  17. add_months用法解析
  18. windows装linux
  19. shardingjdbc 实现读写分离
  20. 中微子超光速_定制中微子皮棉

热门文章

  1. hihocoder 1378(有向图求最小割集)
  2. AT91SAM9260使用SAM-BA调试BOOT程序
  3. php excel 高度,PHPExcel,自动调整行高
  4. vue子父组件之间的传值
  5. 新人做ASO如何快速写好关键词?
  6. 苹果手机连接Wifi认证机制
  7. 格式化输出函数setw与setfill的使用
  8. 51单片机之中断的实现过程
  9. 公司通过堡垒机连接公司服务器
  10. stata中计算公式命令_stata 计算命令: