本文为以太坊开发新手提供了一份关于如何使用Solidity编写智能合约的详细指南。文章介绍了以太坊、智能合约和Solidity的基本概念,并提供了一个简单的智能合约示例与部署步骤,适合初学者学习。该指南还强调了Ropsten测试网的使用,并提供了有关设置和使用Remix IDE的说明。
重要通知
本指南包含对 Ropsten 测试网的参考,该网络不再积极维护。尽管与该链相关的特定步骤可能不适用,但整体流程对于其他链可能仍然有效。我们建议探索适合你实现的当前替代方案。如果你希望看到本指南的更新版本,请 告知我们!
本文旨在为刚接触以太坊开发的开发者提供指导。在本文中,我们将讨论 Solidity 和智能合约,它们是什么,以及在以太坊开发中实际扮演的角色,最终目标是使用 Solidity 编写智能合约。
在开始讨论智能合约或 Solidity 之前,让我们首先概述一下以太坊是什么:以太坊是一个去中心化的开源区块链,支持图灵完备的编程语言 Solidity。我们通常所称的计算机程序在以太坊中被称为智能合约。以太坊于 2015 年推出,在过去五年中获得了显著的普及。它是一个无权限的公共区块链,这意味着任何人都可以使用该区块链,不过每次写入操作都需要支付 ETH(Gas)。
智能合约这一术语是由 Nick Szabo 在 1997 年提出。智能合约只是一种存在于区块链上的程序。这些“智能合约”可以通过外部方法调用或从其他智能合约调用来使用。这些智能合约在 EVM(以太坊虚拟机)中执行。智能合约如果编写和审计得当,可以减少恶意异常、欺诈损失和对受信任中介的需求。
以太坊支持 图灵完备 的智能合约,这意味着你几乎可以执行任何类型的操作。(记住,每次写入操作都需要支付 ETH。)
正如我们看到的,智能合约只是一种程序,而你需要一种编程语言来编写这些程序。以太坊核心贡献者发明了一种编程语言,称为 Solidity,用于编写智能合约(即在区块链上运行的计算机程序)。Solidity 是一种高级面向对象语言,受 JavaScript、C++ 和 Python 的启发 - 其语法与 JavaScript 非常相似。还有其他支持 Solidity 的区块链和以太坊分叉,例如 Tron。不过,Solidity 不是编写智能合约的唯一语言,还有其他语言可以用于编写智能合约,比如 Vyper,是继 Solidity 之后最受欢迎并被广泛采用的智能合约语言。
现在,让我们编写一个简单的智能合约。我们的合约将允许我们存储一个无符号整数并检索它。

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.0 <0.7.0;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
上面的代码片段是用 Solidity 语言编写的智能合约。让我们花一些时间逐行理解我们在智能合约中编写的代码的功能。
第 1 行: 指定 SPDX 许可证 类型,这是在 Solidity ^0.6.8 之后的一个附加项;每当智能合约的源代码公开可用时,这些许可证可以帮助解决/避免版权问题。如果你不希望指定任何许可证类型,可以使用特殊值 UNLICENSED,或者干脆跳过整个注释(这不会导致错误,只是一个警告)。
第 2 行: 在第一行我们声明要使用的 Solidity 编译器。例如,我们的目标是任何版本在 ≥ 0.4.0
和 <0.7.0
之间。
第 3 行: 我们在这里声明我们的合约,并将其命名为 SimpleStorage。使用与合约名称相同的文件名是正常做法。例如,这个合约将保存在文件名 SimpleStorage.sol 中(.sol 是 Solidity 智能合约的文件扩展名)。
第 4 行: 我们声明一个名为 storedData 的 uint(无符号整数)变量,这个变量将用于存储数据。
第 5-7 行: 接下来,我们将添加一个 set 函数,通过它我们将改变变量 storedData 的值。这里的 set 函数接受一个参数 x,其值存储在 storedData 中。此外,该函数被标记为 public,这意味着任何人都可以调用这个函数。
第 8-10 行: 我们将添加一个 get 函数来检索 storedData 变量的值。此函数被标记为 view,这告诉 Solidity 编译器这是一个只读函数。
除此之外,get 函数还有 returns (uint),这意味着该函数将返回一个 uint。
在编写智能合约后,需要将其部署到以太坊网络上,我们将使用 Remix 部署我们的智能合约。还有其他部署智能合约的方式,但为了使其对初学者友好,我们将使用 Remix。Remix 是一个在线的以太坊 IDE。它简单且支持许多功能。现在使用 这个链接 打开 Remix。 Remix 有插件,我们需要激活两个插件以编译和部署我们的智能合约,如下图所示。
在这里,你可以看到我们已经激活了这两个插件。
接下来,在 Remix 中创建一个名为 SimpleStorage.sol 的文件并复制/粘贴我们的智能合约代码。

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.0 <0.7.0;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
现在,让我们使用 Remix 插件编译我们的智能合约。
单击“Compile SimpleStorage.sol”以编译合约。
最后,我们可以现在部署我们的 SimpleStorage 智能合约。我们将在 Ropsten 测试网 上部署我们的智能合约。区块链有多个公共网络。一个是主要的公共网络,我们通常称之为 mainnet。其他网络通常用于测试目的,我们通常称之为 testnets。
今天我们可以使用几乎任何以太坊客户端,例如 Geth 或 OpenEthereum(原名 Parity)。由于这对于获取日志来说有些复杂,我们将创建一个免费的 QuickNode 账户 在这里,并轻松设置以太坊端点。我们需要一个 Ropsten 端点来从链中获取数据,因为我们已经在 Ropsten 测试网上部署了合约。创建完你的免费以太坊端点后,复制你的 HTTP 提供者端点:
我们将在 Ropsten 测试网中部署我们的合约。要开始,你需要使用 Metamask 浏览器扩展创建一个 ETH 钱包以及一些测试 ETH,你可以通过访问 Ropsten 漏水机 获得。你需要在 Metamask 钱包中选择 Ropsten 测试网络,并将钱包地址复制到漏水机中的文本字段中,然后单击发送我测试 Ether。
现在,让我们将我们的节点添加到 Metamask:
第 1 步:打开 Metamask,单击顶部的网络菜单,选择自定义 RPC。
第 2 步:输入网络名称(可以是你选择的任何名称,这里以 QuickNode 为例),在第二个字段中粘贴你的 QuickNode 端点 URL,该字段标记为 New RPC URL,输入链 ID,这也被称为网络 ID(这里是 3,因为我们正在使用以太坊 Ropsten 端点),然后单击保存。
现在,返回到 Remix,打开左侧菜单的第三个选项卡,选择 ENVIRONMENT 选项下的 Injected Web3。
单击部署,现在应打开一个 Metamask 窗口以确认交易。
在你单击确认后,交易可能需要一些时间才能获得批准。一旦确认,你将在 Remix 控制台中看到交易确认消息,并在已部署合约部分看到已部署的合约。
因此,我们已经成功创建并将用 Solidity 编写的智能合约部署到了区块链上,你可以参阅 Solidity 文档以了解更多信息。
订阅我们的 新闻通讯,获取更多相关文章和以太坊指南。如果你有任何反馈,请随时通过 Twitter 与我们联系,你也可以通过我们的社区服务器在 Discord 上随时与我们聊天,感谢 :)
- 原文链接: quicknode.com/guides/eth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!