From 89c0001dcb4c580c39e0f0ac71f5ab91716b6b50 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 23 Sep 2016 02:33:38 -0700 Subject: [PATCH] make contract gas calculation automatic --- boilerplate/config/development/contracts.json | 3 +-- demo/config/contracts.json | 3 +-- demo/config/development/contracts.json | 3 +-- lib/abi.js | 3 ++- lib/contracts.js | 8 +++++++- lib/deploy.js | 2 +- 6 files changed, 13 insertions(+), 9 deletions(-) diff --git a/boilerplate/config/development/contracts.json b/boilerplate/config/development/contracts.json index da851c9a1..df8a695f0 100644 --- a/boilerplate/config/development/contracts.json +++ b/boilerplate/config/development/contracts.json @@ -1,7 +1,6 @@ { "development": { - "gasLimit": 500000, - "gasPrice": 10000000000000, + "gas": "auto", "contracts": { } } diff --git a/demo/config/contracts.json b/demo/config/contracts.json index b75501ef5..b899cb0f1 100644 --- a/demo/config/contracts.json +++ b/demo/config/contracts.json @@ -1,7 +1,6 @@ { "default": { - "gasLimit": 500000, - "gasPrice": 10000000000000, + "gas": "auto", "contracts": { "SimpleStorage": { "args": [ diff --git a/demo/config/development/contracts.json b/demo/config/development/contracts.json index 65392e5c9..bc53d788e 100644 --- a/demo/config/development/contracts.json +++ b/demo/config/development/contracts.json @@ -1,7 +1,6 @@ { "development": { - "gasLimit": 500000, - "gasPrice": 10000000000000, + "gas": "auto", "contracts": { "SimpleStorage": { "args": [ diff --git a/lib/abi.js b/lib/abi.js index 36539398c..5abc6c570 100644 --- a/lib/abi.js +++ b/lib/abi.js @@ -26,9 +26,10 @@ ABIGenerator.prototype.generateContracts = function(useEmbarkJS) { var contract = this.contractsManager.contracts[className]; var abi = JSON.stringify(contract.abiDefinition); + var gasEstimates = JSON.stringify(contract.gasEstimates); if (useEmbarkJS) { - result += "\n" + className + " = new EmbarkJS.Contract({abi: " + abi + ", address: '" + contract.deployedAddress + "', code: '" + contract.code + "'});"; + result += "\n" + className + " = new EmbarkJS.Contract({abi: " + abi + ", address: '" + contract.deployedAddress + "', code: '" + contract.code + "', gasEstimates: " + gasEstimates + "});"; } else { result += "\n" + className + "Abi = " + abi + ";"; result += "\n" + className + "Contract = web3.eth.contract(" + className + "Abi);"; diff --git a/lib/contracts.js b/lib/contracts.js index 5d86aa631..0efb3c37a 100644 --- a/lib/contracts.js +++ b/lib/contracts.js @@ -21,7 +21,13 @@ ContractsManager.prototype.build = function() { var contract = this.compiledContracts[className]; var contractConfig = this.contractsConfig[className]; - contract.gasLimit = this.contractsConfig.gasLimit; + if (this.contractsConfig.gas === 'auto') { + var maxGas = Math.max(contract.gasEstimates.creation[0], contract.gasEstimates.creation[1], 500000); + var adjustedGas = Math.round(maxGas * 1.01); + contract.gas = adjustedGas; + } else { + contract.gas = this.contractsConfig.gas; + } contract.gasPrice = this.contractsConfig.gasPrice; if (contractConfig === undefined) { diff --git a/lib/deploy.js b/lib/deploy.js index df700b000..675f3fc16 100644 --- a/lib/deploy.js +++ b/lib/deploy.js @@ -16,7 +16,7 @@ Deploy.prototype.deployContract = function(contract, params, callback) { contractParams.push({ from: this.web3.eth.coinbase, data: contract.code, - gas: contract.gasLimit, + gas: contract.gas, gasPrice: contract.gasPrice });