From df9096df80e371bab5b3169bbed33cb5cdccc7b4 Mon Sep 17 00:00:00 2001 From: Nicolas Gotchac Date: Tue, 9 May 2017 12:55:35 +0200 Subject: [PATCH 1/6] Fix Multisig wallet settings (#5560) * Improve add/remove owner in Wallet (use changeOwner) * fix linting --- .../modals/WalletSettings/walletSettings.js | 46 +++++++++++++++--- .../WalletSettings/walletSettingsStore.js | 47 +++++++++++++++---- 2 files changed, 78 insertions(+), 15 deletions(-) diff --git a/js/src/modals/WalletSettings/walletSettings.js b/js/src/modals/WalletSettings/walletSettings.js index 359dca697..1984e6213 100644 --- a/js/src/modals/WalletSettings/walletSettings.js +++ b/js/src/modals/WalletSettings/walletSettings.js @@ -246,8 +246,6 @@ class WalletSettings extends Component { } renderChange (change) { - const { accountsInfo } = this.props; - switch (change.type) { case 'dailylimit': return ( @@ -278,14 +276,50 @@ class WalletSettings extends Component { id='walletSettings.ownersChange.details' defaultMessage=' from {from} to {to} ' values={ { - from: change.initial.toNumber(), - to: change.value.toNumber() + from: { change.initial.toNumber() }, + to: { change.value.toNumber() } } } /> ); + case 'change_owner': + return ( +
+
+ +
+
+ + } + text + value={ change.value.from } + /> + + } + text + value={ change.value.to } + /> +
+
+ ); + case 'add_owner': return (
@@ -298,8 +332,8 @@ class WalletSettings extends Component {
@@ -317,8 +351,8 @@ class WalletSettings extends Component {
diff --git a/js/src/modals/WalletSettings/walletSettingsStore.js b/js/src/modals/WalletSettings/walletSettingsStore.js index b4ae8fc9a..d31ec9eb2 100644 --- a/js/src/modals/WalletSettings/walletSettingsStore.js +++ b/js/src/modals/WalletSettings/walletSettingsStore.js @@ -78,12 +78,16 @@ export default class WalletSettingsStore { const changes = data.map((datum) => { const [ type, valueStr ] = datum.split(';'); - let value = valueStr; + let value; - // Only addresses start with `0x`, the others - // are BigNumbers - if (!/^0x/.test(valueStr)) { - value = new BigNumber(valueStr, 16); + if (/^#BN#/.test(valueStr)) { + value = new BigNumber(valueStr.replace(/^#BN#/, ''), 16); + } else { + try { + value = JSON.parse(valueStr); + } catch (e) { + value = valueStr; + } } return { type, value }; @@ -104,8 +108,8 @@ export default class WalletSettingsStore { const { type, value } = change; const valueStr = (value && typeof value.plus === 'function') - ? value.toString(16) - : value; + ? '#BN#' + value.toString(16) + : JSON.stringify(value); return [ type, @@ -147,14 +151,26 @@ export default class WalletSettingsStore { const ownersToRemove = prevOwners.filter((owner) => !nextOwners.includes(owner)); const ownersToAdd = nextOwners.filter((owner) => !prevOwners.includes(owner)); - ownersToRemove.forEach((owner) => { + const ownersChangeCount = Math.min(ownersToRemove.length, ownersToAdd.length); + + for (let i = 0; i < ownersChangeCount; i++) { + changes.push({ + type: 'change_owner', + value: { + from: ownersToRemove[i], + to: ownersToAdd[i] + } + }); + } + + ownersToRemove.slice(ownersChangeCount).forEach((owner) => { changes.push({ type: 'remove_owner', value: owner }); }); - ownersToAdd.forEach((owner) => { + ownersToAdd.slice(ownersChangeCount).forEach((owner) => { changes.push({ type: 'add_owner', value: owner @@ -182,6 +198,12 @@ export default class WalletSettingsStore { this.wallet.require = value; break; + case 'change_owner': + this.wallet.owners = this.wallet.owners + .filter((owner) => owner !== value.from) + .concat(value.to); + break; + case 'remove_owner': this.wallet.owners = this.wallet.owners.filter((owner) => owner !== value); break; @@ -309,6 +331,13 @@ export default class WalletSettingsStore { }; } + if (change.type === 'change_owner') { + return { + method: walletInstance.changeOwner, + values: [ change.value.from, change.value.to ] + }; + } + if (change.type === 'remove_owner') { return { method: walletInstance.removeOwner, From 1288b4b28ff1b874b02fc47c724e3b658b498fc9 Mon Sep 17 00:00:00 2001 From: Nicolas Gotchac Date: Tue, 9 May 2017 12:55:52 +0200 Subject: [PATCH 2/6] Do not convert to Dates twice (#5563) * Don't convert Dates twice * Take string dates into account --- js/src/api/format/output.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/js/src/api/format/output.js b/js/src/api/format/output.js index df40b59a0..7bf39d17c 100644 --- a/js/src/api/format/output.js +++ b/js/src/api/format/output.js @@ -92,6 +92,16 @@ export function outChainStatus (status) { } export function outDate (date) { + if (typeof date.toISOString === 'function') { + return date; + } + + try { + if (typeof date === 'string' && (new Date(date)).toISOString() === date) { + return new Date(date); + } + } catch (error) {} + return new Date(outNumber(date).toNumber() * 1000); } From c5116e5049016eb65b50c92d3d84b6a5f8a2c08a Mon Sep 17 00:00:00 2001 From: Nicolas Gotchac Date: Tue, 9 May 2017 12:56:08 +0200 Subject: [PATCH 3/6] Fix event params decoding when no names for parameters #5409 (#5567) --- js/src/abi/spec/event/event.js | 6 +++--- js/src/api/contract/contract.js | 5 +++-- js/src/views/Contract/Events/Event/event.js | 7 ++++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/js/src/abi/spec/event/event.js b/js/src/abi/spec/event/event.js index 071a73965..604f58cb1 100644 --- a/js/src/abi/spec/event/event.js +++ b/js/src/abi/spec/event/event.js @@ -99,15 +99,15 @@ export default class Event { const namedTokens = {}; topicParams.forEach((param, idx) => { - namedTokens[param.name] = topicTokens[idx]; + namedTokens[param.name || idx] = topicTokens[idx]; }); dataParams.forEach((param, idx) => { - namedTokens[param.name] = dataTokens[idx]; + namedTokens[param.name || idx] = dataTokens[idx]; }); const inputParamTypes = this.inputParamTypes(); const decodedParams = this.inputParamNames() - .map((name, idx) => new DecodedLogParam(name, inputParamTypes[idx], namedTokens[name])); + .map((name, idx) => new DecodedLogParam(name, inputParamTypes[idx], namedTokens[name || idx])); return new DecodedLog(decodedParams, address); } diff --git a/js/src/api/contract/contract.js b/js/src/api/contract/contract.js index 2156b8af1..0aff05684 100644 --- a/js/src/api/contract/contract.js +++ b/js/src/api/contract/contract.js @@ -182,10 +182,11 @@ export default class Contract { log.params = {}; log.event = event.name; - decoded.params.forEach((param) => { + decoded.params.forEach((param, index) => { const { type, value } = param.token; + const key = param.name || index; - log.params[param.name] = { type, value }; + log.params[key] = { type, value }; }); return log; diff --git a/js/src/views/Contract/Events/Event/event.js b/js/src/views/Contract/Events/Event/event.js index eb370e7f1..fc2436f8e 100644 --- a/js/src/views/Contract/Events/Event/event.js +++ b/js/src/views/Contract/Events/Event/event.js @@ -112,11 +112,16 @@ export default class Event extends Component { } renderParam (name, param) { + // Don't add a label id the name is an index key (ie. a Number) + const label = parseInt(name).toString() === name.toString() + ? undefined + : name; + return ( Date: Tue, 9 May 2017 12:56:20 +0200 Subject: [PATCH 4/6] Remove formal verification messages (#5574) --- js/src/views/WriteContract/writeContractStore.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/js/src/views/WriteContract/writeContractStore.js b/js/src/views/WriteContract/writeContractStore.js index 1a1a26b99..886d8afa4 100644 --- a/js/src/views/WriteContract/writeContractStore.js +++ b/js/src/views/WriteContract/writeContractStore.js @@ -397,11 +397,10 @@ export default class WriteContractStore { const { errors = [] } = data; const errorAnnotations = this.parseErrors(errors); - const formalAnnotations = this.parseErrors(data.formal && data.formal.errors, true); + // const formalAnnotations = this.parseErrors(data.formal && data.formal.errors, true); const annotations = [].concat( - errorAnnotations, - formalAnnotations + errorAnnotations ); const contractKeys = Object.keys(contracts || {}); From e5ff36f1f11a89b3c2875c0307e4a10bb4b3c710 Mon Sep 17 00:00:00 2001 From: Nicolas Gotchac Date: Tue, 9 May 2017 12:56:35 +0200 Subject: [PATCH 5/6] Load the sources immediatly in Contract Dev (#5575) --- js/src/views/WriteContract/writeContractStore.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/js/src/views/WriteContract/writeContractStore.js b/js/src/views/WriteContract/writeContractStore.js index 886d8afa4..289f2d2ba 100644 --- a/js/src/views/WriteContract/writeContractStore.js +++ b/js/src/views/WriteContract/writeContractStore.js @@ -139,9 +139,10 @@ export default class WriteContractStore { this.worker = worker; - this - .fetchSolidityVersions() - .then(() => this.reloadContracts()); + return Promise.all([ + this.fetchSolidityVersions(), + this.reloadContracts(undefined, undefined, false) + ]); } fetchSolidityVersions () { @@ -492,7 +493,7 @@ export default class WriteContractStore { this.reloadContracts(cId); } - @action reloadContracts = (id, sourcecode) => { + @action reloadContracts = (id, sourcecode, recompile = true) => { const localStore = store.get(WRITE_CONTRACT_STORE_KEY) || {}; this.savedContracts = localStore.saved || {}; @@ -512,7 +513,9 @@ export default class WriteContractStore { this.resizeEditor(); - return this.handleCompile(); + if (recompile) { + return this.handleCompile(); + } } @action handleLoadContract = (contract) => { From 99474939776d1b2f9e72ea37026c70268f55d2f2 Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Tue, 9 May 2017 11:25:44 +0000 Subject: [PATCH 6/6] [ci skip] js-precompiled 20170509-112134 --- Cargo.lock | 2 +- js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e92bae295..9b9710967 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1781,7 +1781,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/paritytech/js-precompiled.git#b6fbfc59f044546ccd3b928fb17daa3812ae856e" +source = "git+https://github.com/paritytech/js-precompiled.git#0826776d9190ee6945bfe481e10b19ec05b3a049" dependencies = [ "parity-dapps-glue 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/js/package.json b/js/package.json index 4aaa18e15..3e711324b 100644 --- a/js/package.json +++ b/js/package.json @@ -1,6 +1,6 @@ { "name": "parity.js", - "version": "1.7.68", + "version": "1.7.69", "main": "release/index.js", "jsnext:main": "src/index.js", "author": "Parity Team ",