Web3 简介:我在 web3bridge 的第三周,目前为止我所学到的——第二部分

本文是作者在web3bridge学习的第三周的第二部分内容总结,主要介绍了Solidity编程语言的基础知识,包括数据类型、变量、函数、存储、事件、日志以及工厂合约等关键概念。作者分享了学习心得,并为接下来的第四周学习做铺垫。

Web3 介绍:我在 web3bridge 的第三周,到目前为止我所学到的 - 第二部分

这是我发布的文章的第二部分,你可以在这里阅读 第一部分。接下来,我将带你了解我在第三周第二部分所学到的内容。第二部分介绍了 Solidity 的基础知识,闲话少说,让我们开始吧。

Solidity 基础知识

Solidity 是一种高级的、面向对象的编程语言,专门用于在各种区块链平台上编写智能合约,最著名的是以太坊。它是一种静态类型语言,这意味着变量类型必须在编译时定义,并且它支持诸如继承、用户定义的类型(结构体、映射、枚举)和库之类的功能。Solidity 的关键元素包括合约定义、状态变量、函数和构造函数,构造函数在合约部署期间执行。

数据类型和变量

Solidity 是一种用于在以太坊区块链上开发智能合约的静态类型语言,它要求为所有变量显式声明数据类型。这允许编译器确保正确的用法和内存分配。

以下是我们目前所涵盖的类型:

值类型:

这些类型将其数据直接存储在内存中,并在分配或作为函数参数传递时进行复制。

  • 布尔值 (bool):存储 true 或 false。
  • 整数 (int, uint):各种大小的有符号 (int) 和无符号 (uint) 整数(例如,uint8、int256)。
  • 地址 (address, address payable):存储 20 字节的以太坊地址。address payable 可以接收以太币。
  • 枚举 (enum):具有有限组命名值的用户定义类型。

Solidity 中的值类型

引用类型:

这些类型存储对实际数据所在位置的引用(内存地址)。

  • 字符串 (string):动态大小的 UTF-8 编码文本。
  • 数组:可以是固定大小 (uint[5]) 或动态大小 (uint[])。
  • 结构体 (struct):对多个变量进行分组的用户定义的复杂数据类型。
  • 映射 (mapping):键值对,类似于哈希表,其中键映射到值类型。

Solidity 中的引用类型

Solidity 中的变量:

变量是智能合约中数据的命名存储位置。通过指定其数据类型和名称来声明它们。

状态变量

在任何函数之外声明,它们的值永久存储在区块链上合约的存储中。

局部变量

在函数内部声明,它们的值是临时的,仅在函数执行期间存在。

全局变量

Solidity 提供的特殊内置变量,提供有关区块链、交易和执行上下文的信息(例如,block.timestamp、msg.sender、msg.value)。

要声明一个变量,还有一个约定,也称为签名,它只是指导开发人员正确定义变量的规则

[type] [visibility] <variableName>。

具有局部变量、全局变量和状态变量的合约

函数

函数是智能合约中执行特定任务的命名代码块。

在声明函数时,有一种约定也可以称为函数签名,以帮助开发人员定义函数

function &lt;name>(dataType arg1) &lt;visibility> &lt;stateMutability> returns (returnType) {}

函数定义示例

可见性:

函数具有可见性修饰符,用于控制可以从何处调用它们:

  • public: 可从任何地方访问,包括外部调用和其他合约。
  • external: 仅可从外部调用(其他合约或交易)访问,不能在同一合约内部访问。
  • internal: 仅可在合约及其派生合约中访问。
  • private: 仅可在定义它的合约中访问,不能在派生合约中访问。

状态可变性

这些修饰符指示函数如何与区块链状态交互:

  • view: 声明该函数不修改状态。它只从状态中读取。
  • pure: 声明该函数不读取或修改状态。它仅在其输入参数上运行。
  • 无修饰符(默认): 该函数可以修改状态。
  • payable: 该函数可以接收随交易一起发送的以太币。

参数和返回值

函数可以接受输入参数并返回输出值。必须显式声明参数和返回值的数据类型。

函数可见性、状态可变性和返回类型

存储和内存

存储是指区块链上持久的、合约级别的存储,状态变量存储在此处,并且它们的值在函数调用和交易之间保持不变。

内存是指临时存储,其中存储局部变量或函数参数,并在函数执行结束后丢弃。

读取智能合约

它涉及理解合约的代码、其状态变量、函数和事件,以及它如何与区块链交互。

智能合约 ABI

Solidity 中的智能合约 ABI(应用程序二进制接口)充当与以太坊虚拟机 (EVM) 上编译的智能合约交互的关键接口。它充当标准化规范,定义了外部应用程序或其他智能合约如何与已部署的合约通信。

具有 2 个函数(加法和减法)Contract 的简单 ABI

事件和日志

事件是智能合约中的声明,用于定义记录特定事件的结构。它们充当合约发出的信号,指示发生了某些重要的事情,例如代币转账、状态更改或操作完成。

一个简单的合约,展示了如何在函数中声明事件和发出事件

日志是在发出事件时在区块链上创建的实际数据记录。它们存储在交易收据中,是以太坊虚拟机 (EVM) 的底层功能。

每个日志条目都包含“主题”和“数据”。主题是来自事件定义的索引参数,允许进行有效的过滤和搜索。数据包含非索引参数。

虽然智能合约无法直接读取或访问日志,但外部应用程序可以使用 ethers.js 等工具或使用 Etherscan 等区块浏览器来查询和过滤它们。

日志提供了事件的历史记录,从而实现了透明性、调试和创建显示实时合约活动的丰富用户界面。它们是构建强大且交互式的去中心化应用程序的基本组成部分。

Factory 合约

Factory 合约是一种旨在部署其他智能合约的智能合约。可以将其视为蓝图或模板,允许创建类似合约的多个实例,从而简化部署过程并可能节省 Gas 费用。

一个简单的 Factory 合约示例。(请记住,合约导入假定合约位于单独的文件中)

结论

到目前为止,在这些文章中,我介绍了第三周所学内容的后半部分,其中包括数据类型、变量、函数、事件、日志、内存、存储和 Factory 合约。

这是一个富有洞察力的一周,我真的学到了很多。让我们继续第四周

  • 原文链接: blog.blockmagnates.com/i...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
blockmagnates
blockmagnates
The New Crypto Publication on The Block