本文转载自微信公众号「区块链研究实验室」,作者链三丰。转载本文请联系区块链研究实验室公众号。
Solidity是用于开发以太坊智能合约的最受欢迎的语言之一,因此作为一个想要成为区块链开发人员的我决定开始学习如何使用Solidity开发智能合约。
但是由于找不到我想要的质量的教程(使初学者能够以简洁的方式轻松学习基础知识),所以我决定创建本系列,希望很快将您介绍给Solidity编程。
设置开发环境
我们将使用的IDE是Remix。您需要做的就是点击这个URL。点击进去后,您应该会看到一个类似以下的屏幕:
在左侧,我选择了两个主要组件。第一个图标是文件浏览器,您可以在其中查看所有Solidity文件,第二个图标是插件管理器,从中可以添加新插件。
我们将需要添加两个插件,因此单击插件管理器图标,然后键入“ Solidity编译器”。然后通过单击“激活”将其激活,并执行相同的操作以添加“部署并运行事务”插件。
“Solidity编译器”选项卡将允许您配置编译器参数并编译智能合约,而“部署并运行交易”选项卡将允许您在区块链中部署智能合约并与之交互。图标列表现在应如下所示:
您现在应该做的第一件事是检查“编译器”选项卡中的“自动编译”选项。接下来,我们将配置Remix以使用本地存储中的文件。
您将需要使用以下命令安装remixed:
- npm install -g remixd
安装完成后,您可以创建一个文件夹,您将在其中放置Solidity文件,然后运行以下命令告诉Remix使用文件夹中的文件:
- remixd -s <shared folder> — remix-ide https://remix.ethereum.org
现在转到Remix的主页,单击“连接到本地主机”,然后在弹出窗口中选择“连接”,您应该在“文件资源管理器”选项卡下看到一个名为localhost的区域。如果展开它,您将看到从本地存储共享的文件夹中包含的所有文件:
恭喜你,现在,您拥有了开始编写第一个智能合约的工具!
接着Remix将为您提供在您的浏览器中运行的沙盒区块链,以使用它来部署您的合同并与之交互。只需确保在“部署并运行”选项卡中选择Javascript VM作为环境即可。
撰写"hello world"合同
让我们看看我们的第一个智能合约:
SPDX许可证标识符
如果源代码可用,则可以更好地建立对智能合约的信任。由于提供源代码始终会涉及版权方面的法律问题,因此Solidity编译器鼓励使用机器可读的SPDX许可证标识符。每个源文件都应以说明其许可证的注释开头。TK(https://solidity.readthedocs.io/en/v0.7.3/layout-of-source-files.html)
版本注释
可以为源文件添加版本注释,以拒绝使用将来的编译器版本进行编译,因为这可能会带来不兼容的更改。
- TK(https://solidity.readthedocs.io/en/v0.7.3/layout-of-source-files.html)
具有重大更改的发行版本始终以0.x.0或形式x.0.0。在我们的示例中,可以使用的编译器版本应大于或等于0.7.0且小于0.8.0(使用来添加第二个条件^)。可以为编译器版本指定更复杂的规则。它们遵循npm所使用的相同语法。
前两行应出现在所有智能合约文件中。
为了开始编写智能合约,您需要使用关键字contract 以及合约名称,然后才能将代码放在大括号之间。
接着,让我们创建这个世界问候合同。
在您的共享文件夹中创建一个名为的新文件,HelloWorldContract.sol并复制粘贴先前的代码。如果您选中了自动编译选项,它将自动编译代码。如果没有,请确保检查并编译代码。
现在是时候部署我们的第一个合同并与其进行交互了。
单击“部署并运行事务”选项卡,然后确保在环境中选择了JavaScript VM,并在合同区域中选择了合同名称。完成后,单击“部署”。
现在,您应该在“已部署合同”区域下看到您的合同。
如果展开它,您将看到该helloWorld功能。单击它以发送调用此功能的交易,您将看到hello world打印的字符串。
智能合约的结构
现在让我们看看可以在智能合约中添加哪些内容(下面直接引自https://solidity.readthedocs.io/en/v0.6.7/structure-of-a-contract.html):
- 状态变量:是其值永久存储在合同存储中的变量。
- 函数:函数是代码的可执行单元。函数通常在合同内部定义,但也可以在合同外部定义。
- 功能修饰符:功能修饰符可用于以声明方式修改功能的语义。
- 事件:事件是与EVM日志记录工具的便捷接口。
- 结构类型:结构是可以将多个变量组合在一起的自定义类型。
- 枚举类型:枚举可用于创建具有有限“常量值”集合的自定义类型。