this.settings()}
+
diff --git a/src/helpers/FormatHelper.js b/src/helpers/FormatHelper.js
index 2a9f2959..c4b65172 100644
--- a/src/helpers/FormatHelper.js
+++ b/src/helpers/FormatHelper.js
@@ -13,12 +13,9 @@ class FormatHelper {
if (amount === undefined) {
return '–';
}
-
const number = new BN(amount).div(10 ** precision);
-
- const base = `${parseInt(this.toFixed(Math.abs(number || 0), precision), 10)}`;
+ const base = `${this.toFixed(number, precision).split('.')[0]}`;
const mod = base.length > 3 ? base.length % 3 : 0;
-
let postfix = `.${this.toFixed(number, precision).split('.')[1]}`;
for (let i = postfix.length - 1; i >= 0; i -= 1) {
@@ -32,12 +29,24 @@ class FormatHelper {
}
const resultNumber = (mod ? `${base.substr(0, mod)} ` : '')
- + base.substr(mod).replace(/(\d{3})(?=\d)/g, `$1${' '}`)
- + (precision ? postfix : '');
+ + base.substr(mod).replace(/(\d{3})(?=\d)/g, `$1${' '}`)
+ + (precision ? postfix : '');
return symbol ? `${resultNumber} ${symbol}` : resultNumber;
}
+ static convertAmount(amount, precision, sumbol) {
+ const formatAmount = this.formatAmount(amount, precision);
+ if (!this.isAmountVeryBig(amount, precision, sumbol)) {
+ return formatAmount;
+ }
+ const length = amount.indexOf('.') === -1 ? 18 - sumbol.length : 19 - sumbol.length;
+ return formatAmount.substring(0, length).trim().concat('...');
+ }
+ static isAmountVeryBig(amount = 0, precision = 0, sumbol = '') {
+ return new BN(amount).div(10 ** precision).toString(10).length + sumbol.length > 17;
+ }
+
static formatError(err) {
return err instanceof Error || (_.isObject(err) && err.message) ? err.message : err;
}
diff --git a/src/helpers/ValidateAccountHelper.js b/src/helpers/ValidateAccountHelper.js
index 12d0e259..1a8fe435 100644
--- a/src/helpers/ValidateAccountHelper.js
+++ b/src/helpers/ValidateAccountHelper.js
@@ -3,11 +3,12 @@ import { validators } from 'echojs-lib';
class ValidateAccountHelper {
static validateAccountName(accountName) {
-
if (!accountName) {
return 'Account name should not be empty';
}
-
+ if (!(/[.\-/0-9]/.test(accountName) || !accountName.match(/[aeiouy]/ig))) {
+ return 'Account name should contain digit, number, dash, slash or consist only of consonants';
+ }
if (validators.checkAccountName(accountName)) {
return validators.checkAccountName(accountName);
}
diff --git a/src/helpers/ValidateTransactionHelper.js b/src/helpers/ValidateTransactionHelper.js
index e7717fc3..a7c22ca2 100644
--- a/src/helpers/ValidateTransactionHelper.js
+++ b/src/helpers/ValidateTransactionHelper.js
@@ -1,5 +1,5 @@
import BN from 'bignumber.js';
-import { ERC20_HASHES, CONTRACT_PREFIX } from '../constants/GlobalConstants';
+import { ERC20_REQIURED_HASHES, CONTRACT_PREFIX } from '../constants/GlobalConstants';
class ValidateTransactionHelper {
@@ -81,7 +81,7 @@ class ValidateTransactionHelper {
*/
static isErc20Contract(scriptHex) {
if (scriptHex) {
- const hashes = Object.values(ERC20_HASHES);
+ const hashes = Object.values(ERC20_REQIURED_HASHES);
return hashes.every((hash) => scriptHex.includes(hash));
}
diff --git a/src/routes.js b/src/routes.js
index 0a47f66f..f5d8141e 100644
--- a/src/routes.js
+++ b/src/routes.js
@@ -21,7 +21,6 @@ import {
ERROR_SEND_PATH,
ABOUT_PATH,
WELCOME_PATH,
- SETTINGS_PATH,
NETWORK_PATH,
CONNECTION_ERROR_PATH,
INCOMING_CONNECTION_PATH,
@@ -35,7 +34,6 @@ import AddNetwork from './containers/AddNetwork';
import Pin from './containers/PinCode';
import SuccessAddNetwork from './containers/SuccessAddNetwork';
import Welcome from './containers/Welcome';
-import SettingsAccount from './containers/SettingsAccount';
import Wallet from './containers/Wallet';
import Receive from './containers/Receive';
import Transactions from './containers/Transactions';
@@ -73,7 +71,6 @@ export default class Routes extends React.Component {
-
diff --git a/src/services/listeners.js b/src/services/listeners.js
index b51f6976..83c5fe29 100644
--- a/src/services/listeners.js
+++ b/src/services/listeners.js
@@ -52,7 +52,8 @@ class Listeners {
this.addProviderRequestHandler = (id, origin) => dispatch(addProviderRequest(id, origin));
this.addSignMessageRequestHandler =
- (id, origin, signer, message) => dispatch(addSignMessageRequest(id, origin, signer, message));
+ (id, origin, signer, message, method) =>
+ dispatch(addSignMessageRequest(id, origin, signer, message, method));
this.removeSignMessageRequestHandler = (id) => dispatch(removeSignMessageRequest(id));
diff --git a/webpack.config.js b/webpack.config.js
index bd31a7e5..2fca4132 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -6,6 +6,7 @@ const CleanWebpackPlugin = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ZipPlugin = require('zip-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
+const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const webpack = require('webpack');
const packageJson = require('./package.json');
@@ -21,20 +22,71 @@ const extractSass = new ExtractTextPlugin({
disable: process.env.NODE_ENV === 'local',
});
-
const publicPath = process.env.EXTENSION ? './' : '/';
const pathToPack = process.env.EXTENSION ? path.resolve('build/src') : path.resolve('dist');
const pathsToClean = process.env.EXTENSION ? ['build'] : ['dist'];
-module.exports = {
+const inpageConfig = {
+ name: 'inpageConfig',
optimization: {
minimize: false, // <---- disables uglify.
- // minimizer: [new UglifyJsPlugin()] if you want to customize it.
+ minimizer: [new UglifyJsPlugin()], // if you want to customize it.
+ },
+ entry: {
+ inpage: path.resolve('extension/inpage.js'),
+ },
+ output: {
+ publicPath,
+ path: pathToPack,
+ filename: '[name].js',
+ pathinfo: process.env.NODE_ENV === 'local',
+ sourceMapFilename: '[name].js.map',
+ chunkFilename: '[name].bundle.js',
+ },
+ devtool: 'inline-source-map', // process.env.NODE_ENV !== 'local' ? 'cheap-module-source-map' : 'eval',
+ module: {
+ rules: [
+ {
+ test: /\.js$/,
+ exclude: /node_modules/,
+ use: {
+ loader: 'babel-loader',
+ },
+ },
+ ],
+ },
+ resolve: {
+ modules: [
+ 'node_modules',
+ path.resolve('src'),
+ ],
+ extensions: ['.js', '.jsx', '.json'],
+ },
+ plugins: [
+ new CleanWebpackPlugin(pathsToClean),
+ extractSass,
+ new webpack.DefinePlugin({
+ NODE_ENV: JSON.stringify(process.env.NODE_ENV),
+ VERSION: JSON.stringify(packageJson.version),
+ EXTENSION: !!process.env.EXTENSION,
+ }),
+ ],
+ node: {
+ fs: 'empty',
+ net: 'empty',
+ tls: 'empty',
+ },
+};
+
+const buildConfig = {
+ dependencies: ['inpageConfig'],
+ optimization: {
+ minimize: false, // <---- disables uglify.
+ minimizer: [new UglifyJsPlugin()], // if you want to customize it.
},
entry: {
app: path.resolve('src/index.js'),
content: path.resolve('extension/contentscript.js'),
- inpage: path.resolve('extension/inpage.js'),
background: path.resolve('extension/background.js'),
},
output: {
@@ -47,7 +99,7 @@ module.exports = {
},
devtool: 'inline-source-map', // process.env.NODE_ENV !== 'local' ? 'cheap-module-source-map' : 'eval',
module: {
- rules: [
+ rules: [
{
test: /\.js$/,
exclude: /node_modules/,
@@ -91,6 +143,13 @@ module.exports = {
fallback: 'style-loader',
}),
},
+ {
+ test: /inpage\.js$/,
+ exclude: /node_modules/,
+ use: {
+ loader: 'raw-loader',
+ },
+ },
],
},
resolve: {
@@ -101,13 +160,13 @@ module.exports = {
extensions: ['.js', '.jsx', '.json'],
},
plugins: [
- new CleanWebpackPlugin(pathsToClean),
HTMLWebpackPluginConfig,
extractSass,
new webpack.DefinePlugin({
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
VERSION: JSON.stringify(packageJson.version),
EXTENSION: !!process.env.EXTENSION,
+ INPAGE_PATH_PACK_FOLDER: JSON.stringify(process.env.EXTENSION ? 'build/src' : 'dist'),
}),
new CopyWebpackPlugin([
{
@@ -125,3 +184,5 @@ module.exports = {
tls: 'empty',
},
};
+
+module.exports = [inpageConfig, buildConfig];