本文探讨了Web3中智能合约重入攻击等常见安全问题依然存在的原因,提出了开发者应具备安全意识,将安全验证纳入开发流程,并鼓励开发者通过实验和犯错来加深对Solidity语言的理解,从而提升智能合约的安全性。文章强调了在学习和开发智能合约时,实验和安全性的重要性。
本文介绍了智能合约bytecode大小限制的重要性,以及超过限制可能导致的DOS攻击。EIP-170将以太坊智能合约bytecode大小限制设置为24.576 KB。文章列举了多种优化bytecode大小的方法,如避免代码冗余、使用库、采用ERC-2535等,并推荐了hardhat-contract-sizer等工具来监控合约大小。
本文讨论了智能合约开发者如何优化合约bytecode大小,避免达到24.576 kb的限制。文章强调了在Solidity智能合约中使用库的重要性,通过代码重用、减小合约大小、易于维护和提高安全性来最小化合约bytecode大小,并建议避免将库函数声明为internal visibility,而应使用public,以保持库函数独立并优化bytecode大小。
本文探讨了Etherscan上已部署和验证的智能合约显示的字节码内容。通过实验对比,发现Etherscan显示的并非仅是运行时字节码,而是完整的字节码(创建代码+运行时代码),并附加构造函数参数(如果存在)。此外,未验证的合约在Etherscan上仅显示运行时字节码。
本文是Token Standards文章系列的第11部分,介绍了以太坊的ERC-721标准,用于NFT(非同质化代币)。ERC-721代币是唯一的,可以用来标识独特的资产。文章详细解释了ERC-721接口的功能,包括代币转账、余额查询、所有者查询等,以及如何存储NFT的图像和元数据,并讨论了ERC-721标准的局限性。
本文介绍了以太坊上的ERC-20代币标准。首先解释了代币的概念,然后深入探讨了ERC-20标准的目的和功能,包括transfer、balanceOf、totalSupply等关键函数,以及Transfer和Approval事件。最后,通过一个简单的ERC-20合约示例,展示了如何实现minting和burning功能,总结了ERC20代币标准。
本文深入探讨了Solidity中的可见性修饰符(public, external, internal, private),分析了它们的基础知识、优化技巧(external函数比public函数更节省gas)以及安全注意事项(private并非真正私有)。同时,文章强调了访问控制和输入验证的重要性,并提供了关于函数布局和接口可见性的实用建议。
本文讨论了智能合约是否应该设计成可升级的。文章探讨了可升级合约可能引入的复杂性和潜在的安全风险,同时也强调了其在修复bug和添加新功能方面的作用。文章建议,不应仅仅因为担心复杂性而避免使用可升级合约,而应加强对升级技术的理解。同时,推荐使用ProxyAdmin合约和多重签名,或通过链上治理来实现更安全的升级。
本文介绍了区块链的基本概念、历史、工作原理、安全特性以及应用场景。文章从中心化与去中心化的概念入手,解释了区块链产生的背景,详细描述了区块链的定义、结构和共识机制,并探讨了公有链和私有链的区别,最后列举了区块链在国际支付、供应链、医疗、身份管理和投票系统等领域的应用。
本文深入探讨了Solidity中payable关键字的奥秘。通常payable关键字用于允许函数接收以太币。但一个有趣的现象是,给函数添加payable关键字实际上可以减少Gas消耗。这是因为非payable函数需要额外的opcode来检查是否接收了以太币,而payable函数则不需要,从而减少了Gas消耗。作者建议,gas优化重要,但不要为了节省少量gas而牺牲函数的本意。