主页 > imtoken安装地址 > 如何构建以太坊和区块链应用程序

如何构建以太坊和区块链应用程序

imtoken安装地址 2023-01-16 21:54:02

说明

以太坊和区块链应用程序构建是高度实验性的。因此,随着新漏洞和安全风险的发现以及最新实践的发展,您应该期待区块链安全环境不断发生变化。因此,遵循本文档中的安全实践将是您作为智能合约开发人员所做的安全工作的开始。

智能合约编程需要不同于以往的工程思维方式。失败的成本可能很高,而且很难进行纠正,这使得它更像是硬件编程或金融服务编程,而不是 Web 或移动开发。因此,针对漏洞的已知保护是不够的。相反,您需要学习一种新的发展理念:

为失败做好准备

任何好的智能合约代码都会有错误。因此,您的代码必须优雅地响应错误和漏洞

· 出现问题时暂停智能合约(“断路器”)

· 金额风险管理(限息、最高使用率)

· 为错误修复和改进提供有效的升级路径

谨慎发布

在发布完整版之前,最好多次检查代码。

· 彻底测试智能合约并在发现新漏洞时重新测试。

· 从 Alpha 测试网版本开始提供错误赏金。

· 分阶段推出,在每个阶段增加代码漏洞测试。

让智能合约保持简单

复杂性增加了错误的可能性。

· 确保简单的合约逻辑。

· 模块化代码减少智能合约功能。

· 尽可能使用已知的编程工具或代码(例如,不要使用自己的随机数生成器)。

· 保持智能合约结构尽可能清晰。

保持版本更新

使用“安全通知”部分中列出的资源来跟踪新的安全发展。

· 一旦发现任何新的错误,请检查您的智能合约。

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

· 使用最新的安全技术。

了解区块链功能

虽然您的大部分编程经验都与以太坊编程有关,但仍有一些陷阱需要注意。

· 对外部智能合约调用要非常小心,这可能会导致恶意代码或对控制流的恶意更改。

· 请注意,您的公共函数对外开放,可能会被恶意任意调用。任何人都可以查看智能合约中的隐私数据。

牢记 gas 成本和区块链 gas 限制。

· 请注意,区块链上的时间戳不精确,矿工可以影响交易的执行时间(以秒为单位)。

· 随机性在区块链上不是微不足道的比以太坊区块链更好的,大多数随机数生成方法在区块链上都是可变的。

基本权衡:简单与复杂的案例

在评估智能合约系统的结构和安全性时,需要考虑许多因素。任何智能合约系统的一般建议是在这些基本权衡之间找到适当的平衡。

从软件工程的角度来看,理想的智能合约系统是模块化的,可以复用代码而不是重复代码,并且支持可升级的组件。来自安全架构偏见的理想智能合约系统可能会分享这个想法,尤其是在更复杂的智能合约系统的情况下。

但是,除了一些重要的例外,安全和软件工程的最佳做法可能会有所不同。在每种情况下,都可以通过确定沿着智能合约系统维度的最佳属性组合来实现适当的平衡,例如:

· 刚性和可扩展性

· 集成和模块化

· 复制和重复使用

刚性和可扩展性

虽然包括这一资源在内的一些资源都强调可停止、可升级或可修改模式等延展性功能,但延展性和安全性之间存在根本性的权衡。

根据定义,可扩展性模式会增加复杂性和潜在的攻击面。在智能合约系统在预定义的有限时间段内执行非常有限的一组功能的情况下,简单性在复杂性方面尤其有效,例如在没有治理有限时间范围的代币销售合约系统中。

集成和模块化

完全独立的智能合约使所有代码在本地可识别和可读。虽然单体形式的智能合约系统很少受到关注,但数据和流的极端局部性(例如在优化代码审查效率的情况下)是有争议的。

与此处考虑的其他妥协一样比以太坊区块链更好的,安全最佳实践倾向于从软件工程最佳实践从简单的短期智能合约转向更复杂的永久智能合约系统。

复制和重复使用

从软件工程的角度来看,智能合约系统希望在有意义的地方最大限度地重用。在 Solidity 中有很多方法可以重用智能合约代码。通常使用经过验证的、以前拥有的、拥有的智能合约是实现代码重用的最安全方式。

如果您没有自己以前部署的智能合约,您通常依赖于代码重复。诸如 OpenZeppelin 的 Solidity 库之类的工作试图提供一种模式,以便可以重复使用安全代码而不会重复。任何智能合约安全性分析都必须包括之前未在目标智能合约系统中建立与风险投资相对应的信任级别的任何重用代码。