本文是作者在web3bridge学习的第三周的第二部分内容总结,主要介绍了Solidity编程语言的基础知识,包括数据类型、变量、函数、存储、事件、日志以及工厂合约等关键概念。作者分享了学习心得,并为接下来的第四周学习做铺垫。
这是我发布的文章的第二部分,你可以在这里阅读 第一部分。接下来,我将带你了解我在第三周第二部分所学到的内容。第二部分介绍了 Solidity 的基础知识,闲话少说,让我们开始吧。
Solidity 是一种高级的、面向对象的编程语言,专门用于在各种区块链平台上编写智能合约,最著名的是以太坊。它是一种静态类型语言,这意味着变量类型必须在编译时定义,并且它支持诸如继承、用户定义的类型(结构体、映射、枚举)和库之类的功能。Solidity 的关键元素包括合约定义、状态变量、函数和构造函数,构造函数在合约部署期间执行。
Solidity 是一种用于在以太坊区块链上开发智能合约的静态类型语言,它要求为所有变量显式声明数据类型。这允许编译器确保正确的用法和内存分配。
以下是我们目前所涵盖的类型:
这些类型将其数据直接存储在内存中,并在分配或作为函数参数传递时进行复制。
Solidity 中的值类型
这些类型存储对实际数据所在位置的引用(内存地址)。
Solidity 中的引用类型
变量是智能合约中数据的命名存储位置。通过指定其数据类型和名称来声明它们。
在任何函数之外声明,它们的值永久存储在区块链上合约的存储中。
在函数内部声明,它们的值是临时的,仅在函数执行期间存在。
Solidity 提供的特殊内置变量,提供有关区块链、交易和执行上下文的信息(例如,block.timestamp、msg.sender、msg.value)。
要声明一个变量,还有一个约定,也称为签名,它只是指导开发人员正确定义变量的规则
[type] [visibility] <variableName>。
具有局部变量、全局变量和状态变量的合约
函数是智能合约中执行特定任务的命名代码块。
在声明函数时,有一种约定也可以称为函数签名,以帮助开发人员定义函数
function <name>(dataType arg1) <visibility> <stateMutability> returns (returnType) {}
函数定义示例
函数具有可见性修饰符,用于控制可以从何处调用它们:
这些修饰符指示函数如何与区块链状态交互:
函数可以接受输入参数并返回输出值。必须显式声明参数和返回值的数据类型。
函数可见性、状态可变性和返回类型
存储是指区块链上持久的、合约级别的存储,状态变量存储在此处,并且它们的值在函数调用和交易之间保持不变。
内存是指临时存储,其中存储局部变量或函数参数,并在函数执行结束后丢弃。
它涉及理解合约的代码、其状态变量、函数和事件,以及它如何与区块链交互。
Solidity 中的智能合约 ABI(应用程序二进制接口)充当与以太坊虚拟机 (EVM) 上编译的智能合约交互的关键接口。它充当标准化规范,定义了外部应用程序或其他智能合约如何与已部署的合约通信。
具有 2 个函数(加法和减法)Contract 的简单 ABI
事件是智能合约中的声明,用于定义记录特定事件的结构。它们充当合约发出的信号,指示发生了某些重要的事情,例如代币转账、状态更改或操作完成。
一个简单的合约,展示了如何在函数中声明事件和发出事件
日志是在发出事件时在区块链上创建的实际数据记录。它们存储在交易收据中,是以太坊虚拟机 (EVM) 的底层功能。
每个日志条目都包含“主题”和“数据”。主题是来自事件定义的索引参数,允许进行有效的过滤和搜索。数据包含非索引参数。
虽然智能合约无法直接读取或访问日志,但外部应用程序可以使用 ethers.js 等工具或使用 Etherscan 等区块浏览器来查询和过滤它们。
日志提供了事件的历史记录,从而实现了透明性、调试和创建显示实时合约活动的丰富用户界面。它们是构建强大且交互式的去中心化应用程序的基本组成部分。
Factory 合约是一种旨在部署其他智能合约的智能合约。可以将其视为蓝图或模板,允许创建类似合约的多个实例,从而简化部署过程并可能节省 Gas 费用。
一个简单的 Factory 合约示例。(请记住,合约导入假定合约位于单独的文件中)
到目前为止,在这些文章中,我介绍了第三周所学内容的后半部分,其中包括数据类型、变量、函数、事件、日志、内存、存储和 Factory 合约。
这是一个富有洞察力的一周,我真的学到了很多。让我们继续第四周
- 原文链接: blog.blockmagnates.com/i...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!