本文介绍了 Solidity 中合约类型的概念,合约本身也是一种数据类型。主要讲解了如何使用 new 关键字创建合约,以及如何与已部署的合约进行交互,包括合约类型与地址类型之间的转换,这对于构建复杂的 DApp 至关重要。
new
本文介绍了Solidity中合约继承的概念和使用方法,包括单继承和多重继承。Solidity 使用关键字 is 来表示合约的继承关系,virtual和override用于函数重写,super用于调用父合约函数。合理使用继承可以提高代码重用率和可维护性。
is
virtual
override
super
本文介绍了Solidity中接口的概念和使用方式。接口是定义一组抽象方法的规范,用于约束合约的行为,实现解耦合,并通过依赖接口而非实现,提高代码的可维护性和可扩展性。文章还通过调用ERC20合约进行转账的例子,展示了接口在合约交互中的实际应用。
本文深入讲解了Solidity函数的各个方面,包括基本语法、可见性(public、external、internal、private)及其对函数调用方式的影响、状态可变性(view、pure、payable)选择建议、函数调用方式(内部调用、外部调用)、函数参数和返回值的数据位置、函数重载、构造函数、特殊函数(receive和fallback)以及函数修改器。
本文介绍了Solidity中事件(Event)机制。事件是智能合约与外部世界通信的重要接口,用于记录链上状态变化并通知外部应用。通过定义事件和使用emit触发事件,可以在链上生成日志,链下应用可以监听这些日志以获取合约状态更新。文章还强调了事件在降低Gas成本、记录完整交易历史以及作为只写数据库方面的应用。
emit
本文详细介绍了Solidity中的布尔类型,包括其定义、使用、逻辑运算符(与、或、非)、短路求值特性、比较运算符以及在条件语句中的应用。此外,还探讨了布尔类型在权限控制、状态管理、功能开关和白名单/黑名单等实际应用场景,并提供了布尔值存储的Gas优化建议和练习。
本文介绍了以太坊智能合约如何接收以太币(ETH)。合约需要明确声明可以接收 ETH,通过定义 receive 函数或 fallback 函数来实现。receive 函数专门用于接收 ETH,而 fallback 函数在没有匹配到调用函数时被调用。此外,payable 修饰符用于指定函数可以接收 ETH。理解这些机制对于编写安全的智能合约至关重要,可避免 ETH 永久锁定在合约中。
本文详细介绍了Solidity中映射(mapping)的定义、特性和限制,并区分了映射与数组的适用场景,同时阐述了如何通过辅助数据结构实现可迭代映射。映射作为智能合约中常用的数据结构,适合存储账户余额和权限管理等键值对数据。
本文介绍了Solidity中处理错误的机制,EVM在遇到错误时会回退整个交易。合约中通过require、assert、revert抛出异常,使用try/catch捕获外部调用异常。推荐使用自定义错误,这能够节约gas,并提供更好的错误信息。理解并正确使用这些机制是编写安全智能合约的基础。
函数修改器用于改变函数行为,常用于在函数执行前检查条件。修改器通过modifier关键字定义,使用_占位符表示被修饰函数体的执行位置。修改器可以包含参数,并且支持嵌套使用、继承和重写。函数修改器常用于权限控制、输入条件检查和重入攻击防护等场景,提高代码的简洁性和可读性。
modifier
_