在不到几分钟的时间内使用 OpenZepplin 和 Solidity 构建和部署智能合约
我担任开发人员已有 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”
创建成功后你会看到这个。
✔ 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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

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

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

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