我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

如果你已经在以太坊上开发过DApp,那你在前端JavaScript中可能用过web3.js。Ethers.js则是一个轻量级的web3.js替代品。

与Web3.js相比,Ethers.js有很多优点,其中我最喜欢的一个特性是Ethers.js提供的状态和密钥管理。Web3的设计场景是DApp应该连接到一个本地节点,由这个节点负责保存密钥、签名交易并与以太坊区块链交互。现实并不是这样的,绝大多数用户不会在本地运行一个geth节点。Metamask在浏览器应用中有效地模拟了这种节点环境,因此绝大多数web3应用需要使用Metamask来保存密钥、签名交易并完成与以太坊的交互。

Ethers.js采取了不同的设计思路,它提供给开发者更多的灵活性。Ethers.js将“节点”拆分为两个不同的角色:

钱包:负责密钥保存和交易签名
提供器:负责以太坊网络的匿名连接、状态检查和交易发送。

    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"
  }
}

    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.bytecode

async 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 compilers
  compilers: {
    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智能合约的文章就介绍到这了,更多相关ethers.js部署Solidity智能合约内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用Python的开发框架Brownie部署以太坊智能合约

目录介绍为什么选择Python?Brownie是什么?用Python部署您的第一个智能合约1. 安装 Brownie 和 bake2.设置环境变量3.部署您的智能合约4.读取您的智能合约结论介绍我希望可以在任何开发场景都尽量用Python。
2022-06-02

怎么用10分钟创建和部署NFT智能合约

今天就跟大家聊聊有关怎么用10分钟创建和部署NFT智能合约,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是NFTNFT代表不可替代的令牌,例如,一个美元钞票是可替代的,因为您可以
2023-06-15

怎么使用Python的开发框架Brownie部署以太坊智能合约

这篇文章主要介绍怎么使用Python的开发框架Brownie部署以太坊智能合约,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!介绍我希望可以在任何开发场景都尽量用Python。在区块链开发中,常用的是以太坊虚拟机智能合
2023-06-15

tensorflow部署和使用的方法是什么

TensorFlow是一个开源的机器学习框架,可以用于构建、训练和部署深度学习模型。以下是TensorFlow部署和使用的一般步骤:安装TensorFlow:首先,您需要安装TensorFlow框架。您可以通过pip包管理工具在命令行中运行
tensorflow部署和使用的方法是什么
2024-03-12

如何使用tomcat部署Jenkins的升级方法

这篇文章主要为大家展示了“如何使用tomcat部署Jenkins的升级方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用tomcat部署Jenkins的升级方法”这篇文章吧。使用tomc
2023-06-04

使用Kubeadm在CentOS7.2上部署Kubernetes集群的方法

本文参考kubernetes官网文章Installing Kubernetes on linux with kubeadm在CentOS7.2使用Kubeadm部署Kuebernetes集群,解决了一些在按照该文档部署时遇到的问题。操作系统
2022-06-04

Docker部署及使用压测神器sysbench的方法

sysbench是一个开源跨平台的多线程性能测试工具,这篇文章主要介绍了Docker部署及使用压测神器sysbench的相关知识,需要的朋友可以参考下
2022-11-13

使用Docker部署MySQL数据库的两种方法

目录引言第一部分:通过 docker CLI 命令部署 mysql1. 安装 Docker2. 拉取 MySQL 镜像3. 启动 MySQL 容器4. 验证 MySQL 运行状态5. 进入 MySQL 容器第二部分:通过 Docker Co
使用Docker部署MySQL数据库的两种方法
2024-10-17

使用shell脚本一键部署LNMP架构的方法

LNMP架构介绍LNMP:linux系统下Nginx+mysql+php这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是
2022-06-04

编程热搜

目录