From 6031cbab2726863323668151e942081adc044890 Mon Sep 17 00:00:00 2001 From: JChoy Date: Sat, 2 Mar 2019 19:29:32 +0900 Subject: [PATCH] fix: fix bug about #110 (#111) --- packages/vvisp/contracts/test/DependencyA.sol | 7 ++++++ packages/vvisp/contracts/test/DependencyB.sol | 7 ++++++ packages/vvisp/contracts/test/SecondA.sol | 3 +++ packages/vvisp/contracts/test/SecondD.sol | 7 ++++++ .../deploy-service/preProcess/checkError.js | 22 ++++++++++++------- .../processes/initNonUpgradeables.js | 3 +++ .../deploy-service/processes/injectVar.js | 6 ++--- .../scripts/deploy-service/utils/hasInit.js | 4 ++++ .../deploy-service/utils/hasInitArgs.js | 8 ------- .../scripts/deploy-service/utils/index.js | 4 ++-- .../dummy/justNonUpgradeables.service1.json | 14 ++++++++++-- .../dummy/justNonUpgradeables.service2.json | 7 +++++- .../test/scripts/deploy-service/index.test.js | 4 ++-- 13 files changed, 70 insertions(+), 26 deletions(-) create mode 100644 packages/vvisp/scripts/deploy-service/utils/hasInit.js delete mode 100644 packages/vvisp/scripts/deploy-service/utils/hasInitArgs.js diff --git a/packages/vvisp/contracts/test/DependencyA.sol b/packages/vvisp/contracts/test/DependencyA.sol index 6efafd9..0df3240 100644 --- a/packages/vvisp/contracts/test/DependencyA.sol +++ b/packages/vvisp/contracts/test/DependencyA.sol @@ -5,10 +5,17 @@ contract DependencyA { address addressB; address addressC; address owner; + bool initialized; constructor(address _addressB, address _addressC, address _owner) public { addressB = _addressB; addressC = _addressC; owner = _owner; } + + function initialize() public { + require(!initialized); + // something + initialized = true; + } } diff --git a/packages/vvisp/contracts/test/DependencyB.sol b/packages/vvisp/contracts/test/DependencyB.sol index b995a25..e274ba8 100644 --- a/packages/vvisp/contracts/test/DependencyB.sol +++ b/packages/vvisp/contracts/test/DependencyB.sol @@ -5,10 +5,17 @@ contract DependencyB { uint tmp; address addressD; address owner; + bool initialized; constructor(uint _tmp, address _addressD, address _owner) public { tmp = _tmp; addressD = _addressD; owner = _owner; } + + function initialize() public { + require(!initialized); + // something + initialized = true; + } } diff --git a/packages/vvisp/contracts/test/SecondA.sol b/packages/vvisp/contracts/test/SecondA.sol index 5e299a8..209c317 100644 --- a/packages/vvisp/contracts/test/SecondA.sol +++ b/packages/vvisp/contracts/test/SecondA.sol @@ -4,6 +4,7 @@ pragma solidity >=0.5.0 <0.6.0; contract SecondA { address addressB; address addressC; + bool initialized = false; constructor(address _addressB, address _addressC, address[] memory _owners) public { addressB = _addressB; @@ -11,6 +12,8 @@ contract SecondA { } function initialize(address _token, address _owner, address[] memory _addressA) public { + require(!initialized); // something + initialized = true; } } diff --git a/packages/vvisp/contracts/test/SecondD.sol b/packages/vvisp/contracts/test/SecondD.sol index f0ed22a..db3de54 100644 --- a/packages/vvisp/contracts/test/SecondD.sol +++ b/packages/vvisp/contracts/test/SecondD.sol @@ -4,9 +4,16 @@ pragma solidity >=0.5.0 <0.6.0; contract SecondD { address addressB; address owner; + bool initialized = false; constructor(address _addressB, address _owner) public { addressB = _addressB; owner = _owner; } + + function initialize() public { + require(!initialized); + // something + initialized = true; + } } diff --git a/packages/vvisp/scripts/deploy-service/preProcess/checkError.js b/packages/vvisp/scripts/deploy-service/preProcess/checkError.js index 81efc31..e20c033 100644 --- a/packages/vvisp/scripts/deploy-service/preProcess/checkError.js +++ b/packages/vvisp/scripts/deploy-service/preProcess/checkError.js @@ -6,7 +6,7 @@ module.exports = function(targets, compileOutput, options) { getCycle, printOrSilent } = require('@haechi-labs/vvisp-utils'); - const { hasConstructArgs, hasInitArgs, getVar } = require('../utils/index'); + const { hasConstructArgs, hasInit, getVar } = require('../utils/index'); const { INITIALIZE, CONSTRUCTOR, UPGRADEABLE } = require('../constants'); printOrSilent(chalk.head('Check Arguments...'), options); @@ -16,9 +16,9 @@ module.exports = function(targets, compileOutput, options) { const abi = JSON.parse( getCompiledContracts(compileOutput, filePath).interface ); - const hasInit = hasInitArgs(contract); + const hasInitialize = hasInit(contract); const hasConstruct = hasConstructArgs(contract); - if (hasInit && hasConstruct) { + if (hasInitialize && hasConstruct) { let initialize = false; let constructorArguments = false; for (let i = 0; i < abi.length; i++) { @@ -26,11 +26,14 @@ module.exports = function(targets, compileOutput, options) { abi[i].name === contract[INITIALIZE].functionName && abi[i].type === 'function' ) { - if (contract[INITIALIZE].arguments.length !== abi[i].inputs.length) { + const length = contract[INITIALIZE].arguments + ? contract[INITIALIZE].arguments.length + : 0; + if (length !== abi[i].inputs.length) { throw new Error( `Arguments Number Error at ${name}: Expected ${ abi[i].inputs.length - }, but ${contract[INITIALIZE].arguments.length}` + }, but ${length}` ); } initialize = true; @@ -49,17 +52,20 @@ module.exports = function(targets, compileOutput, options) { break; } } - } else if (hasInit) { + } else if (hasInitialize) { for (let i = 0; i < abi.length; i++) { if ( abi[i].name === contract[INITIALIZE].functionName && abi[i].type === 'function' ) { - if (contract[INITIALIZE].arguments.length !== abi[i].inputs.length) { + const length = contract[INITIALIZE].arguments + ? contract[INITIALIZE].arguments.length + : 0; + if (length !== abi[i].inputs.length) { throw new Error( `Arguments Number Error at ${name}: Expected ${ abi[i].inputs.length - }, but ${contract[INITIALIZE].arguments.length}` + }, but ${length}` ); } break; diff --git a/packages/vvisp/scripts/deploy-service/processes/initNonUpgradeables.js b/packages/vvisp/scripts/deploy-service/processes/initNonUpgradeables.js index fa88fee..8587ff4 100644 --- a/packages/vvisp/scripts/deploy-service/processes/initNonUpgradeables.js +++ b/packages/vvisp/scripts/deploy-service/processes/initNonUpgradeables.js @@ -40,6 +40,9 @@ module.exports = async function(deployState, options) { const { contract, name } = nonUpgradeables[i]; const stateContract = stateClone.contracts[name]; + if (!stateContract.pending) { + continue; + } const initialize = stateContract[INITIALIZE]; if (initialize && initialize.functionName) { const instancePath = path.join('./', contract.path); diff --git a/packages/vvisp/scripts/deploy-service/processes/injectVar.js b/packages/vvisp/scripts/deploy-service/processes/injectVar.js index 4e1b831..7234f2b 100644 --- a/packages/vvisp/scripts/deploy-service/processes/injectVar.js +++ b/packages/vvisp/scripts/deploy-service/processes/injectVar.js @@ -1,13 +1,13 @@ module.exports = function(deployState) { const { CONSTRUCTOR, INITIALIZE, VARIABLES } = require('../constants'); const { forIn } = require('@haechi-labs/vvisp-utils'); - const { getVar, hasConstructArgs, hasInitArgs } = require('../utils/index'); + const { getVar, hasConstructArgs, hasInit } = require('../utils/index'); const stateClone = deployState.getState(); const variables = deployState[VARIABLES]; forIn(stateClone.contracts, (contract, name) => { - if (hasInitArgs(contract)) { + if (hasInit(contract)) { _injectVar(variables, stateClone, name, INITIALIZE); } if (hasConstructArgs(contract)) { @@ -22,7 +22,7 @@ module.exports = function(deployState) { const _arguments = _type === CONSTRUCTOR ? _contract[CONSTRUCTOR] - : _contract[INITIALIZE].arguments; + : _contract[INITIALIZE].arguments || []; const _path = `${_name}/${_type}`; _injecting(_variables, _stateClone, _path, _arguments, _contract); diff --git a/packages/vvisp/scripts/deploy-service/utils/hasInit.js b/packages/vvisp/scripts/deploy-service/utils/hasInit.js new file mode 100644 index 0000000..fb7b9dc --- /dev/null +++ b/packages/vvisp/scripts/deploy-service/utils/hasInit.js @@ -0,0 +1,4 @@ +module.exports = function(contract) { + const { INITIALIZE } = require('../constants'); + return contract[INITIALIZE] && contract[INITIALIZE].functionName; +}; diff --git a/packages/vvisp/scripts/deploy-service/utils/hasInitArgs.js b/packages/vvisp/scripts/deploy-service/utils/hasInitArgs.js deleted file mode 100644 index d0667a0..0000000 --- a/packages/vvisp/scripts/deploy-service/utils/hasInitArgs.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = function(contract) { - const { INITIALIZE } = require('../constants'); - return ( - contract[INITIALIZE] && - contract[INITIALIZE].arguments && - contract[INITIALIZE].arguments.length > 0 - ); -}; diff --git a/packages/vvisp/scripts/deploy-service/utils/index.js b/packages/vvisp/scripts/deploy-service/utils/index.js index 436d873..befe4cd 100644 --- a/packages/vvisp/scripts/deploy-service/utils/index.js +++ b/packages/vvisp/scripts/deploy-service/utils/index.js @@ -1,13 +1,13 @@ const getVar = require('./getVar'); const hasConstructArgs = require('./hasConstructArgs'); -const hasInitArgs = require('./hasInitArgs'); +const hasInit = require('./hasInit'); const pathToInstance = require('./pathToInstance'); const writeState = require('./writeState.js'); module.exports = { getVar, hasConstructArgs, - hasInitArgs, + hasInit, pathToInstance, writeState }; diff --git a/packages/vvisp/test/dummy/justNonUpgradeables.service1.json b/packages/vvisp/test/dummy/justNonUpgradeables.service1.json index e997c50..5c20fd0 100644 --- a/packages/vvisp/test/dummy/justNonUpgradeables.service1.json +++ b/packages/vvisp/test/dummy/justNonUpgradeables.service1.json @@ -12,7 +12,12 @@ "${contracts.DependencyB.address}", "${contracts.DependencyC.address}", "${variables.owner}" - ] + ], + "initialize": { + "functionName": "initialize", + "arguments": [ + ] + } }, "DependencyB": { "path": "contracts/test/DependencyB.sol", @@ -20,7 +25,12 @@ 3, "${contracts.DependencyD.address}", "${variables.owner}" - ] + ], + "initialize": { + "functionName": "initialize", + "arguments": [ + ] + } }, "DependencyC": { "path": "contracts/test/DependencyC.sol", diff --git a/packages/vvisp/test/dummy/justNonUpgradeables.service2.json b/packages/vvisp/test/dummy/justNonUpgradeables.service2.json index 4581611..912ce70 100644 --- a/packages/vvisp/test/dummy/justNonUpgradeables.service2.json +++ b/packages/vvisp/test/dummy/justNonUpgradeables.service2.json @@ -63,7 +63,12 @@ "constructorArguments": [ "${variables.owner}", "${variables.owner}" - ] + ], + "initialize": { + "functionName": "initialize", + "arguments": [ + ] + } } } } diff --git a/packages/vvisp/test/scripts/deploy-service/index.test.js b/packages/vvisp/test/scripts/deploy-service/index.test.js index 8f0b5aa..f807efb 100644 --- a/packages/vvisp/test/scripts/deploy-service/index.test.js +++ b/packages/vvisp/test/scripts/deploy-service/index.test.js @@ -6,7 +6,7 @@ const deployService = require('../../../scripts/deploy-service/'); const compareConfigAndState = require('../../../scripts/deploy-service/preProcess/compareConfigAndState'); const { PENDING_STATE } = require('../../../scripts/deploy-service/constants'); const { SERVICE_PATH, STATE_PATH, TEST } = require('../../../config/Constant'); -const { hasInitArgs } = require('../../../scripts/deploy-service/utils'); +const { hasInit } = require('../../../scripts/deploy-service/utils'); const { Config, forIn, @@ -192,7 +192,7 @@ function getWaitingTxNum() { nonUpgradeableExists = true; } resultNumber++; // nonUpgradeables - if (hasInitArgs(contract)) { + if (hasInit(contract)) { resultNumber++; // init Tx } }