OpenZeppelin 源碼學(xué)習(xí)筆記

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)值,所有籌款全部清退,用戶也可以隨時申請退款。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 原文:Go-Ethereum 1.7.2 結(jié)合 Mist 0.9.2 實現(xiàn)代幣智能合約的實例作者:迦壹 (注:本文...
    yuyangray閱讀 13,164評論 5 11
  • 紅塵中時常嚮往寺院的清淨(jìng)生活,可以在晨鐘暮鼓中誦經(jīng)打坐,可以在大殿的早課中聽經(jīng)聞法,可以坐在樹下聽花開葉落,可以在...
    瘋幾閱讀 1,077評論 0 3
  • 謝謝你,在我的2017年,停留過,注視過。 簡單重復(fù)的流水日子里,有你可見或不可見的身影倒映在朋友圈之中,也或有“...
    smile絲嘜小主閱讀 157評論 0 0
  • 疑心病---任然 心情不好的我總也像逛街一樣在淘歌,偶然聽到這首歌,我把這首歌分為三部分,開頭和末尾的抒情式歌...
    大山女孩閱讀 1,373評論 0 2