如何保障智能合约的安全性

2020-07-16 11:21 栏目:经验之谈 来源:网络整理 查看()

以太网开发人员需要了解的四个安全原则和一些基本的权衡。

如何保障智能合约的安全性

虽然区块链行业的发展越来越成熟,但智能合同的发展仍然是一个相对较新的领域。因此,为了应对新的漏洞和安全危机,满足开发新的最佳做法的需要,我们应该不断改进安全问题。就安全性而言,学习最佳实践只是智能合同开发人员的第一步。

智能合同编程需要不同的工程思维。智能契约失败的代价非常高,并且更新迭代需要大量的工作,这使得它在某些方面比web或移动开发更类似于硬件编程或金融服务编程。因此,仅仅防范已知风险是远远不够的,必须掌握新的发展理念。

准备应急措施

任何重要的合同都会失败。因此,开发人员必须做好及时处理漏洞的准备。

发生故障时中止合同(“断路器”)。

管理风险资本的数量(限制资本流动,最大限度地提高利用率)。

准备一个有效的升级途径来修复和改进错误。

采取预防措施

最好在产品发布前找到漏洞。

全面测试合同,并在发现新的攻击向量时添加相应的测试。

阿尔法测试网络版本发布后,提供bug赏金。

分阶段启动,在每个阶段更新功能并添加新的测试。

保持聪明的合同简单

复杂性增加了失败的可能性。

确保合同逻辑简单。

保持契约和功能小的模块化代码。

请尽可能多地使用现有工具或代码(例如,不要使用自己的随机数生成器)。

在确保清晰度的前提下,再次考虑性能。

仅在系统中需要分散的部分使用区块链技术。

保持最新

跟进新的安全措施。

检查智能合同,尽快找到新的漏洞。

尽快升级到任何工具或库的最新版本。

采用能有效保证安全的新技术。

了解EVM的特点

尽管开发人员熟悉以太网编程,但他们仍然需要注意一些陷阱。

特别注意外部合同调用,这可能会执行恶意代码并改变控制流。

请理解,开发人员的公共函数是开放的,可能会被恶意调用,并且调用顺序可能是任意的。任何人都可以查看智能合同中的私人数据。

注意天然气成本和区块天然气限制。

请注意,区块链上的时间戳不准确:挖掘者可以在几秒钟内影响事务的执行时间。

随机性是区块链的一个重要特征,大多数生成随机数的方法在区块链都是游戏。

基本权衡因素

在评估智能合同系统的结构和安全性时,有许多基本的权衡。所有智能合同系统的一般建议是在这些权衡之间找到一个平衡点。

从软件工程的角度来看,理想的智能合同系统是模块化的,即重用代码而不是复制代码,并支持可扩展的组件。从安全架构的角度来看,理想的智能合同系统也可能使用这种模式,尤其是面对更复杂的智能合同系统。

然而,当安全性和软件工程最佳实践不一致时,会有一些例外。在每种情况下,都可以通过选择合同系统上的最佳性能组合来实现平衡,如:

固定版本与可升级版本

模块化与模块化

复制与重用

固定版本与可升级版本

当多个资源(包括这个资源)强调它们的可扩展性(例如可中断、可升级或可修改的模式)时,有必要在可扩展性和安全性之间找到平衡。

可扩展性增加了复杂性和潜在的攻击。如果智能合同系统能够在预定的有限时间内完成的功能非常有限,那么简单性比复杂性更有效,例如,不受管制的有限时间令牌销售合同系统。

模块化与模块化

独立的封锁合同允许在本地识别和读取信息。虽然阻塞契约通常被忽略,但是对于数据和流的极端本地化还是有争议的,比如代码审计的效率优化。

像本文中考虑的其他因素一样,在简单的短期合同中,安全最佳实践往往与软件工程最佳实践相矛盾;在更复杂的永久合同制度中,两者往往是一致的。

复制与重用

从软件工程的角度来看,智能合同系统希望在需要时最大化重用功能。在Solidity语言中,有许多方法可以重用契约代码。实现代码重用最安全的方法是使用您自己的已经过验证和部署的契约。

如果以前部署的合同不可用,开发人员通常需要依赖复制。OpenZeppelin的Solidity库试图提供一些模式,这样安全代码就可以在不复制的情况下重用。任何合同安全性分析都必须包括目标智能合同系统中的重用代码,这些代码没有与风险资本建立信任级别。

如今,在以太网上创建应用软件无疑是软件工程师最激动人心的前沿领域,但它需要持续的威胁建模、安全审计和全面的故障处理计划。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发