Solidity
Truffle Config 中 Ropsten 網路的 gas 和 gasPrice 應該是多少?
我只是想測試我的智能合約以部署在 Ropsten 網路中,我仍然對我應該在 Truffle 配置中
gas
放置什麼感到困惑。gasPrice
對此有什麼想法嗎?ropsten: { provider: ropstenProvider, gas: 4600000, gasPrice: web3.toWei("50", "gwei"), network_id: "3" }
根據truffle 文件,這兩個參數
gas
和gasPrice
代表:
- 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 返還給您。如果您傳遞的價值低於所需的價值,那麼它將從您的帳戶中扣除金額並且交易失敗。即它不會將你的智能合約部署到網路中。