mirror of https://github.com/embarklabs/embark.git
fix 337; support contract references in array arguments
This commit is contained in:
parent
da7e5747f9
commit
ac79cef97b
|
@ -146,6 +146,8 @@ class ContractsManager {
|
||||||
self.logger.trace(self.contracts);
|
self.logger.trace(self.contracts);
|
||||||
callback();
|
callback();
|
||||||
},
|
},
|
||||||
|
/*eslint complexity: ["error", 16]*/
|
||||||
|
/*eslint max-depth: ["error", 16]*/
|
||||||
function determineDependencies(callback) {
|
function determineDependencies(callback) {
|
||||||
let className, contract;
|
let className, contract;
|
||||||
for (className in self.contracts) {
|
for (className in self.contracts) {
|
||||||
|
@ -167,6 +169,14 @@ class ContractsManager {
|
||||||
self.contractDependencies[className] = self.contractDependencies[className] || [];
|
self.contractDependencies[className] = self.contractDependencies[className] || [];
|
||||||
self.contractDependencies[className].push(arg.substr(1));
|
self.contractDependencies[className].push(arg.substr(1));
|
||||||
}
|
}
|
||||||
|
if (Array.isArray(arg)) {
|
||||||
|
for (let sub_arg of arg) {
|
||||||
|
if (sub_arg[0] === "$") {
|
||||||
|
self.contractDependencies[className] = self.contractDependencies[className] || [];
|
||||||
|
self.contractDependencies[className].push(sub_arg.substr(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// look in onDeploy for dependencies
|
// look in onDeploy for dependencies
|
||||||
|
|
|
@ -33,6 +33,18 @@ class Deploy {
|
||||||
contractName = arg.substr(1);
|
contractName = arg.substr(1);
|
||||||
referedContract = this.contractsManager.getContract(contractName);
|
referedContract = this.contractsManager.getContract(contractName);
|
||||||
realArgs.push(referedContract.deployedAddress);
|
realArgs.push(referedContract.deployedAddress);
|
||||||
|
} else if (Array.isArray(arg)) {
|
||||||
|
let subRealArgs = [];
|
||||||
|
for (let sub_arg of arg) {
|
||||||
|
if (sub_arg[0] === "$") {
|
||||||
|
contractName = sub_arg.substr(1);
|
||||||
|
referedContract = this.contractsManager.getContract(contractName);
|
||||||
|
subRealArgs.push(referedContract.deployedAddress);
|
||||||
|
} else {
|
||||||
|
subRealArgs.push(sub_arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
realArgs.push(subRealArgs);
|
||||||
} else {
|
} else {
|
||||||
realArgs.push(arg);
|
realArgs.push(arg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,9 @@ contract SomeContract {
|
||||||
|
|
||||||
function() public payable { }
|
function() public payable { }
|
||||||
|
|
||||||
function SomeContract(address _addresses, uint initialValue) public {
|
function SomeContract(address[] _addresses, uint initialValue) public {
|
||||||
//addr_1 = _addresses[0];
|
addr_1 = _addresses[0];
|
||||||
//addr_2 = _addresses[1];
|
addr_2 = _addresses[1];
|
||||||
value = initialValue;
|
value = initialValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,12 @@
|
||||||
},
|
},
|
||||||
"MyToken3": {
|
"MyToken3": {
|
||||||
"instanceOf": "Tokn"
|
"instanceOf": "Tokn"
|
||||||
|
},
|
||||||
|
"SomeContract": {
|
||||||
|
"args": [
|
||||||
|
["$MyToken2", "$SimpleStorage"],
|
||||||
|
100
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"afterDeploy": [
|
"afterDeploy": [
|
||||||
|
|
|
@ -19,6 +19,12 @@ contract("AnotherStorage", function() {
|
||||||
"MyToken2": {
|
"MyToken2": {
|
||||||
instanceOf: "Token",
|
instanceOf: "Token",
|
||||||
args: [2000]
|
args: [2000]
|
||||||
|
},
|
||||||
|
"SomeContract": {
|
||||||
|
"args": [
|
||||||
|
["$MyToken2", "$SimpleStorage"],
|
||||||
|
100
|
||||||
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
EmbarkSpec.deployAll(contractsConfig, () => { done() });
|
EmbarkSpec.deployAll(contractsConfig, () => { done() });
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
contract("SomeContract", function() {
|
||||||
|
this.timeout(0);
|
||||||
|
before(function(done) {
|
||||||
|
this.timeout(0);
|
||||||
|
var contractsConfig = {
|
||||||
|
"SimpleStorage": {
|
||||||
|
args: [100]
|
||||||
|
},
|
||||||
|
"AnotherStorage": {
|
||||||
|
args: ["$SimpleStorage"]
|
||||||
|
},
|
||||||
|
"Token": {
|
||||||
|
deploy: false,
|
||||||
|
args: [1000]
|
||||||
|
},
|
||||||
|
"MyToken": {
|
||||||
|
instanceOf: "Token"
|
||||||
|
},
|
||||||
|
"MyToken2": {
|
||||||
|
instanceOf: "Token",
|
||||||
|
args: [2000]
|
||||||
|
},
|
||||||
|
"SomeContract": {
|
||||||
|
"args": [
|
||||||
|
["$MyToken2", "$SimpleStorage"],
|
||||||
|
100
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
EmbarkSpec.deployAll(contractsConfig, () => { done() });
|
||||||
|
});
|
||||||
|
|
||||||
|
it("set MyToken2 address", function(done) {
|
||||||
|
SomeContract.methods.addr_1().call().then(function(address) {
|
||||||
|
assert.equal(address, MyToken2.options.address);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("set SimpleStorage address", function(done) {
|
||||||
|
SomeContract.methods.addr_2().call().then(function(address) {
|
||||||
|
assert.equal(address, SimpleStorage.options.address);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
|
@ -24,6 +24,12 @@ contract("Test", function() {
|
||||||
"MyToken2": {
|
"MyToken2": {
|
||||||
instanceOf: "Token",
|
instanceOf: "Token",
|
||||||
args: [2000]
|
args: [2000]
|
||||||
|
},
|
||||||
|
"SomeContract": {
|
||||||
|
"args": [
|
||||||
|
["$MyToken2", "$SimpleStorage"],
|
||||||
|
100
|
||||||
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,12 @@ contract("SimpleStorage", function() {
|
||||||
"MyToken2": {
|
"MyToken2": {
|
||||||
instanceOf: "Token",
|
instanceOf: "Token",
|
||||||
args: [2000]
|
args: [2000]
|
||||||
|
},
|
||||||
|
"SomeContract": {
|
||||||
|
"args": [
|
||||||
|
["$MyToken2", "$SimpleStorage"],
|
||||||
|
100
|
||||||
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
EmbarkSpec.deployAll(contractsConfig, () => { done() });
|
EmbarkSpec.deployAll(contractsConfig, () => { done() });
|
||||||
|
|
|
@ -35,6 +35,12 @@ describe("Token", function() {
|
||||||
onDeploy: [
|
onDeploy: [
|
||||||
"Test.methods.changeAddress('$MyToken').send()"
|
"Test.methods.changeAddress('$MyToken').send()"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"SomeContract": {
|
||||||
|
"args": [
|
||||||
|
["$MyToken2", "$SimpleStorage"],
|
||||||
|
100
|
||||||
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
EmbarkSpec.deployAll(contractsConfig, () => { done() });
|
EmbarkSpec.deployAll(contractsConfig, () => { done() });
|
||||||
|
|
Loading…
Reference in New Issue