Ownership 權(quán)限及管理集合
RBAC - 基于角色的權(quán)限管理功能的
Role-Based Access Control ,可以說核心就在于一個 Map<String(角色), Address[](成員)>
,附加一堆增刪查的方法與函數(shù)修飾器。
注意增刪權(quán)限為 internal
僅允許內(nèi)部添加,RBACWithAdmin
則默認(rèn)添加了一個Admin 角色,并把合約創(chuàng)建者設(shè)為了 Admin 角色。Admin 角色可以增刪其他角色
Ownable 擁有控制者的
直接將合約創(chuàng)建者設(shè)為控制者,并提供驗證控制者身份的函數(shù)修飾器 onlyOwner()
以及一個轉(zhuǎn)移控制者身份的方法 transferOwnership(address newOwner)
Contactable 可回收權(quán)限的
很簡單的一個 setContactInformation(string info)
與一個默認(rèn)的 getter 。設(shè)置管理者聯(lián)系方式….
HasNoContracts 可回收控制權(quán)的
某些情況,可能其他一些 Ownable 的合約的 owner 是此合約,調(diào)用 reclaimContract(address contractAddr)
直接把目標(biāo)合約的 Owner 權(quán)限給自己,回收此合約對其他合約的控制權(quán)。
HasNoEther 不可持有 Ether 的
就是簡單的將 fallback 函數(shù)設(shè)為沒有 payable 。再增加一個提現(xiàn)方法reclaimEther()
將合約所有錢提到控制者賬戶。
Whitelist 白名單
簡單提供了一個白名單管理功能,控制者可以增刪白名單,并提供一個 onlyWhitelisted()
的函數(shù)修飾器來查詢白名單。
Heritable 可繼承的
控制者需要每隔一段時間,調(diào)用一次合約的 heartbeat()
。否則視為死了,控制權(quán)自動轉(zhuǎn)移給兒子。
Access 訪問權(quán)限集合
SignatureBouncer 簽名驗證器
這個合約允許用戶提交簽名作為操作的授權(quán),
Payment 支付相關(guān)
PullPayment 提現(xiàn)機制
通過 asyncSend
給制定賬戶添加提現(xiàn)額度,用戶手動調(diào)用 withdrawPayments()
就可以提現(xiàn)。
SplitPayment 分紅機制
給每個賬戶分配股票,然后發(fā)錢的時候按股票比例分錢發(fā)放。
Math 計算相關(guān)
Math 最大值最小值
max
,min
uint64 及 uint256
SafeMath 加減乘除
mul
, div
, sub
, add
基本都是為了解決溢出問題
Lifecycle 生命周期相關(guān)
Destructible 可被銷毀的
主要是調(diào)用了 selfdestruct
進(jìn)行銷毀合約,并轉(zhuǎn)移合約剩余 Ether
TokenDestructible 可被銷毀的
多增加了不止轉(zhuǎn)移 Ether,還轉(zhuǎn)移 ERC20
Pausable 可暫停的
主要是提供了一個暫停狀態(tài),設(shè)置函數(shù),查詢函數(shù)修飾器
Token 貨幣相關(guān)
ERC20Basic ERC20簡單API
BasicToken ERC20簡單API實現(xiàn)
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標(biāo)準(zhǔn)API
StandardToken ERC20標(biāo)準(zhǔn)API實現(xiàn)
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 安全調(diào)研轉(zhuǎn)賬方法的Library
只是簡單的給 transfer
, transferFrom
, approve
判斷下返回值,false即拋異常。雖然標(biāo)準(zhǔn)合約并不可能返回false。
BurnableToken 可燃燒的Token
調(diào)用burn
就可以燒掉自己的錢...
MintableToken 可增發(fā)的Token
調(diào)用 mint(address _to, uint256 _amount)
就可以向指定地址增發(fā)貨幣
CappedToken 給增發(fā)Token加了個上限
繼承于 MintableToken
, 調(diào)用 mint 時會檢查有沒有到上限。
PausableToken 可暫停的Token
繼承于 StandardToken
, Pausable
, 一鍵暫停 Token 所有操作。
TokenTimelock Token鎖定合約
暫時鎖定自身持有的目標(biāo)Token,直到設(shè)定的時間之后才能被釋放,將token轉(zhuǎn)到目標(biāo)地址。
TokenVesting Token線性釋放合約
暫時鎖定自身持有的目標(biāo)Token,在合約時間內(nèi)按時間進(jìn)度百分比釋放,將token轉(zhuǎn)到目標(biāo)地址。
Crowdsale ICO合約相關(guān)
Crowsale 公募基礎(chǔ)合約
定義了公募操作的一系列行為,各個具體的公募合約應(yīng)該繼承并實現(xiàn)他們
- buyTokens 購買Token,不建議修改
- _preValidatePurchase 檢查購買操作合法性,建議使用 super
- _postValidatePurchase 檢查購買操作執(zhí)行結(jié)果有無異常,需要被覆寫
- _deliverTokens 交付 Token , 需要被覆寫
- _processPurchase 處理購買,需要被覆寫
- _updatePurchasingState 更新購買狀態(tài),需要被覆寫
- _getTokenAmount 描述Ether與Token如何換算
- _forwardFunds 轉(zhuǎn)發(fā)Ether
WhitelistedCrowdsale 白名單ICO
只賣白名單,先由控制者添加白名單你才能買幣。
CappedCrowdsale 有限總量ICO
公募有上限,募完為止。
IndividuallyCappedCrowdsale 個人限售的ICO
給每個人指定購買上限,每個人都可以不同上限。
TimedCrowdsale 限時ICO
到時結(jié)束,不可再購買
IncreasingPriceCrowdsale 幣價逐步增長的ICO
從初始幣價到最終幣價,按時間線性增長。
AllowanceCrowdsale 打借條的ICO
讓購買者自己拿借條去提現(xiàn)。
MintedCrowdsale 增發(fā)的ICO
_deliverTokens 的實現(xiàn)用 mint 增發(fā)來發(fā)幣,而不是轉(zhuǎn)賬
PostDeliveryCrowdsale 直接分配的ICO
由控制者預(yù)先直接設(shè)置誰有多少錢,用戶自提。
FinalizableCrowdsale 可結(jié)束的ICO
調(diào)用 finalize()
直接結(jié)束眾籌,不可再購買
RefundableCrowdsale 公募失敗退款I(lǐng)CO
公募結(jié)束時,如果沒賣到目標(biāo)值,所有籌款全部清退,用戶也可以隨時申請退款。