作为以太坊Dapp核心的智能合约并不像看上去那么容易,虽然Solidity语言本身并不复杂,而且也借鉴了很多成熟OO语言的语法,但真正要写好却并不简单。一方面固然有新语言本身的成熟性和学习成本这两个原因,但另一方面则是因为以太坊本身的特点导致的:
- 大多数智能合约涉及到实实在在的利益。
- 合约一旦发布,便可在以太坊上查看到源码。
正是这两条特点,让合约成了公开的靶子,也让合约开发者倍感压力。面对如此困境,采用现成的框架和工具显然是首选,与其到处“复制/修改”合约代码,不如直接使用成熟框架避免潜在的常见问题。
对于以太坊合约开发来讲,OpenZeppelin恰恰就担负起了这个任务:
OpenZeppelin是编写以太坊安全智能合约的库。
使用OpenZeppelin,你可以构建分布式应用、协议和组织:
- 使用常见合约安全模式
- 用Solidity语言编写
OpenZeppelin的优势主要体现在:
- 对常见的安全问题提供了封装,典型的:
- 对于Overflow和Underflow,它提供了Safemath库。
- Safe类,比如SafeERC20,其中提供相应的safe操作。
- 白名单
- 作为成熟的Token库,降低了Token合约的开发成本。
对于初出茅庐的以太坊开发者来说,第二点的意义尤为重要。
虽然区块链技术本身处于发展阶段的早期,很多应用场景和模式尚未成熟和定型。但有一点可以明确的是,Token机制的提出改变了很多应用的玩法。不论开发者之前的经验多寡,刚刚进入以太坊应用开发领域时势必都需要历经技术和业务的双重洗礼,Token思维则是其中的关键环节。而且可以毫不夸张的说,Token本身就是智能合约开发的核心。
对于大部分入门者来讲,Token思维的炼成并不容易,因为在以往大多数的应用开发中并没有与之对应的参照物。通过使用成熟的Token库,有助于开发者迅速掌握常见的Token应用模式,从而快速跨过新手阶段。
OpenZeppelin对于ERC20和ERC721提供了直接的支持,从token目录下可以看出来,关于ERC20的例子可以参见之前写过的文章。同时,对于常见的模式,它也都提供了封装,比如:
- 众筹
- 可销毁合约
- RBAC(基于角色的访问控制)合约
- 可继承合约
如果觉得这些还不够,开发者还可以去看看Tokenmarket的ICO仓库,它是建立于OpenZeppelin之上的专门针对ICO的合约库。通过它,同样可以帮助入门者快速了解ICO相关的业务和模式。
作为生态的一员,OpenZeppelin可以跟其他流行的Dapp开发框架集成,因为其本身已被打包成npm,这一点显而易见。各位可以在上面的链接中看到它和Truffle集成的例子,其实很简单,就一句话而已:
npm install -E openzeppelin-solidity
OpenZeppelin背后的公司Zeppelin并没有止步于仅仅提供一个智能合约的编写框架,它还发布了一个中间件产品:ZeppelinOs,用来帮助开发和管理智能合约,其中的重头戏就是可升级合约。下图指出了它所处的位置。
image新的地图已经打开,让我们由此深入合约的开发,通过OpenZeppelin及其相关工具的学习和使用,了解合约开发的各种套路!
网友评论