这篇文章深入探讨了Ethereum智能合约的安全性,具体阐述了Solidity语言中的常见漏洞,例如重入攻击、算术溢出和访问控制问题。文章提供了理论背景和具体的代码示例,并给出了缓解这些安全问题的方法,通过这样的方式帮助开发者理解并实现安全的智能合约编写。
这篇文章深入探讨了以太坊的Safe智能账户(Safe Smart Accounts)的基础知识,涵盖了定义、架构、关键功能及其与多重签名和元交易等概念的关系。文章提供了详细的术语说明,并分层次地展示如何安全地操作和管理高价值的安全智能账户,同时为后续的安全最佳实践奠定了基础。
本文介绍了多重签名账户,这是一种需要多个授权签名者批准操作才能执行的智能合约账户。文章详细讲解了 ERC-7913 标准及其在 OpenZeppelin 中的实现,包括 SignerERC7913、MultiSignerERC7913 和 MultiSignerERC7913Weighted 合约,以及如何具有不同类型签名者和权重的多重签名账户。
EIP-1271(又名ERC-1271)是以太坊的一项改进,使智能合约能够验证签名,允许它们像传统的EOA钱包一样签署交易。EIP-1271 为智能合约解锁了大量功能,包括基于意图的交易、高级订单类型以及需要钱包签名的各种区块链交互,还介绍了EIP-1271 的原理和使用场景。
本文深入探讨了智能合约中重入攻击的原理、危害以及防御方法。文章通过具体的代码示例,详细解释了经典重入攻击和只读重入攻击的利用方式和防范措施,强调了Check-Effects-Interactions模式和重入锁Guard在保障智能合约安全中的重要性。尤其针对view函数在特定情况下可能返回过期数据的问题提出了应对方案。
本文介绍了在智能合约开发中使用加密密钥的重要性,并提供了在 Hardhat 和 Foundry 框架中实现加密密钥的详细步骤。文章强调了明文存储密钥的风险,并提供了使用 AES 等加密技术保护密钥的方法,同时推荐了密钥管理和安全开发的最佳实践。
本文总结了Solidity智能合约开发中常见的五个陷阱,包括存储、内存和calldata的区别,重入攻击,默认public的可见性,使用tx.origin进行授权的风险,以及无限循环/高Gas成本问题。针对每个问题,文章都给出了具体的代码示例和修复方案,旨在帮助开发者构建更安全、更智能的智能合约。
本文提出了一项激进的想法,即用 RISC-V 替代 EVM 作为智能合约的虚拟机语言,旨在提高以太坊执行层的效率和简洁性,解决主要扩展瓶颈。现有的EVM合约和新的RISC-V合约可以互相兼容,开发者仍然可以使用Solidity和Vyper编写智能合约。
本文介绍了如何在PolkaVM上使用Hardhat进行智能合约的开发和测试。文章详细说明了如何创建本地环境、设置本地节点、准备编译器(RESOLC)、配置Hardhat,以及如何编译和在本地PolkaVM节点上进行测试。文章提供了详尽的步骤和代码示例,指导读者完成整个流程。
该文档是OpenZeppelin对Moonsong-Labs/zksync-social-login-circuit代码仓库进行的安全审计报告,主要内容是利用零知识证明验证Google账户所有权的Circom电路,用于智能账户恢复,审计发现了一些完整性和非确定性问题,并提出了改进代码质量的建议。
本文分析了审计竞赛平台常见的营销误导策略,包括虚报提交指标、参与人数、排他性承诺、顾问审计师参与、社交媒体互动、匿名评价以及个体审计对比。文章建议在选择审计竞赛平台时,关注透明度、沟通和有效指标,并提出了一系列问题,帮助读者识别并避免这些误导,从而选择真正能提高代码安全性的平台。
Alloy v1.0 发布,这是一个用 Rust 编写的以太坊开发工具包,旨在提供高性能、稳定性和良好的开发者体验。Alloy 包含了直观的合约交互方式、快速的原语类型、简化的 RPC 提供者以及更好的多重调用支持,为构建高性能以太坊应用提供支持。
Trim 是一种面向 EVM 的、基于操作码的编程语言,它提供了一种更可读的方式来编写高度优化的代码,而不会引入额外的复杂性。它具有 S 表达式、字符串、标签、宏等特性,可以更方便地编写智能合约。文章介绍了 Trim 的基本使用、语法、特性和宏,并展示了如何使用 Trim 编写智能合约。
文章讨论了在区块链交易中模拟执行与实际执行之间状态差异的问题。提出了一种通过在交易中附加状态约束来解决此问题的方法,这些约束在交易执行前进行检查,确保交易在符合预期状态的条件下进行,从而提高交易的安全性和可靠性。文章还探讨了EIP-7702等以太坊改进提案如何为此方法提供更好的用户体验和效率
本文深入探讨了Solana中lamport转移的潜在危险,通过一个“King of the SOL”的智能合约游戏案例,揭示了rent-exemption、可写账户的lamport转移失败以及write-demotion等问题可能导致程序出错甚至瘫痪。文章强调了在Solana上转移lamport并非总是直接的,需要考虑多种runtime-specific的特殊情况。