首页 >web前端 >js教程 >在不到几分钟的时间内使用 OpenZepplin 和 Solidity 构建和部署智能合约

在不到几分钟的时间内使用 OpenZepplin 和 Solidity 构建和部署智能合约

Linda Hamilton
Linda Hamilton原创
2024-11-10 03:51:02500浏览

我担任开发人员已有 10 多年了。我很幸运能够成为 Apache 提交者和 PPMC,在 Google 发表演讲,为 Manning Publications 写一本书,以及其他一些事情。 由于就业市场不佳,人们正在努力寻找好工作,我开始看到区块链中的商机,更具体地说 - 我看到了一些帮助其他人建立自己的企业的绝佳机会。我想分享一些我在过去几周学到的技术知识。

我一直在努力了解分布式应用程序(DApp)的优缺点。有许多工具可供您选择来开始构建它们。在本文中,我将向您提供一种在本地构建、部署智能合约并与之交互的固执己见的方法。 没有基于网络的工具,只有命令行。

先决条件:

我使用的是 Node 18.17,但是,这应该适用于更高版本的节点。

如果您还没有安装节点 18.17,请安装它

$ nvm install 18.17

首先,创建您的文件夹并将 cd 放入其中

$ mkdir hello-world && cd hello-world

初始化项目

$ npm init -y

在我们的项目中本地安装 Hardhat

$ npm install --save-dev hardhat

关于 npx 的旁注

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”

Building and deploying a smart contract with OpenZepplin and Solidity in less than minutes

创建成功后你会看到这个。

✔ 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 签订的另一份首发合同的变体。 我正在手动完成整个过程,因此我们了解所有移动部分。

创建contracts文件夹并打开文件进行编辑

$ mkdir contracts &&  vim contracts/Storage.sol

将以下内容添加到 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

编译Solidity

以太坊虚拟机(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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn