diff --git a/bin/embark b/bin/embark index 1d9846809..98fd67e3b 100644 --- a/bin/embark +++ b/bin/embark @@ -32,7 +32,7 @@ var deploy = function(env, embarkConfig) { } program - .version('0.8.1') + .version('0.8.4') program.command('new [name]').description('New application').action(function(name) { if (name === undefined) { diff --git a/boilerplate/package.json b/boilerplate/package.json index 09bde0130..770769863 100644 --- a/boilerplate/package.json +++ b/boilerplate/package.json @@ -10,7 +10,7 @@ "license": "ISC", "homepage": "", "devDependencies": { - "embark-framework": "^0.8.1", + "embark-framework": "^0.8.4", "grunt-embark": "^0.3.0", "grunt-contrib-clean": "^0.6.0", "grunt-contrib-coffee": "^0.13.0", diff --git a/lib/chain_manager.js b/lib/chain_manager.js index 157d6423a..d63c8b850 100644 --- a/lib/chain_manager.js +++ b/lib/chain_manager.js @@ -3,17 +3,18 @@ var web3 = require('web3'); var sha3_256 = require('js-sha3').sha3_256; ChainManager = function() { + this.chainManagerConfig = {}; this.currentChain = {}; this.file = ""; } ChainManager.prototype.loadConfigFile = function(filename) { + this.file = filename; try { var obj = JSON.parse(fs.readFileSync(filename)); - this.file = filename; this.chainManagerConfig = obj; } catch (e) { - throw new Error("error reading " + filename); + console.warn("error reading " + filename + "; defaulting to empty set"); } return this; }; @@ -35,15 +36,15 @@ ChainManager.prototype.init = function(env, config) { this.currentChain = this.chainManagerConfig[chainId]; } -ChainManager.prototype.addContract = function(contractName, code, address) { - this.currentChain.contracts[sha3_256(code)] = { +ChainManager.prototype.addContract = function(contractName, code, args, address) { + this.currentChain.contracts[sha3_256(code + contractName + args.join(','))] = { name: contractName, address: address } } -ChainManager.prototype.getContract = function(code) { - return this.currentChain.contracts[sha3_256(code)]; +ChainManager.prototype.getContract = function(contractName, code, args) { + return this.currentChain.contracts[sha3_256(code + contractName + args.join(','))]; } ChainManager.prototype.save = function() { @@ -51,4 +52,3 @@ ChainManager.prototype.save = function() { } module.exports = ChainManager; - diff --git a/lib/deploy.js b/lib/deploy.js index 81fcf08a4..899a88229 100644 --- a/lib/deploy.js +++ b/lib/deploy.js @@ -58,6 +58,15 @@ Deploy.prototype.deploy_contracts = function(env) { className = all_contracts[k]; contract = this.contractDB[className]; + var realArgs = []; + for (var l = 0; l < contract.args.length; l++) { + arg = contract.args[l]; + if (arg[0] === "$") { + realArgs.push(this.deployedContracts[arg.substr(1)]); + } else { + realArgs.push(arg); + } + } if (contract.address !== undefined) { this.deployedContracts[className] = contract.address; @@ -66,26 +75,18 @@ Deploy.prototype.deploy_contracts = function(env) { console.log("contract " + className + " at " + contract.address); } else { - var chainContract = this.chainManager.getContract(contract.compiled.code); + var chainContract = this.chainManager.getContract(className, contract.compiled.code, realArgs); if (chainContract != undefined) { console.log("contract " + className + " is unchanged and already deployed at " + chainContract.address); + this.deployedContracts[className] = chainContract.address; + this.execute_cmds(contract.onDeploy); } else { contractObject = web3.eth.contract(contract.compiled.info.abiDefinition); - realArgs = []; - for (var l = 0; l < contract.args.length; l++) { - arg = contract.args[l]; - if (arg[0] === "$") { - realArgs.push(this.deployedContracts[arg.substr(1)]); - } else { - realArgs.push(arg); - } - } - - contractParams = realArgs; + contractParams = realArgs.slice(); contractParams.push({ from: primaryAddress, data: contract.compiled.code, @@ -112,7 +113,7 @@ Deploy.prototype.deploy_contracts = function(env) { } this.deployedContracts[className] = contractAddress; - this.chainManager.addContract(className, contract.compiled.code, contractAddress); + this.chainManager.addContract(className, contract.compiled.code, realArgs, contractAddress); this.chainManager.save(); console.log("deployed " + className + " at " + contractAddress); diff --git a/package.json b/package.json index 09a01ebc0..cf0d25141 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "embark-framework", - "version": "0.8.1", + "version": "0.8.4", "description": "", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" diff --git a/test/chain_manager.js b/test/chain_manager.js index 26dcd13dd..e2add352a 100644 --- a/test/chain_manager.js +++ b/test/chain_manager.js @@ -15,7 +15,7 @@ describe('embark.chain_manager', function() { chainManager.init('development', blockchainConfig); it('should initialize chain', function() { - var chain = chainManager.chainManagerConfig['0x629e768beb87dc8c54a475d310a7196e86c97d0006e5a6d34a8217726c90223f'] + var chain = chainManager.chainManagerConfig['0xcd9c11da1e46f86ce40a38b6ef84cfdfa6ea92598a27538f0e87da6d7a5c73d5'] assert.equal(chain != undefined, true); }); }); @@ -23,10 +23,11 @@ describe('embark.chain_manager', function() { describe('#addContract', function() { it('should register a contract in the chain', function() { - chainManager.addContract("Foo", "123456", "0x123"); + chainManager.addContract("Foo", "123456", [], "0x123"); - var chain = chainManager.chainManagerConfig['0x629e768beb87dc8c54a475d310a7196e86c97d0006e5a6d34a8217726c90223f'] - var contract = chain.contracts["d7190eb194ff9494625514b6d178c87f99c5973e28c398969d2233f2960a573e"] + console.log(chainManager.chainManagerConfig); + var chain = chainManager.chainManagerConfig['0xcd9c11da1e46f86ce40a38b6ef84cfdfa6ea92598a27538f0e87da6d7a5c73d5'] + var contract = chain.contracts["d5d91a8825c5c253dff531ddda2354c4014f5699b7bcbea70207cfdcb37b6c8b"] assert.equal(contract.name, "Foo"); assert.equal(contract.address, "0x123"); @@ -37,7 +38,7 @@ describe('embark.chain_manager', function() { describe('#getContract', function() { it('should a contract in the chain', function() { - var contract = chainManager.getContract("123456"); + var contract = chainManager.getContract("Foo", "123456", []); assert.equal(contract.name, "Foo"); assert.equal(contract.address, "0x123"); @@ -52,7 +53,7 @@ describe('embark.chain_manager', function() { var chainFile = './test/support/chain_manager.json'; var content = fs.readFileSync(chainFile).toString(); - assert.equal(content, '{"0x629e768beb87dc8c54a475d310a7196e86c97d0006e5a6d34a8217726c90223f":{"contracts":{"d7190eb194ff9494625514b6d178c87f99c5973e28c398969d2233f2960a573e":{"name":"Foo","address":"0x123"}}}}'); + assert.equal(content, '{"0xcd9c11da1e46f86ce40a38b6ef84cfdfa6ea92598a27538f0e87da6d7a5c73d5":{"contracts":{"d5d91a8825c5c253dff531ddda2354c4014f5699b7bcbea70207cfdcb37b6c8b\":{"name":"Foo","address":"0x123"}}}}'); }); }); diff --git a/test/deploy.js b/test/deploy.js index c5df8511e..7e7fd6b22 100644 --- a/test/deploy.js +++ b/test/deploy.js @@ -1,6 +1,7 @@ var Config = require('../lib/config/config.js'); var Deploy = require('../lib/deploy.js'); var Compiler = require('../lib/compiler.js'); +var ChainManager = require('../lib/chain_manager.js'); var assert = require('assert'); var web3 = require('web3'); diff --git a/test/support/chain_manager.json b/test/support/chain_manager.json index ccb1943fb..0b027530b 100644 --- a/test/support/chain_manager.json +++ b/test/support/chain_manager.json @@ -1 +1 @@ -{"0x629e768beb87dc8c54a475d310a7196e86c97d0006e5a6d34a8217726c90223f":{"contracts":{"d7190eb194ff9494625514b6d178c87f99c5973e28c398969d2233f2960a573e":{"name":"Foo","address":"0x123"}}}} \ No newline at end of file +{"0xcd9c11da1e46f86ce40a38b6ef84cfdfa6ea92598a27538f0e87da6d7a5c73d5":{"contracts":{"d5d91a8825c5c253dff531ddda2354c4014f5699b7bcbea70207cfdcb37b6c8b":{"name":"Foo","address":"0x123"}}}} \ No newline at end of file