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 (