使用ethers.js部署Solidity智能合约

2023-10-30 11:58

本文主要是介绍使用ethers.js部署Solidity智能合约,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    ethers.js是一个非常精简的以太坊操作库,它包含如下四个模块:
        Ethers.provider
        Ethers.contract
        Ethers.utils
        Ethers.wallets
    其中,Ethers.provider负责与以太坊节点进行连接,查询交易、广播交易,获取账户余额等功能;
    Ethers.contract负责与智能合约进行交互,包括部署合约、监听合约里的事件、获取合约里的信息,调用合约里的函数等功能;
    Ethers.utils是一个工具库,主要用于处理输入、输出数据,数据的类型与格式转换;
    Ethers.wallets主要用于创建新钱包,连接或切换现有钱包,以及对交易进行签名等功能。
    下面,介绍使用Ethers.js来部署智能合约。

1、新建一个工程sendtokenone

mkdir sendtokenone
cd sendtokenone
npm init -y
truffle init

2、修改package.json并安装依赖包

    a)修改后的package.json文件如下:
    //package.json

{"name": "sendtokenone","version": "1.0.0","description": "ethers.js部署合约","main": "","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC","dependencies": {"@openzeppelin/contracts": "^3.4","@truffle/hdwallet-provider": "^1.5.0","bignumber": "^1.1.0","bignumber.js": "^8.1.1","chai": "^4.2.0","chai-as-promised": "^7.1.1","eslint": "^5.15.0","ethereumjs-tx": "^1.3.7","ethers": "^5.4.7","request": "^2.88.2","web3": "^1.3.0"},"devDependencies": {"@babel/core": "^7.12.3","@babel/preset-env": "^7.12.1","ethereumjs-abi": "^0.6.8"}
}

    b) 安装依赖包

npm install

3、新建智能合约

3.1 创建一个EventValue.sol合约

    在sendtokenone/contacts目录,创建一个创建一个EventValue.sol合约,内容如下:
    // EventValue.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;contract EventValue {event ValueChanged(address indexed author,uint oldValue,uint newValue);uint _value;constructor(uint value) public {uint tmp = _value;_value = value;emit ValueChanged(msg.sender, tmp, value);}function getValue() view public returns (uint) {return _value;}function setValue(uint value) public {uint tmp = _value;_value = value;emit ValueChanged(msg.sender, tmp, value);}
}

3.2 编写部署脚本

    新建一个文件夹名称为migDeploy,然后在这个文件夹里,创建部署脚本1_deploy_event.js

mkdir migDeploy
cd migDeploy
touch 1_deploy_event.js

1_deploy_event.js的内容如下:
// sendtokenone/migDeploy/1_deploy_event.js

const {ethers} = require("ethers")
const fs = require('fs')let provider = new ethers.providers.JsonRpcProvider('http://localhost:8545')function getHexString(prikeyPath) {const privKeyFile = fs.readFileSync(prikeyPath).toString().trim();const privKey = new Buffer.from(privKeyFile, 'hex');    return privKey
}// var privKey  = getHexString(".secret")
var privKey = '0x403d...23d5'
let wallet = new ethers.Wallet(privKey,provider)var jsonStr = fs.readFileSync('./build/contracts/EventValue.json')
var jsonInfo = JSON.parse(jsonStr)
var jsonAbi  = jsonInfo.abi
var bytecode = jsonInfo.bytecodeasync function deployContract(abi,bytecode,wallet) {let factory = new ethers.ContractFactory(abi,bytecode,wallet)let contractObj = await factory.deploy(100)console.log('contractAddress=',contractObj.address)console.log('deploy txHash=',contractObj.deployTransaction.hash)await contractObj.deployed()   
}deployContract(jsonAbi,bytecode,wallet)

3.3 编译合约

    a)设置ganache的IP为127.0.0.1,端口为8545
    b) 在truffle-config.js里,开启development网段、solc指定版本为0.6.6,具体如下:
    // truffle-config.js

module.exports = {networks: {development: {host: "127.0.0.1",     // Localhost (default: none)port: 8545,            // Standard Ethereum port (default: none)network_id: "*",       // Any network (default: none)},},// Set default mocha options here, use special reporters etc.mocha: {// timeout: 100000},// Configure your compilerscompilers: {solc: {version: "0.6.6",    // Fetch exact version from solc-bin (default: truffle's version)// docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)// settings: {          // See the solidity docs for advice about optimization and evmVersion//  optimizer: {//    enabled: false,//    runs: 200//  },//  evmVersion: "byzantium"// }}},};

    打开一个黑框框控制台,使用truffle编译该合约

cd sendtokenone
truffle console
compile

3.4 部署合约

    在黑框框终端里,输入如下命令,即可部署合约

cd sendtokenone
node migDeploy\1_deploy_event.js

    效果如下:

图(1) 使用ether.js部署合约

    可以打印合约地址和txHash,说明合约部署成功。

这篇关于使用ethers.js部署Solidity智能合约的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/307758

相关文章

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

使用DeepSeek搭建个人知识库(在笔记本电脑上)

《使用DeepSeek搭建个人知识库(在笔记本电脑上)》本文介绍了如何在笔记本电脑上使用DeepSeek和开源工具搭建个人知识库,通过安装DeepSeek和RAGFlow,并使用CherryStudi... 目录部署环境软件清单安装DeepSeek安装Cherry Studio安装RAGFlow设置知识库总

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Spring-AOP-ProceedingJoinPoint的使用详解

《Spring-AOP-ProceedingJoinPoint的使用详解》:本文主要介绍Spring-AOP-ProceedingJoinPoint的使用方式,具有很好的参考价值,希望对大家有所帮... 目录ProceedingJoinPoijsnt简介获取环绕通知方法的相关信息1.proceed()2.g

Maven pom.xml文件中build,plugin标签的使用小结

《Mavenpom.xml文件中build,plugin标签的使用小结》本文主要介绍了Mavenpom.xml文件中build,plugin标签的使用小结,文中通过示例代码介绍的非常详细,对大家的学... 目录<build> 标签Plugins插件<build> 标签<build> 标签是 pom.XML

JAVA虚拟机中 -D, -X, -XX ,-server参数使用

《JAVA虚拟机中-D,-X,-XX,-server参数使用》本文主要介绍了JAVA虚拟机中-D,-X,-XX,-server参数使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录一、-D参数二、-X参数三、-XX参数总结:在Java开发过程中,对Java虚拟机(JVM)的启动参数进

Java中使用注解校验手机号格式的详细指南

《Java中使用注解校验手机号格式的详细指南》在现代的Web应用开发中,数据校验是一个非常重要的环节,本文将详细介绍如何在Java中使用注解对手机号格式进行校验,感兴趣的小伙伴可以了解下... 目录1. 引言2. 数据校验的重要性3. Java中的数据校验框架4. 使用注解校验手机号格式4.1 @NotBl

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi