diff --git a/js/src/3rdparty/etherscan/account.js b/js/src/3rdparty/etherscan/account.js
index 596e6d9cb..cb99c22c6 100644
--- a/js/src/3rdparty/etherscan/account.js
+++ b/js/src/3rdparty/etherscan/account.js
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
+import BigNumber from 'bignumber.js';
+
const PAGE_SIZE = 25;
import util from '../../api/util';
@@ -56,7 +58,7 @@ function transactions (address, page, test = false) {
from: util.toChecksumAddress(tx.from),
to: util.toChecksumAddress(tx.to),
hash: tx.hash,
- blockNumber: tx.blockNumber,
+ blockNumber: new BigNumber(tx.blockNumber),
timeStamp: tx.timeStamp,
value: tx.value
};
diff --git a/js/src/api/util/decode.js b/js/src/api/util/decode.js
index 065d516e9..2d6eee75b 100644
--- a/js/src/api/util/decode.js
+++ b/js/src/api/util/decode.js
@@ -42,14 +42,14 @@ export function decodeCallData (data) {
export function decodeMethodInput (methodAbi, paramdata) {
if (!methodAbi) {
throw new Error('decodeMethodInput should receive valid method-specific ABI');
- } else if (!paramdata) {
- throw new Error('decodeMethodInput should receive valid parameter input data');
- } else if (!isHex(paramdata)) {
- throw new Error('Input to decodeMethodInput should be a hex value');
- } else if (paramdata.substr(0, 2) === '0x') {
- return decodeMethodInput(methodAbi, paramdata.slice(2));
- } else if (paramdata.length % 64 !== 0) {
- throw new Error('Parameter length in decodeMethodInput not a multiple of 64 characters');
+ } else if (paramdata && paramdata.length) {
+ if (!isHex(paramdata)) {
+ throw new Error('Input to decodeMethodInput should be a hex value');
+ } else if (paramdata.substr(0, 2) === '0x') {
+ return decodeMethodInput(methodAbi, paramdata.slice(2));
+ } else if (paramdata.length % 64 !== 0) {
+ throw new Error('Parameter length in decodeMethodInput not a multiple of 64 characters');
+ }
}
return new Func(methodAbi).decodeInput(paramdata).map((decoded) => decoded.value);
@@ -73,7 +73,7 @@ export function methodToAbi (method) {
const name = method.substr(0, typesStart);
const types = method.substr(typesStart + 1, length - (typesStart + 1) - 1).split(',');
- const inputs = types.map((_type) => {
+ const inputs = types.filter((_type) => _type.length).map((_type) => {
const type = fromParamType(toParamType(_type));
return { type };
diff --git a/js/src/api/util/decode.spec.js b/js/src/api/util/decode.spec.js
index 665af6d03..70bc44bc5 100644
--- a/js/src/api/util/decode.spec.js
+++ b/js/src/api/util/decode.spec.js
@@ -44,10 +44,6 @@ describe('api/util/decode', () => {
expect(() => decodeMethodInput(null, null)).to.throw(/should receive valid method/);
});
- it('expects valid parameter data', () => {
- expect(() => decodeMethodInput({}, null)).to.throw(/should receive valid parameter/);
- });
-
it('expect valid hex parameter data', () => {
expect(() => decodeMethodInput({}, 'invalid')).to.throw(/should be a hex value/);
});
diff --git a/js/src/ui/Form/InputAddress/inputAddress.js b/js/src/ui/Form/InputAddress/inputAddress.js
index 2c99dd1d1..2a6fd15b2 100644
--- a/js/src/ui/Form/InputAddress/inputAddress.js
+++ b/js/src/ui/Form/InputAddress/inputAddress.js
@@ -46,7 +46,7 @@ class InputAddress extends Component {
const { value, text, accountsInfo, tokens } = this.props;
const account = accountsInfo[value] || tokens[value];
- const hasAccount = account && !account.meta.deleted;
+ const hasAccount = account && (!account.meta || !account.meta.deleted);
const inputValue = text && hasAccount ? account.name : value;
const isEmpty = (!inputValue || inputValue.length === 0);
@@ -74,7 +74,7 @@ class InputAddress extends Component {
classes.push(isEmpty ? styles.inputEmpty : styles.input);
const account = accountsInfo[value] || tokens[value];
- const hasAccount = account && !account.meta.deleted;
+ const hasAccount = account && (!account.meta || !account.meta.deleted);
return (