本文是30天Solidity学习系列的第1天,主要介绍了Solidity是什么,以及为什么要学习Solidity。Solidity是一种用于在以太坊虚拟机(EVM)上编写智能合约的静态类型、高级编程语言。学习Solidity可以用于DeFi、NFT、DAO、游戏等领域的开发,并且Solidity开发者有很高的市场需求。
本文是Solidity入门教程的第二天内容,主要讲解如何搭建Solidity的开发环境,包括安装MetaMask钱包,使用Remix IDE,以及可选的Hardhat本地开发环境。并通过一个简单的Hello Web3合约示例,演示了合约的编写、编译和部署过程,以便读者快速上手Solidity智能合约开发。
本文介绍了如何使用Solidity编写一个简单的智能合约,该合约能够在以太坊区块链上存储和检索数据。文章通过一个SimpleStorage合约的例子,讲解了状态变量的声明、set和get函数的编写,以及如何在Remix IDE中部署和交互该合约。
SimpleStorage
set
get
本文介绍了Solidity中的变量(包括状态变量、局部变量和全局变量)、数据类型(如uint、bool、address、string等)以及函数的概念和常用修饰符(public、private、view、pure等)。并通过一个简单的MyProfile合约示例,演示了如何存储和更新名称,以及如何返回当前名称。文章还提供了一个小挑战,鼓励读者创建一个新的智能合约。
Pump.fun 创新性地使用连接曲线机制来解决流动性问题, 本文带领大家实现一个 pump.fun
本文探讨了Web3开发中常见的智能合约漏洞,并提供了防范措施。文章详细分析了重入攻击、数据溢出和下溢,以及价格预言机操纵这三种经典漏洞的原理、攻击方式和修复方法。此外,文章还介绍了Chainlink等工具在降低预言机操纵风险方面的应用,强调了安全第一的开发理念。
本文介绍了Rust中的std::mem::take函数,它允许高效地从可变引用中取出值,并用默认值替换。文章通过多个示例展示了std::mem::take在处理Vec、String、自定义结构体以及状态管理等场景中的应用,强调了其避免不必要的克隆和堆分配的优势。同时对比了未使用take时的替代方案,总结了std::mem::take的优点,并提供了一些有用的资源链接。
std::mem::take
Vec
String
take
本文深入分析了ERC-4626 Vaults中存在的通胀攻击漏洞,攻击者可以通过极少量初始存款和后续的“捐赠”操作,操纵Vault的份额计算,从而窃取后续存款人的资产。文章详细解释了攻击原理、步骤,并通过实例进行了说明,同时探讨了针对此漏洞的多种防御措施,例如使用ERC4626 Router、内部跟踪总资产、创建“死亡份额”以及在初始化时注入初始资金等。
本文介绍了星际文件系统(IPFS)的基本概念、适用场景和不适用场景。IPFS 适合存储公共、不可变的数据,如 NFT、证书和智能合约元数据。对于私有或敏感数据,应先加密再上传至 IPFS,或采用混合方案,利用后端处理访问控制和密钥管理。
本文总结了Solidity智能合约开发中常见的五个陷阱,包括存储、内存和calldata的区别,重入攻击,默认public的可见性,使用tx.origin进行授权的风险,以及无限循环/高Gas成本问题。针对每个问题,文章都给出了具体的代码示例和修复方案,旨在帮助开发者构建更安全、更智能的智能合约。