diff --git a/js/package.json b/js/package.json
index 7e41d91de..3d30a8df5 100644
--- a/js/package.json
+++ b/js/package.json
@@ -162,6 +162,7 @@
"@parity/abi": "file:src/abi",
"@parity/api": "file:src/api",
"@parity/jsonrpc": "file:src/jsonrpc",
+ "@parity/shared": "file:src/shared",
"@parity/ui": "file:src/ui",
"@parity/wordlist": "1.0.1",
"base32.js": "0.1.0",
diff --git a/js/src/dapps/chaindeploy/_dapps.js b/js/src/dapps/chaindeploy/_dapps.js
index e9eaa83a8..8f32bb5e1 100644
--- a/js/src/dapps/chaindeploy/_dapps.js
+++ b/js/src/dapps/chaindeploy/_dapps.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import builtinsJson from '~/config/dappsBuiltin.json';
+import builtinsJson from '@parity/shared/config/dappsBuiltin.json';
const REGISTER_URLS = {
console: 'https://raw.githubusercontent.com/paritytech/console/3ea0dbfefded359ccdbea37bc4cf350c0aa16948/console.jpeg',
diff --git a/js/src/dapps/chaindeploy/contracts/badgereg.js b/js/src/dapps/chaindeploy/contracts/badgereg.js
index ccd6b28c1..2a1dc4012 100644
--- a/js/src/dapps/chaindeploy/contracts/badgereg.js
+++ b/js/src/dapps/chaindeploy/contracts/badgereg.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import abi from '~/contracts/abi/badgereg';
+import abi from '@parity/shared/contracts/abi/badgereg';
+
import { compiler, source as sourceUrl, output as byteCode } from './code/badgereg';
const id = 'badgereg';
diff --git a/js/src/dapps/chaindeploy/contracts/dappreg.js b/js/src/dapps/chaindeploy/contracts/dappreg.js
index 71379bf8b..7fd705455 100644
--- a/js/src/dapps/chaindeploy/contracts/dappreg.js
+++ b/js/src/dapps/chaindeploy/contracts/dappreg.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import abi from '~/contracts/abi/dappreg';
+import abi from '@parity/shared/contracts/abi/dappreg';
+
import { compiler, source as sourceUrl, output as byteCode } from './code/dappreg';
const id = 'dappreg'; // 7bbc4f1a27628781b96213e781a1b8eec6982c1db8fac739af6e4c5a55862c03
diff --git a/js/src/dapps/chaindeploy/contracts/gavcoin.js b/js/src/dapps/chaindeploy/contracts/gavcoin.js
index f7518ef53..ffbfe6e28 100644
--- a/js/src/dapps/chaindeploy/contracts/gavcoin.js
+++ b/js/src/dapps/chaindeploy/contracts/gavcoin.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import abi from '~/contracts/abi/gavcoin';
+import abi from '@parity/shared/contracts/abi/gavcoin';
+
import { compiler, source as sourceUrl, output as byteCode } from './code/gavcoin';
const isExternal = true;
diff --git a/js/src/dapps/chaindeploy/contracts/githubhint.js b/js/src/dapps/chaindeploy/contracts/githubhint.js
index 5198e38b5..1c40834a5 100644
--- a/js/src/dapps/chaindeploy/contracts/githubhint.js
+++ b/js/src/dapps/chaindeploy/contracts/githubhint.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import abi from '~/contracts/abi/githubhint';
+import abi from '@parity/shared/contracts/abi/githubhint';
+
import { compiler, source as sourceUrl, output as byteCode } from './code/githubhint';
const id = 'githubhint';
diff --git a/js/src/dapps/chaindeploy/contracts/registry.js b/js/src/dapps/chaindeploy/contracts/registry.js
index 1b44f4245..4c2ea2ec0 100644
--- a/js/src/dapps/chaindeploy/contracts/registry.js
+++ b/js/src/dapps/chaindeploy/contracts/registry.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import abi from '~/contracts/abi/registry2';
+import abi from '@parity/shared/contracts/abi/registry2';
+
import { compiler, source as sourceUrl, output as byteCode } from './code/registry';
const id = 'registry';
diff --git a/js/src/dapps/chaindeploy/contracts/signaturereg.js b/js/src/dapps/chaindeploy/contracts/signaturereg.js
index 6d9f9bf60..cd35e14e8 100644
--- a/js/src/dapps/chaindeploy/contracts/signaturereg.js
+++ b/js/src/dapps/chaindeploy/contracts/signaturereg.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import abi from '~/contracts/abi/signaturereg';
+import abi from '@parity/shared/contracts/abi/signaturereg';
+
import { compiler, source as sourceUrl, output as byteCode } from './code/signaturereg';
const id = 'signaturereg';
diff --git a/js/src/dapps/chaindeploy/contracts/tokendeployMgr.js b/js/src/dapps/chaindeploy/contracts/tokendeployMgr.js
index d07435fdd..489614b6c 100644
--- a/js/src/dapps/chaindeploy/contracts/tokendeployMgr.js
+++ b/js/src/dapps/chaindeploy/contracts/tokendeployMgr.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import abi from '~/contracts/abi/basiccoinmanager';
+import abi from '@parity/shared/contracts/abi/basiccoinmanager';
+
import { compiler, source as sourceUrl, output as byteCode } from './code/tokendeploy';
const id = 'basiccoinmgr';
diff --git a/js/src/dapps/chaindeploy/contracts/tokenreg.js b/js/src/dapps/chaindeploy/contracts/tokenreg.js
index 11ee29fa1..946977436 100644
--- a/js/src/dapps/chaindeploy/contracts/tokenreg.js
+++ b/js/src/dapps/chaindeploy/contracts/tokenreg.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import abi from '~/contracts/abi/tokenreg';
+import abi from '@parity/shared/contracts/abi/tokenreg';
+
import { compiler, source as sourceUrl, output as byteCode } from './code/tokenreg';
const id = 'tokenreg';
diff --git a/js/src/dapps/chaindeploy/contracts/verifyEmail.js b/js/src/dapps/chaindeploy/contracts/verifyEmail.js
index 0176d5949..300e58e4a 100644
--- a/js/src/dapps/chaindeploy/contracts/verifyEmail.js
+++ b/js/src/dapps/chaindeploy/contracts/verifyEmail.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import abi from '~/contracts/abi/email-verification';
+import abi from '@parity/shared/contracts/abi/email-verification';
+
import { compiler, source as sourceUrl, output as byteCode } from './code/verifyEmail';
const isBadge = true;
diff --git a/js/src/dapps/chaindeploy/contracts/verifySms.js b/js/src/dapps/chaindeploy/contracts/verifySms.js
index d7ea50902..51eb248af 100644
--- a/js/src/dapps/chaindeploy/contracts/verifySms.js
+++ b/js/src/dapps/chaindeploy/contracts/verifySms.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import abi from '~/contracts/abi/sms-verification';
+import abi from '@parity/shared/contracts/abi/sms-verification';
+
import { compiler, source as sourceUrl, output as byteCode } from './code/verifySms';
const isBadge = true;
diff --git a/js/src/dapps/chaindeploy/contracts/wallet.js b/js/src/dapps/chaindeploy/contracts/wallet.js
index 6639cba80..e4b11059f 100644
--- a/js/src/dapps/chaindeploy/contracts/wallet.js
+++ b/js/src/dapps/chaindeploy/contracts/wallet.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import { walletCompiler as compiler, walletLibrary as byteCode, walletLibraryABI as abiJson, walletLibraryRegKey as id, walletSource as sourceUrl } from '~/contracts/code/wallet';
+import { walletCompiler as compiler, walletLibrary as byteCode, walletLibraryABI as abiJson, walletLibraryRegKey as id, walletSource as sourceUrl } from '@parity/shared/contracts/code/wallet';
const abi = JSON.parse(abiJson);
const deployParams = [];
diff --git a/js/src/dapps/chaindeploy/dapps/console.js b/js/src/dapps/chaindeploy/dapps/console.js
index bc9cc7d43..dc87e1bc4 100644
--- a/js/src/dapps/chaindeploy/dapps/console.js
+++ b/js/src/dapps/chaindeploy/dapps/console.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import builtins from '~/config/dappsBuiltin.json';
+import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'console';
const app = builtins.find((app) => app.url === id);
diff --git a/js/src/dapps/chaindeploy/dapps/dappreg.js b/js/src/dapps/chaindeploy/dapps/dappreg.js
index c3939015a..fbf2589d7 100644
--- a/js/src/dapps/chaindeploy/dapps/dappreg.js
+++ b/js/src/dapps/chaindeploy/dapps/dappreg.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import builtins from '~/config/dappsBuiltin.json';
+import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'dappreg';
const app = builtins.find((app) => app.url === id);
diff --git a/js/src/dapps/chaindeploy/dapps/githubhint.js b/js/src/dapps/chaindeploy/dapps/githubhint.js
index 8a6b75d12..7fc16489a 100644
--- a/js/src/dapps/chaindeploy/dapps/githubhint.js
+++ b/js/src/dapps/chaindeploy/dapps/githubhint.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import builtins from '~/config/dappsBuiltin.json';
+import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'githubhint';
const app = builtins.find((app) => app.url === id);
diff --git a/js/src/dapps/chaindeploy/dapps/localtx.js b/js/src/dapps/chaindeploy/dapps/localtx.js
index 61f1f142d..8f3d9330b 100644
--- a/js/src/dapps/chaindeploy/dapps/localtx.js
+++ b/js/src/dapps/chaindeploy/dapps/localtx.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import builtins from '~/config/dappsBuiltin.json';
+import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'localtx';
const app = builtins.find((app) => app.url === id);
diff --git a/js/src/dapps/chaindeploy/dapps/registry.js b/js/src/dapps/chaindeploy/dapps/registry.js
index 5a28e3604..d5527aa59 100644
--- a/js/src/dapps/chaindeploy/dapps/registry.js
+++ b/js/src/dapps/chaindeploy/dapps/registry.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import builtins from '~/config/dappsBuiltin.json';
+import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'registry';
const app = builtins.find((app) => app.url === id);
diff --git a/js/src/dapps/chaindeploy/dapps/signaturereg.js b/js/src/dapps/chaindeploy/dapps/signaturereg.js
index acf939d72..c1e1f1063 100644
--- a/js/src/dapps/chaindeploy/dapps/signaturereg.js
+++ b/js/src/dapps/chaindeploy/dapps/signaturereg.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import builtins from '~/config/dappsBuiltin.json';
+import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'signaturereg';
const app = builtins.find((app) => app.url === id);
diff --git a/js/src/dapps/chaindeploy/dapps/tokendeploy.js b/js/src/dapps/chaindeploy/dapps/tokendeploy.js
index 592e94c2e..202e9578f 100644
--- a/js/src/dapps/chaindeploy/dapps/tokendeploy.js
+++ b/js/src/dapps/chaindeploy/dapps/tokendeploy.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import builtins from '~/config/dappsBuiltin.json';
+import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'tokendeploy';
const app = builtins.find((app) => app.url === id);
diff --git a/js/src/dapps/chaindeploy/dapps/tokenreg.js b/js/src/dapps/chaindeploy/dapps/tokenreg.js
index d8d81cd15..f7dcfd26e 100644
--- a/js/src/dapps/chaindeploy/dapps/tokenreg.js
+++ b/js/src/dapps/chaindeploy/dapps/tokenreg.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import builtins from '~/config/dappsBuiltin.json';
+import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'tokenreg';
const app = builtins.find((app) => app.url === id);
diff --git a/js/src/dapps/chaindeploy/dapps/web.js b/js/src/dapps/chaindeploy/dapps/web.js
index 7fb6da5e0..ed3cf0623 100644
--- a/js/src/dapps/chaindeploy/dapps/web.js
+++ b/js/src/dapps/chaindeploy/dapps/web.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import builtins from '~/config/dappsBuiltin.json';
+import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'web';
const app = builtins.find((app) => app.url === id);
diff --git a/js/src/dapps/dappreg/dappsStore.js b/js/src/dapps/dappreg/dappsStore.js
index 20941e229..a5fed961f 100644
--- a/js/src/dapps/dappreg/dappsStore.js
+++ b/js/src/dapps/dappreg/dappsStore.js
@@ -18,9 +18,9 @@ import BigNumber from 'bignumber.js';
import { action, computed, observable, transaction } from 'mobx';
import { flatten } from 'lodash';
-import * as abis from '~/contracts/abi';
-import Contracts from '~/contracts';
-import builtinJson from '~/config/dappsBuiltin.json';
+import * as abis from '@parity/shared/contracts/abi';
+import Contracts from '@parity/shared/contracts';
+import builtinJson from '@parity/shared/config/dappsBuiltin.json';
import Dapp from './dappStore.js';
import { deleteDapp, registerDapp, updateDapp } from './utils';
diff --git a/js/src/dapps/githubhint/services.js b/js/src/dapps/githubhint/services.js
index a4a4a6891..048fc6f14 100644
--- a/js/src/dapps/githubhint/services.js
+++ b/js/src/dapps/githubhint/services.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import * as abis from '~/contracts/abi';
+import * as abis from '@parity/shared/contracts/abi';
+
import { api } from './parity';
let defaultSubscriptionId;
diff --git a/js/src/dapps/localtx/Application/application.spec.js b/js/src/dapps/localtx/Application/application.spec.js
index 64d1d8872..a5e324b97 100644
--- a/js/src/dapps/localtx/Application/application.spec.js
+++ b/js/src/dapps/localtx/Application/application.spec.js
@@ -17,7 +17,7 @@
import React from 'react';
import { shallow } from 'enzyme';
-import '../../../environment/tests';
+import '@parity/shared/environment/tests';
import Application from './application';
diff --git a/js/src/dapps/localtx/Transaction/transaction.spec.js b/js/src/dapps/localtx/Transaction/transaction.spec.js
index af2edf2d4..cc631e413 100644
--- a/js/src/dapps/localtx/Transaction/transaction.spec.js
+++ b/js/src/dapps/localtx/Transaction/transaction.spec.js
@@ -17,8 +17,8 @@
import React from 'react';
import { shallow } from 'enzyme';
-import '../../../environment/tests';
-import EthApi from '../../../api';
+import EthApi from '@parity/api';
+import '@parity/shared/environment/tests';
// Mock API for tests
import * as Api from '../parity';
diff --git a/js/src/dapps/registry/Application/application.js b/js/src/dapps/registry/Application/application.js
index 7857b1ad1..09cf2d7f8 100644
--- a/js/src/dapps/registry/Application/application.js
+++ b/js/src/dapps/registry/Application/application.js
@@ -22,7 +22,8 @@ const muiTheme = getMuiTheme(lightBaseTheme);
import CircularProgress from 'material-ui/CircularProgress';
import { Card, CardText } from 'material-ui/Card';
-import { nullableProptype } from '~/util/proptypes';
+import { nullableProptype } from '@parity/shared/util/proptypes';
+
import { api } from '../parity';
import styles from './application.css';
diff --git a/js/src/dapps/registry/Container.js b/js/src/dapps/registry/Container.js
index 6a945a99c..4381f4382 100644
--- a/js/src/dapps/registry/Container.js
+++ b/js/src/dapps/registry/Container.js
@@ -18,7 +18,7 @@ import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { nullableProptype } from '~/util/proptypes';
+import { nullableProptype } from '@parity/shared/util/proptypes';
import Application from './Application';
import * as actions from './actions';
diff --git a/js/src/dapps/registry/Lookup/lookup.js b/js/src/dapps/registry/Lookup/lookup.js
index 74b894816..c13267082 100644
--- a/js/src/dapps/registry/Lookup/lookup.js
+++ b/js/src/dapps/registry/Lookup/lookup.js
@@ -25,7 +25,7 @@ import DropDownMenu from 'material-ui/DropDownMenu';
import MenuItem from 'material-ui/MenuItem';
import keycode from 'keycode';
-import { nullableProptype } from '~/util/proptypes';
+import { nullableProptype } from '@parity/shared/util/proptypes';
import Address from '../ui/address.js';
import renderImage from '../ui/image.js';
diff --git a/js/src/dapps/registry/Names/names.js b/js/src/dapps/registry/Names/names.js
index b6e629d39..44e33b8da 100644
--- a/js/src/dapps/registry/Names/names.js
+++ b/js/src/dapps/registry/Names/names.js
@@ -24,7 +24,8 @@ import MenuItem from 'material-ui/MenuItem';
import RaisedButton from 'material-ui/RaisedButton';
import CheckIcon from 'material-ui/svg-icons/navigation/check';
-import { nullableProptype } from '~/util/proptypes';
+import { nullableProptype } from '@parity/shared/util/proptypes';
+
import { fromWei } from '../parity.js';
import { clearError, reserve, drop } from './actions';
diff --git a/js/src/dapps/registry/Records/records.js b/js/src/dapps/registry/Records/records.js
index e1deda6cd..c0f61585c 100644
--- a/js/src/dapps/registry/Records/records.js
+++ b/js/src/dapps/registry/Records/records.js
@@ -24,7 +24,8 @@ import MenuItem from 'material-ui/MenuItem';
import RaisedButton from 'material-ui/RaisedButton';
import SaveIcon from 'material-ui/svg-icons/content/save';
-import { nullableProptype } from '~/util/proptypes';
+import { nullableProptype } from '@parity/shared/util/proptypes';
+
import { clearError, update } from './actions';
import styles from './records.css';
diff --git a/js/src/dapps/registry/Reverse/reverse.js b/js/src/dapps/registry/Reverse/reverse.js
index a17f9a22c..3197e56df 100644
--- a/js/src/dapps/registry/Reverse/reverse.js
+++ b/js/src/dapps/registry/Reverse/reverse.js
@@ -21,7 +21,8 @@ import {
Card, CardHeader, CardText, TextField, DropDownMenu, MenuItem, RaisedButton
} from 'material-ui';
-import { nullableProptype } from '~/util/proptypes';
+import { nullableProptype } from '@parity/shared/util/proptypes';
+
import { AddIcon, CheckIcon } from '~/ui/Icons';
import { clearError, confirm, propose } from './actions';
import styles from './reverse.css';
diff --git a/js/src/dapps/registry/actions.js b/js/src/dapps/registry/actions.js
index ddb0b04b1..4642c2967 100644
--- a/js/src/dapps/registry/actions.js
+++ b/js/src/dapps/registry/actions.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import Contracts from '~/contracts';
+import Contracts from '@parity/shared/contracts';
import { api } from './parity.js';
import * as addresses from './addresses/actions.js';
diff --git a/js/src/dapps/registry/ui/address.js b/js/src/dapps/registry/ui/address.js
index a01811fc4..2bf96f2e7 100644
--- a/js/src/dapps/registry/ui/address.js
+++ b/js/src/dapps/registry/ui/address.js
@@ -17,10 +17,11 @@
import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
+import { nullableProptype } from '@parity/shared/util/proptypes';
+
import Hash from './hash';
import etherscanUrl from '../util/etherscan-url';
import IdentityIcon from '../IdentityIcon';
-import { nullableProptype } from '~/util/proptypes';
import styles from './address.css';
diff --git a/js/src/dapps/registry/ui/image.js b/js/src/dapps/registry/ui/image.js
index 3f0a90abe..8f8e4d556 100644
--- a/js/src/dapps/registry/ui/image.js
+++ b/js/src/dapps/registry/ui/image.js
@@ -16,7 +16,7 @@
import React from 'react';
-import { parityNode } from '../../../environment';
+import { parityNode } from '@parity/shared/environment';
const styles = {
padding: '.5em',
diff --git a/js/src/dapps/signaturereg/services.js b/js/src/dapps/signaturereg/services.js
index 9c01e49fb..86a3bd81a 100644
--- a/js/src/dapps/signaturereg/services.js
+++ b/js/src/dapps/signaturereg/services.js
@@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import * as abis from '~/contracts/abi';
+import * as abis from '@parity/shared/contracts/abi';
+
import { api } from './parity';
const sortEvents = (a, b) => b.blockNumber.cmp(a.blockNumber) || b.logIndex.cmp(a.logIndex);
diff --git a/js/src/dapps/tokendeploy/Transfer/Send/send.js b/js/src/dapps/tokendeploy/Transfer/Send/send.js
index 9595e2045..35337f42a 100644
--- a/js/src/dapps/tokendeploy/Transfer/Send/send.js
+++ b/js/src/dapps/tokendeploy/Transfer/Send/send.js
@@ -17,7 +17,7 @@
import BigNumber from 'bignumber.js';
import React, { Component, PropTypes } from 'react';
-import { eip20 } from '~/contracts/abi';
+import { eip20 } from '@parity/shared/contracts/abi';
import { api } from '../../parity';
import { loadBalances } from '../../services';
diff --git a/js/src/dapps/tokendeploy/services.js b/js/src/dapps/tokendeploy/services.js
index 6cfeff05f..b5817c380 100644
--- a/js/src/dapps/tokendeploy/services.js
+++ b/js/src/dapps/tokendeploy/services.js
@@ -17,7 +17,8 @@
import BigNumber from 'bignumber.js';
import { url as etherscanUrl } from '~/3rdparty/etherscan/links';
-import * as abis from '~/contracts/abi';
+import * as abis from '@parity/shared/contracts/abi';
+
import { api } from './parity';
let managerInstance;
diff --git a/js/src/dapps/tokenreg/Status/actions.js b/js/src/dapps/tokenreg/Status/actions.js
index deb473d9b..22c99a5b5 100644
--- a/js/src/dapps/tokenreg/Status/actions.js
+++ b/js/src/dapps/tokenreg/Status/actions.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import Contracts from '~/contracts';
+import Contracts from '@parity/shared/contracts';
import { loadToken, setTokenPending, deleteToken, setTokenData } from '../Tokens/actions';
import { api } from '../parity';
diff --git a/js/src/dapps/tokenreg/Tokens/Token/token.js b/js/src/dapps/tokenreg/Tokens/Token/token.js
index 5ea50535c..b1fa26891 100644
--- a/js/src/dapps/tokenreg/Tokens/Token/token.js
+++ b/js/src/dapps/tokenreg/Tokens/Token/token.js
@@ -30,7 +30,7 @@ import styles from './token.css';
import { metaDataKeys } from '../../constants';
import { api } from '../../parity';
-import { parityNode } from '../../../../environment';
+import { parityNode } from '@parity/shared/environment';
export default class Token extends Component {
static propTypes = {
diff --git a/js/src/dapps/tokenreg/utils.js b/js/src/dapps/tokenreg/utils.js
index 82d71a6d0..315f097f7 100644
--- a/js/src/dapps/tokenreg/utils.js
+++ b/js/src/dapps/tokenreg/utils.js
@@ -16,7 +16,7 @@
import { api } from './parity';
-import { eip20 as eip20Abi } from '~/contracts/abi';
+import { eip20 as eip20Abi } from '@parity/shared/contracts/abi';
export const INVALID_URL_HASH = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470';
export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
diff --git a/js/src/secureApi.js b/js/src/secureApi.js
index 1c288a09f..0eccaafd1 100644
--- a/js/src/secureApi.js
+++ b/js/src/secureApi.js
@@ -18,7 +18,7 @@ import { uniq } from 'lodash';
import store from 'store';
import Api from '@parity/api';
-import { LOG_KEYS, getLogger } from '~/config';
+import { LOG_KEYS, getLogger } from '@parity/shared/config';
const log = getLogger(LOG_KEYS.Signer);
diff --git a/js/src/config/dappsBuiltin.json b/js/src/shared/config/dappsBuiltin.json
similarity index 100%
rename from js/src/config/dappsBuiltin.json
rename to js/src/shared/config/dappsBuiltin.json
diff --git a/js/src/config/dappsViews.json b/js/src/shared/config/dappsViews.json
similarity index 100%
rename from js/src/config/dappsViews.json
rename to js/src/shared/config/dappsViews.json
diff --git a/js/src/config/index.js b/js/src/shared/config/index.js
similarity index 100%
rename from js/src/config/index.js
rename to js/src/shared/config/index.js
diff --git a/js/src/contracts/abi/badgereg.json b/js/src/shared/contracts/abi/badgereg.json
similarity index 100%
rename from js/src/contracts/abi/badgereg.json
rename to js/src/shared/contracts/abi/badgereg.json
diff --git a/js/src/contracts/abi/basiccoin.json b/js/src/shared/contracts/abi/basiccoin.json
similarity index 100%
rename from js/src/contracts/abi/basiccoin.json
rename to js/src/shared/contracts/abi/basiccoin.json
diff --git a/js/src/contracts/abi/basiccoinmanager.json b/js/src/shared/contracts/abi/basiccoinmanager.json
similarity index 100%
rename from js/src/contracts/abi/basiccoinmanager.json
rename to js/src/shared/contracts/abi/basiccoinmanager.json
diff --git a/js/src/contracts/abi/certifier.json b/js/src/shared/contracts/abi/certifier.json
similarity index 100%
rename from js/src/contracts/abi/certifier.json
rename to js/src/shared/contracts/abi/certifier.json
diff --git a/js/src/contracts/abi/dappreg.json b/js/src/shared/contracts/abi/dappreg.json
similarity index 100%
rename from js/src/contracts/abi/dappreg.json
rename to js/src/shared/contracts/abi/dappreg.json
diff --git a/js/src/contracts/abi/eip20.json b/js/src/shared/contracts/abi/eip20.json
similarity index 100%
rename from js/src/contracts/abi/eip20.json
rename to js/src/shared/contracts/abi/eip20.json
diff --git a/js/src/contracts/abi/email-verification.json b/js/src/shared/contracts/abi/email-verification.json
similarity index 100%
rename from js/src/contracts/abi/email-verification.json
rename to js/src/shared/contracts/abi/email-verification.json
diff --git a/js/src/contracts/abi/gavcoin.json b/js/src/shared/contracts/abi/gavcoin.json
similarity index 100%
rename from js/src/contracts/abi/gavcoin.json
rename to js/src/shared/contracts/abi/gavcoin.json
diff --git a/js/src/contracts/abi/githubhint.json b/js/src/shared/contracts/abi/githubhint.json
similarity index 100%
rename from js/src/contracts/abi/githubhint.json
rename to js/src/shared/contracts/abi/githubhint.json
diff --git a/js/src/contracts/abi/index.js b/js/src/shared/contracts/abi/index.js
similarity index 100%
rename from js/src/contracts/abi/index.js
rename to js/src/shared/contracts/abi/index.js
diff --git a/js/src/contracts/abi/old-wallet.json b/js/src/shared/contracts/abi/old-wallet.json
similarity index 100%
rename from js/src/contracts/abi/old-wallet.json
rename to js/src/shared/contracts/abi/old-wallet.json
diff --git a/js/src/contracts/abi/owned.json b/js/src/shared/contracts/abi/owned.json
similarity index 100%
rename from js/src/contracts/abi/owned.json
rename to js/src/shared/contracts/abi/owned.json
diff --git a/js/src/contracts/abi/registry.json b/js/src/shared/contracts/abi/registry.json
similarity index 100%
rename from js/src/contracts/abi/registry.json
rename to js/src/shared/contracts/abi/registry.json
diff --git a/js/src/contracts/abi/registry2.json b/js/src/shared/contracts/abi/registry2.json
similarity index 100%
rename from js/src/contracts/abi/registry2.json
rename to js/src/shared/contracts/abi/registry2.json
diff --git a/js/src/contracts/abi/signaturereg.json b/js/src/shared/contracts/abi/signaturereg.json
similarity index 100%
rename from js/src/contracts/abi/signaturereg.json
rename to js/src/shared/contracts/abi/signaturereg.json
diff --git a/js/src/contracts/abi/sms-verification.json b/js/src/shared/contracts/abi/sms-verification.json
similarity index 100%
rename from js/src/contracts/abi/sms-verification.json
rename to js/src/shared/contracts/abi/sms-verification.json
diff --git a/js/src/contracts/abi/tokenreg.json b/js/src/shared/contracts/abi/tokenreg.json
similarity index 100%
rename from js/src/contracts/abi/tokenreg.json
rename to js/src/shared/contracts/abi/tokenreg.json
diff --git a/js/src/contracts/abi/wallet.json b/js/src/shared/contracts/abi/wallet.json
similarity index 100%
rename from js/src/contracts/abi/wallet.json
rename to js/src/shared/contracts/abi/wallet.json
diff --git a/js/src/contracts/badgereg.js b/js/src/shared/contracts/badgereg.js
similarity index 100%
rename from js/src/contracts/badgereg.js
rename to js/src/shared/contracts/badgereg.js
diff --git a/js/src/contracts/code/index.js b/js/src/shared/contracts/code/index.js
similarity index 100%
rename from js/src/contracts/code/index.js
rename to js/src/shared/contracts/code/index.js
diff --git a/js/src/contracts/code/wallet.js b/js/src/shared/contracts/code/wallet.js
similarity index 100%
rename from js/src/contracts/code/wallet.js
rename to js/src/shared/contracts/code/wallet.js
diff --git a/js/src/contracts/contracts.js b/js/src/shared/contracts/contracts.js
similarity index 100%
rename from js/src/contracts/contracts.js
rename to js/src/shared/contracts/contracts.js
diff --git a/js/src/contracts/dappreg.js b/js/src/shared/contracts/dappreg.js
similarity index 100%
rename from js/src/contracts/dappreg.js
rename to js/src/shared/contracts/dappreg.js
diff --git a/js/src/contracts/githubhint.js b/js/src/shared/contracts/githubhint.js
similarity index 100%
rename from js/src/contracts/githubhint.js
rename to js/src/shared/contracts/githubhint.js
diff --git a/js/src/contracts/githubhint.spec.js b/js/src/shared/contracts/githubhint.spec.js
similarity index 100%
rename from js/src/contracts/githubhint.spec.js
rename to js/src/shared/contracts/githubhint.spec.js
diff --git a/js/src/contracts/index.js b/js/src/shared/contracts/index.js
similarity index 100%
rename from js/src/contracts/index.js
rename to js/src/shared/contracts/index.js
diff --git a/js/src/contracts/registry.js b/js/src/shared/contracts/registry.js
similarity index 100%
rename from js/src/contracts/registry.js
rename to js/src/shared/contracts/registry.js
diff --git a/js/src/contracts/registry.spec.js b/js/src/shared/contracts/registry.spec.js
similarity index 100%
rename from js/src/contracts/registry.spec.js
rename to js/src/shared/contracts/registry.spec.js
diff --git a/js/src/contracts/signaturereg.js b/js/src/shared/contracts/signaturereg.js
similarity index 100%
rename from js/src/contracts/signaturereg.js
rename to js/src/shared/contracts/signaturereg.js
diff --git a/js/src/contracts/snippets/enhanced-wallet.sol b/js/src/shared/contracts/snippets/enhanced-wallet.sol
similarity index 100%
rename from js/src/contracts/snippets/enhanced-wallet.sol
rename to js/src/shared/contracts/snippets/enhanced-wallet.sol
diff --git a/js/src/contracts/snippets/human-standard-token.sol b/js/src/shared/contracts/snippets/human-standard-token.sol
similarity index 100%
rename from js/src/contracts/snippets/human-standard-token.sol
rename to js/src/shared/contracts/snippets/human-standard-token.sol
diff --git a/js/src/contracts/snippets/standard-token.sol b/js/src/shared/contracts/snippets/standard-token.sol
similarity index 100%
rename from js/src/contracts/snippets/standard-token.sol
rename to js/src/shared/contracts/snippets/standard-token.sol
diff --git a/js/src/contracts/snippets/token.sol b/js/src/shared/contracts/snippets/token.sol
similarity index 100%
rename from js/src/contracts/snippets/token.sol
rename to js/src/shared/contracts/snippets/token.sol
diff --git a/js/src/contracts/snippets/wallet.sol b/js/src/shared/contracts/snippets/wallet.sol
similarity index 100%
rename from js/src/contracts/snippets/wallet.sol
rename to js/src/shared/contracts/snippets/wallet.sol
diff --git a/js/src/contracts/tokenreg.js b/js/src/shared/contracts/tokenreg.js
similarity index 100%
rename from js/src/contracts/tokenreg.js
rename to js/src/shared/contracts/tokenreg.js
diff --git a/js/src/contracts/verification.js b/js/src/shared/contracts/verification.js
similarity index 100%
rename from js/src/contracts/verification.js
rename to js/src/shared/contracts/verification.js
diff --git a/js/src/environment/empty.js b/js/src/shared/environment/empty.js
similarity index 100%
rename from js/src/environment/empty.js
rename to js/src/shared/environment/empty.js
diff --git a/js/src/environment/index.js b/js/src/shared/environment/index.js
similarity index 100%
rename from js/src/environment/index.js
rename to js/src/shared/environment/index.js
diff --git a/js/src/environment/integration-tests/fake-backend.js b/js/src/shared/environment/integration-tests/fake-backend.js
similarity index 100%
rename from js/src/environment/integration-tests/fake-backend.js
rename to js/src/shared/environment/integration-tests/fake-backend.js
diff --git a/js/src/environment/integration-tests/index.js b/js/src/shared/environment/integration-tests/index.js
similarity index 100%
rename from js/src/environment/integration-tests/index.js
rename to js/src/shared/environment/integration-tests/index.js
diff --git a/js/src/environment/perf-debug/index.js b/js/src/shared/environment/perf-debug/index.js
similarity index 100%
rename from js/src/environment/perf-debug/index.js
rename to js/src/shared/environment/perf-debug/index.js
diff --git a/js/src/environment/perf-debug/why-update.js b/js/src/shared/environment/perf-debug/why-update.js
similarity index 100%
rename from js/src/environment/perf-debug/why-update.js
rename to js/src/shared/environment/perf-debug/why-update.js
diff --git a/js/src/environment/tests/index.js b/js/src/shared/environment/tests/index.js
similarity index 100%
rename from js/src/environment/tests/index.js
rename to js/src/shared/environment/tests/index.js
diff --git a/js/src/environment/tests/test-utils.js b/js/src/shared/environment/tests/test-utils.js
similarity index 100%
rename from js/src/environment/tests/test-utils.js
rename to js/src/shared/environment/tests/test-utils.js
diff --git a/js/src/mobx/hardwareStore.js b/js/src/shared/mobx/hardwareStore.js
similarity index 100%
rename from js/src/mobx/hardwareStore.js
rename to js/src/shared/mobx/hardwareStore.js
diff --git a/js/src/mobx/hardwareStore.spec.js b/js/src/shared/mobx/hardwareStore.spec.js
similarity index 100%
rename from js/src/mobx/hardwareStore.spec.js
rename to js/src/shared/mobx/hardwareStore.spec.js
diff --git a/js/src/mobx/historyStore.js b/js/src/shared/mobx/historyStore.js
similarity index 100%
rename from js/src/mobx/historyStore.js
rename to js/src/shared/mobx/historyStore.js
diff --git a/js/src/mobx/historyStore.spec.js b/js/src/shared/mobx/historyStore.spec.js
similarity index 100%
rename from js/src/mobx/historyStore.spec.js
rename to js/src/shared/mobx/historyStore.spec.js
diff --git a/js/src/shared/package.json b/js/src/shared/package.json
new file mode 100644
index 000000000..e2637e95c
--- /dev/null
+++ b/js/src/shared/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@parity/shared",
+ "description": "Shared states and non-ui components for the Parity wallet",
+ "version": "0.0.0",
+ "main": "index.js",
+ "author": "Parity Team ",
+ "maintainers": [],
+ "contributors": [],
+ "license": "GPL-3.0",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/paritytech/parity.git"
+ },
+ "keywords": [],
+ "scripts": {},
+ "devDependencies": {},
+ "dependencies": {},
+ "peerDependencies": {}
+}
diff --git a/js/src/redux/actions.js b/js/src/shared/redux/actions.js
similarity index 100%
rename from js/src/redux/actions.js
rename to js/src/shared/redux/actions.js
diff --git a/js/src/redux/index.js b/js/src/shared/redux/index.js
similarity index 100%
rename from js/src/redux/index.js
rename to js/src/shared/redux/index.js
diff --git a/js/src/redux/middleware.js b/js/src/shared/redux/middleware.js
similarity index 100%
rename from js/src/redux/middleware.js
rename to js/src/shared/redux/middleware.js
diff --git a/js/src/redux/providers/apiActions.js b/js/src/shared/redux/providers/apiActions.js
similarity index 100%
rename from js/src/redux/providers/apiActions.js
rename to js/src/shared/redux/providers/apiActions.js
diff --git a/js/src/redux/providers/apiReducer.js b/js/src/shared/redux/providers/apiReducer.js
similarity index 100%
rename from js/src/redux/providers/apiReducer.js
rename to js/src/shared/redux/providers/apiReducer.js
diff --git a/js/src/redux/providers/balances.js b/js/src/shared/redux/providers/balances.js
similarity index 99%
rename from js/src/redux/providers/balances.js
rename to js/src/shared/redux/providers/balances.js
index a07385c20..57d9cb4fd 100644
--- a/js/src/redux/providers/balances.js
+++ b/js/src/shared/redux/providers/balances.js
@@ -17,12 +17,11 @@
import { throttle } from 'lodash';
import { padRight } from '@parity/api/util/format';
+import Contracts from '@parity/shared/contracts';
import { fetchBalances, fetchTokensBalances, queryTokensFilter } from './balancesActions';
import { loadTokens, fetchTokens } from './tokensActions';
-import Contracts from '~/contracts';
-
let instance = null;
export default class Balances {
diff --git a/js/src/redux/providers/balancesActions.js b/js/src/shared/redux/providers/balancesActions.js
similarity index 97%
rename from js/src/redux/providers/balancesActions.js
rename to js/src/shared/redux/providers/balancesActions.js
index b4b250fdc..208060214 100644
--- a/js/src/redux/providers/balancesActions.js
+++ b/js/src/shared/redux/providers/balancesActions.js
@@ -19,9 +19,9 @@ import { push } from 'react-router-redux';
import { sha3 } from '@parity/api/util/sha3';
-import { notifyTransaction } from '~/util/notifications';
-import { ETH_TOKEN, fetchAccountsBalances } from '~/util/tokens';
-import { LOG_KEYS, getLogger } from '~/config';
+import { LOG_KEYS, getLogger } from '@parity/shared/config';
+import { notifyTransaction } from '@parity/shared/util/notifications';
+import { ETH_TOKEN, fetchAccountsBalances } from '@parity/shared/util/tokens';
const TRANSFER_SIGNATURE = sha3('Transfer(address,address,uint256)');
diff --git a/js/src/redux/providers/balancesReducer.js b/js/src/shared/redux/providers/balancesReducer.js
similarity index 100%
rename from js/src/redux/providers/balancesReducer.js
rename to js/src/shared/redux/providers/balancesReducer.js
diff --git a/js/src/redux/providers/certifications/actions.js b/js/src/shared/redux/providers/certifications/actions.js
similarity index 100%
rename from js/src/redux/providers/certifications/actions.js
rename to js/src/shared/redux/providers/certifications/actions.js
diff --git a/js/src/redux/providers/certifications/middleware.js b/js/src/shared/redux/providers/certifications/middleware.js
similarity index 97%
rename from js/src/redux/providers/certifications/middleware.js
rename to js/src/shared/redux/providers/certifications/middleware.js
index 9ca790add..ef661d438 100644
--- a/js/src/redux/providers/certifications/middleware.js
+++ b/js/src/shared/redux/providers/certifications/middleware.js
@@ -17,10 +17,9 @@
import { uniq, range, debounce } from 'lodash';
import Contract from '@parity/api/contract';
-
-import { getLogger, LOG_KEYS } from '~/config';
-import Contracts from '~/contracts';
-import CertifierABI from '~/contracts/abi/certifier.json';
+import { getLogger, LOG_KEYS } from '@parity/shared/config';
+import Contracts from '@parity/shared/contracts';
+import CertifierABI from '@parity/shared/contracts/abi/certifier.json';
import { addCertification, removeCertification } from './actions';
diff --git a/js/src/redux/providers/certifications/reducer.js b/js/src/shared/redux/providers/certifications/reducer.js
similarity index 100%
rename from js/src/redux/providers/certifications/reducer.js
rename to js/src/shared/redux/providers/certifications/reducer.js
diff --git a/js/src/redux/providers/chainMiddleware.js b/js/src/shared/redux/providers/chainMiddleware.js
similarity index 100%
rename from js/src/redux/providers/chainMiddleware.js
rename to js/src/shared/redux/providers/chainMiddleware.js
diff --git a/js/src/redux/providers/chainMiddleware.spec.js b/js/src/shared/redux/providers/chainMiddleware.spec.js
similarity index 98%
rename from js/src/redux/providers/chainMiddleware.spec.js
rename to js/src/shared/redux/providers/chainMiddleware.spec.js
index fcd4c4744..8e68dbcc5 100644
--- a/js/src/redux/providers/chainMiddleware.spec.js
+++ b/js/src/shared/redux/providers/chainMiddleware.spec.js
@@ -16,7 +16,8 @@
import sinon from 'sinon';
-import Contracts from '~/contracts';
+import Contracts from '@parity/shared/contracts';
+
import { initialState as defaultNodeStatusState } from './statusReducer';
import ChainMiddleware from './chainMiddleware';
import { createWsApi } from '~/../test/e2e/ethapi';
diff --git a/js/src/redux/providers/index.js b/js/src/shared/redux/providers/index.js
similarity index 100%
rename from js/src/redux/providers/index.js
rename to js/src/shared/redux/providers/index.js
diff --git a/js/src/redux/providers/personal.js b/js/src/shared/redux/providers/personal.js
similarity index 100%
rename from js/src/redux/providers/personal.js
rename to js/src/shared/redux/providers/personal.js
diff --git a/js/src/redux/providers/personalActions.js b/js/src/shared/redux/providers/personalActions.js
similarity index 97%
rename from js/src/redux/providers/personalActions.js
rename to js/src/shared/redux/providers/personalActions.js
index 62d32048d..7febe4909 100644
--- a/js/src/redux/providers/personalActions.js
+++ b/js/src/shared/redux/providers/personalActions.js
@@ -17,14 +17,14 @@
import { isEqual, intersection } from 'lodash';
import Contract from '@parity/api/contract';
+import { wallet as WalletAbi } from '@parity/shared/contracts/abi';
+import WalletsUtils from '@parity/shared/util/wallets';
import BalancesProvider from './balances';
import { updateTokensFilter } from './balancesActions';
import { attachWallets } from './walletActions';
import MethodDecodingStore from '~/ui/MethodDecoding/methodDecodingStore';
-import WalletsUtils from '~/util/wallets';
-import { wallet as WalletAbi } from '~/contracts/abi';
export function personalAccountsInfo (accountsInfo) {
const accounts = {};
diff --git a/js/src/redux/providers/personalReducer.js b/js/src/shared/redux/providers/personalReducer.js
similarity index 100%
rename from js/src/redux/providers/personalReducer.js
rename to js/src/shared/redux/providers/personalReducer.js
diff --git a/js/src/redux/providers/registry/actions.js b/js/src/shared/redux/providers/registry/actions.js
similarity index 100%
rename from js/src/redux/providers/registry/actions.js
rename to js/src/shared/redux/providers/registry/actions.js
diff --git a/js/src/redux/providers/registry/middleware.js b/js/src/shared/redux/providers/registry/middleware.js
similarity index 95%
rename from js/src/redux/providers/registry/middleware.js
rename to js/src/shared/redux/providers/registry/middleware.js
index 8d48d5cd7..b0a21038a 100644
--- a/js/src/redux/providers/registry/middleware.js
+++ b/js/src/shared/redux/providers/registry/middleware.js
@@ -16,10 +16,10 @@
import { debounce } from 'lodash';
import store from 'store';
-import Contracts from '~/contracts';
-import subscribeToEvents from '~/util/subscribe-to-events';
-import registryABI from '~/contracts/abi/registry.json';
+import Contracts from '@parity/shared/contracts';
+import registryABI from '@parity/shared/contracts/abi/registry.json';
+import subscribeToEvents from '@parity/shared/util/subscribe-to-events';
import { setReverse } from './actions';
diff --git a/js/src/redux/providers/registry/reducer.js b/js/src/shared/redux/providers/registry/reducer.js
similarity index 100%
rename from js/src/redux/providers/registry/reducer.js
rename to js/src/shared/redux/providers/registry/reducer.js
diff --git a/js/src/redux/providers/requestsActions.js b/js/src/shared/redux/providers/requestsActions.js
similarity index 99%
rename from js/src/redux/providers/requestsActions.js
rename to js/src/shared/redux/providers/requestsActions.js
index fedfabc5e..67e4ddbc0 100644
--- a/js/src/redux/providers/requestsActions.js
+++ b/js/src/shared/redux/providers/requestsActions.js
@@ -17,8 +17,8 @@
import BigNumber from 'bignumber.js';
import { outTransaction } from '@parity/api/format/output';
+import { trackRequest as trackRequestUtil, parseTransactionReceipt } from '@parity/shared/util/tx';
-import { trackRequest as trackRequestUtil, parseTransactionReceipt } from '~/util/tx';
import SavedRequests from '~/shell/Requests/savedRequests';
const savedRequests = new SavedRequests();
diff --git a/js/src/redux/providers/requestsActions.spec.js b/js/src/shared/redux/providers/requestsActions.spec.js
similarity index 100%
rename from js/src/redux/providers/requestsActions.spec.js
rename to js/src/shared/redux/providers/requestsActions.spec.js
diff --git a/js/src/redux/providers/requestsReducer.js b/js/src/shared/redux/providers/requestsReducer.js
similarity index 100%
rename from js/src/redux/providers/requestsReducer.js
rename to js/src/shared/redux/providers/requestsReducer.js
diff --git a/js/src/redux/providers/settings/actions.js b/js/src/shared/redux/providers/settings/actions.js
similarity index 100%
rename from js/src/redux/providers/settings/actions.js
rename to js/src/shared/redux/providers/settings/actions.js
diff --git a/js/src/redux/providers/settings/middleware.js b/js/src/shared/redux/providers/settings/middleware.js
similarity index 100%
rename from js/src/redux/providers/settings/middleware.js
rename to js/src/shared/redux/providers/settings/middleware.js
diff --git a/js/src/redux/providers/settings/reducers.js b/js/src/shared/redux/providers/settings/reducers.js
similarity index 100%
rename from js/src/redux/providers/settings/reducers.js
rename to js/src/shared/redux/providers/settings/reducers.js
diff --git a/js/src/redux/providers/signer.js b/js/src/shared/redux/providers/signer.js
similarity index 100%
rename from js/src/redux/providers/signer.js
rename to js/src/shared/redux/providers/signer.js
diff --git a/js/src/redux/providers/signerActions.js b/js/src/shared/redux/providers/signerActions.js
similarity index 100%
rename from js/src/redux/providers/signerActions.js
rename to js/src/shared/redux/providers/signerActions.js
diff --git a/js/src/redux/providers/signerMiddleware.js b/js/src/shared/redux/providers/signerMiddleware.js
similarity index 98%
rename from js/src/redux/providers/signerMiddleware.js
rename to js/src/shared/redux/providers/signerMiddleware.js
index 50a8d9078..3e4608f90 100644
--- a/js/src/redux/providers/signerMiddleware.js
+++ b/js/src/shared/redux/providers/signerMiddleware.js
@@ -17,12 +17,11 @@
import * as actions from './signerActions';
import { inHex } from '@parity/api/format/input';
+import HardwareStore from '@parity/shared/mobx/hardwareStore';
+import { Signer } from '@parity/shared/util/signer';
import { createSignedTx } from '~/shell/Signer/utils/qrscan';
-import HardwareStore from '~/mobx/hardwareStore';
-import { Signer } from '~/util/signer';
-
export default class SignerMiddleware {
constructor (api) {
this._api = api;
diff --git a/js/src/redux/providers/signerMiddleware.spec.js b/js/src/shared/redux/providers/signerMiddleware.spec.js
similarity index 100%
rename from js/src/redux/providers/signerMiddleware.spec.js
rename to js/src/shared/redux/providers/signerMiddleware.spec.js
diff --git a/js/src/redux/providers/signerReducer.js b/js/src/shared/redux/providers/signerReducer.js
similarity index 100%
rename from js/src/redux/providers/signerReducer.js
rename to js/src/shared/redux/providers/signerReducer.js
diff --git a/js/src/redux/providers/snackbarActions.js b/js/src/shared/redux/providers/snackbarActions.js
similarity index 100%
rename from js/src/redux/providers/snackbarActions.js
rename to js/src/shared/redux/providers/snackbarActions.js
diff --git a/js/src/redux/providers/snackbarReducer.js b/js/src/shared/redux/providers/snackbarReducer.js
similarity index 100%
rename from js/src/redux/providers/snackbarReducer.js
rename to js/src/shared/redux/providers/snackbarReducer.js
diff --git a/js/src/redux/providers/status.js b/js/src/shared/redux/providers/status.js
similarity index 99%
rename from js/src/redux/providers/status.js
rename to js/src/shared/redux/providers/status.js
index 53d0630a7..48ba52df3 100644
--- a/js/src/redux/providers/status.js
+++ b/js/src/shared/redux/providers/status.js
@@ -16,7 +16,8 @@
import { isEqual } from 'lodash';
-import { LOG_KEYS, getLogger } from '~/config';
+import { LOG_KEYS, getLogger } from '@parity/shared/config';
+
import UpgradeStore from '~/shell/UpgradeParity/store';
import BalancesProvider from './balances';
diff --git a/js/src/redux/providers/statusActions.js b/js/src/shared/redux/providers/statusActions.js
similarity index 100%
rename from js/src/redux/providers/statusActions.js
rename to js/src/shared/redux/providers/statusActions.js
diff --git a/js/src/redux/providers/statusReducer.js b/js/src/shared/redux/providers/statusReducer.js
similarity index 100%
rename from js/src/redux/providers/statusReducer.js
rename to js/src/shared/redux/providers/statusReducer.js
diff --git a/js/src/redux/providers/tokensActions.js b/js/src/shared/redux/providers/tokensActions.js
similarity index 93%
rename from js/src/redux/providers/tokensActions.js
rename to js/src/shared/redux/providers/tokensActions.js
index 16b536e71..233c04fa1 100644
--- a/js/src/redux/providers/tokensActions.js
+++ b/js/src/shared/redux/providers/tokensActions.js
@@ -16,10 +16,11 @@
import { uniq } from 'lodash';
-import Contracts from '~/contracts';
-import { LOG_KEYS, getLogger } from '~/config';
+import { LOG_KEYS, getLogger } from '@parity/shared/config';
+import Contracts from '@parity/shared/contracts';
+import { fetchTokenIds, fetchTokenInfo } from '@parity/shared/util/tokens';
+
import { IconCache } from '~/ui';
-import { fetchTokenIds, fetchTokenInfo } from '~/util/tokens';
import { updateTokensFilter } from './balancesActions';
diff --git a/js/src/redux/providers/tokensReducer.js b/js/src/shared/redux/providers/tokensReducer.js
similarity index 94%
rename from js/src/redux/providers/tokensReducer.js
rename to js/src/shared/redux/providers/tokensReducer.js
index e11fb41a3..2e8b90fa1 100644
--- a/js/src/redux/providers/tokensReducer.js
+++ b/js/src/shared/redux/providers/tokensReducer.js
@@ -16,7 +16,7 @@
import { handleActions } from 'redux-actions';
-import { ETH_TOKEN } from '~/util/tokens';
+import { ETH_TOKEN } from '@parity/shared/util/tokens';
const initialState = {
[ ETH_TOKEN.id ]: ETH_TOKEN
diff --git a/js/src/redux/providers/walletActions.js b/js/src/shared/redux/providers/walletActions.js
similarity index 98%
rename from js/src/redux/providers/walletActions.js
rename to js/src/shared/redux/providers/walletActions.js
index 4d5c902ae..2d5a79b29 100644
--- a/js/src/redux/providers/walletActions.js
+++ b/js/src/shared/redux/providers/walletActions.js
@@ -19,10 +19,9 @@ import { isEqual, uniq } from 'lodash';
import Contract from '@parity/api/contract';
import { ERROR_CODES } from '@parity/api/transport/error';
import { bytesToHex, toHex } from '@parity/api/util/format';
-
-import { wallet as WALLET_ABI } from '~/contracts/abi';
-import { MAX_GAS_ESTIMATION } from '~/util/constants';
-import WalletsUtils from '~/util/wallets';
+import { wallet as WALLET_ABI } from '@parity/shared/contracts/abi';
+import { MAX_GAS_ESTIMATION } from '@parity/shared/util/constants';
+import WalletsUtils from '@parity/shared/util/wallets';
import { newError } from '~/ui/Errors/actions';
diff --git a/js/src/redux/providers/walletReducer.js b/js/src/shared/redux/providers/walletReducer.js
similarity index 100%
rename from js/src/redux/providers/walletReducer.js
rename to js/src/shared/redux/providers/walletReducer.js
diff --git a/js/src/redux/providers/worker.js b/js/src/shared/redux/providers/worker.js
similarity index 100%
rename from js/src/redux/providers/worker.js
rename to js/src/shared/redux/providers/worker.js
diff --git a/js/src/redux/providers/workerActions.js b/js/src/shared/redux/providers/workerActions.js
similarity index 100%
rename from js/src/redux/providers/workerActions.js
rename to js/src/shared/redux/providers/workerActions.js
diff --git a/js/src/redux/providers/workerReducer.js b/js/src/shared/redux/providers/workerReducer.js
similarity index 100%
rename from js/src/redux/providers/workerReducer.js
rename to js/src/shared/redux/providers/workerReducer.js
diff --git a/js/src/redux/providers/workerWrapper.js b/js/src/shared/redux/providers/workerWrapper.js
similarity index 100%
rename from js/src/redux/providers/workerWrapper.js
rename to js/src/shared/redux/providers/workerWrapper.js
diff --git a/js/src/redux/reducers.js b/js/src/shared/redux/reducers.js
similarity index 100%
rename from js/src/redux/reducers.js
rename to js/src/shared/redux/reducers.js
diff --git a/js/src/redux/store.js b/js/src/shared/redux/store.js
similarity index 100%
rename from js/src/redux/store.js
rename to js/src/shared/redux/store.js
diff --git a/js/src/redux/util.js b/js/src/shared/redux/util.js
similarity index 100%
rename from js/src/redux/util.js
rename to js/src/shared/redux/util.js
diff --git a/js/src/util/abi.js b/js/src/shared/util/abi.js
similarity index 100%
rename from js/src/util/abi.js
rename to js/src/shared/util/abi.js
diff --git a/js/src/util/constants.js b/js/src/shared/util/constants.js
similarity index 100%
rename from js/src/util/constants.js
rename to js/src/shared/util/constants.js
diff --git a/js/src/util/dapps.js b/js/src/shared/util/dapps.js
similarity index 97%
rename from js/src/util/dapps.js
rename to js/src/shared/util/dapps.js
index a89db51a7..2467058da 100644
--- a/js/src/util/dapps.js
+++ b/js/src/shared/util/dapps.js
@@ -18,12 +18,13 @@ import BigNumber from 'bignumber.js';
import { pick, range, uniq } from 'lodash';
import { bytesToHex } from '@parity/api/util/format';
+import builtinJson from '@parity/shared/config/dappsBuiltin.json';
+import viewsJson from '@parity/shared/config/dappsViews.json';
-import Contracts from '~/contracts';
-import builtinJson from '~/config/dappsBuiltin.json';
-import viewsJson from '~/config/dappsViews.json';
import { IconCache } from '~/ui';
+import Contracts from '../contracts';
+
const builtinApps = [].concat(
viewsJson.map((app) => {
app.isView = true;
diff --git a/js/src/util/notifications.js b/js/src/shared/util/notifications.js
similarity index 100%
rename from js/src/util/notifications.js
rename to js/src/shared/util/notifications.js
diff --git a/js/src/util/proptypes.js b/js/src/shared/util/proptypes.js
similarity index 100%
rename from js/src/util/proptypes.js
rename to js/src/shared/util/proptypes.js
diff --git a/js/src/util/signer.js b/js/src/shared/util/signer.js
similarity index 100%
rename from js/src/util/signer.js
rename to js/src/shared/util/signer.js
diff --git a/js/src/util/solidity.js b/js/src/shared/util/solidity.js
similarity index 100%
rename from js/src/util/solidity.js
rename to js/src/shared/util/solidity.js
diff --git a/js/src/util/subscribe-to-events.js b/js/src/shared/util/subscribe-to-events.js
similarity index 100%
rename from js/src/util/subscribe-to-events.js
rename to js/src/shared/util/subscribe-to-events.js
diff --git a/js/src/util/subscribe-to-events.spec.js b/js/src/shared/util/subscribe-to-events.spec.js
similarity index 100%
rename from js/src/util/subscribe-to-events.spec.js
rename to js/src/shared/util/subscribe-to-events.spec.js
diff --git a/js/src/util/subscribe-to-events.test.js b/js/src/shared/util/subscribe-to-events.test.js
similarity index 100%
rename from js/src/util/subscribe-to-events.test.js
rename to js/src/shared/util/subscribe-to-events.test.js
diff --git a/js/src/util/tokens.js b/js/src/shared/util/tokens.js
similarity index 100%
rename from js/src/util/tokens.js
rename to js/src/shared/util/tokens.js
diff --git a/js/src/util/tx.js b/js/src/shared/util/tx.js
similarity index 99%
rename from js/src/util/tx.js
rename to js/src/shared/util/tx.js
index b56fc8b1f..67c1e3efc 100644
--- a/js/src/util/tx.js
+++ b/js/src/shared/util/tx.js
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import WalletsUtils from '~/util/wallets';
+import WalletsUtils from './wallets';
export function trackRequest (api, options, statusCallback) {
const { requestId, transactionHash } = options;
diff --git a/js/src/util/validation.js b/js/src/shared/util/validation.js
similarity index 100%
rename from js/src/util/validation.js
rename to js/src/shared/util/validation.js
diff --git a/js/src/util/validation.spec.js b/js/src/shared/util/validation.spec.js
similarity index 100%
rename from js/src/util/validation.spec.js
rename to js/src/shared/util/validation.spec.js
diff --git a/js/src/util/wallets.js b/js/src/shared/util/wallets.js
similarity index 98%
rename from js/src/util/wallets.js
rename to js/src/shared/util/wallets.js
index 819698953..455ce2f62 100644
--- a/js/src/util/wallets.js
+++ b/js/src/shared/util/wallets.js
@@ -22,9 +22,9 @@ import Abi from '@parity/abi';
import Contract from '@parity/api/contract';
import { bytesToHex, toHex } from '@parity/api/util/format';
-import { validateAddress } from '~/util/validation';
-import WalletAbi from '~/contracts/abi/wallet.json';
-import OldWalletAbi from '~/contracts/abi/old-wallet.json';
+import WalletAbi from '../contracts/abi/wallet.json';
+import OldWalletAbi from '../contracts/abi/old-wallet.json';
+import { validateAddress } from './validation';
const LS_PENDING_CONTRACTS_KEY = '_parity::wallets::pendingContracts';
diff --git a/js/src/shell/Dapps/dappStore.spec.js b/js/src/shell/Dapps/dappStore.spec.js
index 5aaa91def..36740f9a7 100644
--- a/js/src/shell/Dapps/dappStore.spec.js
+++ b/js/src/shell/Dapps/dappStore.spec.js
@@ -18,7 +18,7 @@ import BigNumber from 'bignumber.js';
import sinon from 'sinon';
import localStore from 'store';
-import Contracts from '~/contracts';
+import Contracts from '@parity/shared/contracts';
import Store, { LS_KEY_DISPLAY } from './dappsStore';
diff --git a/js/src/shell/Dapps/dappsStore.js b/js/src/shell/Dapps/dappsStore.js
index dd0b24311..74d0a86c8 100644
--- a/js/src/shell/Dapps/dappsStore.js
+++ b/js/src/shell/Dapps/dappsStore.js
@@ -18,12 +18,8 @@ import EventEmitter from 'eventemitter3';
import { action, computed, observable, transaction } from 'mobx';
import store from 'store';
-import Contracts from '~/contracts';
-import {
- fetchBuiltinApps, fetchLocalApps,
- fetchRegistryAppIds, fetchRegistryApp,
- subscribeToChanges
-} from '~/util/dapps';
+import Contracts from '@parity/shared/contracts';
+import { fetchBuiltinApps, fetchLocalApps, fetchRegistryAppIds, fetchRegistryApp, subscribeToChanges } from '@parity/shared/util/dapps';
const LS_KEY_DISPLAY = 'displayApps';
const LS_KEY_EXTERNAL_ACCEPT = 'acceptExternal';
diff --git a/js/src/shell/Extension/store.js b/js/src/shell/Extension/store.js
index d1df2eb5b..a2fb5c7f4 100644
--- a/js/src/shell/Extension/store.js
+++ b/js/src/shell/Extension/store.js
@@ -21,7 +21,7 @@ import { action, computed, observable } from 'mobx';
import store from 'store';
import browser from 'useragent.js/lib/browser';
-import { DOMAIN } from '~/util/constants';
+import { DOMAIN } from '@parity/shared/util/constants';
const A_DAY = 24 * 60 * 60 * 1000;
const NEXT_DISPLAY = '_parity::extensionWarning::nextDisplay';
diff --git a/js/src/shell/FirstRun/firstRun.js b/js/src/shell/FirstRun/firstRun.js
index 6ca65978e..2d4e1e9a7 100644
--- a/js/src/shell/FirstRun/firstRun.js
+++ b/js/src/shell/FirstRun/firstRun.js
@@ -21,9 +21,9 @@ import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { createIdentityImg } from '@parity/api/util/identity';
+import { newError } from '@parity/shared/redux/actions';
import ParityLogo from '~/../assets/images/parity-logo-black-no-text.svg';
-import { newError } from '~/redux/actions';
import { Button, Portal } from '~/ui';
import { CheckIcon, DoneIcon, NextIcon, PrintIcon } from '~/ui/Icons';
diff --git a/js/src/shell/Requests/requests.js b/js/src/shell/Requests/requests.js
index e53c049f9..072b373f6 100644
--- a/js/src/shell/Requests/requests.js
+++ b/js/src/shell/Requests/requests.js
@@ -20,7 +20,8 @@ import ReactDOM from 'react-dom';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { hideRequest } from '~/redux/providers/requestsActions';
+import { hideRequest } from '@parity/shared/redux/providers/requestsActions';
+
import { MethodDecoding, IdentityIcon, Progress, ScrollableText, ShortenedHash } from '~/ui';
import styles from './requests.css';
diff --git a/js/src/shell/Signer/Embedded/embedded.js b/js/src/shell/Signer/Embedded/embedded.js
index ce01e42b7..30d87571c 100644
--- a/js/src/shell/Signer/Embedded/embedded.js
+++ b/js/src/shell/Signer/Embedded/embedded.js
@@ -20,10 +20,12 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import Store from '../store';
-import * as RequestsActions from '~/redux/providers/signerActions';
+import * as RequestsActions from '@parity/shared/redux/providers/signerActions';
+
import { Container } from '~/ui';
+import Store from '../store';
+
import RequestPending from '../components/RequestPending';
import styles from './embedded.css';
diff --git a/js/src/shell/Signer/components/SignRequest/signRequest.js b/js/src/shell/Signer/components/SignRequest/signRequest.js
index 705b89965..212716035 100644
--- a/js/src/shell/Signer/components/SignRequest/signRequest.js
+++ b/js/src/shell/Signer/components/SignRequest/signRequest.js
@@ -19,7 +19,7 @@ import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
-import HardwareStore from '~/mobx/hardwareStore';
+import HardwareStore from '@parity/shared/mobx/hardwareStore';
import Account from '../Account';
import TransactionPendingForm from '../TransactionPendingForm';
diff --git a/js/src/shell/Signer/components/TransactionPending/transactionPending.js b/js/src/shell/Signer/components/TransactionPending/transactionPending.js
index b9cc8f684..a9eb5bdeb 100644
--- a/js/src/shell/Signer/components/TransactionPending/transactionPending.js
+++ b/js/src/shell/Signer/components/TransactionPending/transactionPending.js
@@ -19,7 +19,8 @@ import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
-import HardwareStore from '~/mobx/hardwareStore';
+import HardwareStore from '@parity/shared/mobx/hardwareStore';
+
import { Button, GasPriceEditor } from '~/ui';
import TransactionMainDetails from '../TransactionMainDetails';
diff --git a/js/src/shell/Snackbar/snackbar.js b/js/src/shell/Snackbar/snackbar.js
index 585cbc6ac..5578370e5 100644
--- a/js/src/shell/Snackbar/snackbar.js
+++ b/js/src/shell/Snackbar/snackbar.js
@@ -18,9 +18,9 @@ import React, { PropTypes } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { Snackbar as SnackbarUI } from '~/ui';
+import { closeSnackbar } from '@parity/shared/redux/providers/snackbarActions';
-import { closeSnackbar } from '~/redux/providers/snackbarActions';
+import { Snackbar as SnackbarUI } from '~/ui';
function Snackbar ({ closeSnackbar, cooldown = 3500, message, open = false }) {
return (
diff --git a/js/src/shell/embed.js b/js/src/shell/embed.js
index 2543f6ad2..5d033fe5b 100644
--- a/js/src/shell/embed.js
+++ b/js/src/shell/embed.js
@@ -25,16 +25,16 @@ import ReactDOM from 'react-dom';
import injectTapEventPlugin from 'react-tap-event-plugin';
-import SecureApi from '~/secureApi';
-import ContractInstances from '~/contracts';
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
+import { patchApi } from '@parity/shared/util/tx';
+
+import SecureApi from '~/secureApi';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
-import { patchApi } from '~/util/tx';
-
-import '~/environment';
+import '@parity/shared/environment';
import '~/../assets/fonts/Roboto/font.css';
import '~/../assets/fonts/RobotoMono/font.css';
diff --git a/js/src/shell/index.js b/js/src/shell/index.js
index 49e0f68d9..401c66615 100644
--- a/js/src/shell/index.js
+++ b/js/src/shell/index.js
@@ -27,20 +27,24 @@ import injectTapEventPlugin from 'react-tap-event-plugin';
import { IndexRoute, Redirect, Route, Router, hashHistory } from 'react-router';
import qs from 'querystring';
-import SecureApi from '~/secureApi';
-import ContractInstances from '~/contracts';
+import builtinDapps from '@parity/shared/config/dappsBuiltin.json';
+import viewsDapps from '@parity/shared/config/dappsViews.json';
+import ContractInstances from '@parity/shared/contracts';
+import HistoryStore from '@parity/shared/mobx/historyStore';
+import { initStore } from '@parity/shared/redux';
+import { patchApi } from '@parity/shared/util/tx';
+
+import '@parity/shared/environment';
+
+import SecureApi from '~/secureApi';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
-import { patchApi } from '~/util/tx';
import Application from './Application';
import Dapp from './Dapp';
import Dapps from './Dapps';
-import '~/environment';
-
injectTapEventPlugin();
if (process.env.NODE_ENV === 'development') {
@@ -69,10 +73,6 @@ const store = initStore(api, hashHistory);
window.secureApi = api;
-import HistoryStore from '~/mobx/historyStore';
-import builtinDapps from '~/config/dappsBuiltin.json';
-import viewsDapps from '~/config/dappsViews.json';
-
const dapps = [].concat(viewsDapps, builtinDapps);
const dappsHistory = HistoryStore.get('dapps');
diff --git a/js/src/ui/AccountCard/accountCard.spec.js b/js/src/ui/AccountCard/accountCard.spec.js
index 045d18ee7..bff5cf5f2 100644
--- a/js/src/ui/AccountCard/accountCard.spec.js
+++ b/js/src/ui/AccountCard/accountCard.spec.js
@@ -19,7 +19,7 @@ import { shallow } from 'enzyme';
import React from 'react';
import sinon from 'sinon';
-import { ETH_TOKEN } from '~/util/tokens';
+import { ETH_TOKEN } from '@parity/shared/util/tokens';
import AccountCard from './';
diff --git a/js/src/ui/Actionbar/Import/import.js b/js/src/ui/Actionbar/Import/import.js
index a447be4cb..a10486bf3 100644
--- a/js/src/ui/Actionbar/Import/import.js
+++ b/js/src/ui/Actionbar/Import/import.js
@@ -17,7 +17,7 @@
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import Button from '../../Button';
import FileSelect from '../../Form/FileSelect';
diff --git a/js/src/ui/Actionbar/actionbar.js b/js/src/ui/Actionbar/actionbar.js
index 2564d7c10..cfec3cf2f 100644
--- a/js/src/ui/Actionbar/actionbar.js
+++ b/js/src/ui/Actionbar/actionbar.js
@@ -16,7 +16,7 @@
import React, { PropTypes } from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from './actionbar.css';
diff --git a/js/src/ui/Button/button.js b/js/src/ui/Button/button.js
index a05e1e0e1..9f903dacf 100644
--- a/js/src/ui/Button/button.js
+++ b/js/src/ui/Button/button.js
@@ -17,7 +17,7 @@
import React, { PropTypes } from 'react';
import { Button as SemButton } from 'semantic-ui-react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
export default function Button ({ active, animated, basic, className, color, disabled, fullWidth, icon, label, onClick, primary, size, toggle }) {
return (
diff --git a/js/src/ui/ConfirmDialog/confirmDialog.js b/js/src/ui/ConfirmDialog/confirmDialog.js
index f6514d63d..6ca2a05a6 100644
--- a/js/src/ui/ConfirmDialog/confirmDialog.js
+++ b/js/src/ui/ConfirmDialog/confirmDialog.js
@@ -17,7 +17,7 @@
import React, { PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import Button from '../Button';
import Portal from '../Portal';
diff --git a/js/src/ui/Container/Title/Byline/byline.js b/js/src/ui/Container/Title/Byline/byline.js
index 62d22570d..617467607 100644
--- a/js/src/ui/Container/Title/Byline/byline.js
+++ b/js/src/ui/Container/Title/Byline/byline.js
@@ -16,7 +16,7 @@
import React from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from '../title.css';
diff --git a/js/src/ui/Container/Title/Description/description.js b/js/src/ui/Container/Title/Description/description.js
index 27aca973a..2d1a5a8d3 100644
--- a/js/src/ui/Container/Title/Description/description.js
+++ b/js/src/ui/Container/Title/Description/description.js
@@ -16,7 +16,7 @@
import React from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from '../title.css';
diff --git a/js/src/ui/Container/Title/title.js b/js/src/ui/Container/Title/title.js
index 415796129..c2543a581 100644
--- a/js/src/ui/Container/Title/title.js
+++ b/js/src/ui/Container/Title/title.js
@@ -16,7 +16,7 @@
import React, { PropTypes } from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import Byline from './Byline';
import Description from './Description';
diff --git a/js/src/ui/Container/container.js b/js/src/ui/Container/container.js
index 5b6dbdcf9..96df247cc 100644
--- a/js/src/ui/Container/container.js
+++ b/js/src/ui/Container/container.js
@@ -18,7 +18,7 @@ import React, { Component, PropTypes } from 'react';
import { Link } from 'react-router';
import { Card } from 'material-ui/Card';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import DappLink from '../DappLink';
import Title from './Title';
diff --git a/js/src/ui/CopyToClipboard/copyToClipboard.js b/js/src/ui/CopyToClipboard/copyToClipboard.js
index 016730fce..cc18d1556 100644
--- a/js/src/ui/CopyToClipboard/copyToClipboard.js
+++ b/js/src/ui/CopyToClipboard/copyToClipboard.js
@@ -21,7 +21,7 @@ import Clipboard from 'react-copy-to-clipboard';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { showSnackbar } from '~/redux/providers/snackbarActions';
+import { showSnackbar } from '@parity/shared/redux/providers/snackbarActions';
import { CopyIcon } from '../Icons';
import Theme from '../Theme';
diff --git a/js/src/ui/DappLink/dappLink.js b/js/src/ui/DappLink/dappLink.js
index a097a183a..feb8a1cc7 100644
--- a/js/src/ui/DappLink/dappLink.js
+++ b/js/src/ui/DappLink/dappLink.js
@@ -16,7 +16,7 @@
import React, { Component, PropTypes } from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from './dappLink.css';
diff --git a/js/src/ui/Form/AddressSelect/addressSelect.js b/js/src/ui/Form/AddressSelect/addressSelect.js
index 4b228a6c2..cb6883c33 100644
--- a/js/src/ui/Form/AddressSelect/addressSelect.js
+++ b/js/src/ui/Form/AddressSelect/addressSelect.js
@@ -23,14 +23,14 @@ import { observer } from 'mobx-react';
import TextFieldUnderline from 'material-ui/TextField/TextFieldUnderline';
import apiutil from '@parity/api/util';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
+import { validateAddress } from '@parity/shared/util/validation';
import AccountCard from '~/ui/AccountCard';
import CopyToClipboard from '~/ui/CopyToClipboard';
import InputAddress from '~/ui/Form/InputAddress';
import Loading from '~/ui/Loading';
import Portal from '~/ui/Portal';
-import { nodeOrStringProptype } from '~/util/proptypes';
-import { validateAddress } from '~/util/validation';
import AddressSelectStore from './addressSelectStore';
import styles from './addressSelect.css';
diff --git a/js/src/ui/Form/AddressSelect/addressSelectStore.js b/js/src/ui/Form/AddressSelect/addressSelectStore.js
index 24cdf7c9f..d06c123d3 100644
--- a/js/src/ui/Form/AddressSelect/addressSelectStore.js
+++ b/js/src/ui/Form/AddressSelect/addressSelectStore.js
@@ -20,8 +20,7 @@ import { flatMap, uniqBy } from 'lodash';
import { FormattedMessage } from 'react-intl';
import { sha3 } from '@parity/api/util/sha3';
-
-import Contracts from '~/contracts';
+import Contracts from '@parity/shared/contracts';
const ZERO = /^(0x)?0*$/;
diff --git a/js/src/ui/Form/AutoComplete/autocomplete.js b/js/src/ui/Form/AutoComplete/autocomplete.js
index 63b1e65fd..0e5667398 100644
--- a/js/src/ui/Form/AutoComplete/autocomplete.js
+++ b/js/src/ui/Form/AutoComplete/autocomplete.js
@@ -20,7 +20,7 @@ import { MenuItem, AutoComplete as MUIAutoComplete, Divider as MUIDivider } from
import { PopoverAnimationVertical } from 'material-ui/Popover';
import React, { Component, PropTypes } from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from './autocomplete.css';
diff --git a/js/src/ui/Form/Checkbox/checkbox.js b/js/src/ui/Form/Checkbox/checkbox.js
index adf10592b..4f20f2014 100644
--- a/js/src/ui/Form/Checkbox/checkbox.js
+++ b/js/src/ui/Form/Checkbox/checkbox.js
@@ -17,7 +17,7 @@
import React, { PropTypes } from 'react';
import { Checkbox as SemCheckbox } from 'semantic-ui-react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
export default function Checkbox ({ checked = false, className, label, onClick, style }) {
return (
diff --git a/js/src/ui/Form/FileSelect/fileSelect.js b/js/src/ui/Form/FileSelect/fileSelect.js
index 18b2c8d8e..39bbfa4e5 100644
--- a/js/src/ui/Form/FileSelect/fileSelect.js
+++ b/js/src/ui/Form/FileSelect/fileSelect.js
@@ -18,7 +18,7 @@ import React, { Component, PropTypes } from 'react';
import Dropzone from 'react-dropzone';
import { FormattedMessage } from 'react-intl';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from './fileSelect.css';
diff --git a/js/src/ui/Form/Input/input.js b/js/src/ui/Form/Input/input.js
index 98acad855..0828b0a57 100644
--- a/js/src/ui/Form/Input/input.js
+++ b/js/src/ui/Form/Input/input.js
@@ -19,9 +19,9 @@ import { TextField } from 'material-ui';
import { noop } from 'lodash';
import keycode from 'keycode';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
-import CopyToClipboard from '../../CopyToClipboard';
+import CopyToClipboard from '~/ui/CopyToClipboard';
import styles from './input.css';
diff --git a/js/src/ui/Form/InputAddress/inputAddress.js b/js/src/ui/Form/InputAddress/inputAddress.js
index a590beddd..65fb4ce7c 100644
--- a/js/src/ui/Form/InputAddress/inputAddress.js
+++ b/js/src/ui/Form/InputAddress/inputAddress.js
@@ -18,12 +18,11 @@ import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
import util from '@parity/api/util';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
+import { isNullAddress } from '@parity/shared/util/validation';
-import { nodeOrStringProptype } from '~/util/proptypes';
-import { isNullAddress } from '~/util/validation';
-
-import IdentityIcon from '../../IdentityIcon';
-import Input from '../Input';
+import IdentityIcon from '~/ui/IdentityIcon';
+import Input from '~/ui/Form/Input';
import styles from './inputAddress.css';
diff --git a/js/src/ui/Form/InputAddressSelect/inputAddressSelect.js b/js/src/ui/Form/InputAddressSelect/inputAddressSelect.js
index 8199fece6..17e2f39e8 100644
--- a/js/src/ui/Form/InputAddressSelect/inputAddressSelect.js
+++ b/js/src/ui/Form/InputAddressSelect/inputAddressSelect.js
@@ -17,7 +17,7 @@
import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import AddressSelect from '../AddressSelect';
diff --git a/js/src/ui/Form/InputChip/inputChip.js b/js/src/ui/Form/InputChip/inputChip.js
index 479f17da0..72896a628 100644
--- a/js/src/ui/Form/InputChip/inputChip.js
+++ b/js/src/ui/Form/InputChip/inputChip.js
@@ -20,7 +20,7 @@ import ChipInput from 'material-ui-chip-input';
import { blue300 } from 'material-ui/styles/colors';
import { uniq } from 'lodash';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from './inputChip.css';
diff --git a/js/src/ui/Form/InputInline/inputInline.js b/js/src/ui/Form/InputInline/inputInline.js
index 5736b7d39..dec0eb028 100644
--- a/js/src/ui/Form/InputInline/inputInline.js
+++ b/js/src/ui/Form/InputInline/inputInline.js
@@ -16,7 +16,7 @@
import React, { Component, PropTypes } from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import Input from '../Input';
diff --git a/js/src/ui/Form/RadioButtons/radioButtons.js b/js/src/ui/Form/RadioButtons/radioButtons.js
index bebe9c0f8..58c90df6f 100644
--- a/js/src/ui/Form/RadioButtons/radioButtons.js
+++ b/js/src/ui/Form/RadioButtons/radioButtons.js
@@ -17,7 +17,7 @@
import { RadioButton, RadioButtonGroup } from 'material-ui/RadioButton';
import React, { Component, PropTypes } from 'react';
-import { arrayOrObjectProptype } from '~/util/proptypes';
+import { arrayOrObjectProptype } from '@parity/shared/util/proptypes';
import Label from '../Label';
import styles from './radioButtons.css';
diff --git a/js/src/ui/Form/Select/select.js b/js/src/ui/Form/Select/select.js
index cb6e864b7..3edf583c2 100644
--- a/js/src/ui/Form/Select/select.js
+++ b/js/src/ui/Form/Select/select.js
@@ -17,7 +17,7 @@
import React, { Component, PropTypes } from 'react';
import { MenuItem, SelectField } from 'material-ui';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
// TODO: duplicated in Input
const UNDERLINE_DISABLED = {
diff --git a/js/src/ui/Form/TypedInput/typedInput.js b/js/src/ui/Form/TypedInput/typedInput.js
index c3a31fe07..33a89531c 100644
--- a/js/src/ui/Form/TypedInput/typedInput.js
+++ b/js/src/ui/Form/TypedInput/typedInput.js
@@ -23,13 +23,13 @@ import IconButton from 'material-ui/IconButton';
import { fromWei, toWei } from '@parity/api/util/wei';
import { bytesToHex } from '@parity/api/util/format';
+import { ABI_TYPES, parseAbiType } from '@parity/shared/util/abi';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import Input from '~/ui/Form/Input';
import InputAddressSelect from '~/ui/Form/InputAddressSelect';
import Select from '~/ui/Form/Select';
import { AddIcon, RemoveIcon } from '~/ui/Icons';
-import { ABI_TYPES, parseAbiType } from '~/util/abi';
-import { nodeOrStringProptype } from '~/util/proptypes';
import styles from './typedInput.css';
diff --git a/js/src/ui/Form/TypedInput/typedInput.spec.js b/js/src/ui/Form/TypedInput/typedInput.spec.js
index 56d81b642..a552ca12b 100644
--- a/js/src/ui/Form/TypedInput/typedInput.spec.js
+++ b/js/src/ui/Form/TypedInput/typedInput.spec.js
@@ -18,7 +18,7 @@ import { shallow } from 'enzyme';
import React from 'react';
import sinon from 'sinon';
-import { ABI_TYPES } from '~/util/abi';
+import { ABI_TYPES } from '@parity/shared/util/abi';
import TypedInput from './';
diff --git a/js/src/ui/GasPriceEditor/store.js b/js/src/ui/GasPriceEditor/store.js
index a7a3b914b..d5187ed06 100644
--- a/js/src/ui/GasPriceEditor/store.js
+++ b/js/src/ui/GasPriceEditor/store.js
@@ -17,8 +17,8 @@
import BigNumber from 'bignumber.js';
import { action, computed, observable, transaction } from 'mobx';
-import { ERRORS, validatePositiveNumber } from '~/util/validation';
-import { DEFAULT_GAS, DEFAULT_GASPRICE, MAX_GAS_ESTIMATION } from '~/util/constants';
+import { ERRORS, validatePositiveNumber } from '@parity/shared/util/validation';
+import { DEFAULT_GAS, DEFAULT_GASPRICE, MAX_GAS_ESTIMATION } from '@parity/shared/util/constants';
const CONDITIONS = {
NONE: 'none',
diff --git a/js/src/ui/GasPriceEditor/store.spec.js b/js/src/ui/GasPriceEditor/store.spec.js
index 4580748ea..b6d5612d5 100644
--- a/js/src/ui/GasPriceEditor/store.spec.js
+++ b/js/src/ui/GasPriceEditor/store.spec.js
@@ -17,8 +17,8 @@
import BigNumber from 'bignumber.js';
import sinon from 'sinon';
-import { DEFAULT_GAS, DEFAULT_GASPRICE, MAX_GAS_ESTIMATION } from '~/util/constants';
-import { ERRORS } from '~/util/validation';
+import { DEFAULT_GAS, DEFAULT_GASPRICE, MAX_GAS_ESTIMATION } from '@parity/shared/util/constants';
+import { ERRORS } from '@parity/shared/util/validation';
import GasPriceEditor from './gasPriceEditor';
import { CONDITIONS } from './store';
diff --git a/js/src/ui/IdentityIcon/identityIcon.js b/js/src/ui/IdentityIcon/identityIcon.js
index 1a46da249..ca849fc6b 100644
--- a/js/src/ui/IdentityIcon/identityIcon.js
+++ b/js/src/ui/IdentityIcon/identityIcon.js
@@ -17,8 +17,8 @@
import React, { Component, PropTypes } from 'react';
import { createIdentityImg } from '@parity/api/util/identity';
+import { isNullAddress } from '@parity/shared/util/validation';
-import { isNullAddress } from '~/util/validation';
import IconCache from '~/ui/IconCache';
import { CancelIcon, ContractIcon } from '~/ui/Icons';
diff --git a/js/src/ui/IdentityName/identityName.js b/js/src/ui/IdentityName/identityName.js
index eccb65c61..92997351a 100644
--- a/js/src/ui/IdentityName/identityName.js
+++ b/js/src/ui/IdentityName/identityName.js
@@ -18,7 +18,8 @@ import React, { PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
-import { isNullAddress } from '~/util/validation';
+import { isNullAddress } from '@parity/shared/util/validation';
+
import ShortenedHash from '../ShortenedHash';
const defaultName = (
diff --git a/js/src/ui/MethodDecoding/methodDecodingStore.js b/js/src/ui/MethodDecoding/methodDecodingStore.js
index d16f33439..0fe72895b 100644
--- a/js/src/ui/MethodDecoding/methodDecodingStore.js
+++ b/js/src/ui/MethodDecoding/methodDecodingStore.js
@@ -14,11 +14,10 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import Contracts from '~/contracts';
-import Abi from '~/abi';
-import * as abis from '~/contracts/abi';
-
+import Abi from '@parity/abi';
import { decodeMethodInput } from '@parity/api/util/decode';
+import Contracts from '@parity/shared/contracts';
+import * as abis from '@parity/shared/contracts/abi';
const CONTRACT_CREATE = '0x60606040';
diff --git a/js/src/ui/Modal/Busy/busy.js b/js/src/ui/Modal/Busy/busy.js
index 3c1720720..cbf191197 100644
--- a/js/src/ui/Modal/Busy/busy.js
+++ b/js/src/ui/Modal/Busy/busy.js
@@ -16,7 +16,7 @@
import React, { PropTypes } from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from './busy.css';
diff --git a/js/src/ui/ModalBox/modalBox.js b/js/src/ui/ModalBox/modalBox.js
index bfcfbe88a..58f942ced 100644
--- a/js/src/ui/ModalBox/modalBox.js
+++ b/js/src/ui/ModalBox/modalBox.js
@@ -16,7 +16,7 @@
import React, { PropTypes } from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import Body from './body';
import Summary from './summary';
diff --git a/js/src/ui/ModalBox/summary.js b/js/src/ui/ModalBox/summary.js
index cb198c472..4adbf914c 100644
--- a/js/src/ui/ModalBox/summary.js
+++ b/js/src/ui/ModalBox/summary.js
@@ -16,7 +16,7 @@
import React from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from './modalBox.css';
diff --git a/js/src/ui/Page/page.js b/js/src/ui/Page/page.js
index 7de6d9d9f..9fe276154 100644
--- a/js/src/ui/Page/page.js
+++ b/js/src/ui/Page/page.js
@@ -17,7 +17,7 @@
import React, { PropTypes } from 'react';
import Actionbar from '../Actionbar';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from './page.css';
diff --git a/js/src/ui/Portal/portal.js b/js/src/ui/Portal/portal.js
index 4ae36ccf4..a31efdecc 100644
--- a/js/src/ui/Portal/portal.js
+++ b/js/src/ui/Portal/portal.js
@@ -20,7 +20,8 @@ import ReactPortal from 'react-portal';
import keycode from 'keycode';
import { noop } from 'lodash';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
+
import { CloseIcon } from '~/ui/Icons';
import StackEventListener from '~/ui/StackEventListener';
import Title from '~/ui/Title';
diff --git a/js/src/ui/SectionList/Overlay/overlay.js b/js/src/ui/SectionList/Overlay/overlay.js
index 087d3fbb0..95a6f1b83 100644
--- a/js/src/ui/SectionList/Overlay/overlay.js
+++ b/js/src/ui/SectionList/Overlay/overlay.js
@@ -16,7 +16,7 @@
import React from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from './overlay.css';
diff --git a/js/src/ui/SectionList/sectionList.js b/js/src/ui/SectionList/sectionList.js
index 8bd0b9a73..a9f6ea3ec 100644
--- a/js/src/ui/SectionList/sectionList.js
+++ b/js/src/ui/SectionList/sectionList.js
@@ -16,7 +16,7 @@
import React, { Component, PropTypes } from 'react';
-import { arrayOrObjectProptype, nodeOrStringProptype } from '~/util/proptypes';
+import { arrayOrObjectProptype, nodeOrStringProptype } from '@parity/shared/util/proptypes';
import { chunkArray } from './array';
import Overlay from './Overlay';
diff --git a/js/src/ui/SelectionList/selectionList.js b/js/src/ui/SelectionList/selectionList.js
index 266dce893..b63e6f0b0 100644
--- a/js/src/ui/SelectionList/selectionList.js
+++ b/js/src/ui/SelectionList/selectionList.js
@@ -17,9 +17,10 @@
import { noop } from 'lodash';
import React, { Component, PropTypes } from 'react';
+import { arrayOrObjectProptype } from '@parity/shared/util/proptypes';
+
import { StarIcon } from '~/ui/Icons';
import SectionList from '~/ui/SectionList';
-import { arrayOrObjectProptype } from '~/util/proptypes';
import styles from './selectionList.css';
diff --git a/js/src/ui/Tags/tags.js b/js/src/ui/Tags/tags.js
index 503867dd6..30f2c434f 100644
--- a/js/src/ui/Tags/tags.js
+++ b/js/src/ui/Tags/tags.js
@@ -16,7 +16,7 @@
import React, { Component, PropTypes } from 'react';
-import { arrayOrObjectProptype } from '~/util/proptypes';
+import { arrayOrObjectProptype } from '@parity/shared/util/proptypes';
import styles from './tags.css';
diff --git a/js/src/ui/Title/title.js b/js/src/ui/Title/title.js
index 49e607c34..410e5a060 100644
--- a/js/src/ui/Title/title.js
+++ b/js/src/ui/Title/title.js
@@ -16,8 +16,9 @@
import React, { PropTypes } from 'react';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
+
import { Title as ContainerTitle } from '~/ui/Container';
-import { nodeOrStringProptype } from '~/util/proptypes';
import Steps from './Steps';
import Waiting from './Waiting';
diff --git a/js/src/ui/TxHash/txHash.js b/js/src/ui/TxHash/txHash.js
index 9ffa9166c..619be7de1 100644
--- a/js/src/ui/TxHash/txHash.js
+++ b/js/src/ui/TxHash/txHash.js
@@ -19,10 +19,10 @@ import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
+import { DEFAULT_GAS } from '@parity/shared/util/constants';
+
import { txLink } from '~/3rdparty/etherscan/links';
import Warning from '~/ui/Warning';
-import { DEFAULT_GAS } from '~/util/constants';
-
import Progress from '~/ui/Progress';
import ShortenedHash from '~/ui/ShortenedHash';
diff --git a/js/src/ui/Warning/warning.js b/js/src/ui/Warning/warning.js
index f849489d8..602f77ca4 100644
--- a/js/src/ui/Warning/warning.js
+++ b/js/src/ui/Warning/warning.js
@@ -16,7 +16,7 @@
import React from 'react';
-import { nodeOrStringProptype } from '~/util/proptypes';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
import styles from './warning.css';
diff --git a/js/src/views/Account/DeleteAccount/deleteAccount.js b/js/src/views/Account/DeleteAccount/deleteAccount.js
index cd69d6bd9..e3d9b95f9 100644
--- a/js/src/views/Account/DeleteAccount/deleteAccount.js
+++ b/js/src/views/Account/DeleteAccount/deleteAccount.js
@@ -19,8 +19,9 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
+import { newError } from '@parity/shared/redux/actions';
+
import { ConfirmDialog, IdentityIcon, IdentityName, Input } from '~/ui';
-import { newError } from '~/redux/actions';
import styles from './deleteAccount.css';
diff --git a/js/src/views/Account/EditMeta/editMeta.js b/js/src/views/Account/EditMeta/editMeta.js
index 5d0c91dbe..0bc24f104 100644
--- a/js/src/views/Account/EditMeta/editMeta.js
+++ b/js/src/views/Account/EditMeta/editMeta.js
@@ -20,7 +20,8 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError } from '~/redux/actions';
+import { newError } from '@parity/shared/redux/actions';
+
import { Button, Form, Input, InputChip, Portal, VaultSelect } from '~/ui';
import { CancelIcon, SaveIcon } from '~/ui/Icons';
import VaultStore from '~/views/Vaults/store';
diff --git a/js/src/views/Account/EditMeta/store.js b/js/src/views/Account/EditMeta/store.js
index da3d88cd7..55e1d3633 100644
--- a/js/src/views/Account/EditMeta/store.js
+++ b/js/src/views/Account/EditMeta/store.js
@@ -16,7 +16,7 @@
import { action, computed, observable, transaction } from 'mobx';
-import { validateName } from '~/util/validation';
+import { validateName } from '@parity/shared/util/validation';
export default class Store {
@observable address = null;
diff --git a/js/src/views/Account/Header/header.spec.js b/js/src/views/Account/Header/header.spec.js
index d1e4c47e3..d761807b4 100644
--- a/js/src/views/Account/Header/header.spec.js
+++ b/js/src/views/Account/Header/header.spec.js
@@ -18,7 +18,7 @@ import BigNumber from 'bignumber.js';
import { shallow } from 'enzyme';
import React from 'react';
-import { ETH_TOKEN } from '~/util/tokens';
+import { ETH_TOKEN } from '@parity/shared/util/tokens';
import Header from './';
diff --git a/js/src/views/Account/PasswordManager/passwordManager.js b/js/src/views/Account/PasswordManager/passwordManager.js
index ce770afbf..3201f57e0 100644
--- a/js/src/views/Account/PasswordManager/passwordManager.js
+++ b/js/src/views/Account/PasswordManager/passwordManager.js
@@ -22,7 +22,8 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError, openSnackbar } from '~/redux/actions';
+import { newError, openSnackbar } from '@parity/shared/redux/actions';
+
import { Button, IdentityName, IdentityIcon, Portal } from '~/ui';
import PasswordStrength from '~/ui/Form/PasswordStrength';
import Form, { Input } from '~/ui/Form';
diff --git a/js/src/views/Account/Transfer/Details/details.js b/js/src/views/Account/Transfer/Details/details.js
index ecc102718..2bbf6d4a7 100644
--- a/js/src/views/Account/Transfer/Details/details.js
+++ b/js/src/views/Account/Transfer/Details/details.js
@@ -17,8 +17,9 @@
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
+import { nullableProptype } from '@parity/shared/util/proptypes';
+
import Form, { Input, InputAddressSelect, AddressSelect, Checkbox } from '~/ui/Form';
-import { nullableProptype } from '~/util/proptypes';
import TokenSelect from './tokenSelect';
import styles from '../transfer.css';
diff --git a/js/src/views/Account/Transfer/store.js b/js/src/views/Account/Transfer/store.js
index 509895223..66fddf1d6 100644
--- a/js/src/views/Account/Transfer/store.js
+++ b/js/src/views/Account/Transfer/store.js
@@ -20,13 +20,13 @@ import BigNumber from 'bignumber.js';
import Contract from '@parity/api/contract';
import { fromWei } from '@parity/api/util/wei';
+import { getLogger, LOG_KEYS } from '@parity/shared/config';
+import { eip20 as tokenAbi, wallet as walletAbi } from '@parity/shared/contracts/abi';
+import { DEFAULT_GAS, DEFAULT_GASPRICE, MAX_GAS_ESTIMATION } from '@parity/shared/util/constants';
+import { ETH_TOKEN } from '@parity/shared/util/tokens';
-import { eip20 as tokenAbi, wallet as walletAbi } from '~/contracts/abi';
import ERRORS from './errors';
-import { DEFAULT_GAS, DEFAULT_GASPRICE, MAX_GAS_ESTIMATION } from '~/util/constants';
-import { ETH_TOKEN } from '~/util/tokens';
import GasPriceStore from '~/ui/GasPriceEditor/store';
-import { getLogger, LOG_KEYS } from '~/config';
const log = getLogger(LOG_KEYS.TransferModalStore);
diff --git a/js/src/views/Account/Transfer/transfer.js b/js/src/views/Account/Transfer/transfer.js
index ab769ff02..c4c3de74d 100644
--- a/js/src/views/Account/Transfer/transfer.js
+++ b/js/src/views/Account/Transfer/transfer.js
@@ -21,10 +21,11 @@ import { bindActionCreators } from 'redux';
import { observer } from 'mobx-react';
import { pick } from 'lodash';
+import { nullableProptype } from '@parity/shared/util/proptypes';
+
import { Button, IdentityIcon, Portal, Warning } from '~/ui';
import { newError } from '~/ui/Errors/actions';
import { CancelIcon, NextIcon, PrevIcon } from '~/ui/Icons';
-import { nullableProptype } from '~/util/proptypes';
import Details from './Details';
import Extras from './Extras';
diff --git a/js/src/views/Account/Verification/GatherData/gatherData.js b/js/src/views/Account/Verification/GatherData/gatherData.js
index 12369359f..c72c706e0 100644
--- a/js/src/views/Account/Verification/GatherData/gatherData.js
+++ b/js/src/views/Account/Verification/GatherData/gatherData.js
@@ -22,7 +22,7 @@ import { fromWei } from '@parity/api/util/wei';
import { Checkbox, Form, Input } from '~/ui';
import { DoneIcon, ErrorIcon, InfoIcon } from '~/ui/Icons';
-import { nullableProptype } from '~/util/proptypes';
+import { nullableProptype } from '@parity/shared/util/proptypes';
import smsTermsOfService from '~/3rdparty/sms-verification/terms-of-service';
import emailTermsOfService from '~/3rdparty/email-verification/terms-of-service';
diff --git a/js/src/views/Account/Verification/QueryCode/queryCode.js b/js/src/views/Account/Verification/QueryCode/queryCode.js
index 608e92f3f..b57dc4c1e 100644
--- a/js/src/views/Account/Verification/QueryCode/queryCode.js
+++ b/js/src/views/Account/Verification/QueryCode/queryCode.js
@@ -17,8 +17,9 @@
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
+import { nodeOrStringProptype } from '@parity/shared/util/proptypes';
+
import { Form, Input } from '~/ui';
-import { nodeOrStringProptype } from '~/util/proptypes';
export default class QueryCode extends Component {
static propTypes = {
diff --git a/js/src/views/Account/Verification/SendConfirmation/sendConfirmation.js b/js/src/views/Account/Verification/SendConfirmation/sendConfirmation.js
index bcff62591..bfa8fe3ea 100644
--- a/js/src/views/Account/Verification/SendConfirmation/sendConfirmation.js
+++ b/js/src/views/Account/Verification/SendConfirmation/sendConfirmation.js
@@ -17,7 +17,8 @@
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
-import { nullableProptype } from '~/util/proptypes';
+import { nullableProptype } from '@parity/shared/util/proptypes';
+
import TxHash from '~/ui/TxHash';
import {
POSTING_CONFIRMATION, POSTED_CONFIRMATION
diff --git a/js/src/views/Account/Verification/SendRequest/sendRequest.js b/js/src/views/Account/Verification/SendRequest/sendRequest.js
index 7df4ef1e4..417ce982c 100644
--- a/js/src/views/Account/Verification/SendRequest/sendRequest.js
+++ b/js/src/views/Account/Verification/SendRequest/sendRequest.js
@@ -17,7 +17,8 @@
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
-import { nullableProptype } from '~/util/proptypes';
+import { nullableProptype } from '@parity/shared/util/proptypes';
+
import TxHash from '~/ui/TxHash';
import {
POSTING_REQUEST, POSTED_REQUEST, REQUESTING_CODE
diff --git a/js/src/views/Account/Verification/email-store.js b/js/src/views/Account/Verification/email-store.js
index b5a996a8b..e299b70f8 100644
--- a/js/src/views/Account/Verification/email-store.js
+++ b/js/src/views/Account/Verification/email-store.js
@@ -18,8 +18,8 @@ import { observable, computed, action } from 'mobx';
import { bytesToHex } from '@parity/api/util/format';
import { sha3 } from '@parity/api/util/sha3';
+import EmailVerificationABI from '@parity/shared/contracts/abi/email-verification.json';
-import EmailVerificationABI from '~/contracts/abi/email-verification.json';
import VerificationStore, {
LOADING, QUERY_DATA, QUERY_CODE, POSTED_CONFIRMATION, DONE
} from './store';
diff --git a/js/src/views/Account/Verification/sms-store.js b/js/src/views/Account/Verification/sms-store.js
index 25c07403c..fa48fea62 100644
--- a/js/src/views/Account/Verification/sms-store.js
+++ b/js/src/views/Account/Verification/sms-store.js
@@ -17,10 +17,9 @@
import { observable, computed, action } from 'mobx';
import phone from 'phoneformat.js';
-import SMSVerificationABI from '~/contracts/abi/sms-verification.json';
-import VerificationStore, {
- LOADING, QUERY_DATA, QUERY_CODE, POSTED_CONFIRMATION, DONE
-} from './store';
+import SMSVerificationABI from '@parity/shared/contracts/abi/sms-verification.json';
+
+import VerificationStore, { LOADING, QUERY_DATA, QUERY_CODE, POSTED_CONFIRMATION, DONE } from './store';
import { isServerRunning, hasReceivedCode, postToServer } from '~/3rdparty/sms-verification';
// name in the `BadgeReg.sol` contract
diff --git a/js/src/views/Account/Verification/store.js b/js/src/views/Account/Verification/store.js
index b3c375dcc..50bcbe2c0 100644
--- a/js/src/views/Account/Verification/store.js
+++ b/js/src/views/Account/Verification/store.js
@@ -18,10 +18,9 @@ import { observable, autorun, action } from 'mobx';
import Contract from '@parity/api/contract';
import { sha3 } from '@parity/api/util/sha3';
-
-import Contracts from '~/contracts';
-import { checkIfVerified, findLastRequested, awaitPuzzle } from '~/contracts/verification';
-import { checkIfTxFailed, waitForConfirmations } from '~/util/tx';
+import Contracts from '@parity/shared/contracts';
+import { checkIfVerified, findLastRequested, awaitPuzzle } from '@parity/shared/contracts/verification';
+import { checkIfTxFailed, waitForConfirmations } from '@parity/shared/util/tx';
export const LOADING = 'fetching-contract';
export const QUERY_DATA = 'query-data';
diff --git a/js/src/views/Account/account.js b/js/src/views/Account/account.js
index 18139928f..c7417e041 100644
--- a/js/src/views/Account/account.js
+++ b/js/src/views/Account/account.js
@@ -20,13 +20,13 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import shapeshiftBtn from '~/../assets/images/shapeshift-btn.png';
+import HardwareStore from '@parity/shared/mobx/hardwareStore';
+import HistoryStore from '@parity/shared/mobx/historyStore';
+import { newError } from '@parity/shared/redux/actions';
+import { setVisibleAccounts } from '@parity/shared/redux/providers/personalActions';
+import { fetchCertifiers, fetchCertifications } from '@parity/shared/redux/providers/certifications/actions';
-import { newError } from '~/redux/actions';
-import HardwareStore from '~/mobx/hardwareStore';
-import HistoryStore from '~/mobx/historyStore';
-import { setVisibleAccounts } from '~/redux/providers/personalActions';
-import { fetchCertifiers, fetchCertifications } from '~/redux/providers/certifications/actions';
+import shapeshiftBtn from '~/../assets/images/shapeshift-btn.png';
import { Actionbar, Button, ConfirmDialog, Input, Page, Portal } from '~/ui';
import { DeleteIcon, DialIcon, EditIcon, LockedIcon, SendIcon, VerifyIcon, FileDownloadIcon } from '~/ui/Icons';
diff --git a/js/src/views/Account/index.js b/js/src/views/Account/index.js
index 868cd429f..1227884cd 100644
--- a/js/src/views/Account/index.js
+++ b/js/src/views/Account/index.js
@@ -21,10 +21,11 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import ContractInstances from '~/contracts';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Accounts/CreateAccount/GethCard/gethCard.js b/js/src/views/Accounts/CreateAccount/GethCard/gethCard.js
index fb95b7515..c084cb4f5 100644
--- a/js/src/views/Accounts/CreateAccount/GethCard/gethCard.js
+++ b/js/src/views/Accounts/CreateAccount/GethCard/gethCard.js
@@ -16,8 +16,9 @@
import React, { Component, PropTypes } from 'react';
+import { ETH_TOKEN } from '@parity/shared/util/tokens';
+
import { AccountCard } from '~/ui';
-import { ETH_TOKEN } from '~/util/tokens';
export default class GethCard extends Component {
static propTypes = {
diff --git a/js/src/views/Accounts/CreateAccount/createAccount.js b/js/src/views/Accounts/CreateAccount/createAccount.js
index 1fdc66003..4fcf4d8fe 100644
--- a/js/src/views/Accounts/CreateAccount/createAccount.js
+++ b/js/src/views/Accounts/CreateAccount/createAccount.js
@@ -21,9 +21,9 @@ import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { createIdentityImg } from '@parity/api/util/identity';
+import { newError } from '@parity/shared/redux/actions';
import ParityLogo from '~/../assets/images/parity-logo-black-no-text.svg';
-import { newError } from '~/redux/actions';
import { Button, ModalBox, Portal } from '~/ui';
import { CancelIcon, CheckIcon, DoneIcon, NextIcon, PrevIcon, PrintIcon } from '~/ui/Icons';
diff --git a/js/src/views/Accounts/CreateWallet/WalletType/walletType.js b/js/src/views/Accounts/CreateWallet/WalletType/walletType.js
index bbf55965b..baf1d19b7 100644
--- a/js/src/views/Accounts/CreateWallet/WalletType/walletType.js
+++ b/js/src/views/Accounts/CreateWallet/WalletType/walletType.js
@@ -17,7 +17,8 @@
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
-import { walletSourceURL } from '~/contracts/code/wallet';
+import { walletSourceURL } from '@parity/shared/contracts/code/wallet';
+
import { RadioButtons } from '~/ui';
const TYPES = [
diff --git a/js/src/views/Accounts/CreateWallet/createWallet.js b/js/src/views/Accounts/CreateWallet/createWallet.js
index 63be12d34..b0d57efbe 100644
--- a/js/src/views/Accounts/CreateWallet/createWallet.js
+++ b/js/src/views/Accounts/CreateWallet/createWallet.js
@@ -20,9 +20,10 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
+import { setRequest } from '@parity/shared/redux/providers/requestsActions';
+
import { Button, Portal } from '~/ui';
import { CancelIcon, DoneIcon, NextIcon } from '~/ui/Icons';
-import { setRequest } from '~/redux/providers/requestsActions';
import WalletType from './WalletType';
import WalletDetails from './WalletDetails';
diff --git a/js/src/views/Accounts/CreateWallet/createWalletStore.js b/js/src/views/Accounts/CreateWallet/createWalletStore.js
index c4526e582..0411aeeac 100644
--- a/js/src/views/Accounts/CreateWallet/createWalletStore.js
+++ b/js/src/views/Accounts/CreateWallet/createWalletStore.js
@@ -21,14 +21,12 @@ import { FormattedMessage } from 'react-intl';
import Contract from '@parity/api/contract';
import { toWei } from '@parity/api/util/wei';
-
-import Contracts from '~/contracts';
-import { wallet as walletAbi } from '~/contracts/abi';
-import { wallet as walletCode, walletLibrary as walletLibraryCode, walletLibraryRegKey, fullWalletCode } from '~/contracts/code/wallet';
-
-import { validateUint, validateAddress, validateName } from '~/util/validation';
-import { deploy } from '~/util/tx';
-import WalletsUtils from '~/util/wallets';
+import Contracts from '@parity/shared/contracts';
+import { wallet as walletAbi } from '@parity/shared/contracts/abi';
+import { wallet as walletCode, walletLibrary as walletLibraryCode, walletLibraryRegKey, fullWalletCode } from '@parity/shared/contracts/code/wallet';
+import { validateUint, validateAddress, validateName } from '@parity/shared/util/validation';
+import { deploy } from '@parity/shared/util/tx';
+import WalletsUtils from '@parity/shared/util/wallets';
const STEPS = {
TYPE: {
diff --git a/js/src/views/Accounts/ExportAccount/exportAccount.js b/js/src/views/Accounts/ExportAccount/exportAccount.js
index 48faaaec3..e0f97c292 100644
--- a/js/src/views/Accounts/ExportAccount/exportAccount.js
+++ b/js/src/views/Accounts/ExportAccount/exportAccount.js
@@ -20,8 +20,9 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError } from '~/redux/actions';
-import { personalAccountsInfo } from '~/redux/providers/personalActions';
+import { newError } from '@parity/shared/redux/actions';
+import { personalAccountsInfo } from '@parity/shared/redux/providers/personalActions';
+
import { AccountCard, Button, Portal, SelectionList } from '~/ui';
import { CancelIcon, CheckIcon } from '~/ui/Icons';
import ExportInput from './exportInput';
diff --git a/js/src/views/Accounts/List/list.js b/js/src/views/Accounts/List/list.js
index 2fa3be70b..7fa0e6c8a 100644
--- a/js/src/views/Accounts/List/list.js
+++ b/js/src/views/Accounts/List/list.js
@@ -19,9 +19,10 @@ import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
+import { ETH_TOKEN } from '@parity/shared/util/tokens';
+import { fetchCertifiers, fetchCertifications } from '@parity/shared/redux/providers/certifications/actions';
+
import { Container, SectionList } from '~/ui';
-import { fetchCertifiers, fetchCertifications } from '~/redux/providers/certifications/actions';
-import { ETH_TOKEN } from '~/util/tokens';
import Summary from '../Summary';
import styles from './list.css';
diff --git a/js/src/views/Accounts/Summary/summary.js b/js/src/views/Accounts/Summary/summary.js
index 3e0ab7eab..4e378bc4d 100644
--- a/js/src/views/Accounts/Summary/summary.js
+++ b/js/src/views/Accounts/Summary/summary.js
@@ -22,9 +22,10 @@ import { isEqual } from 'lodash';
import ReactTooltip from 'react-tooltip';
import { FormattedMessage } from 'react-intl';
+import { arrayOrObjectProptype, nullableProptype } from '@parity/shared/util/proptypes';
+
import { Balance, Container, ContainerTitle, CopyToClipboard, IdentityIcon, IdentityName, Tags, VaultTag } from '~/ui';
import Certifications from '~/ui/Certifications';
-import { arrayOrObjectProptype, nullableProptype } from '~/util/proptypes';
import styles from '../accounts.css';
diff --git a/js/src/views/Accounts/accounts.js b/js/src/views/Accounts/accounts.js
index cfafb05d6..35d7338c6 100644
--- a/js/src/views/Accounts/accounts.js
+++ b/js/src/views/Accounts/accounts.js
@@ -22,10 +22,11 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import HardwareStore from '~/mobx/hardwareStore';
+import HardwareStore from '@parity/shared/mobx/hardwareStore';
+import { setVisibleAccounts } from '@parity/shared/redux/providers/personalActions';
+
import { Actionbar, ActionbarSearch, ActionbarSort, Button, Page } from '~/ui';
import { AddIcon, FileDownloadIcon } from '~/ui/Icons';
-import { setVisibleAccounts } from '~/redux/providers/personalActions';
import CreateWallet from './CreateWallet';
import CreateAccount from './CreateAccount';
diff --git a/js/src/views/Accounts/index.js b/js/src/views/Accounts/index.js
index 7265ff545..d092a9150 100644
--- a/js/src/views/Accounts/index.js
+++ b/js/src/views/Accounts/index.js
@@ -21,13 +21,14 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
-import { api } from './parity';
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
-import ContractInstances from '~/contracts';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
+import { api } from './parity';
+
import Accounts from './accounts';
ContractInstances.get(api);
diff --git a/js/src/views/Address/Delete/delete.js b/js/src/views/Address/Delete/delete.js
index cf0380f2f..ea36bf903 100644
--- a/js/src/views/Address/Delete/delete.js
+++ b/js/src/views/Address/Delete/delete.js
@@ -19,8 +19,9 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
+import { newError } from '@parity/shared/redux/actions';
+
import { ConfirmDialog, IdentityIcon, IdentityName } from '~/ui';
-import { newError } from '~/redux/actions';
import styles from '../address.css';
diff --git a/js/src/views/Address/address.js b/js/src/views/Address/address.js
index 340232c50..26323173f 100644
--- a/js/src/views/Address/address.js
+++ b/js/src/views/Address/address.js
@@ -19,6 +19,8 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
+import { setVisibleAccounts } from '@parity/shared/redux/providers/personalActions';
+
import { Actionbar, Button, Page } from '~/ui';
import { AddIcon, DeleteIcon, EditIcon } from '~/ui/Icons';
@@ -27,7 +29,6 @@ import Header from '../Account/Header';
import Transactions from '../Account/Transactions';
import AddAddress from '../Addresses/AddAddress';
import Delete from './Delete';
-import { setVisibleAccounts } from '~/redux/providers/personalActions';
class Address extends Component {
static contextTypes = {
diff --git a/js/src/views/Address/index.js b/js/src/views/Address/index.js
index e39616f69..2469b7b3c 100644
--- a/js/src/views/Address/index.js
+++ b/js/src/views/Address/index.js
@@ -21,10 +21,11 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import ContractInstances from '~/contracts';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Addresses/AddAddress/store.js b/js/src/views/Addresses/AddAddress/store.js
index 3980e2f7f..b7397b3d6 100644
--- a/js/src/views/Addresses/AddAddress/store.js
+++ b/js/src/views/Addresses/AddAddress/store.js
@@ -16,7 +16,7 @@
import { action, computed, transaction, observable } from 'mobx';
-import { ERRORS, validateAddress, validateName } from '~/util/validation';
+import { ERRORS, validateAddress, validateName } from '@parity/shared/util/validation';
export default class Store {
@observable address = '';
diff --git a/js/src/views/Addresses/addresses.js b/js/src/views/Addresses/addresses.js
index 2f163eeb9..e7e3c9454 100644
--- a/js/src/views/Addresses/addresses.js
+++ b/js/src/views/Addresses/addresses.js
@@ -20,9 +20,10 @@ import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { uniq, isEqual } from 'lodash';
+import { setVisibleAccounts } from '@parity/shared/redux/providers/personalActions';
+
import { Actionbar, ActionbarExport, ActionbarImport, ActionbarSearch, ActionbarSort, Button, Page } from '~/ui';
import { AddIcon } from '~/ui/Icons';
-import { setVisibleAccounts } from '~/redux/providers/personalActions';
import List from '../Accounts/List';
import Summary from '../Accounts/Summary';
diff --git a/js/src/views/Addresses/index.js b/js/src/views/Addresses/index.js
index 4a6f04010..67adc21ae 100644
--- a/js/src/views/Addresses/index.js
+++ b/js/src/views/Addresses/index.js
@@ -21,10 +21,11 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import ContractInstances from '~/contracts';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Contract/ExecuteContract/executeContract.js b/js/src/views/Contract/ExecuteContract/executeContract.js
index db7fefbab..ea25cdebe 100644
--- a/js/src/views/Contract/ExecuteContract/executeContract.js
+++ b/js/src/views/Contract/ExecuteContract/executeContract.js
@@ -20,12 +20,12 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { toWei } from '@parity/api/util/wei';
+import { MAX_GAS_ESTIMATION } from '@parity/shared/util/constants';
+import { validateAddress, validateUint } from '@parity/shared/util/validation';
+import { parseAbiType } from '@parity/shared/util/abi';
import { Button, GasPriceEditor, IdentityIcon, Portal, Warning } from '~/ui';
import { CancelIcon, NextIcon, PrevIcon } from '~/ui/Icons';
-import { MAX_GAS_ESTIMATION } from '~/util/constants';
-import { validateAddress, validateUint } from '~/util/validation';
-import { parseAbiType } from '~/util/abi';
import AdvancedStep from './AdvancedStep';
import DetailsStep from './DetailsStep';
diff --git a/js/src/views/Contract/Queries/inputQuery.js b/js/src/views/Contract/Queries/inputQuery.js
index a7efd93be..c45effc17 100644
--- a/js/src/views/Contract/Queries/inputQuery.js
+++ b/js/src/views/Contract/Queries/inputQuery.js
@@ -21,10 +21,11 @@ import { Card, CardActions, CardTitle, CardText } from 'material-ui/Card';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError } from '~/redux/actions';
+import { newError } from '@parity/shared/redux/actions';
+import { arrayOrObjectProptype } from '@parity/shared/util/proptypes';
+import { parseAbiType } from '@parity/shared/util/abi';
+
import { Button, Progress, TypedInput } from '~/ui';
-import { arrayOrObjectProptype } from '~/util/proptypes';
-import { parseAbiType } from '~/util/abi';
import styles from './queries.css';
diff --git a/js/src/views/Contract/contract.js b/js/src/views/Contract/contract.js
index d3006e414..159bf20a1 100644
--- a/js/src/views/Contract/contract.js
+++ b/js/src/views/Contract/contract.js
@@ -20,8 +20,9 @@ import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import BigNumber from 'bignumber.js';
-import { newError } from '~/redux/actions';
-import { setVisibleAccounts } from '~/redux/providers/personalActions';
+import { newError } from '@parity/shared/redux/actions';
+import { setVisibleAccounts } from '@parity/shared/redux/providers/personalActions';
+
import { Actionbar, Button, Page, Portal } from '~/ui';
import { CancelIcon, DeleteIcon, EditIcon, PlayIcon, VisibleIcon } from '~/ui/Icons';
import Editor from '~/ui/Editor';
diff --git a/js/src/views/Contract/index.js b/js/src/views/Contract/index.js
index 58284171c..9424be64f 100644
--- a/js/src/views/Contract/index.js
+++ b/js/src/views/Contract/index.js
@@ -21,10 +21,11 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import ContractInstances from '~/contracts';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/ContractDevelop/SaveContract/saveContract.js b/js/src/views/ContractDevelop/SaveContract/saveContract.js
index 7f45b6aa5..cb94a087e 100644
--- a/js/src/views/ContractDevelop/SaveContract/saveContract.js
+++ b/js/src/views/ContractDevelop/SaveContract/saveContract.js
@@ -17,10 +17,11 @@
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
+import { ERRORS, validateName } from '@parity/shared/util/validation';
+
import { Button, Form, Input, Portal } from '~/ui';
import Editor from '~/ui/Editor';
import { CancelIcon, SaveIcon } from '~/ui/Icons';
-import { ERRORS, validateName } from '~/util/validation';
import styles from './saveContract.css';
diff --git a/js/src/views/ContractDevelop/index.js b/js/src/views/ContractDevelop/index.js
index d0fb67a9f..5dc0aaa10 100644
--- a/js/src/views/ContractDevelop/index.js
+++ b/js/src/views/ContractDevelop/index.js
@@ -21,9 +21,10 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/ContractDevelop/store.js b/js/src/views/ContractDevelop/store.js
index 4d305b34e..2c955b3cf 100644
--- a/js/src/views/ContractDevelop/store.js
+++ b/js/src/views/ContractDevelop/store.js
@@ -21,8 +21,7 @@ import { FormattedMessage } from 'react-intl';
import store from 'store';
import { sha3 } from '@parity/api/util/sha3';
-
-import SolidityUtils from '~/util/solidity';
+import SolidityUtils from '@parity/shared/util/solidity';
const SOLIDITY_LIST_URL = 'https://rawgit.com/ethereum/solc-bin/gh-pages/bin/list.json';
const WRITE_CONTRACT_STORE_KEY = '_parity::contractDevelop';
@@ -37,7 +36,7 @@ const SNIPPETS = {
/>
),
id: 'snippet0',
- sourcecode: require('raw-loader!../../contracts/snippets/token.sol')
+ sourcecode: require('raw-loader!@parity/shared/contracts/snippets/token.sol')
},
snippet1: {
name: 'StandardToken.sol',
@@ -48,7 +47,7 @@ const SNIPPETS = {
/>
),
id: 'snippet1',
- sourcecode: require('raw-loader!../../contracts/snippets/standard-token.sol')
+ sourcecode: require('raw-loader!@parity/shared/contracts/snippets/standard-token.sol')
},
snippet2: {
name: 'HumanStandardToken.sol',
@@ -59,7 +58,7 @@ const SNIPPETS = {
/>
),
id: 'snippet2',
- sourcecode: require('raw-loader!../../contracts/snippets/human-standard-token.sol')
+ sourcecode: require('raw-loader!@parity/shared/contracts/snippets/human-standard-token.sol')
},
snippet3: {
name: 'Wallet.sol',
@@ -70,7 +69,7 @@ const SNIPPETS = {
/>
),
id: 'snippet3',
- sourcecode: require('raw-loader!../../contracts/snippets/wallet.sol')
+ sourcecode: require('raw-loader!@parity/shared/contracts/snippets/wallet.sol')
}
};
diff --git a/js/src/views/Contracts/AddContract/addContract.js b/js/src/views/Contracts/AddContract/addContract.js
index f10515d1b..909f48dc2 100644
--- a/js/src/views/Contracts/AddContract/addContract.js
+++ b/js/src/views/Contracts/AddContract/addContract.js
@@ -20,7 +20,8 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError } from '~/redux/actions';
+import { newError } from '@parity/shared/redux/actions';
+
import { Button, Form, Input, InputAddress, Portal, RadioButtons } from '~/ui';
import { AddIcon, CancelIcon, NextIcon, PrevIcon } from '~/ui/Icons';
diff --git a/js/src/views/Contracts/AddContract/store.js b/js/src/views/Contracts/AddContract/store.js
index 9d47e5f1d..61e04c616 100644
--- a/js/src/views/Contracts/AddContract/store.js
+++ b/js/src/views/Contracts/AddContract/store.js
@@ -16,7 +16,7 @@
import { action, computed, observable, transaction } from 'mobx';
-import { ERRORS, validateAbi, validateAddress, validateName } from '~/util/validation';
+import { ERRORS, validateAbi, validateAddress, validateName } from '@parity/shared/util/validation';
import { ABI_TYPES } from './types';
diff --git a/js/src/views/Contracts/AddContract/types.js b/js/src/views/Contracts/AddContract/types.js
index b229fc7ac..d34a33783 100644
--- a/js/src/views/Contracts/AddContract/types.js
+++ b/js/src/views/Contracts/AddContract/types.js
@@ -17,7 +17,7 @@
import React from 'react';
import { FormattedMessage } from 'react-intl';
-import { eip20, wallet } from '~/contracts/abi';
+import { eip20, wallet } from '@parity/shared/contracts/abi';
const ABI_TYPES = [
{
diff --git a/js/src/views/Contracts/DeployContract/DetailsStep/detailsStep.js b/js/src/views/Contracts/DeployContract/DetailsStep/detailsStep.js
index 7f0976d5d..a7824e5ba 100644
--- a/js/src/views/Contracts/DeployContract/DetailsStep/detailsStep.js
+++ b/js/src/views/Contracts/DeployContract/DetailsStep/detailsStep.js
@@ -18,9 +18,10 @@ import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
import { MenuItem } from 'material-ui';
+import { parseAbiType } from '@parity/shared/util/abi';
+import { validateAbi } from '@parity/shared/util/validation';
+
import { AddressSelect, Checkbox, Form, Input, Select } from '~/ui';
-import { validateAbi } from '~/util/validation';
-import { parseAbiType } from '~/util/abi';
const CHECK_STYLE = {
marginTop: '1em'
diff --git a/js/src/views/Contracts/DeployContract/ParametersStep/parametersStep.js b/js/src/views/Contracts/DeployContract/ParametersStep/parametersStep.js
index 0213bfa01..fd15d291a 100644
--- a/js/src/views/Contracts/DeployContract/ParametersStep/parametersStep.js
+++ b/js/src/views/Contracts/DeployContract/ParametersStep/parametersStep.js
@@ -32,8 +32,9 @@
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
+import { parseAbiType } from '@parity/shared/util/abi';
+
import { Form, TypedInput } from '~/ui';
-import { parseAbiType } from '~/util/abi';
import styles from '../deployContract.css';
diff --git a/js/src/views/Contracts/DeployContract/deployContract.js b/js/src/views/Contracts/DeployContract/deployContract.js
index 55bbf2efa..068795f8e 100644
--- a/js/src/views/Contracts/DeployContract/deployContract.js
+++ b/js/src/views/Contracts/DeployContract/deployContract.js
@@ -21,11 +21,12 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
+import { setRequest } from '@parity/shared/redux/providers/requestsActions';
+import { ERRORS, validateAbi, validateCode, validateName, validatePositiveNumber } from '@parity/shared/util/validation';
+import { deploy, deployEstimateGas } from '@parity/shared/util/tx';
+
import { Button, GasPriceEditor, IdentityIcon, Portal, Warning } from '~/ui';
import { CancelIcon } from '~/ui/Icons';
-import { ERRORS, validateAbi, validateCode, validateName, validatePositiveNumber } from '~/util/validation';
-import { deploy, deployEstimateGas } from '~/util/tx';
-import { setRequest } from '~/redux/providers/requestsActions';
import DetailsStep from './DetailsStep';
import ParametersStep from './ParametersStep';
diff --git a/js/src/views/Contracts/contracts.js b/js/src/views/Contracts/contracts.js
index 5185b0a2c..f2fb2c064 100644
--- a/js/src/views/Contracts/contracts.js
+++ b/js/src/views/Contracts/contracts.js
@@ -20,7 +20,8 @@ import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { uniq, isEqual } from 'lodash';
-import { setVisibleAccounts } from '~/redux/providers/personalActions';
+import { setVisibleAccounts } from '@parity/shared/redux/providers/personalActions';
+
import { Actionbar, ActionbarSearch, ActionbarSort, Button, Page } from '~/ui';
import { AddIcon } from '~/ui/Icons';
diff --git a/js/src/views/Contracts/index.js b/js/src/views/Contracts/index.js
index d59d3d1b0..0f73414c9 100644
--- a/js/src/views/Contracts/index.js
+++ b/js/src/views/Contracts/index.js
@@ -21,10 +21,11 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import ContractInstances from '~/contracts';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Home/Accounts/accounts.js b/js/src/views/Home/Accounts/accounts.js
index f397994ff..42dcaf39c 100644
--- a/js/src/views/Home/Accounts/accounts.js
+++ b/js/src/views/Home/Accounts/accounts.js
@@ -20,8 +20,9 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { Link } from 'react-router';
+import { arrayOrObjectProptype } from '@parity/shared/util/proptypes';
+
import { Container, ContainerTitle, IdentityName, IdentityIcon, SectionList } from '~/ui';
-import { arrayOrObjectProptype } from '~/util/proptypes';
import styles from './accounts.css';
diff --git a/js/src/views/Home/Dapps/dapps.js b/js/src/views/Home/Dapps/dapps.js
index 608d4435b..307e9b440 100644
--- a/js/src/views/Home/Dapps/dapps.js
+++ b/js/src/views/Home/Dapps/dapps.js
@@ -17,8 +17,9 @@
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
+import { arrayOrObjectProptype } from '@parity/shared//util/proptypes';
+
import { ContainerTitle, SectionList } from '~/ui';
-import { arrayOrObjectProptype } from '~/util/proptypes';
import Dapp from './dapp';
import styles from './dapps.css';
diff --git a/js/src/views/Home/News/news.test.js b/js/src/views/Home/News/news.test.js
index 4b45502a7..c5d3dbcac 100644
--- a/js/src/views/Home/News/news.test.js
+++ b/js/src/views/Home/News/news.test.js
@@ -16,7 +16,7 @@
import sinon from 'sinon';
-import Contracts from '~/contracts';
+import Contracts from '@parity/shared/contracts';
import { VERSION_ID } from './news';
diff --git a/js/src/views/Home/News/store.js b/js/src/views/Home/News/store.js
index cf46227ae..b6f04787c 100644
--- a/js/src/views/Home/News/store.js
+++ b/js/src/views/Home/News/store.js
@@ -15,7 +15,8 @@
// along with Parity. If not, see .
import { action, observable } from 'mobx';
-import Contracts from '~/contracts';
+
+import Contracts from '@parity/shared/contracts';
let instance = null;
diff --git a/js/src/views/Home/home.js b/js/src/views/Home/home.js
index a9e8dfa00..5b01d31e8 100644
--- a/js/src/views/Home/home.js
+++ b/js/src/views/Home/home.js
@@ -18,7 +18,8 @@ import { observer } from 'mobx-react';
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
-import HistoryStore from '~/mobx/historyStore';
+import HistoryStore from '@parity/shared/mobx/historyStore';
+
import { Page } from '~/ui';
import WebStore from '~/views/Web/store';
diff --git a/js/src/views/Home/index.js b/js/src/views/Home/index.js
index 92e46e29c..ff381ab69 100644
--- a/js/src/views/Home/index.js
+++ b/js/src/views/Home/index.js
@@ -21,9 +21,10 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Playground/index.js b/js/src/views/Playground/index.js
index 8ffef2ae6..5b36151ab 100644
--- a/js/src/views/Playground/index.js
+++ b/js/src/views/Playground/index.js
@@ -21,9 +21,10 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Settings/Background/background.js b/js/src/views/Settings/Background/background.js
index dd348a4c4..ffdc0dd9d 100644
--- a/js/src/views/Settings/Background/background.js
+++ b/js/src/views/Settings/Background/background.js
@@ -19,12 +19,12 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
+import { updateBackground } from '@parity/shared/redux/providers/settings/actions';
+
import { Button, Container } from '~/ui';
import ParityBackground from '~/ui/ParityBackground';
import { RefreshIcon } from '~/ui/Icons';
-import { updateBackground } from '~/redux/providers/settings/actions';
-
import layout from '../layout.css';
import styles from './background.css';
diff --git a/js/src/views/Settings/Node/store.js b/js/src/views/Settings/Node/store.js
index 6b9c477e8..98e8f228a 100644
--- a/js/src/views/Settings/Node/store.js
+++ b/js/src/views/Settings/Node/store.js
@@ -17,7 +17,7 @@
import LogLevel from 'loglevel';
import { action, observable } from 'mobx';
-import { LOG_KEYS } from '~/config';
+import { LOG_KEYS } from '@parity/shared/config';
const DEFAULT_MODE = 'active';
const DEFAULT_CHAIN = 'foundation';
diff --git a/js/src/views/Settings/Views/views.js b/js/src/views/Settings/Views/views.js
index 771ecdf04..12df810be 100644
--- a/js/src/views/Settings/Views/views.js
+++ b/js/src/views/Settings/Views/views.js
@@ -19,9 +19,9 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { Checkbox, Container } from '~/ui';
+import { toggleView } from '@parity/shared/redux/providers/settings/actions';
-import { toggleView } from '~/redux/providers/settings/actions';
+import { Checkbox, Container } from '~/ui';
import layout from '../layout.css';
import styles from './views.css';
diff --git a/js/src/views/Settings/index.js b/js/src/views/Settings/index.js
index f3ddb6857..da7027867 100644
--- a/js/src/views/Settings/index.js
+++ b/js/src/views/Settings/index.js
@@ -21,7 +21,8 @@ import { IndexRedirect, Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
-import { initStore } from '~/redux';
+import { initStore } from '@parity/shared/redux';
+
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Signer/RequestsPage/requestsPage.js b/js/src/views/Signer/RequestsPage/requestsPage.js
index 4d0bf8180..406526d06 100644
--- a/js/src/views/Signer/RequestsPage/requestsPage.js
+++ b/js/src/views/Signer/RequestsPage/requestsPage.js
@@ -21,8 +21,9 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError } from '~/redux/actions';
-import { startConfirmRequest, startRejectRequest } from '~/redux/providers/signerActions';
+import { newError } from '@parity/shared/redux/actions';
+import { startConfirmRequest, startRejectRequest } from '@parity/shared/redux/providers/signerActions';
+
import { Container, Page, TxList } from '~/ui';
import Store from '~/shell/Signer/store';
diff --git a/js/src/views/Signer/index.js b/js/src/views/Signer/index.js
index bf6bb67a2..45c1ac775 100644
--- a/js/src/views/Signer/index.js
+++ b/js/src/views/Signer/index.js
@@ -21,10 +21,11 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import ContractInstances from '~/contracts';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Status/Debug/Logs/logs.js b/js/src/views/Status/Debug/Logs/logs.js
index 420756dea..42ba0b1d0 100644
--- a/js/src/views/Status/Debug/Logs/logs.js
+++ b/js/src/views/Status/Debug/Logs/logs.js
@@ -16,7 +16,7 @@
import React from 'react';
-import { arrayOrObjectProptype } from '~/util/proptypes';
+import { arrayOrObjectProptype } from '@parity/shared/util/proptypes';
import styles from '../debug.css';
diff --git a/js/src/views/Status/index.js b/js/src/views/Status/index.js
index 17432a774..b82492d54 100644
--- a/js/src/views/Status/index.js
+++ b/js/src/views/Status/index.js
@@ -21,10 +21,11 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import ContractInstances from '~/contracts';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Vaults/VaultAccounts/vaultAccounts.js b/js/src/views/Vaults/VaultAccounts/vaultAccounts.js
index daf2d7c51..08ca5ad40 100644
--- a/js/src/views/Vaults/VaultAccounts/vaultAccounts.js
+++ b/js/src/views/Vaults/VaultAccounts/vaultAccounts.js
@@ -20,8 +20,9 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError } from '~/redux/actions';
-import { personalAccountsInfo } from '~/redux/providers/personalActions';
+import { newError } from '@parity/shared/redux/actions';
+import { personalAccountsInfo } from '@parity/shared/redux/providers/personalActions';
+
import { AccountCard, Button, Portal, SelectionList } from '~/ui';
import { CancelIcon, CheckIcon } from '~/ui/Icons';
diff --git a/js/src/views/Vaults/VaultCreate/vaultCreate.js b/js/src/views/Vaults/VaultCreate/vaultCreate.js
index c472b28d0..b95aa354e 100644
--- a/js/src/views/Vaults/VaultCreate/vaultCreate.js
+++ b/js/src/views/Vaults/VaultCreate/vaultCreate.js
@@ -20,7 +20,8 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError } from '~/redux/actions';
+import { newError } from '@parity/shared/redux/actions';
+
import { Button, Input, Portal } from '~/ui';
import PasswordStrength from '~/ui/Form/PasswordStrength';
import { CheckIcon, CloseIcon } from '~/ui/Icons';
diff --git a/js/src/views/Vaults/VaultLock/vaultLock.js b/js/src/views/Vaults/VaultLock/vaultLock.js
index 74135d544..e809e2d45 100644
--- a/js/src/views/Vaults/VaultLock/vaultLock.js
+++ b/js/src/views/Vaults/VaultLock/vaultLock.js
@@ -20,7 +20,8 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError } from '~/redux/actions';
+import { newError } from '@parity/shared/redux/actions';
+
import { ConfirmDialog, VaultCard } from '~/ui';
import styles from '../VaultUnlock/vaultUnlock.css';
diff --git a/js/src/views/Vaults/VaultMeta/vaultMeta.js b/js/src/views/Vaults/VaultMeta/vaultMeta.js
index a87b57494..b41374f2d 100644
--- a/js/src/views/Vaults/VaultMeta/vaultMeta.js
+++ b/js/src/views/Vaults/VaultMeta/vaultMeta.js
@@ -20,7 +20,8 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError } from '~/redux/actions';
+import { newError } from '@parity/shared/redux/actions';
+
import { Button, Checkbox, Form, Input, Portal, VaultCard } from '~/ui';
import PasswordStrength from '~/ui/Form/PasswordStrength';
import { CheckIcon, CloseIcon } from '~/ui/Icons';
diff --git a/js/src/views/Vaults/VaultUnlock/vaultUnlock.js b/js/src/views/Vaults/VaultUnlock/vaultUnlock.js
index 3c1eaddc0..ecc56a6c0 100644
--- a/js/src/views/Vaults/VaultUnlock/vaultUnlock.js
+++ b/js/src/views/Vaults/VaultUnlock/vaultUnlock.js
@@ -20,7 +20,8 @@ import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
-import { newError } from '~/redux/actions';
+import { newError } from '@parity/shared/redux/actions';
+
import { ConfirmDialog, Form, Input, VaultCard } from '~/ui';
import styles from './vaultUnlock.css';
diff --git a/js/src/views/Vaults/index.js b/js/src/views/Vaults/index.js
index e92e39a5c..a0602cf40 100644
--- a/js/src/views/Vaults/index.js
+++ b/js/src/views/Vaults/index.js
@@ -21,10 +21,11 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import ContractInstances from '~/contracts';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Wallet/Confirmations/confirmations.js b/js/src/views/Wallet/Confirmations/confirmations.js
index 01b4551d3..2724de69d 100644
--- a/js/src/views/Wallet/Confirmations/confirmations.js
+++ b/js/src/views/Wallet/Confirmations/confirmations.js
@@ -22,8 +22,8 @@ import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { bytesToHex } from '@parity/api/util/format';
+import { confirmOperation, revokeOperation } from '@parity/shared/redux/providers/walletActions';
-import { confirmOperation, revokeOperation } from '~/redux/providers/walletActions';
import { Button, Container, InputAddress, IdentityIcon, Progress } from '~/ui';
import TxRow from '~/ui/TxList/TxRow';
diff --git a/js/src/views/Wallet/WalletSettings/walletSettingsStore.js b/js/src/views/Wallet/WalletSettings/walletSettingsStore.js
index b4ae8fc9a..d00532462 100644
--- a/js/src/views/Wallet/WalletSettings/walletSettingsStore.js
+++ b/js/src/views/Wallet/WalletSettings/walletSettingsStore.js
@@ -18,8 +18,8 @@ import { noop } from 'lodash';
import { observable, computed, action, transaction } from 'mobx';
import BigNumber from 'bignumber.js';
-import { validateUint, validateAddress } from '~/util/validation';
-import { DEFAULT_GAS, MAX_GAS_ESTIMATION } from '~/util/constants';
+import { validateUint, validateAddress } from '@parity/shared/util/validation';
+import { DEFAULT_GAS, MAX_GAS_ESTIMATION } from '@parity/shared/util/constants';
const STEPS = {
EDIT: { title: 'wallet settings' },
diff --git a/js/src/views/Wallet/index.js b/js/src/views/Wallet/index.js
index c68b0ca68..85010ac32 100644
--- a/js/src/views/Wallet/index.js
+++ b/js/src/views/Wallet/index.js
@@ -21,10 +21,11 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import ContractInstances from '@parity/shared/contracts';
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import ContractInstances from '~/contracts';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/views/Wallet/wallet.js b/js/src/views/Wallet/wallet.js
index f4b265a8b..490b4faa6 100644
--- a/js/src/views/Wallet/wallet.js
+++ b/js/src/views/Wallet/wallet.js
@@ -20,10 +20,12 @@ import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import moment from 'moment';
-import HistoryStore from '~/mobx/historyStore';
+import HistoryStore from '@parity/shared/mobx/historyStore';
+import { setVisibleAccounts } from '@parity/shared/redux/providers/personalActions';
+import { nullableProptype } from '@parity/shared/util/proptypes';
+
import { Actionbar, Button, Page, Loading } from '~/ui';
import { DeleteIcon, EditIcon, SendIcon, SettingsIcon } from '~/ui/Icons';
-import { nullableProptype } from '~/util/proptypes';
import EditMeta from '../Account/EditMeta';
import Transfer from '../Account/Transfer';
@@ -34,8 +36,6 @@ import WalletConfirmations from './Confirmations';
import WalletTransactions from './Transactions';
import WalletSettings from './WalletSettings';
-import { setVisibleAccounts } from '~/redux/providers/personalActions';
-
import styles from './wallet.css';
const accountsHistory = HistoryStore.get('accounts');
diff --git a/js/src/views/Web/dapplink.js b/js/src/views/Web/dapplink.js
index 010beb7d9..e03ed0d02 100644
--- a/js/src/views/Web/dapplink.js
+++ b/js/src/views/Web/dapplink.js
@@ -16,7 +16,7 @@
import base32 from 'base32.js';
-import { DOMAIN } from '~/util/constants';
+import { DOMAIN } from '@parity/shared/util/constants';
const BASE_URL = `.web${DOMAIN}`;
const ENCODER_OPTS = { type: 'crockford' };
diff --git a/js/src/views/Web/index.js b/js/src/views/Web/index.js
index d7db0069c..fd894e6d0 100644
--- a/js/src/views/Web/index.js
+++ b/js/src/views/Web/index.js
@@ -21,9 +21,10 @@ import { Route, Router, hashHistory } from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
+import { initStore } from '@parity/shared/redux';
+
import { api } from './parity';
-import { initStore } from '~/redux';
import ContextProvider from '~/ui/ContextProvider';
import muiTheme from '~/ui/Theme';
diff --git a/js/src/util/web3.extensions.js b/js/src/web3.extensions.js
similarity index 89%
rename from js/src/util/web3.extensions.js
rename to js/src/web3.extensions.js
index fc9fe06b5..bccf138c7 100644
--- a/js/src/util/web3.extensions.js
+++ b/js/src/web3.extensions.js
@@ -14,9 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-import parity from '~/jsonrpc/interfaces/parity';
-import signer from '~/jsonrpc/interfaces/signer';
-import trace from '~/jsonrpc/interfaces/trace';
+import parity from '@parity/jsonrpc/interfaces/parity';
+import signer from '@parity/jsonrpc/interfaces/signer';
+import trace from '@parity/jsonrpc/interfaces/trace';
export default function web3extensions (web3) {
const { Method } = web3._extend;
diff --git a/js/src/web3.js b/js/src/web3.js
index 89a411427..c818084bb 100644
--- a/js/src/web3.js
+++ b/js/src/web3.js
@@ -15,7 +15,7 @@
// along with Parity. If not, see .
import Web3 from 'web3';
-import web3extensions from './util/web3.extensions';
+import web3extensions from './web3.extensions';
import './dev.web3.html';
diff --git a/js/src/webWorker.js b/js/src/webWorker.js
index 115c61414..95719d7e1 100644
--- a/js/src/webWorker.js
+++ b/js/src/webWorker.js
@@ -15,8 +15,9 @@
// along with Parity. If not, see .
import registerPromiseWorker from 'promise-worker/register';
-import { Signer } from '~/util/signer';
-import SolidityUtils from '~/util/solidity';
+
+import { Signer } from '@parity/shared/util/signer';
+import SolidityUtils from '@parity/shared/util/solidity';
registerPromiseWorker((msg) => {
return handleMessage(msg);
diff --git a/js/test/babel.js b/js/test/babel.js
index 5bdc93bac..e0c6e5f9c 100644
--- a/js/test/babel.js
+++ b/js/test/babel.js
@@ -15,5 +15,5 @@
// along with Parity. If not, see .
require('babel-register')({
- ignore: /node_modules\/(?!@parity\/(abi|api|jsonrpc|ui))/
+ ignore: /node_modules\/(?!@parity\/(abi|api|jsonrpc|shared|ui))/
});
diff --git a/js/webpack/app.js b/js/webpack/app.js
index f88afb2c0..607786c38 100644
--- a/js/webpack/app.js
+++ b/js/webpack/app.js
@@ -29,11 +29,11 @@ const rulesEs6 = require('./rules/es6');
const rulesParity = require('./rules/parity');
const Shared = require('./shared');
-const DAPPS_BUILTIN = require('../src/config/dappsBuiltin.json').map((dapp) => {
+const DAPPS_BUILTIN = require('../src/shared/config/dappsBuiltin.json').map((dapp) => {
dapp.srcPath = './dapps';
return dapp;
});
-const DAPPS_VIEWS = require('../src/config/dappsViews.json').map((dapp) => {
+const DAPPS_VIEWS = require('../src/shared/config/dappsViews.json').map((dapp) => {
dapp.srcPath = './views';
dapp.commons = true;
return dapp;
diff --git a/js/webpack/rules/parity.js b/js/webpack/rules/parity.js
index 34ec31419..7686a06c8 100644
--- a/js/webpack/rules/parity.js
+++ b/js/webpack/rules/parity.js
@@ -16,6 +16,6 @@
module.exports = {
test: /\.js$/,
- include: /node_modules\/@parity\/(abi|api|jsonrpc|ui|wordlist)/,
+ include: /node_modules\/@parity\/(abi|api|jsonrpc|shared|ui|wordlist)/,
use: 'babel-loader'
};
diff --git a/js/webpack/shared.js b/js/webpack/shared.js
index ae39d37da..a56f32b23 100644
--- a/js/webpack/shared.js
+++ b/js/webpack/shared.js
@@ -151,8 +151,8 @@ function getPlugins (_isProd = isProd) {
}
function getDappsEntry () {
- const builtins = require('../src/config/dappsBuiltin.json');
- const views = require('../src/config/dappsViews.json');
+ const builtins = require('../src/shared/config/dappsBuiltin.json');
+ const views = require('../src/shared/config/dappsViews.json');
return Object.assign(
builtins.filter((dapp) => !dapp.skipBuild).reduce((_entry, dapp) => {