Ownership 权限及管理集合
RBAC - 基于角色的权限管理功能的
Role-Based Access Control ,可以说核心就在于一个 Map
,附加一堆增删查的方法与函数修饰器。
注意增删权限为 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
公募结束时,如果没卖到目标值,所有筹款全部清退,用户也可以随时申请退款。