11O 以太坊 ethereum OpenZeppelin : 部署智能合约并与之交互

这篇具有很好参考价值的文章主要介绍了11O 以太坊 ethereum OpenZeppelin : 部署智能合约并与之交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

• 建立本地区块链
• 部署智能合约
• 从控制台交互
• 以编程方式交互
• 获取合约实例
• 调用合约
• 发送交易
• OpenZeppelin Tutorials 教程
• Contact 联系方式

• 建立本地区块链

在开始之前,我们首先需要一个可以部署合约的环境。以太坊区块链(通常称为“主网”,表示“主网络”)需要花费真金白银才能使用它,以以太币(其本币)的形式。在尝试新想法或工具时,这使其成为一个糟糕的选择。

为了解决这个问题,存在许多“测试网络”(用于“测试网络”):其中包括 Ropsten、Rinkeby、Kovan 和 Goerli 区块链。它们的工作方式与主网非常相似,但有一个区别:您可以免费获得这些网络的以太币,因此使用它们不会花费您一分钱。但是,您仍然需要处理私钥管理、5 到 20 秒范围内的阻塞时间,以及实际获得这个免费的 Ether。

在开发过程中,最好使用本地区块链。它在您的机器上运行,不需要互联网访问,为您提供所需的所有以太币,并立即挖掘区块。这些原因也使得本地区块链非常适合自动化测试。

Hardhat 带有一个内置的本地区块链,即Hardhat Network。

启动时,Hardhat Network 将创建一组未锁定的帐户并为它们提供以太币。

$ npx hardhat node

Hardhat Network 将打印出其地址,http://127.0.0.1:8545以及可用帐户及其私钥的列表。

请记住,每次运行 Hardhat Network 时,它都会创建一个全新的本地区块链 -不会保留之前运行的状态。这对于短期实验来说很好,但这意味着您需要在这些指南期间打开一个运行 Hardhat Network 的窗口。

• 部署智能合约

在开发智能合约指南中,我们设置了我们的开发环境。

如果您还没有此设置,请创建并设置项目,然后创建并编译我们的 Box 智能合约。

随着我们的项目设置完成,我们现在可以部署合约了。我们将从Box开发智能合约指南中进行部署。确保您有Box in的副本contracts/Box.sol。

Hardhat 目前没有原生部署系统,而是使用脚本来部署合约。

我们将创建一个脚本来部署我们的 Box 合约。我们将此文件另存为scripts/deploy.js.

// scripts/deploy.js
async function main () {
  // We get the contract to deploy
  const Box = await ethers.getContractFactory('Box');
  console.log('Deploying Box...');
  const box = await Box.deploy();
  await box.deployed();
  console.log('Box deployed to:', box.address);
}

main()
  .then(() => process.exit(0))
  .catch(error => {
    console.error(error);
    process.exit(1);
  });

我们在脚本中使用了ethers,因此我们需要安装它和@nomiclabs/hardhat-ethers 插件。

$ npm install --save-dev @nomiclabs/hardhat-ethers ethers

我们需要添加我们正在使用插件的配置。@nomiclabs/hardhat-ethers

// hardhat.config.js
require('@nomiclabs/hardhat-ethers');

...
module.exports = {
...
};

全部完成!在真实的网络上,这个过程需要几秒钟,但在本地区块链上几乎是即时的。

• 从控制台交互

部署Box合约后,我们可以立即开始使用它。

我们将使用Hardhat 控制台与我们Box在 localhost 网络上部署的合约进行交互。

npx hardhat console --network localhost
Welcome to Node.js v12.22.1.
Type ".help" for more information.
> const Box = await ethers.getContractFactory('Box');
undefined
> const box = await Box.attach('0x5FbDB2315678afecb367f032d93F642f64180aa3')
undefined

发送交易
Box的第一个函数store接收一个整数值并将其存储在合约存储中。因为这个函数修改了区块链状态,所以我们需要向合约发送一个交易来执行它。

我们将发送一个事务来调用store具有数值的函数:

> await box.store(42)
{
  hash: '0x3d86c5c2c8a9f31bedb5859efa22d2d39a5ea049255628727207bc2856cce0d3',

查询状态
Box的另一个函数被调用retrieve,它返回存储在合约中的整数值。这是区块链状态的查询,所以我们不需要发送交易:

> await box.retrieve()
BigNumber { _hex: '0x2a', _isBigNumber: true }

• 以编程方式交互

控制台对于原型设计和运行一次性查询或事务很有用。但是,最终您将希望通过自己的代码与您的合约进行交互。

在本节中,我们将了解如何通过 JavaScript 与我们的合约进行交互,并使用Hardhat通过我们的 Hardhat 配置运行我们的脚本。

设置
让我们开始在一个新scripts/index.js文件中编码,我们将在其中编写 JavaScript 代码,从一些样板开始,包括编写异步代码。

// scripts/index.js
async function main () {
  // Our code will go here
}

main()
  .then(() => process.exit(0))
  .catch(error => {
    console.error(error);
    process.exit(1);
  });

我们可以通过询问本地节点来测试我们的设置,例如启用的帐户列表:

// Retrieve accounts from the local node
const accounts = await ethers.provider.listAccounts();
console.log(accounts);

使用 运行上面的代码hardhat run,并检查您是否获得了可用帐户列表作为响应。

$ npx hardhat run --network localhost ./scripts/index.js
[
  '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
  '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',
...
]

这些帐户应与您之前启动本地区块链时显示的帐户相匹配。现在我们有了第一个从区块链中获取数据的代码片段,让我们开始使用我们的合约。请记住,我们在上面定义的main函数中添加了代码。

• 获取合约实例

为了与Box我们部署的合约进行交互,我们将使用一个以太合约实例。

ethers 合约实例是一个 JavaScript 对象,它代表我们在区块链上的合约,我们可以使用它与我们的合约进行交互。要将其附加到我们部署的合约中,我们需要提供合约地址。

// Set up an ethers contract, representing our deployed Box instance
const address = '0x5FbDB2315678afecb367f032d93F642f64180aa3';
const Box = await ethers.getContractFactory('Box');
const box = await Box.attach(address);

• 调用合约

让我们从显示Box合约的当前价值开始。

我们需要调用合约的只读retrieve()公共方法,并等待响应:

// Call the retrieve() function of the deployed Box contract
const value = await box.retrieve();
console.log('Box value is', value.toString());

这个片段相当于我们之前从控制台运行的查询。现在,通过再次运行脚本并检查打印值来确保一切运行顺利:

npx hardhat run --network localhost ./scripts/index.js
Box value is 42

• 发送交易

现在,我们将向storeBox 中的新值发送交易。

让我们在 中存储一个值,然后使用23我们Box之前编写的代码来显示更新后的值:

// Send a transaction to store() a new value in the Box
await box.store(23);

// Call the retrieve() function of the deployed Box contract
const value = await box.retrieve();
console.log('Box value is', value.toString());

我们现在可以运行代码片段,并检查框的值是否已更新!

$ npx hardhat run --network localhost ./scripts/index.js
Box value is 23

• OpenZeppelin Tutorials 教程

CN 中文 Github OpenZeppelin 教程 : github.com/565ee/OpenZeppelin_CN
CN 中文 CSDN OpenZeppelin 教程 : blog.csdn.net/wx468116118
EN 英文 Github OpenZeppelin Tutorials : github.com/565ee/OpenZeppelin_EN

• Contact 联系方式

Homepage : 565.ee
微信公众号 : wx468116118
微信 QQ : 468116118
GitHub : github.com/565ee
CSDN : blog.csdn.net/wx468116118
Email : 468116118@qq.com文章来源地址https://www.toymoban.com/news/detail-404934.html

到了这里,关于11O 以太坊 ethereum OpenZeppelin : 部署智能合约并与之交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析

    在“【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析”一文中,我们提到Ethereum作为一个service,被Node 注册进去。Node start的时候会启动其注册的所有服务,Ethereum service也是一样。 初始化方法

    2024年01月21日
    浏览(43)
  • 【区块链 | 智能合约】Ethereum源代码(3)- 以太坊RPC通信实例和原理代码分析(上)

    上一节提到,以太坊在node start的时候启动了RPC服务,以太坊通过Rpc服务来实现以太坊相关接口的远程调用。这节我们用个实例来看看以太坊 RPC是如何工作的,以及以太坊RPC的源码的实现 1,RPC启动命令 : go-ethereum的RPC服务默认地址:http://localhost:8545/ 通过以下命令修改默认地

    2024年02月02日
    浏览(52)
  • 【区块链技术开发】OpenZeppelin智能合约库:提高智能合约的安全性和可靠性,加速去中心化应用DApp的开发与部署。

    专栏:【区块链技术开发】 前期文章: 【区块链技术开发】使用Infura连接以太坊节点和OpenZeppelin库来构建安全、可靠的智能合约 【区块链技术开发】 Solidity使用Truffle Box工具实现预构建模板、自动化部署、创建智能合约示例代码 【区块链技术开发】 Solidity使用truffle工具创建

    2023年04月24日
    浏览(38)
  • 以太坊 – 部署智能合约到Ganache

    目录 1. Ganache本地区块链 1.1 主界面 1.2 设置 2. 开发智能合约 2.1 初始化项目 2.2 添加package.json文件 2.3 添加智能合约源文件 2.4 编译项目 3. 部署智能合约到Ganache 3.1 更新配置文件 3.2 创建迁移脚本  3.3 执行迁移命令 首先启动Ganache,创建本地的以太坊区块链网络。 本地

    2024年02月16日
    浏览(38)
  • 部署OpenZeppelin可升级合约

    使用OpenZeppelin升级插件部署的合约具备可升级的特性:可以升级以修改其代码,同时保留其地址,状态和余额。 可以迭代地向项目中添加新功能,或修复在线上版本中可能发现的任何错误。 创建一个新的npm项目 安装并初始化Truffle 安装Truffle升级插件 注意,可升级合约使用

    2023年04月08日
    浏览(26)
  • 基于openzeppelin编写solidity可升级的智能合约

            现代软件的设计原则是“敏捷开发,迅速迭代”,功能升级或bug修复是所有软件系统都要面对的问题。甚至可以说软件质量在很大程度上依赖于升级和修补源代码的能力。当然Dapp(去中心化应用)也不例外,尤其Dapp一切都是透明的,这使得任何级别的bug都会被成

    2024年01月18日
    浏览(38)
  • Web3.js在以太坊上部署和调用智能合约

    介绍如何使用Web3.js在以太坊上部署和调用智能合约;Web3.js是以太坊JavaScript API的实现,它可以与以太坊区块链进行交互 智能合约编写 使用Solidity编写一个简单的智能合约,然后使用Web3.js将其部署到以太坊区块链,通过JavaScript调用该智能合约 这个智能合约非常简单。它有两

    2024年02月16日
    浏览(38)
  • 【区块链 | 智能合约】Ethereum源代码 - 智能合约地址生成算法

    当提交智能合约部署后,会返回智能合约的地址。智能合约地址的生成逻辑在eth.api.go的submitTransaction函数中:

    2024年02月13日
    浏览(40)
  • 以太坊Dapp通过web3js部署调用智能合约

    参考视频:https://www.bilibili.com/video/BV14z4y1Z7Jd?p=1 https://remix.ethereum.org/ 创建一个新的文件夹 mkdir MyDapp2 启动 ganache-cli 下载web3 npm install web3 ,注:ganache的启动和deploy.js要在同一个目录。 先进行测试 node deploy.js 部署合约 web3的版本:1.7.1 复制 WEB3DEPLOY 的内容到deploy.js == ganache需要

    2023年04月23日
    浏览(34)
  • 区块链研究(一):Windows下搭建以太坊私有链,部署智能合约实现数据上链功能(完整跑通版!好累!)

    先说一下,之前学习部署以太坊私有链,看了好多博文,发现节点之前总是无法连接识别,踩了好多坑,,,今天我把自己完整跑通的实验流程给大家展示出来,希望有所帮助! 摘要:本文主要介绍区块链网络构建的方式,区块链网络仅用于实验,主要搭建以太坊私有链,在

    2024年04月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包