diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 286fe0d4e..52dc50931 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -522,10 +522,10 @@ docker-build: script: - if [ "$CI_BUILD_REF_NAME" == "beta-release" ]; then DOCKER_TAG="latest"; else DOCKER_TAG=$CI_BUILD_REF_NAME; fi - docker login -u $Docker_Hub_User -p $Docker_Hub_Pass - - sh scripts/docker-build.sh $DOCKER_TAG + - sh scripts/docker-build.sh $DOCKER_TAG ethcore - docker logout - docker login -u $Docker_Hub_User_Parity -p $Docker_Hub_Pass_Parity - - sh scripts/docker-build.sh $DOCKER_TAG + - sh scripts/docker-build.sh $DOCKER_TAG parity - docker logout tags: - docker diff --git a/Cargo.lock b/Cargo.lock index 9d4d7a458..a6fb6ca6b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1778,7 +1778,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/paritytech/js-precompiled.git#15530d00f0a48462e764a909e15a0c74870b1fad" +source = "git+https://github.com/paritytech/js-precompiled.git#4ad25201e9bc25a3873fd1e7a6d8a7b49861c946" 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 17a98eeb7..2bbbb9945 100644 --- a/js/package.json +++ b/js/package.json @@ -1,6 +1,6 @@ { "name": "parity.js", - "version": "1.7.65", + "version": "1.7.66", "main": "release/index.js", "jsnext:main": "src/index.js", "author": "Parity Team ", diff --git a/js/src/api/rpc/parity/parity.js b/js/src/api/rpc/parity/parity.js index 53610545a..674091563 100644 --- a/js/src/api/rpc/parity/parity.js +++ b/js/src/api/rpc/parity/parity.js @@ -70,11 +70,21 @@ export default class Parity { .execute('parity_checkRequest', inNumber16(requestId)); } + cidV0 (data) { + return this._transport + .execute('parity_cidV0', inData(data)); + } + closeVault (vaultName) { return this._transport .execute('parity_closeVault', vaultName); } + composeTransaction (options) { + return this._transport + .execute('parity_composeTransaction', inOptions(options)); + } + consensusCapability () { return this._transport .execute('parity_consensusCapability'); diff --git a/js/src/jsonrpc/interfaces/parity.js b/js/src/jsonrpc/interfaces/parity.js index 797052037..6ab5ea212 100644 --- a/js/src/jsonrpc/interfaces/parity.js +++ b/js/src/jsonrpc/interfaces/parity.js @@ -296,19 +296,6 @@ export default { } }, - getBlockHeaderByNumber: { - section: SECTION_NET, - desc: 'Returns block header information by number (same as eth_getBlockByNumber without transactions and uncles)', - params: [ - { - type: BlockNumber, - desc: 'integer of a block number, or the string `\'earliest\'`, `\'latest\'` or `\'pending\'`, as in the [default block parameter](#the-default-block-parameter).', - example: fromDecimal(436) - } - ], - returns: 'See [eth_getBlockByHash](#eth_getblockbyhash) (without transactions and uncles)' - }, - getVaultMeta: { section: SECTION_VAULT, desc: 'Returns the metadata for a specific vault', @@ -1927,5 +1914,87 @@ export default { desc: 'Message signature.', example: '0x1d9e33a8cf8bfc089a172bca01da462f9e359c6cb1b0f29398bc884e4d18df4f78588aee4fb5cc067ca62d2abab995e0bba29527be6ac98105b0320020a2efaf00' } + }, + + composeTransaction: { + desc: 'Given partial transaction request produces transaction with all fields filled in. Such transaction can be then signed externally.', + params: [ + { + type: TransactionRequest, + desc: 'see [`eth_sendTransaction`](JSONRPC-eth-module#eth_sendtransaction).', + format: 'inputCallFormatter', + example: { + from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', + to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567', + value: fromDecimal(2441406250) + } + } + ], + returns: { + type: Object, + desc: 'Transaction object (same as the parameter) with missing optional fields filled in by defaults.', + example: { + condition: null, + data: '0x', + from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', + gas: '0xe57e0', + gasPrice: '0x4a817c800', + nonce: '0x0', + to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567', + value: '0x9184e72a' + } + } + }, + + getBlockHeaderByNumber: { + desc: 'Get block header. Same as [`eth_getBlockByNumber`](JSONRPC-eth-module#eth_getblockbynumber) but without uncles and transactions.', + params: [ + { + type: BlockNumber, + desc: 'integer of a block number, or the string `\'earliest\'`, `\'latest\'` or `\'pending\'`, as in the [default block parameter](#the-default-block-parameter).', + example: fromDecimal(436) + } + ], + returns: { + type: Object, + desc: 'Block header', + example: { + author: '0xbb7b8287f3f0a933474a79eae42cbca977791171', + difficulty: '0x4ea3f27bc', + extraData: '0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32', + gasLimit: '0x1388', + gasUsed: '0x0', + hash: '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + miner: '0xbb7b8287f3f0a933474a79eae42cbca977791171', + mixHash: '0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843', + nonce: '0x689056015818adbe', + number: '0x1b4', + parentHash: '0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54', + receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', + sealFields: ['0xa04fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843', '0x88689056015818adbe'], + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + size: '0x21b', + stateRoot: '0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d', + timestamp: '0x55ba467c', + transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421' + } + } + }, + + cidV0: { + desc: 'Compute a v0 IPFS Content ID from protobuf encoded bytes.', + params: [ + { + type: Data, + desc: 'to encode.', + example: '0x666f6f626172' + } + ], + returns: { + type: String, + desc: 'Base58 encoded CID', + example: 'QmSbFjqjd6nFwNHqsBCC7SK8GShGcayLUEtysJjNGhZAnC' + } } }; diff --git a/js/src/redux/providers/certifications/middleware.js b/js/src/redux/providers/certifications/middleware.js index b494b75d2..9ca790add 100644 --- a/js/src/redux/providers/certifications/middleware.js +++ b/js/src/redux/providers/certifications/middleware.js @@ -128,7 +128,8 @@ export default class CertificationsMiddleware { return badgeReg.getContract() .then((badgeRegContract) => { logs = badgeRegContract.parseEventLogs(logs); - const ids = logs.map((log) => log.params.id.value.toNumber()); + + const ids = logs.map((log) => log.params && log.params.id.value.toNumber()); return fetchCertifiers(uniq(ids)); }); diff --git a/js/src/serviceWorker.js b/js/src/serviceWorker.js index 5bdcb4dab..cf53dcd46 100644 --- a/js/src/serviceWorker.js +++ b/js/src/serviceWorker.js @@ -16,13 +16,11 @@ import toolbox from 'sw-toolbox'; -toolbox.precache(self.serviceWorkerOption.assets); - /** * Cache the SOLC files : if not available, make a network request */ -toolbox.router.any(/raw.githubusercontent.com\/ethereum\/solc-bin(.+)list\.json$/, toolbox.cacheFirst); -toolbox.router.any(/raw.githubusercontent.com\/ethereum\/solc-bin(.+)soljson(.+)\.js$/, toolbox.cacheFirst); +toolbox.router.any(/rawgit.com\/ethereum\/solc-bin(.+)list\.json$/, toolbox.networkFirst); +toolbox.router.any(/rawgit.com\/ethereum\/solc-bin(.+)soljson(.+)\.js$/, toolbox.cacheFirst); self.addEventListener('install', (event) => { event.waitUntil(self.skipWaiting()); diff --git a/js/src/shell/ParityBar/parityBar.js b/js/src/shell/ParityBar/parityBar.js index a5cd32c14..9b8fa8076 100644 --- a/js/src/shell/ParityBar/parityBar.js +++ b/js/src/shell/ParityBar/parityBar.js @@ -83,7 +83,10 @@ class ParityBar extends Component { dappsStore .on('loaded', (app) => { this.app = app; - this.loadPosition(); + + if (this.props.dapp) { + this.loadPosition(); + } }); if (this.props.dapp) { diff --git a/js/src/util/solidity.js b/js/src/util/solidity.js index 120c2b736..7309e8072 100644 --- a/js/src/util/solidity.js +++ b/js/src/util/solidity.js @@ -52,21 +52,9 @@ export default class SolidityUtils { static getCompiler (build) { const { longVersion, path } = build; - const URL = `https://raw.githubusercontent.com/ethereum/solc-bin/gh-pages/bin/${path}`; + const URL = `https://cdn.rawgit.com/ethereum/solc-bin/gh-pages/bin/${path}`; const isWorker = typeof window !== 'object'; - if (isWorker) { - return new Promise((resolve, reject) => { - self.importScripts(URL); - - setTimeout(() => { - const compiler = solc(self.Module); - - return resolve(compiler); - }, 50); - }); - } - return fetch(URL) .then((r) => r.text()) .then((code) => { diff --git a/js/src/views/Contract/contract.js b/js/src/views/Contract/contract.js index 5ceca3139..d3006e414 100644 --- a/js/src/views/Contract/contract.js +++ b/js/src/views/Contract/contract.js @@ -102,8 +102,14 @@ class Contract extends Component { const { api } = this.context; const { subscriptionId, blockSubscriptionId, contract } = this.state; - api.unsubscribe(blockSubscriptionId); - contract.unsubscribe(subscriptionId); + if (blockSubscriptionId >= 0) { + api.unsubscribe(blockSubscriptionId); + } + + if (subscriptionId >= 0) { + contract.unsubscribe(subscriptionId); + } + this.props.setVisibleAccounts([]); } diff --git a/js/src/views/ContractDevelop/contractDevelop.js b/js/src/views/ContractDevelop/contractDevelop.js index c5410b39b..1af924f0e 100644 --- a/js/src/views/ContractDevelop/contractDevelop.js +++ b/js/src/views/ContractDevelop/contractDevelop.js @@ -273,24 +273,6 @@ class ContractDevelop extends Component { renderParameters () { const { compiling, contract, selectedBuild, loading, workerError } = this.store; - if (workerError) { - return ( -
-
-

- -

-
- { workerError.toString() } -
-
-
- ); - } - if (selectedBuild < 0) { return (
@@ -308,10 +290,28 @@ class ContractDevelop extends Component { ); } - if (loading) { + let content; + + if (workerError) { + content = ( +
+
+

+ +

+
+ { workerError.toString() } +
+
+
+ ); + } else if (loading) { const { longVersion } = this.store.builds[selectedBuild]; - return ( + content = (
); + } else { + content = this.renderCompilation(); } return ( @@ -394,7 +396,7 @@ class ContractDevelop extends Component {
{ this.renderSolidityVersions() } - { this.renderCompilation() } + { content } ); } diff --git a/js/src/views/ContractDevelop/store.js b/js/src/views/ContractDevelop/store.js index cf2154548..4d305b34e 100644 --- a/js/src/views/ContractDevelop/store.js +++ b/js/src/views/ContractDevelop/store.js @@ -24,7 +24,7 @@ import { sha3 } from '@parity/api/util/sha3'; import SolidityUtils from '~/util/solidity'; -const SOLIDITY_LIST_URL = 'https://raw.githubusercontent.com/ethereum/solc-bin/gh-pages/bin/list.json'; +const SOLIDITY_LIST_URL = 'https://rawgit.com/ethereum/solc-bin/gh-pages/bin/list.json'; const WRITE_CONTRACT_STORE_KEY = '_parity::contractDevelop'; const SNIPPETS = { @@ -198,6 +198,7 @@ export default class ContractDevelopStore { }) .catch((error) => { this.setWorkerError(error); + throw error; }); } @@ -319,6 +320,7 @@ export default class ContractDevelopStore { transaction(() => { this.compiled = false; this.compiling = true; + this.setWorkerError(null); }); const build = this.builds[this.selectedBuild]; @@ -366,12 +368,16 @@ export default class ContractDevelopStore { annotations, contracts, errors } = data.result; - this.contract = contract; - this.contractIndex = contractIndex; + if (!contract && errors && errors.length > 0) { + this.setWorkerError(errors[0]); + } else { + this.contract = contract; + this.contractIndex = contractIndex; - this.annotations = annotations; - this.contracts = contracts; - this.errors = errors; + this.annotations = annotations; + this.contracts = contracts; + this.errors = errors; + } } this.compiled = true; diff --git a/js/src/webWorker.js b/js/src/webWorker.js index 838382acf..115c61414 100644 --- a/js/src/webWorker.js +++ b/js/src/webWorker.js @@ -22,7 +22,10 @@ registerPromiseWorker((msg) => { return handleMessage(msg); }); -self.solc = {}; +self.compiler = { + version: null, + compiler: null +}; self.files = {}; function handleMessage (message) { @@ -57,7 +60,16 @@ function compile (data) { return getCompiler(build) .then((compiler) => { + console.warn('compiling'); return SolidityUtils.compile(data, compiler); + }) + .then((result) => { + console.warn('result in worker', result); + return result; + }) + .catch((error) => { + console.error('error in worker', error); + throw error; }); } @@ -79,14 +91,18 @@ function setFiles (files) { function getCompiler (build) { const { longVersion } = build; - if (!self.solc[longVersion]) { - self.solc[longVersion] = SolidityUtils + if (self.compiler.version !== longVersion) { + self.compiler.version = longVersion; + self.compiler.compiler = SolidityUtils .getCompiler(build) .then((compiler) => { - self.solc[longVersion] = compiler; + if (self.compiler.version === longVersion) { + self.compiler.compiler = compiler; + } + return compiler; }); } - return Promise.resolve(self.solc[longVersion]); + return Promise.resolve(self.compiler.compiler); } diff --git a/rpc/src/v1/traits/personal.rs b/rpc/src/v1/traits/personal.rs index a0a8cf1a4..f62f5ce7b 100644 --- a/rpc/src/v1/traits/personal.rs +++ b/rpc/src/v1/traits/personal.rs @@ -43,7 +43,7 @@ build_rpc_trait! { #[rpc(meta, name = "personal_sendTransaction")] fn send_transaction(&self, Self::Metadata, TransactionRequest, String) -> BoxFuture; - /// Deprecated alias for `personal_sendTransaction`. + /// @deprecated alias for `personal_sendTransaction`. #[rpc(meta, name = "personal_signAndSendTransaction")] fn sign_and_send_transaction(&self, Self::Metadata, TransactionRequest, String) -> BoxFuture; diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh index 70bc85912..c83912080 100644 --- a/scripts/docker-build.sh +++ b/scripts/docker-build.sh @@ -1,4 +1,5 @@ #!/bin/bash cd docker/hub if [ "$1" == "latest" ]; then DOCKER_BUILD_TAG="beta-release"; fi -docker build --build-arg BUILD_TAG=$DOCKER_BUILD_TAG --no-cache=true --tag ethcore/parity:$1 . +docker build --build-arg BUILD_TAG=$DOCKER_BUILD_TAG --no-cache=true --tag $2/parity:$1 . +docker push $2/parity:$1