# 第一个合约

By [startha](https://paragraph.com/@starha) · 2023-08-22

---

Solidity 简介
-----------

`Solidity` 是一种针对`Ethereum`虚拟机（`EVM`）的智能合约编程语言。掌握 `Solidity` 是参与链上项目的必备技能（区块链项目大部分是开源的）。

开发工具：Remix
----------

本教程中，我们将使用 `Remix` 运行 `Solidity` 合约。`Remix` 是以太坊官方推荐的智能合约集成开发环境（IDE），适合新手，可以在浏览器中快速开发和部署合约，无需在本地安装任何程序。

网址：[https://remix.ethereum.org](https://remix.ethereum.org/)

在 `Remix` 中，左侧菜单有三个按钮，分别对应文件（编写代码）、编译（运行代码）和部署（将合约部署到链上）。点击“创建新文件”（`Create New File`）按钮，即可创建一个空白的 `Solidity` 合约。

![](https://storage.googleapis.com/papyrus_images/13fc54a55d67a73caee4903e38bf07ea2251a0e1fd6096a8d5f82a432557bfba.png)

第一个 Solidity 程序
---------------

这个简单的程序只有 1 行注释和 3 行代码：

    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    contract HelloSolidity{
        string public _string = "Hello Solidity";
    }
    

我们拆解程序，学习 Solidity 代码源文件的结构：

第 1 行是注释，说明代码所使用的软件许可（license），这里使用的是 MIT 许可，关于软件许可类型，后面会有更详细的介绍。如果不写许可，编译时会出现警告（warning），但程序仍可运行。Solidity 注释以“//”开头，后面跟注释内容，注释不会被程序执行。

    // SPDX-License-Identifier: MIT
    

第 2 行声明源文件所使用的 Solidity 版本，因为不同版本的语法有差异。这行代码表示源文件将不允许小于 0.8.4 版本或大于等于 0.9.0 的编译器编译（第二个条件由 `^` 提供），关于编译器版本指定，后面会有详细介绍。Solidity 语句以分号（;）结尾。

    pragma solidity ^0.8.4;
    

第 3-4 行是合约部分。第 3 行创建合约（contract），并声明合约名为 `HelloSolidity`。第 4 行是合约内容，声明了一个 string（字符串）变量 `_string`，并赋值为 "Hello Solidity"。

    contract HelloSolidity{
      string public _string = "Hello Solidity";
    }
    

编译并部署代码
-------

在 Remix 编辑代码的页面，按 Ctrl + S 即可编译代码，非常方便。

编译完成后，点击左侧菜单的“部署”按钮，进入部署页面。

![](https://storage.googleapis.com/papyrus_images/ebe6938df8b28560ffa8f5bf03323ce636356f3d4f152ca4310d9f5e1e67c342.png)

默认情况下，`Remix` 会使用 `Remix` 虚拟机（以前称为 JavaScript 虚拟机）来模拟以太坊链，运行智能合约，类似在浏览器里运行一条测试链。`Remix` 还会为你分配一些测试账户，每个账户里有 100 ETH（测试代币），随意使用。点击 `Deploy`（黄色按钮），即可部署我们编写的合约。

![](https://storage.googleapis.com/papyrus_images/8ccebace6cfd5db9b5e8830589be20a2382c2a16733de14fdf4faa2f56cbe68b.png)

部署成功后，在下方会看到名为 `HelloSolidity` 的合约。点击 `_string`，即可看到 "Hello Solidity"。

总结
--

本节课程中，我们简要介绍了 `Solidity` 和 `Remix` 工具，并完成了第一个 `Solidity` 程序 —— `HelloSolidity`。接下来，我们将继续深入学习 `Solidity`！

---

*Originally published on [startha](https://paragraph.com/@starha/GwkB6XdM59rEqcccskjw)*
