OpenZeppelin 源码学习笔记

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容

  • 原文:Go-Ethereum 1.7.2 结合 Mist 0.9.2 实现代币智能合约的实例作者:迦壹 (注:本文...
    yuyangray阅读 13,073评论 5 11
  • 紅塵中時常嚮往寺院的清淨生活,可以在晨鐘暮鼓中誦經打坐,可以在大殿的早課中聽經聞法,可以坐在樹下聽花開葉落,可以在...
    疯几阅读 1,057评论 0 3
  • 谢谢你,在我的2017年,停留过,注视过。 简单重复的流水日子里,有你可见或不可见的身影倒映在朋友圈之中,也或有“...
    smile丝唛小主阅读 155评论 0 0
  • 疑心病---任然 心情不好的我总也像逛街一样在淘歌,偶然听到这首歌,我把这首歌分为三部分,开头和末尾的抒情式歌...
    大山女孩阅读 1,354评论 0 2