Solidity

Truffle Config 中 Ropsten 網路的 gas 和 gasPrice 應該是多少?

  • February 6, 2019

我只是想測試我的智能合約以部署在 Ropsten 網路中,我仍然對我應該在 Truffle 配置中gas放置什麼感到困惑。gasPrice對此有什麼想法嗎?

ropsten: {
 provider: ropstenProvider,
 gas: 4600000,
 gasPrice: web3.toWei("50", "gwei"),
 network_id: "3"
}

根據truffle 文件,這兩個參數gasgasPrice代表:

  • gas:用於部署的氣體限制。預設值為 4712388。
  • gasPrice:用於部署的 Gas 價格。預設值為 100000000000(100 香農)。

對於gasPrice:很簡單,價格越高,你的交易就越快被探勘。在**測試網 (Ropsten)**上,由於乙太幣一文不值,您可能可以傳遞一個很大的值(例如 100Gwei)。

但是,在主網上:我建議檢查EthGasStation以根據通過的 gasPrice 估算交易被探勘的時間。


關於氣體:您必須通過交易可以消耗的最大氣體單位。

我已經完成了一個簡單的 JavaScript 腳本(使用 Truffle Metacoin 合約),它可以幫助您估算合約部署的 gas。

一種。在 truffle 項目目錄中,創建一個文件estimate_deployment.js

var MetaCoin = artifacts.require("./MetaCoin.sol");
var solc = require('solc')

module.exports = function(callback) {

   MetaCoin.web3.eth.getGasPrice(function(error, result){ 
       var gasPrice = Number(result);
       console.log("Gas Price is " + gasPrice + " wei"); // "10000000000000"

       var MetaCoinContract = web3.eth.contract(MetaCoin._json.abi);
       var contractData = MetaCoinContract.new.getData({data: MetaCoin._json.bytecode});
       var gas = Number(web3.eth.estimateGas({data: contractData}))


       console.log("gas estimation = " + gas + " units");
       console.log("gas cost estimation = " + (gas * gasPrice) + " wei");
       console.log("gas cost estimation = " + MetaCoin.web3.fromWei((gas * gasPrice), 'ether') + " ether");

   });
};

執行腳本時

$ truffle exec estimate_deployment.js 

Using network 'development'.

Gas Price is 20000000000 wei
gas estimation = 266000 units
gas cost estimation = 5320000000000000 wei
gas cost estimation = 0.00532 ether

因此,在您的情況下,truffle.js文件將如下所示:

ropsten: {
 provider: ropstenProvider,
 gas: 266000,
 gasPrice: web3.toWei("50", "gwei"),
 network_id: "3"
}

此處提供程式碼

gas 是在 EVM 中定義的步驟執行單元。契約的創建是一項需要消耗gas的交易。gasCost 將指定您願意為每一步支付的費用。

來到您的 ropsten 配置,您指定 EVM 可以使用多少氣體單位來部署到 ropsten 網路。

總交易價值 = gas*gasPrice。

假設您的合約部署可能需要總共 100 wei,但您提供了 200 gwi。EVM 會將剩餘的 gas 返還給您。如果您傳遞的價值低於所需的價值,那麼它將從您的帳戶中扣除金額並且交易失敗。即它不會將你的智能合約部署到網路中。

引用自:https://ethereum.stackexchange.com/questions/40155