我担任开发人员已有 10 多年了。我很幸运能够成为 Apache 提交者和 PPMC,在 Google 发表演讲,为 Manning Publications 写一本书,以及其他一些事情。 由于就业市场不佳,人们正在努力寻找好工作,我开始看到区块链中的商机,更具体地说 - 我看到了一些帮助其他人建立自己的企业的绝佳机会。我想分享一些我在过去几周学到的技术知识。
我一直在努力了解分布式应用程序(DApp)的优缺点。有许多工具可供您选择来开始构建它们。在本文中,我将向您提供一种在本地构建、部署智能合约并与之交互的固执己见的方法。 没有基于网络的工具,只有命令行。
先决条件:
我使用的是 Node 18.17,但是,这应该适用于更高版本的节点。
$ nvm install 18.17
$ mkdir hello-world && cd hello-world
$ npm init -y
$ npm install --save-dev hardhat
npx 用于运行项目中本地安装的可执行文件。 建议在每个项目中本地安装 Hardhat,以便您可以逐个项目地控制版本。
$ npx hardhat init Need to install the following packages: hardhat@2.22.15 Ok to proceed? (y) You should see the option show up. Select “ Create an empty hardhat.config.js”
创建成功后你会看到这个。
✔ What do you want to do? · Create an empty hardhat.config.js ✨ Config file created ✨
要验证所有内容是否按预期执行,您现在应该在当前目录中看到两个字段。
$ ls -lta package.json hardhat.config.js
使用 Hardhat 时,您可以将 Solidity 源文件 (.sol) 存储在contracts 目录中。我们将编写第一个简单的智能合约,称为存储:它将让人们存储一个可以稍后检索的值。 这是与 Hardhat 签订的另一份首发合同的变体。 我正在手动完成整个过程,因此我们了解所有移动部分。
$ mkdir contracts && vim contracts/Storage.sol
// contracts/Storage.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Storage { uint256 private _value; // Emitted when the stored value changes event ValueChanged(uint256 value); // Stores a new value in the contract function store(uint256 value) public { _value = value; emit ValueChanged(value); } // Reads the last stored value function retrieve() public view returns (uint256) { return _value; } }
将以上内容写入文件后,使用 :wq 或 :x 关闭 vim
以太坊虚拟机(EVM)无法直接执行Solidity代码:我们首先需要将其编译为EVM字节码。 我们的 Storage.sol 合约使用 Solidity 0.8,因此我们需要首先配置 Hardhat 以使用适当的 solc 版本。 我们在 Hardhat.config.js 中指定 Solidity 0.8 solc 版本。
$ nvm install 18.17
$ mkdir hello-world && cd hello-world
我们将创建一个脚本来部署我们的存储合约。我们将此文件保存为scripts/deploy.js。
$ npm init -y
$ npm install --save-dev hardhat
我们在脚本中使用以太坊,因此我们需要安装它和@nomicfoundation/hardhat-ethers 插件。
$ npm install --save-dev @nomicfoundation/hardhat-ethers ethers
我们需要在配置中添加我们正在使用 @nomicfoundation/hardhat-ethers 插件。
我们的安全帽配置现在应该如下所示;
$ npx hardhat init Need to install the following packages: hardhat@2.22.15 Ok to proceed? (y) You should see the option show up. Select “ Create an empty hardhat.config.js”
我们需要一个可以部署合约的环境。以太坊区块链(通常称为“主网”,即“主网络”)需要花费真实货币才能使用它,以以太币(其原生货币)的形式。这使得它在尝试新想法或工具时成为一个糟糕的选择。
为了解决这个问题,存在许多“测试网”(“测试网络”):但是,您仍然需要处理私钥管理、12秒或更长的阻塞时间,并实际获得免费的以太币。
在开发过程中,最好使用本地区块链。它在您的机器上运行,为您提供所需的所有以太币,并立即开采区块。
✔ What do you want to do? · Create an empty hardhat.config.js ✨ Config file created ✨
部署您的智能合约
$ ls -lta package.json hardhat.config.js
部署我们的存储合约后,我们可以立即开始使用它。
我们将使用 Hardhat 控制台与本地主机网络上部署的存储合约进行交互。
我们需要指定我们在部署脚本中显示的存储合约的地址。
重要的是,我们明确设置 Hardhat 的网络来连接我们的控制台会话。如果我们不这样做,Harhat 将默认使用新的临时网络,我们的存储合约将不会部署到该网络。
$ mkdir contracts && vim contracts/Storage.sol
第一个函数 store 接收一个整数值并将其存储在合约存储中。由于该函数会修改区块链状态,因此我们需要向合约发送交易来执行它。
我们将发送一个交易来调用带有数值的存储函数:
$ nvm install 18.17
另一个函数称为retrieve,它返回存储在合约中的整数值。这是区块链状态的查询,所以我们不需要发送交易:
$ mkdir hello-world && cd hello-world
因为查询仅读取状态并且不发送交易,所以没有交易哈希可报告。这也意味着使用查询不需要任何以太币,并且可以在任何网络上免费使用。
我们创建了一个最小的智能合约并将其部署到本地区块链实例,以演示如何从区块链写入和读取值。 如果您觉得这篇文章有帮助,请点赞和/或分享。
请随时发表您认为合适的建议或更正。这些文章都是我上班前和下班后写的,我会尽快把它们拿出来。
谢谢!
参考:
安全帽文档
以上是在不到几分钟的时间内使用 OpenZepplin 和 Solidity 构建和部署智能合约的详细内容。更多信息请关注PHP中文网其他相关文章!