Skip to content

Commit f8db3c2

Browse files
committed
save chain; add chain manager to deployment
1 parent 56e59d8 commit f8db3c2

File tree

7 files changed

+49
-16
lines changed

7 files changed

+49
-16
lines changed

bin/embark

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,19 @@ var run = function(cmd) {
1515
}
1616

1717
var deploy = function(env, embarkConfig) {
18-
contractFiles = grunt.file.expand(embarkConfig.contracts);
19-
destFile = embarkConfig.output
20-
Embark.init()
21-
Embark.blockchainConfig.loadConfigFile(embarkConfig.blockchainConfig)
22-
Embark.contractsConfig.loadConfigFile(embarkConfig.contractsConfig)
23-
abi = Embark.deployContracts(env, contractFiles, destFile)
18+
var contractFiles = grunt.file.expand(embarkConfig.contracts);
19+
var destFile = embarkConfig.output;
20+
var chainFile = embarkConfig.chains;
21+
22+
Embark.init();
23+
Embark.blockchainConfig.loadConfigFile(embarkConfig.blockchainConfig);
24+
Embark.contractsConfig.loadConfigFile(embarkConfig.contractsConfig);
25+
26+
if (chainFile === undefined) {
27+
chainFile = './chains.json';
28+
}
29+
30+
abi = Embark.deployContracts(env, contractFiles, destFile, chainFile);
2431
grunt.file.write(destFile, abi);
2532
}
2633

lib/chain_manager.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ var sha3_256 = require('js-sha3').sha3_256;
44

55
ChainManager = function() {
66
this.currentChain = {};
7+
this.file = "";
78
}
89

910
ChainManager.prototype.loadConfigFile = function(filename) {
1011
try {
1112
var obj = JSON.parse(fs.readFileSync(filename));
13+
this.file = filename;
1214
this.chainManagerConfig = obj;
1315
} catch (e) {
1416
throw new Error("error reading " + filename);
@@ -21,9 +23,7 @@ ChainManager.prototype.loadConfig = function(config) {
2123
return this;
2224
};
2325

24-
ChainManager.prototype.init = function(env, blockchainConfig) {
25-
var config = blockchainConfig.config(env);
26-
26+
ChainManager.prototype.init = function(env, config) {
2727
web3.setProvider(new web3.providers.HttpProvider("http://" + config.rpcHost + ":" + config.rpcPort));
2828

2929
var chainId = web3.eth.getBlock(0).hash;
@@ -46,5 +46,9 @@ ChainManager.prototype.getContract = function(code) {
4646
return this.currentChain.contracts[sha3_256(code)];
4747
}
4848

49+
ChainManager.prototype.save = function() {
50+
fs.writeFileSync(this.file, JSON.stringify(this.chainManagerConfig));
51+
}
52+
4953
module.exports = ChainManager;
5054

lib/deploy.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ sleep = function sleep(ms) {
1010
while (new Date().getTime() < start + ms);
1111
}
1212

13-
Deploy = function(env, contractFiles, blockchainConfig, contractsConfig) {
13+
Deploy = function(env, contractFiles, blockchainConfig, contractsConfig, chainManager) {
1414
//this.blockchainConfig = (new Config.Blockchain()).loadConfigFile('config/blockchain.yml').config(env);
1515
this.blockchainConfig = blockchainConfig;
16+
this.chainManager = chainManager;
17+
this.chainManager.init(env, this.blockchainConfig);
1618

1719
//this.contractsManager = (new Config.Contracts(contractFiles, blockchainConfig)).loadConfigFile('config/contracts.yml');
1820
this.contractsManager = contractsConfig;

lib/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Embark = {
2222
this.blockchainConfig = (new Config.Blockchain());
2323
this.compiler = (new Compiler(this.blockchainConfig));
2424
this.contractsConfig = (new Config.Contracts(this.blockchainConfig, this.compiler));
25+
this.chainManager = (new ChainManager());
2526
},
2627

2728
tests: function(contractFiles) {
@@ -33,9 +34,11 @@ Embark = {
3334
chain.startChain(use_tmp);
3435
},
3536

36-
deployContracts: function(env, contractFiles, destFile) {
37+
deployContracts: function(env, contractFiles, destFile, chainFile) {
3738
this.contractsConfig.init(contractFiles, env);
38-
var deploy = new Deploy(env, contractFiles, this.blockchainConfig.config(env), this.contractsConfig);
39+
40+
this.chainManager.loadConfigFile(chainFile)
41+
var deploy = new Deploy(env, contractFiles, this.blockchainConfig.config(env), this.contractsConfig, this.chainManager);
3942
deploy.deploy_contracts(env);
4043
return deploy.generate_abi_file(destFile);
4144
},

test/chain_manager.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ var ChainManager = require('../lib/chain_manager.js');
22
var Config = require('../lib/config/config.js');
33
var Blockchain = require('../lib/blockchain.js');
44
var assert = require('assert');
5+
var fs = require('fs');
56

67
describe('embark.chain_manager', function() {
7-
var chainManager = (new ChainManager()).loadConfigFile('./test/support/chain_manager.json');
8-
var blockchainConfig = (new Config.Blockchain()).loadConfigFile('test/support/blockchain.yml');
8+
var chainFile = './test/support/chain_manager.json';
9+
fs.writeFileSync(chainFile, '{}');
10+
11+
var chainManager = (new ChainManager()).loadConfigFile(chainFile);
12+
var blockchainConfig = (new Config.Blockchain()).loadConfigFile('test/support/blockchain.yml').config('development');
913

1014
describe('#init', function() {
1115
chainManager.init('development', blockchainConfig);
@@ -41,4 +45,16 @@ describe('embark.chain_manager', function() {
4145

4246
});
4347

48+
describe('#save', function() {
49+
50+
it('should save changes in the chain', function() {
51+
chainManager.save();
52+
53+
var chainFile = './test/support/chain_manager.json';
54+
var content = fs.readFileSync(chainFile).toString();
55+
assert.equal(content, '{"0x629e768beb87dc8c54a475d310a7196e86c97d0006e5a6d34a8217726c90223f":{"contracts":{"d7190eb194ff9494625514b6d178c87f99c5973e28c398969d2233f2960a573e":{"name":"Foo","address":"0x123"}}}}');
56+
});
57+
58+
});
59+
4460
});

test/deploy.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ setDeployConfig = function(config) {
99
var blockchainConfig = _blockchainConfig.config("development");
1010
var compiler = new Compiler(_blockchainConfig);
1111
var contractsConfig = new Config.Contracts(blockchainConfig, compiler);
12+
var chainManager = (new ChainManager()).loadConfigFile('./test/support/chain_manager.json');
1213
contractsConfig.loadConfigFile(config.contracts);
1314
contractsConfig.init(config.files, 'development');
1415
compiler.init('development');
15-
return new Deploy('development', config.files, blockchainConfig, contractsConfig);
16+
return new Deploy('development', config.files, blockchainConfig, contractsConfig, chainManager);
1617
}
1718

1819
describe('embark.deploy', function() {

test/support/chain_manager.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{}
1+
{"0x629e768beb87dc8c54a475d310a7196e86c97d0006e5a6d34a8217726c90223f":{"contracts":{"d7190eb194ff9494625514b6d178c87f99c5973e28c398969d2233f2960a573e":{"name":"Foo","address":"0x123"}}}}

0 commit comments

Comments
 (0)