最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年10月25日 10:19:09   作者:sanqima  
Ethers.js則是一個(gè)輕量級(jí)的web3.js替代品,在本文中,我們將學(xué)習(xí)使用ethers.js部署Solidity智能合約的方法,感興趣的朋友一起看看吧

如果你已經(jīng)在以太坊上開發(fā)過DApp,那你在前端JavaScript中可能用過web3.js。Ethers.js則是一個(gè)輕量級(jí)的web3.js替代品。

與Web3.js相比,Ethers.js有很多優(yōu)點(diǎn),其中我最喜歡的一個(gè)特性是Ethers.js提供的狀態(tài)和密鑰管理。Web3的設(shè)計(jì)場(chǎng)景是DApp應(yīng)該連接到一個(gè)本地節(jié)點(diǎn),由這個(gè)節(jié)點(diǎn)負(fù)責(zé)保存密鑰、簽名交易并與以太坊區(qū)塊鏈交互。現(xiàn)實(shí)并不是這樣的,絕大多數(shù)用戶不會(huì)在本地運(yùn)行一個(gè)geth節(jié)點(diǎn)。Metamask在瀏覽器應(yīng)用中有效地模擬了這種節(jié)點(diǎn)環(huán)境,因此絕大多數(shù)web3應(yīng)用需要使用Metamask來保存密鑰、簽名交易并完成與以太坊的交互。

Ethers.js采取了不同的設(shè)計(jì)思路,它提供給開發(fā)者更多的靈活性。Ethers.js將“節(jié)點(diǎn)”拆分為兩個(gè)不同的角色:

錢包:負(fù)責(zé)密鑰保存和交易簽名
提供器:負(fù)責(zé)以太坊網(wǎng)絡(luò)的匿名連接、狀態(tài)檢查和交易發(fā)送。

    ethers.js是一個(gè)非常精簡(jiǎn)的以太坊操作庫(kù),它包含如下四個(gè)模塊:
        Ethers.provider
        Ethers.contract
        Ethers.utils
        Ethers.wallets
    其中,Ethers.provider負(fù)責(zé)與以太坊節(jié)點(diǎn)進(jìn)行連接,查詢交易、廣播交易,獲取賬戶余額等功能;
    Ethers.contract負(fù)責(zé)與智能合約進(jìn)行交互,包括部署合約、監(jiān)聽合約里的事件、獲取合約里的信息,調(diào)用合約里的函數(shù)等功能;
    Ethers.utils是一個(gè)工具庫(kù),主要用于處理輸入、輸出數(shù)據(jù),數(shù)據(jù)的類型與格式轉(zhuǎn)換;
    Ethers.wallets主要用于創(chuàng)建新錢包,連接或切換現(xiàn)有錢包,以及對(duì)交易進(jìn)行簽名等功能。
    下面,介紹使用Ethers.js來部署智能合約。

1、新建一個(gè)工程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 創(chuàng)建一個(gè)EventValue.sol合約

    在sendtokenone/contacts目錄,創(chuàng)建一個(gè)創(chuàng)建一個(gè)EventValue.sol合約,內(nèi)容如下:
    // 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 編寫部署腳本

    新建一個(gè)文件夾名稱為migDeploy,然后在這個(gè)文件夾里,創(chuàng)建部署腳本1_deploy_event.js

mkdir migDeploy
cd migDeploy
touch 1_deploy_event.js

1_deploy_event.js的內(nèi)容如下:
// 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)設(shè)置ganache的IP為127.0.0.1,端口為8545
    b) 在truffle-config.js里,開啟development網(wǎng)段、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"
      // }
    }
  },

};

    打開一個(gè)黑框框控制臺(tái),使用truffle編譯該合約

cd sendtokenone
truffle console
compile

3.4 部署合約

    在黑框框終端里,輸入如下命令,即可部署合約

cd sendtokenone
node migDeploy\1_deploy_event.js

    效果如下:

圖(1) 使用ether.js部署合約

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

到此這篇關(guān)于使用ethers.js部署Solidity智能合約的文章就介紹到這了,更多相關(guān)ethers.js部署Solidity智能合約內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

北宁市| 洛宁县| 兴义市| 耒阳市| 庄浪县| 肇源县| 齐齐哈尔市| 通江县| 封开县| 射洪县| 漳州市| 天镇县| 乃东县| 定远县| 新和县| 秦安县| 余庆县| 庆元县| 城固县| 合水县| 治多县| 平昌县| 漾濞| 伊宁县| 元谋县| 枝江市| 都昌县| 临泽县| 静海县| 德安县| 延津县| 讷河市| 虎林市| 盱眙县| 通许县| 新晃| 天门市| 芷江| 定州市| 章丘市| 甘泉县|