返回顶部
首页 > 资讯 > 前端开发 > JavaScript >使用ethers.js部署Solidity智能合约的方法
  • 403
分享到

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

2024-04-02 19:04:59 403人浏览 泡泡鱼
摘要

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

如果你已经在以太坊开发过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智能合约内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 使用ethers.js部署Solidity智能合约的方法

本文链接: https://lsjlt.com/news/155330.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用ethers.js部署Solidity智能合约的方法
    如果你已经在以太坊上开发过DApp,那你在前端JavaScript中可能用过web3.js。Ethers.js则是一个轻量级的web3.js替代品。 与Web3.js相比,Ether...
    99+
    2024-04-02
  • Python Web3 开发:用 Brownie 部署智能合约
    Python是最通用的编程语言之一:从研究人员运行他们的测试模型到开发人员在繁重的生产环境中使用它,几乎在每个可能的技术领域都有使用案例。在今天的指南中,我们将了解Brownie,一个基于Python的工具,用于编写和部署智能合约。准备 安...
    99+
    2023-05-19
    Python 编程语言 Brownie
  • 使用Python的开发框架Brownie部署以太坊智能合约
    目录介绍为什么选择Python?Brownie是什么?用Python部署您的第一个智能合约1. 安装 Brownie 和 bake2.设置环境变量3.部署您的智能合约4.读取您的智能合约结论介绍 我希望可以在任何开...
    99+
    2022-06-02
    python 部署智能合约 python Brownie python 以太坊合约
  • 怎么用10分钟创建和部署NFT智能合约
    今天就跟大家聊聊有关怎么用10分钟创建和部署NFT智能合约,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是NFTNFT代表不可替代的令牌,例如,一个美元钞票是可替代的,因为您可以...
    99+
    2023-06-15
  • 怎么使用Python的开发框架Brownie部署以太坊智能合约
    这篇文章主要介绍怎么使用Python的开发框架Brownie部署以太坊智能合约,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!介绍我希望可以在任何开发场景都尽量用Python。在区块链开发中,常用的是以太坊虚拟机智能合...
    99+
    2023-06-15
  • 如何使用Golang部署合约(步骤)
    随着区块链技术的快速发展,智能合约已经成为区块链应用中不可或缺的一部分。而Golang作为一门快速、高效、安全的语言,越来越被广泛应用于智能合约领域。本文将介绍如何使用Golang部署合约。一、Golang的优势相比于使用其他语言开发智能合...
    99+
    2023-05-14
  • 利用Python实现智能合约的示例详解
    目录智能合约1. 是什么2. 使用场景用Python如何实现1. 设计智能合约2. 编写智能合约源代码3. 编译智能合约4. 部署智能合约5. 调用智能合约方法6. 监控智能合约事件...
    99+
    2023-05-14
    Python实现智能合约 Python智能合约
  • 如何利用go语言实现智能合约的功能
    在Go语言中实现智能合约的功能可以使用Solidity库来编写智能合约代码,并使用Go语言编写合约的部署和调用代码。以下是一个简单的...
    99+
    2023-10-12
    Go语言
  • 使用docker部署hbase的方法
    单机hbase,先说在前面。 安装docker 先输入docker -v,装过就不用再装了。 yum update #更新(询问输入y) yum install -y yu...
    99+
    2024-04-02
  • Java Web3J :使用web3j监听、查询、订阅智能合约的事件
    前面有文章写如何使用Docker-compose方式部署blockscout浏览器+charts图表,区块链浏览器已经部署成功了,同时我们在链上增加了治理投票流程,如何实时的把治理事件快速同步到浏...
    99+
    2023-09-10
    java web3 智能合约 websocket 笔记 经验分享 maven
  • Python在区块链智能合约中的关键作用
    Python因其清晰简洁的语法、丰富的库和广泛的开发者社区而在区块链领域备受推崇。它被广泛用于开发智能合约,这是在区块链上执行的自动执行协议。 智能合约开发 Python提供了许多工具和库,使智能合约的开发变得简单高效。这些工具包括: ...
    99+
    2024-03-13
    Python与区块链
  • Spring Boot 整合 Fisco Bcos部署、调用区块链合约的案例
    目录简介主要流程1、合约开发2、合约编译3、Spring Boot配置合约4、合约调用的功能实现5、功能测试5.1、编译SpringBoot工程,生成jar包:5.2、发送到服务器上...
    99+
    2024-04-02
  • 使用docker-compose部署MySQL方法
    本文主要给大家介绍使用docker-compose部署MySQL方法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下使用docker-compose部...
    99+
    2024-04-02
  • Docker Compose部署及基础使用的方法
    本篇内容主要讲解“Docker Compose部署及基础使用的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker Compose部署及基础使用的方法...
    99+
    2024-04-02
  • tensorflow部署和使用的方法是什么
    TensorFlow是一个开源的机器学习框架,可以用于构建、训练和部署深度学习模型。以下是TensorFlow部署和使用的一般步骤:...
    99+
    2024-03-12
    tensorflow
  • 区块链技术应用场景开发方案,智能合约编写服务
    区块链技术应用场景开发方案,智能合约编写服务BaaS系统是一种新型的云服务,由区块链与云计算紧密结合,在云上搭建区块链技术,可以帮助企业简化运营流程,无需专门建设自己的基础设施,服务购买即用,削减了部署成本。 Baas是怎样的一个...
    99+
    2023-06-04
  • 使用jenkins部署springboot项目的方法步骤
    1.准备工作 1、JDK安装 2、Maven安装 3、Git安装 4、jenkins安装 以上软件安装成功后进入jenkins进行相关配置。 如果需要通过SSH进行远程发布项目,je...
    99+
    2024-04-02
  • 如何使用tomcat部署Jenkins的升级方法
    这篇文章主要为大家展示了“如何使用tomcat部署Jenkins的升级方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用tomcat部署Jenkins的升级方法”这篇文章吧。使用tomc...
    99+
    2023-06-04
  • MySQL使用check约束的方法
    这篇文章将为大家详细讲解有关MySQL使用check约束的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在数据库中,CHECK 约束是指约束表中某一个或者某些列中可接...
    99+
    2024-04-02
  • 使用Kubeadm在CentOS7.2上部署Kubernetes集群的方法
    本文参考kubernetes官网文章Installing Kubernetes on linux with kubeadm在CentOS7.2使用Kubeadm部署Kuebernetes集群,解决了一些在按照该文档部署时...
    99+
    2022-06-04
    CentOS部署Kubernetes集群 CentOS Kubernetes集群
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作