SafeMath库是对solidity中uint256的加、减、乘、除和取模运算的一层封装。由于solidity 0.8之前的uint256运算是不做溢出检查,许多基于0.8版本之前的项目都会使用该库。0.8版本之后solidity编译器内置了整形数溢出检查,所以SafeMath库也不再被广泛使用。
Checkpoints库定义了History、Trace224和Trace160结构体。这些结构体中包含了在各个不同的区块高度或自定义key上记录的数值并可以查询出对应区块高度或key上的记录值。Checkpoints库提供了标准的添加记录、查询记录的库方法。
SafeCast库提供了solidity的基础整数类型uintX和intX之间的类型安全转换的库方法。在不同的类型转换之间都加入溢出检查,如果一旦在转换过程中出现类型的溢出会立刻revert。
Math库为合约开发提供了solidity内置的uint256运算以外的其他整形运算方法。solidity内置的整形运算,每一步都会做overflow revert(除非unchecked{}),而Math库会在不影响结果准确性的前提下利用位溢出进行更加tricky的操作。
Create2库本质就是对EVM opcode CREATE2进行的一个封装,可以让开发者在非内联汇编环境下直接使用该opcode。 CREATE2是一种可提前计算合约部署地址的合约部署opcode。而传统的合约部署是通过opcode CREATE完成的。
Multicall库提供了一个multicall(bytes[] calldata data)
方法,通过该方法可以由调用者在一笔交易中自由组合调用本合约的各个可外部调用的方法。
Context库是合约开发中最常见的库,同时也是最让人迷惑的库。合约代码里面只将msg.sender和msg.data封装成了函数,感觉多此一举。实际上,本库不提供任何context环境切换的细节功能,而是需要目标合约中重写这两个函数起到了可编辑msg.sender和msg.data的目的。
从foundry工程化的角度详细解读Openzeppelin中的Timers库及对应测试。
从foundry工程化的角度详细解读Openzeppelin中的Strings库及对应测试。
从foundry工程化的角度详细解读Openzeppelin中的Counters库及对应测试。
从foundry工程化的角度详细解读Openzeppelin中的Base64库及对应测试。
从foundry工程化的角度详细解读Openzeppelin中的Arrays库及对应测试。
从foundry工程化的角度详细解读Openzeppelin中的StorageSlot库及对应测试。
从foundry工程化的角度详细解读Openzeppelin中的Address库及对应测试。
一段Solidity汇编代码逻辑整理
本文使用create2创建合约、预测合约地址
Truffle:Truffle是一个流行的开发框架,专门用于构建以太坊(Ethereum)区块链应用程序。它提供了一组工具和库,以简化智能合约的开发、测试和部署过程。下面是Truffle框架的主要功能:智能合约开发:Truffle提供了一个简洁的开发环境,可以编写Solidity智能合约。它
编写我们的第一个合约。
/*可见性修饰符:publicexternalinternalprivatepublic:作用域:状态变量、函数状态变量:可以在合约内外被读取,自动生成一个公共的getter函数。函数:可以从合约内外部调用,自
从第一个 Counter 智能合约看合约代码结构