搜索
首页科技周边IT业界与Openzeppelin和朋友的质量坚固代码

OpenZeppelin:保障以太坊智能合约安全的利器

Quality Solidity Code with OpenZeppelin and Friends

核心要点

  • OpenZeppelin为以太坊开发者提供了一个宝贵的工具集,包含安全可靠的Solidity代码模式和智能合约模块,已成为行业标准,并可轻松通过Truffle部署。
  • OpenZeppelin库包含各种用于在以太坊平台上发布代币的合约,包括ERC20、ERC721和ERC827代币。它还提供了一套众筹合约,用于进行首次代币发行(ICO),具有记录购买、交付代币和转发ETH资金等各种功能。
  • ZeppelinOs是一个去中心化的工具和服务平台,用于开发和管理安全的智能合约应用程序。它承诺使开发人员能够通过升级模式选择其已部署代码的可变性,从而解决以太坊上部署的智能合约固有的不可变性问题。
  • Truffle框架是以太坊的开发环境、测试框架和资产管道。它包括Truffle boxes,即包含前端JavaScript代码、Solidity合约和工作流程实用程序的样板。TokenMarket和ConsenSys也是管理代币销售和提供以太坊智能合约最佳实践的知名工具。

以太坊的计算需要在网络中的所有节点上复制,因此其计算成本高昂且效率低下(事实上,以太坊的GitHub开发者文档指出,我们不应该期望以太坊的计算能力超过1999年的手机)。

因此,以太坊虚拟机(EVM)的安全,即部署在以太坊区块链上的智能合约的安全,至关重要。所有错误都会造成实际的经济损失——无论是糟糕的合约代码造成的错误,还是黑客利用合约漏洞(例如臭名昭著的DAO黑客事件,导致社区分裂并催生了以太坊经典区块链)造成的损失。

图灵完备性以及其他一系列设计决策,使以太坊功能更强大、更复杂,但也付出了代价。以太坊的丰富性使其更容易受到错误和黑客攻击。

更糟糕的是,部署在以太坊上的智能合约无法修改。区块链是一种不可变的数据结构。

本文深入探讨了智能合约的安全性和帮助我们编写安全智能合约的工具和库生态系统。

让我们来看看一些令人惊叹的工具升级,我们可以立即使用它们来充分利用Solidity环境提供的最佳实践。

辅助工具

以太坊开发者最酷的工具之一是OpenZeppelin库。它是一个框架,包含许多安全可靠的Solidity代码模式和智能合约模块。其作者本身就是Solidity审计员和顾问,您可以在此处阅读对这些模块的第三方审计报告。Zeppelin Solutions(一家位于阿根廷的公司)的Manuel Araoz概述了主要的Solidity安全模式和注意事项。

OpenZeppelin已成为可重用且安全的开源(MIT)Solidity代码的行业标准,可轻松使用Truffle部署。它由智能合约组成,这些合约一旦通过npm安装,就可以轻松导入并用于我们的合约中。

Quality Solidity Code with OpenZeppelin and Friends

Truffle框架发布了一个关于如何将OpenZeppelin与Truffle和Ganache一起使用的教程。

这些合约旨在导入,其方法也旨在根据需要进行覆盖。文件本身不应修改。

ICO模式

OpenZeppelin库包含一组用于在以太坊平台上发布代币的合约——用于ERC20代币,包括BasicToken合约、BurnableToken、CappedToken(具有固定上限的可铸造代币)、MintableToken、PausableToken(可以暂停代币转账)。还有TokenVesting(一个可以像典型的归属计划一样逐步释放其代币余额的合约,具有断崖期和归属期)等等。

还有一些用于ERC721代币(或CryptoKitties类型的不可替代的唯一代币)的合约。

还包括ERC827代币合约,该标准用于在交易代币时发送数据。

还有一些众筹合约——用于进行首次代币发行的合约。这些合约可以记录购买、向买家交付/发出代币、转发ETH资金。还有一些用于验证和处理代币购买的功能。

FinalizableCrowdsale合约允许在销售后执行某些逻辑。PostDeliveryCrowdsale允许冻结提款,直到众筹结束。RefundableCrowdsale是Crowdsale合约的扩展,它添加了融资目标,以及如果未达到目标,用户可以获得退款的可能性。

可销毁合约可以被所有者销毁,并将所有资金发送给所有者。还有一些合约用于实现对子合约的可暂停性。

OpenZeppelin提供了许多用于进行ICO的辅助工具和实用程序——例如,一个可以恢复错误发送到ICO地址而不是ETH的ERC20代币的合约。一个可继承的合约允许在特定情况下将所有权转移给另一个所有者。Ownable合约有一个所有者地址,并提供基本授权/权限和所有权转移。

RBAC合约提供基于角色的访问控制实用程序。我们可以为不同的地址分配不同的角色,角色数量不限。

Zeppelin还提供了一个尚未经过审计的示例众筹启动Truffle项目,因此最好将其用作使用OpenZeppelin的入门介绍。它使快速启动众筹和代币变得容易。

ZeppelinOs

Quality Solidity Code with OpenZeppelin and Friends

ZeppelinOs是一个开源的、去中心化的工具和服务平台,建立在EVM之上,用于安全地开发和管理智能合约应用程序。

实际上,这是EVM之上的中间件层,比目前的OpenZeppelin框架更进一步。Zeppelin Solutions在此承诺的是使开发人员能够通过升级模式选择其已部署代码的可变性。那些为EVM编写智能合约的人知道,一个问题/限制是已部署合约的不可变性:一旦进入区块链,合约就无法更改。这就是ZeppelinOs的承诺如此吸引人的原因之一。

到目前为止,为了“更新”合约,需要部署两个合约——一个作为具有接口的代理,另一个作为实现。将调用代理的功能,并将请求转发到实现。然后,如果需要更改,则在代理中切换实现(重新定位另一个实现,并可以选择使用自杀函数关闭原始实现),新的实现将无缝激活。

我们期待着ZeppelinOs未来被社区采纳的情况。Zeppelin Solutions已经提到了OpenBazaar、district0x、storj.io等一些非微不足道的参与者,他们正在使用ZeppelinOs。

Quality Solidity Code with OpenZeppelin and Friends

Truffle Boxes

Truffle框架是以太坊的开发环境、测试框架和资产管道。它是工具集最完整、在以太坊开发者中应用最广泛的工具集。Truffle的生态系统包括许多Truffle boxes——包含前端JavaScript代码、Solidity合约和工作流程实用程序(如带有其工具集的样板webpack项目)的样板,例如迁移、测试、构建管道等。Truffle Boxes可以包含完整的入门dapp。

一些官方支持的boxes包括:

  • Drizzle:一组基于React/Redux的前端库,使创建dapp前端更容易。
  • React box:一个简单的应用程序,用于从React前端应用程序开始与智能合约交互。
  • React Auth box:提供由智能合约支持的身份验证所需的一组组件。
  • React-Uport:此身份验证box将前端与UPort区块链身份验证系统连接。
  • 还有前面提到的webpack项目样板box。

社区创建的boxes还带来了与移动应用程序/Status IM集成合约的样板,或提供Angular和Vue.js样板等。

这些boxes与Truffle集成,因此我们可以通过运行诸如truffle unbox react之类的命令来启动它们——这将下载React box并在本地安装其依赖项。

TokenMarket

TokenMarket是另一家发布了Solidity合约和用于管理代币销售/ICO的工具的企业。它是一家在直布罗陀注册的有限公司,从事ICO咨询业务。它在2018年柏林加密货币世界博览会峰会上荣获“最佳ICO顾问”奖。

Tokenmarket在GitHub上的ICO存储库表示,其设计目标/原则之一是使用或构建现有的OpenZeppelin合约,称其为Solidity合约的黄金标准。因此,TokenMarket的大部分ICO代码库都是基于OpenZeppelin的代码库,然后在其基础上进一步构建(通过以面向对象的方式继承)。

TokenMarket定期(尝试)与其上游代码库OpenZeppelin保持同步。但是,它还添加了更多内容,例如:

  • AMLtoken合约:这使所有者有机会在参与者在经过长时间的AML流程后未通过的情况下,在代币发布之前从参与者那里收回代币。
  • Gnosis Wallet:基本上是一个多签钱包,需要多个参与方对某些交易达成共识。
  • 中心化发行代币合约。
  • KYCCrowdsale:一个只允许非匿名投资者参与的合约。
  • 重新启动的众筹合约:这将恢复之前的众筹,并允许更改某些参数。
  • 里程碑定价:此合约提供基于里程碑的定价和ICO前交易。

尽管我们在此讨论的存储库中有很多代码,但EVM是图灵完备的,因此所有这些不同的合约甚至都不能远程耗尽其全部功能。如果系统(以太坊)能够生存并继续保持竞争力,并且网络上有足够多的人,我们可以期待这些区块链合约试图解决的问题的更大通用性。

ConsenSys

Consensys Ventures是一家瑞士风险投资公司,它将自己定位为去中心化领域的风险投资公司——尤其是在以太坊领域。除了他们为受保护公司提供的其他资源外,他们还整理了一份关于以太坊智能合约最佳实践的简短汇编。虽然严格来说这不是代码,但它仍然包含大量关于Solidity代码的优缺点示例。

它主要关注Solidity智能合约的最佳安全实践。

完整的主题列表超出了本文的范围,因为该资源非常全面,即使是提醒智能合约开发者在为EVM编写软件时需要牢记的所有内容,也值得一读。如果有人从头开始编写程序(不依赖于像OpenZeppelin这样的现成和经过验证的代码),则尤其如此。

一些文章涉及外部调用、避免外部调用后的状态更改、处理外部调用中的错误、优先使用拉取而不是推送进行外部调用、了解抽象合约和接口之间的权衡、不要假设合约是使用零余额创建的、区分函数和事件、多重继承注意事项、关于时间戳依赖性和此类结构的可玩性(例如,使用块)的警告——以及许多其他此类技巧,并附带大量代码示例。

然后是特定于代币的警告、与代币标准相关的警告、软件工程技术、安全工具——用于静态分析、测试、代码检查器等。

他们还列出了已知的攻击,包括那些调用外部代码和合约、在这种情况下可以重复调用的函数、重入问题、跨函数竞争条件,在这里他们分析了一系列问题,其中一些问题在DAO黑客事件中表现出来。

他们进一步提到了交易排序依赖性、时间戳依赖性、整数溢出和下溢、不同类型的DoS攻击可能性/点,例如使用区块燃气限制的DoS,然后强制将以太币发送到合约;他们还分析了历史上的和已弃用的攻击。一定要阅读他们的文档。

结论

在本篇关于生态系统的介绍中,我们介绍了一些用于在以太坊虚拟机上编写良好、可用于生产的智能合约的可用资源。这包括重用经过审核和验证的代码(OpenZeppelin声称有超过40亿美元的加密货币在其合约上运行)以及学习编写自己的安全、可用于生产的软件的实用资源。

我们非常肯定这个列表还不完整。我们是否错过了任何值得一提的内容?请告诉我们!

关于Solidity和OpenZeppelin的常见问题

OpenZeppelin在Solidity中的主要用途是什么?

OpenZeppelin是一个用于安全智能合约开发的库。它提供了像ERC20和ERC721这样的标准的实现,您可以按原样部署这些标准,也可以根据您的需求进行扩展,以及用于构建自定义合约和更复杂的去中心化系统的Solidity组件。OpenZeppelin通过提供经过测试和社区审核的代码来帮助保护区块链项目免受常见威胁。

OpenZeppelin如何确保智能合约的安全?

OpenZeppelin通过提供经过测试、可重用且安全的代码库来确保智能合约的安全。OpenZeppelin Contracts库是以太坊智能合约开发中最广泛使用的解决方案。它旨在成为开发人员可重用的安全可靠代码资源,从而减少单个智能合约中潜在漏洞的范围。

如何使用OpenZeppelin升级我的智能合约?

OpenZeppelin提供升级插件,您可以使用这些插件来升级智能合约。这些插件提供了一种简单安全的方法来随着时间的推移升级智能合约,以添加新功能或修复错误。这些插件旨在与Truffle和Hardhat开发环境一起使用。

Truffle在OpenZeppelin中的作用是什么?

Truffle是以太坊的开发环境、测试框架和资产管道。它通过为智能合约提供测试环境在OpenZeppelin中发挥着至关重要的作用。Truffle的工具套件帮助开发人员在一个统一的环境中创建、编译、部署和测试智能合约。

如何将OpenZeppelin与Truffle一起使用?

要将OpenZeppelin与Truffle一起使用,您需要在项目中安装两者。安装完成后,您可以将OpenZeppelin合约导入到您自己的合约中,并根据您的需求进行扩展。Truffle将用于编译和部署您的合约。

将OpenZeppelin用于我的Solidity项目的好处是什么?

OpenZeppelin为您的Solidity项目提供了稳定、安全的基石。它提供了一个经过测试、可重用且安全的代码库,可以帮助保护您的项目免受常见威胁。它还提供升级智能合约的工具,允许您随着时间的推移添加新功能或修复错误。

如何为OpenZeppelin社区做出贡献?

OpenZeppelin社区欢迎开发人员的贡献。您可以通过报告错误、建议新功能或编写代码来做出贡献。所有贡献都将由社区审核,并有助于提高OpenZeppelin的安全性和功能性。

我可以将OpenZeppelin用于除以太坊以外的其他区块链项目吗?

虽然OpenZeppelin主要设计用于以太坊,但它的许多原则和库可以应用于其他区块链项目。但是,具体的实现细节可能会因您使用的区块链平台而异。

OpenZeppelin如何处理ERC20和ERC721标准?

OpenZeppelin提供了ERC20和ERC721标准的实现,您可以按原样部署这些实现,也可以根据您的需求进行扩展。这些实现是安全可靠的,并且经过测试和社区审核。

Solidity开发的OpenZeppelin替代方案有哪些?

虽然OpenZeppelin是Solidity开发的热门选择,但还有其他可用的库和框架。这些包括Truffle、Hardhat和Ether.js。每个都有其自身的优缺点,最佳选择取决于您的具体需求和偏好。

以上是与Openzeppelin和朋友的质量坚固代码的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用AWS ECS和LAMBDA的无服务器图像处理管道使用AWS ECS和LAMBDA的无服务器图像处理管道Apr 18, 2025 am 08:28 AM

该教程通过使用AWS服务来指导您通过构建无服务器图像处理管道。 我们将创建一个部署在ECS Fargate群集上的next.js前端,与API网关,Lambda函数,S3桶和DynamoDB进行交互。 Th

CNCF ARM64飞行员:影响和见解CNCF ARM64飞行员:影响和见解Apr 15, 2025 am 08:27 AM

该试点程序是CNCF(云本机计算基础),安培计算,Equinix金属和驱动的合作,简化了CNCF GitHub项目的ARM64 CI/CD。 该计划解决了安全问题和绩效

使用GO构建网络漏洞扫描仪使用GO构建网络漏洞扫描仪Apr 01, 2025 am 08:27 AM

此基于GO的网络漏洞扫描仪有效地确定了潜在的安全弱点。 它利用了GO的并发功能的速度功能,包括服务检测和漏洞匹配。让我们探索它的能力和道德

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。