Solidity 简介

2025年6月19日 | 8分钟阅读

Solidity 是一种高级的、面向对象的新编程语言,由以太坊开发,广泛用于创建智能合约。 通常,它于 2015 年发布,到目前为止,Solidity 获得了巨大的欢迎,并已成为开发加密货币的第二大技术。 它被静态类型化,专门用于利用 EVM

Solidity 的重要特性如下

  1. Solidity 被开发用于编写智能合约的代码。
  2. 与 Java 或 Python 不同,Solidity 也是一种面向对象的语言。
  3. Solidity 在 EVM (以太坊虚拟机) 上运行。
  4. Solidity 支持所有面向对象的特性,如继承、构造函数、重载、不同的预定义库和复杂的用户定义编程。
  5. Solidity 是在区块链中构建 dApp 的主要语言。
  6. Solidity 广泛用于设计投票系统、去中心化组织、数据馈送、产权登记和其他数千种应用。

在开始使用 Solidity 之前,应该知道的其他概念如下

以太坊

以太坊是一个去中心化平台,运行智能合约,并拥有一种名为 以太币 的加密货币。 以太坊是一个耐用且安全的平台,各种加密货币都是为此设计的。 它充当一个开源应用程序,基于区块链的概念运行,广泛用于构建智能合约,即 dApp,这些应用程序的执行与编程完全相同,没有任何欺诈、第三方入侵或审查的可能性。

以太坊虚拟机 (EVM)

以太坊虚拟机 (EVM) 是以太坊智能合约的运行时环境。 开发人员可以使用用户友好的编程语言(例如 Solidity)来创建在 EVM 上运行的应用程序。 EVM 的主要优点是它可以防止拒绝服务攻击,并确保智能合约无权访问任何其他合约的状态。 EVM 是沙盒化的,并且完全隔离,以保护主机计算机免受病毒或恶意入侵尝试的威胁。

智能合约

智能合约定义为存储在以太坊 区块链 上的计算机程序。 合同被广泛用于构建货币和存储金融资产。 它们用于设计投票系统、去中心化组织、数据馈送、产权登记和其他数千种应用。

合约被编译成字节码,运行在以太坊虚拟机上,并部署到以太坊区块链上以供执行。 各种语言(如 Julia、Vyper)可用于编写这些合约,但 Solidity 是最受欢迎的。

智能合约生命周期

智能合约在其生命周期中具有以下阶段

Introduction to Solidity
  1. 开发
    Solidity 编程语言的第一阶段是智能合约的开发和测试。
  2. ABI 和字节码转换
    编译器将智能合约代码转换为其相应的 ABI,并进一步将其转换为字节码。
  3. 合约执行
    部署智能合约后,其他用户可以开始使用此合约的功能。
  4. 区块链部署
    ABI 和字节码部署在区块链网络中的特定地址。

一个简单的 Solidity 智能合约布局

Introduction to Solidity

示例:在上一节中,我们介绍了简单的 Solidity 智能合约的布局。 现在,我们将了解如何使用此布局来编写 Solidity 智能合约,以添加两个数字。

输出

Introduction to Solidity

以上程序的说明

1. //SPDX-许可证标识符:MIT

此 SPDX 验证上述 solidity 合约已获得 MIT 许可。

2. 编译指示

它是一个关键字,用于指定 Solidity 的版本,以确保编译器兼容性。 所有 Solidity 代码都应始终以 'pragma' 开头,因为它定义了您编写代码的 solidity 版本。 它有助于编译器根据版本编译代码。 在程序中,编译指示代码指定我们的代码与版本大于或等于 0.8.0 的编译器兼容。

3. 合约

它是一个定义智能合约代码的关键字。 您所需要做的就是用合约名称编写合约关键字。

4. 变量声明

在上面的程序中,我们声明了 3 个状态变量。 由于这些变量是在合约下声明的,因此它们是永久存储在区块链中的状态变量。 uint public val1 声明了一个名为 val1 的变量,类型为 uint(256 位无符号整数)。

5. 函数声明

  • 函数 setName 接受一个字符串参数,并将其存储在变量 name 中。 public 关键字是一个可见性说明符。
  • 函数 getName 用于返回字符串名称。
  • 尽管这是一个基本程序示例,只是为了解释函数及其在 solidity 智能合约中的实现的概念。

Solidity 编译器

Solidity 编译器用于将智能合约代码编译成机器级代码,以便合约可以在 EVM 上运行。 智能合约编译的结果是您得到

  1. ABI(应用程序二进制接口)
  2. 字节码

ABI

应用程序二进制接口 (ABI) 提供了一个接口,用于与机器级代码和另一个合约中的函数进行交互。 它指定了从合约访问函数的标准,以及在合约之间传输数据的二进制格式。

字节码

使用 solc 编译 solidity 代码时,代码会转换为仅由 EVM 理解的十六进制值。 这种低级代码称为字节码

Solidity 程序结构

1. 通用和自定义数据类型

Solidity 为智能合约提供了各种各样的数据类型以供使用。 这有助于它们迎合更广泛的受众,并提供多种类型的输入查询。 它包括整数(int、unit)、布尔值、字节、字符串、枚举等。

程序

2. 内置函数

函数是一个可执行的代码组,其中包含合约中必要的业务逻辑。 Solidity 中的函数有四种类型:内部、外部、公共和私有。 Solidity 函数由修饰符组成,这些修饰符决定了合约的访问或修改级别。

程序

3. 事件处理

Solidity 中的事件可用于在 EVM 中记录事件和交易。 当需要提醒外部元素 solidity 合约中发生的任何更改或事件时,这些非常有益。

下面给出一个示例程序,以帮助理解 Solidity 中的面向对象概念

程序

4. 错误处理

Solidity 错误处理保证了在执行前可能未检测到的条件的有效性。 它检查输入、状态变量和对外部合约的调用。

Solidity 提供了以下三种方法来处理预期的运行时错误,如下所示

  1. Require()
  2. Assert()
  3. Revert()

下面给出一个示例程序,以帮助理解 Solidity 中的错误处理概念

程序

5. 控制结构

Solidity 中的控制结构用于根据满足某些预定义标准来执行代码的一部分。 它还包括迭代执行,该执行定义了在满足特定标准后对代码块的重复执行。

下面给出一个示例程序,以帮助理解 Solidity 合约中的控制结构概念

6. 面向对象

所有特性,如继承、构造函数、抽象类、函数重写、函数重载等,都包含在 Solidity 面向对象范式中。

下面给出一个示例程序,以帮助理解 Solidity 中的面向对象概念

结论

在本教程中,我们涵盖了有关 Solidity 的所有必要的介绍性细节。 在接下来的教程中,我们将详细介绍所有子主题及其示例。 此外,我们还涵盖了复杂的 topics,包括映射、转换、以太单位、枚举等等。

掌握 Solidity 的唯一方法是实践这些概念并自行开发代码。 您可以在 javaTpoint 上找到许多与区块链和 Solidity 相关的资源,以帮助您进一步学习。

前提条件

在开始使用 solidity 之前,必须具备编程概念的基础知识。

目标受众

我们的 Solidity 教程旨在指导初学者和专业人士。


下一个主题Solidity 抽象合约