OpenZeppelin 源码学习笔记

96
Jude95
2018.05.24 20:53 字数 1289

Ownership 权限及管理集合

RBAC - 基于角色的权限管理功能的

Role-Based Access Control ,可以说核心就在于一个 Map<String(角色), Address[](成员)>,附加一堆增删查的方法与函数修饰器。

注意增删权限为 internal 仅允许内部添加,RBACWithAdmin 则默认添加了一个Admin 角色,并把合约创建者设为了 Admin 角色。Admin 角色可以增删其他角色

Ownable 拥有控制者的

直接将合约创建者设为控制者,并提供验证控制者身份的函数修饰器 onlyOwner() 以及一个转移控制者身份的方法 transferOwnership(address newOwner)

Contactable 可回收权限的

很简单的一个 setContactInformation(string info) 与一个默认的 getter 。设置管理者联系方式….

HasNoContracts 可回收控制权的

某些情况,可能其他一些 Ownable 的合约的 owner 是此合约,调用 reclaimContract(address contractAddr) 直接把目标合约的 Owner 权限给自己,回收此合约对其他合约的控制权。

HasNoEther 不可持有 Ether 的

就是简单的将 fallback 函数设为没有 payable 。再增加一个提现方法reclaimEther() 将合约所有钱提到控制者账户。

Whitelist 白名单

简单提供了一个白名单管理功能,控制者可以增删白名单,并提供一个 onlyWhitelisted() 的函数修饰器来查询白名单。

Heritable 可继承的

控制者需要每隔一段时间,调用一次合约的 heartbeat() 。否则视为死了,控制权自动转移给儿子。

Access 访问权限集合

SignatureBouncer 签名验证器

这个合约允许用户提交签名作为操作的授权,

Payment 支付相关

PullPayment 提现机制

通过 asyncSend 给制定账户添加提现额度,用户手动调用 withdrawPayments() 就可以提现。

SplitPayment 分红机制

给每个账户分配股票,然后发钱的时候按股票比例分钱发放。

Math 计算相关

Math 最大值最小值

max,min uint64 及 uint256

SafeMath 加减乘除

mul, div, sub, add 基本都是为了解决溢出问题

Lifecycle 生命周期相关

Destructible 可被销毁的

主要是调用了 selfdestruct 进行销毁合约,并转移合约剩余 Ether

TokenDestructible 可被销毁的

多增加了不止转移 Ether,还转移 ERC20

Pausable 可暂停的

主要是提供了一个暂停状态,设置函数,查询函数修饰器

Token 货币相关

ERC20Basic ERC20简单API

BasicToken ERC20简单API实现

function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);

ERC20 ERC20标准API

StandardToken ERC20标准API实现

function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);

DetailedERC20 增加币种信息的Token

增加如下属性

string public name;
string public symbol;
uint8 public decimals;

SafeERC20 安全调研转账方法的Library

只是简单的给 transfer, transferFrom, approve 判断下返回值,false即抛异常。虽然标准合约并不可能返回false。

BurnableToken 可燃烧的Token

调用burn就可以烧掉自己的钱...

MintableToken 可增发的Token

调用 mint(address _to, uint256 _amount) 就可以向指定地址增发货币

CappedToken 给增发Token加了个上限

继承于 MintableToken , 调用 mint 时会检查有没有到上限。

PausableToken 可暂停的Token

继承于 StandardToken , Pausable , 一键暂停 Token 所有操作。

TokenTimelock Token锁定合约

暂时锁定自身持有的目标Token,直到设定的时间之后才能被释放,将token转到目标地址。

TokenVesting Token线性释放合约

暂时锁定自身持有的目标Token,在合约时间内按时间进度百分比释放,将token转到目标地址。

Crowdsale ICO合约相关

Crowsale 公募基础合约

定义了公募操作的一系列行为,各个具体的公募合约应该继承并实现他们

  • buyTokens 购买Token,不建议修改
  • _preValidatePurchase 检查购买操作合法性,建议使用 super
  • _postValidatePurchase 检查购买操作执行结果有无异常,需要被覆写
  • _deliverTokens 交付 Token , 需要被覆写
  • _processPurchase 处理购买,需要被覆写
  • _updatePurchasingState 更新购买状态,需要被覆写
  • _getTokenAmount 描述Ether与Token如何换算
  • _forwardFunds 转发Ether

WhitelistedCrowdsale 白名单ICO

只卖白名单,先由控制者添加白名单你才能买币。

CappedCrowdsale 有限总量ICO

公募有上限,募完为止。

IndividuallyCappedCrowdsale 个人限售的ICO

给每个人指定购买上限,每个人都可以不同上限。

TimedCrowdsale 限时ICO

到时结束,不可再购买

IncreasingPriceCrowdsale 币价逐步增长的ICO

从初始币价到最终币价,按时间线性增长。

AllowanceCrowdsale 打借条的ICO

让购买者自己拿借条去提现。

MintedCrowdsale 增发的ICO

_deliverTokens 的实现用 mint 增发来发币,而不是转账

PostDeliveryCrowdsale 直接分配的ICO

由控制者预先直接设置谁有多少钱,用户自提。

FinalizableCrowdsale 可结束的ICO

调用 finalize() 直接结束众筹,不可再购买

RefundableCrowdsale 公募失败退款ICO

公募结束时,如果没卖到目标值,所有筹款全部清退,用户也可以随时申请退款。

Android技术