WIP: IPFS cleanup #107

Closed
fsmanuel wants to merge 3 commits from fix/ipfs-config into master
3 changed files with 23 additions and 6 deletions

View File

@ -41,12 +41,15 @@ class Kredits {
this.abis = abis || ABIS; this.abis = abis || ABIS;
this.ipfs = new IPFS(ipfsConfig); this.ipfs = new IPFS(ipfsConfig);
this.contracts = {}; this.contracts = {};
this.networkId = null;
} }
init (names) { init (names) {
let contractsToLoad = names || APP_CONTRACTS; let contractsToLoad = names || APP_CONTRACTS;
return this.provider.getNetwork().then(network => { return this.provider.getNetwork().then(network => {
this.addresses['Kernel'] = this.addresses['Kernel'] || DaoAddresses[network.chainId.toString()]; this.networkId = network.chainId.toString();
this.addresses['Kernel'] = this.addresses['Kernel'] || DaoAddresses[this.networkId];
let addressPromises = contractsToLoad.map((contractName) => { let addressPromises = contractsToLoad.map((contractName) => {
return this.Kernel.getApp(contractName).then((address) => { return this.Kernel.getApp(contractName).then((address) => {
this.addresses[contractName] = address; this.addresses[contractName] = address;

View File

@ -10,6 +10,14 @@ class IPFS {
this._config = config; this._config = config;
} }
get config () {
return this._config;
}
get peerId () {
return this._ipfsAPI.id();
}
catAndMerge (data, deserialize) { catAndMerge (data, deserialize) {
// if no hash details are found simply return the data; nothing to merge // if no hash details are found simply return the data; nothing to merge
if (!data.hashSize || data.hashSize === 0) { if (!data.hashSize || data.hashSize === 0) {

View File

@ -4,22 +4,28 @@ class Preflight {
} }
check () { check () {
return this.kredits.ipfs._ipfsAPI.id() return this.kredits.ipfs.peerId()
.catch((error) => { .catch((error) => {
throw new Error(`IPFS node not available; config: ${JSON.stringify(this.kredits.ipfs.config)} - ${error.message}`); const ipfsConfig = JSON.stringify(this.kredits.ipfs.config);
throw new Error(`IPFS node not available; config: ${ipfsConfig} - ${error.message}`);
}) })
.then(() => { .then(() => {
let promises = Object.keys(this.kredits.contracts).map((name) => { let promises = Object.keys(this.kredits.contracts).map((name) => {
let contractWrapper = this.kredits.contracts[name]; let address = this.kredits.contracts[name].contract.address;
return this.kredits.provider.getCode(contractWrapper.contract.address).then((code) => {
// TODO: I think this throws the error: Error: contract not deployed
// I guess we don't need that if check anymore...
return this.kredits.provider.getCode(address).then((code) => {
// not sure if we always get the same return value if the code is not available // not sure if we always get the same return value if the code is not available
// so checking if it is < 5 long // so checking if it is < 5 long
if (code === '0x00' || code.length < 5) { if (code === '0x00' || code.length < 5) {
throw new Error(`Contract for: ${name} not found at ${contractWrapper.contract.address} on network ${this.kredits.provider.chainId}`); throw new Error(`Contract for: ${name} not found at ${address} on network ${this.kredits.networkId}`);
} }
return true; return true;
}); });
}); });
return Promise.all(promises); return Promise.all(promises);
}); });
} }