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

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

Nov 10, 2024 am 03:51 AM

我担任开发人员已有 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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1277
29
C# 教程
1257
24
Python vs. JavaScript:学习曲线和易用性 Python vs. JavaScript:学习曲线和易用性 Apr 16, 2025 am 12:12 AM

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

JavaScript和Web:核心功能和用例 JavaScript和Web:核心功能和用例 Apr 18, 2025 am 12:19 AM

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

JavaScript在行动中:现实世界中的示例和项目 JavaScript在行动中:现实世界中的示例和项目 Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

了解JavaScript引擎:实施详细信息 了解JavaScript引擎:实施详细信息 Apr 17, 2025 am 12:05 AM

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python vs. JavaScript:社区,图书馆和资源 Python vs. JavaScript:社区,图书馆和资源 Apr 15, 2025 am 12:16 AM

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

Python vs. JavaScript:开发环境和工具 Python vs. JavaScript:开发环境和工具 Apr 26, 2025 am 12:09 AM

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

C/C在JavaScript口译员和编译器中的作用 C/C在JavaScript口译员和编译器中的作用 Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

从网站到应用程序:JavaScript的不同应用 从网站到应用程序:JavaScript的不同应用 Apr 22, 2025 am 12:02 AM

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

See all articles