diff options
| author | fragosti <francesco.agosti93@gmail.com> | 2018-07-06 09:32:28 +0800 | 
|---|---|---|
| committer | fragosti <francesco.agosti93@gmail.com> | 2018-07-06 09:32:28 +0800 | 
| commit | a72eae7ea84be60792b214b52f2f363b881197b2 (patch) | |
| tree | 8045f3addd9a50968677824f66d43d5fb063a251 | |
| parent | 30e3afc0fbccd01ef5ce62de4dfb0154fd7b7892 (diff) | |
| download | dexon-sol-tools-a72eae7ea84be60792b214b52f2f363b881197b2.tar.gz dexon-sol-tools-a72eae7ea84be60792b214b52f2f363b881197b2.tar.zst dexon-sol-tools-a72eae7ea84be60792b214b52f2f363b881197b2.zip | |
Unmarshall txn data in SignerSubprovider before calling web3wrapper sendTransactionAsync
| -rw-r--r-- | packages/subproviders/src/subproviders/signer.ts | 6 | ||||
| -rw-r--r-- | packages/utils/src/index.ts | 1 | ||||
| -rw-r--r-- | packages/web3-wrapper/src/index.ts | 1 | ||||
| -rw-r--r-- | packages/web3-wrapper/src/marshaller.ts | 74 | ||||
| -rw-r--r-- | packages/web3-wrapper/src/utils.ts | 58 | ||||
| -rw-r--r-- | packages/web3-wrapper/src/web3_wrapper.ts | 3 | 
6 files changed, 46 insertions, 97 deletions
| diff --git a/packages/subproviders/src/subproviders/signer.ts b/packages/subproviders/src/subproviders/signer.ts index 08a9daceb..1fb613da0 100644 --- a/packages/subproviders/src/subproviders/signer.ts +++ b/packages/subproviders/src/subproviders/signer.ts @@ -1,4 +1,5 @@ -import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { Web3Wrapper, marshaller } from '@0xproject/web3-wrapper'; +  import { JSONRPCRequestPayload, Provider } from 'ethereum-types';  import { Callback, ErrorCallback } from '../types'; @@ -51,7 +52,8 @@ export class SignerSubprovider extends Subprovider {              case 'eth_sendTransaction':                  const [txParams] = payload.params;                  try { -                    const txHash = await this._web3Wrapper.sendTransactionAsync(txParams); +                    const txData = marshaller.unmarshalTxData(txParams); +                    const txHash = await this._web3Wrapper.sendTransactionAsync(txData);                      end(null, txHash);                  } catch (err) {                      end(err); diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index fd102cecb..de78f26df 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -8,3 +8,4 @@ export { logUtils } from './log_utils';  export { abiUtils } from './abi_utils';  export { NULL_BYTES } from './constants';  export { errorUtils } from './error_utils'; +export { conversion } from './conversion'; diff --git a/packages/web3-wrapper/src/index.ts b/packages/web3-wrapper/src/index.ts index 66ef0a784..19fe0836c 100644 --- a/packages/web3-wrapper/src/index.ts +++ b/packages/web3-wrapper/src/index.ts @@ -1,2 +1,3 @@  export { Web3Wrapper, uniqueVersionIds, NodeType } from './web3_wrapper';  export { Web3WrapperErrors } from './types'; +export { marshaller } from './marshaller'; diff --git a/packages/web3-wrapper/src/marshaller.ts b/packages/web3-wrapper/src/marshaller.ts index 15384417e..b4a1e2ce4 100644 --- a/packages/web3-wrapper/src/marshaller.ts +++ b/packages/web3-wrapper/src/marshaller.ts @@ -1,4 +1,4 @@ -import { addressUtils } from '@0xproject/utils'; +import { addressUtils, conversion } from '@0xproject/utils';  import {      BlockParam,      BlockParamLiteral, @@ -14,8 +14,6 @@ import {  import ethUtil = require('ethereumjs-util');  import * as _ from 'lodash'; -import { utils } from './utils'; -  import {      BlockWithoutTransactionDataRPC,      BlockWithTransactionDataRPC, @@ -31,26 +29,30 @@ export const marshaller = {      ): BlockWithoutTransactionData {          const block = {              ...blockWithHexValues, -            gasLimit: utils.convertHexToNumber(blockWithHexValues.gasLimit), -            gasUsed: utils.convertHexToNumber(blockWithHexValues.gasUsed), -            size: utils.convertHexToNumber(blockWithHexValues.size), -            timestamp: utils.convertHexToNumber(blockWithHexValues.timestamp), -            number: _.isNull(blockWithHexValues.number) ? null : utils.convertHexToNumber(blockWithHexValues.number), -            difficulty: utils.convertAmountToBigNumber(blockWithHexValues.difficulty), -            totalDifficulty: utils.convertAmountToBigNumber(blockWithHexValues.totalDifficulty), +            gasLimit: conversion.convertHexToNumber(blockWithHexValues.gasLimit), +            gasUsed: conversion.convertHexToNumber(blockWithHexValues.gasUsed), +            size: conversion.convertHexToNumber(blockWithHexValues.size), +            timestamp: conversion.convertHexToNumber(blockWithHexValues.timestamp), +            number: _.isNull(blockWithHexValues.number) +                ? null +                : conversion.convertHexToNumber(blockWithHexValues.number), +            difficulty: conversion.convertAmountToBigNumber(blockWithHexValues.difficulty), +            totalDifficulty: conversion.convertAmountToBigNumber(blockWithHexValues.totalDifficulty),          };          return block;      },      unmarshalIntoBlockWithTransactionData(blockWithHexValues: BlockWithTransactionDataRPC): BlockWithTransactionData {          const block = {              ...blockWithHexValues, -            gasLimit: utils.convertHexToNumber(blockWithHexValues.gasLimit), -            gasUsed: utils.convertHexToNumber(blockWithHexValues.gasUsed), -            size: utils.convertHexToNumber(blockWithHexValues.size), -            timestamp: utils.convertHexToNumber(blockWithHexValues.timestamp), -            number: _.isNull(blockWithHexValues.number) ? null : utils.convertHexToNumber(blockWithHexValues.number), -            difficulty: utils.convertAmountToBigNumber(blockWithHexValues.difficulty), -            totalDifficulty: utils.convertAmountToBigNumber(blockWithHexValues.totalDifficulty), +            gasLimit: conversion.convertHexToNumber(blockWithHexValues.gasLimit), +            gasUsed: conversion.convertHexToNumber(blockWithHexValues.gasUsed), +            size: conversion.convertHexToNumber(blockWithHexValues.size), +            timestamp: conversion.convertHexToNumber(blockWithHexValues.timestamp), +            number: _.isNull(blockWithHexValues.number) +                ? null +                : conversion.convertHexToNumber(blockWithHexValues.number), +            difficulty: conversion.convertAmountToBigNumber(blockWithHexValues.difficulty), +            totalDifficulty: conversion.convertAmountToBigNumber(blockWithHexValues.totalDifficulty),              transactions: [] as Transaction[],          };          block.transactions = _.map(blockWithHexValues.transactions, (tx: TransactionRPC) => { @@ -62,14 +64,14 @@ export const marshaller = {      unmarshalTransaction(txRpc: TransactionRPC): Transaction {          const tx = {              ...txRpc, -            blockNumber: !_.isNull(txRpc.blockNumber) ? utils.convertHexToNumber(txRpc.blockNumber) : null, +            blockNumber: !_.isNull(txRpc.blockNumber) ? conversion.convertHexToNumber(txRpc.blockNumber) : null,              transactionIndex: !_.isNull(txRpc.transactionIndex) -                ? utils.convertHexToNumber(txRpc.transactionIndex) +                ? conversion.convertHexToNumber(txRpc.transactionIndex)                  : null, -            nonce: utils.convertHexToNumber(txRpc.nonce), -            gas: utils.convertHexToNumber(txRpc.gas), -            gasPrice: utils.convertAmountToBigNumber(txRpc.gasPrice), -            value: utils.convertAmountToBigNumber(txRpc.value), +            nonce: conversion.convertHexToNumber(txRpc.nonce), +            gas: conversion.convertHexToNumber(txRpc.gas), +            gasPrice: conversion.convertAmountToBigNumber(txRpc.gasPrice), +            value: conversion.convertAmountToBigNumber(txRpc.value),          };          return tx;      }, @@ -79,10 +81,12 @@ export const marshaller = {          }          const txData = {              ...txDataRpc, -            value: !_.isUndefined(txDataRpc.value) ? utils.convertHexToNumber(txDataRpc.value) : undefined, -            gas: !_.isUndefined(txDataRpc.gas) ? utils.convertHexToNumber(txDataRpc.gas) : undefined, -            gasPrice: !_.isUndefined(txDataRpc.gasPrice) ? utils.convertHexToNumber(txDataRpc.gasPrice) : undefined, -            nonce: !_.isUndefined(txDataRpc.nonce) ? utils.convertHexToNumber(txDataRpc.nonce) : undefined, +            value: !_.isUndefined(txDataRpc.value) ? conversion.convertHexToNumber(txDataRpc.value) : undefined, +            gas: !_.isUndefined(txDataRpc.gas) ? conversion.convertHexToNumber(txDataRpc.gas) : undefined, +            gasPrice: !_.isUndefined(txDataRpc.gasPrice) +                ? conversion.convertHexToNumber(txDataRpc.gasPrice) +                : undefined, +            nonce: !_.isUndefined(txDataRpc.nonce) ? conversion.convertHexToNumber(txDataRpc.nonce) : undefined,          };          return txData;      }, @@ -129,15 +133,15 @@ export const marshaller = {          if (_.isUndefined(blockParam)) {              return BlockParamLiteral.Latest;          } -        const encodedBlockParam = _.isNumber(blockParam) ? utils.numberToHex(blockParam) : blockParam; +        const encodedBlockParam = _.isNumber(blockParam) ? conversion.numberToHex(blockParam) : blockParam;          return encodedBlockParam;      },      unmarshalLog(rawLog: RawLogEntry): LogEntry {          const formattedLog = {              ...rawLog, -            logIndex: utils.convertHexToNumberOrNull(rawLog.logIndex), -            blockNumber: utils.convertHexToNumberOrNull(rawLog.blockNumber), -            transactionIndex: utils.convertHexToNumberOrNull(rawLog.transactionIndex), +            logIndex: conversion.convertHexToNumberOrNull(rawLog.logIndex), +            blockNumber: conversion.convertHexToNumberOrNull(rawLog.blockNumber), +            transactionIndex: conversion.convertHexToNumberOrNull(rawLog.transactionIndex),          };          return formattedLog;      }, @@ -147,14 +151,14 @@ export const marshaller = {              to: _.isUndefined(callTxDataBase.to) ? undefined : this.marshalAddress(callTxDataBase.to),              gasPrice: _.isUndefined(callTxDataBase.gasPrice)                  ? undefined -                : utils.encodeAmountAsHexString(callTxDataBase.gasPrice), -            gas: _.isUndefined(callTxDataBase.gas) ? undefined : utils.encodeAmountAsHexString(callTxDataBase.gas), +                : conversion.encodeAmountAsHexString(callTxDataBase.gasPrice), +            gas: _.isUndefined(callTxDataBase.gas) ? undefined : conversion.encodeAmountAsHexString(callTxDataBase.gas),              value: _.isUndefined(callTxDataBase.value)                  ? undefined -                : utils.encodeAmountAsHexString(callTxDataBase.value), +                : conversion.encodeAmountAsHexString(callTxDataBase.value),              nonce: _.isUndefined(callTxDataBase.nonce)                  ? undefined -                : utils.encodeAmountAsHexString(callTxDataBase.nonce), +                : conversion.encodeAmountAsHexString(callTxDataBase.nonce),          };          return callTxDataBaseRPC; diff --git a/packages/web3-wrapper/src/utils.ts b/packages/web3-wrapper/src/utils.ts deleted file mode 100644 index d13eb9404..000000000 --- a/packages/web3-wrapper/src/utils.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { BigNumber } from '@0xproject/utils'; -import * as _ from 'lodash'; - -export const utils = { -    isBigNumber(value: any): boolean { -        const isBigNumber = _.isObject(value) && value.isBigNumber; -        return isBigNumber; -    }, -    convertHexToNumber(value: string): number { -        const valueBigNumber = new BigNumber(value); -        const valueNumber = valueBigNumber.toNumber(); -        return valueNumber; -    }, -    convertHexToNumberOrNull(hex: string | null): number | null { -        if (_.isNull(hex)) { -            return null; -        } -        const decimal = this.convertHexToNumber(hex); -        return decimal; -    }, -    convertAmountToBigNumber(value: string | number | BigNumber): BigNumber { -        const num = value || 0; -        const isBigNumber = utils.isBigNumber(num); -        if (isBigNumber) { -            return num as BigNumber; -        } - -        if (_.isString(num) && (num.indexOf('0x') === 0 || num.indexOf('-0x') === 0)) { -            return new BigNumber(num.replace('0x', ''), 16); -        } - -        const baseTen = 10; -        return new BigNumber((num as number).toString(baseTen), baseTen); -    }, -    encodeAmountAsHexString(value: string | number | BigNumber): string { -        const valueBigNumber = utils.convertAmountToBigNumber(value); -        const hexBase = 16; -        const valueHex = valueBigNumber.toString(hexBase); - -        return valueBigNumber.lessThan(0) ? '-0x' + valueHex.substr(1) : '0x' + valueHex; -    }, -    numberToHex(value: number): string { -        if (!isFinite(value) && !this.isHexStrict(value)) { -            throw new Error(`Given input ${value} is not a number.`); -        } - -        const valueBigNumber = new BigNumber(value); -        const hexBase = 16; -        const result = valueBigNumber.toString(hexBase); - -        return valueBigNumber.lt(0) ? '-0x' + result.substr(1) : '0x' + result; -    }, -    isHexStrict(hex: string | number): boolean { -        return ( -            (_.isString(hex) || _.isNumber(hex)) && /^(-)?0x[0-9a-f]*$/i.test(_.isNumber(hex) ? hex.toString() : hex) -        ); -    }, -}; diff --git a/packages/web3-wrapper/src/web3_wrapper.ts b/packages/web3-wrapper/src/web3_wrapper.ts index 495523e44..f6f818279 100644 --- a/packages/web3-wrapper/src/web3_wrapper.ts +++ b/packages/web3-wrapper/src/web3_wrapper.ts @@ -1,6 +1,6 @@  import { assert } from '@0xproject/assert';  import { schemas } from '@0xproject/json-schemas'; -import { AbiDecoder, addressUtils, BigNumber, intervalUtils, promisify } from '@0xproject/utils'; +import { AbiDecoder, addressUtils, BigNumber, intervalUtils, promisify, conversion as utils } from '@0xproject/utils';  import {      BlockParam,      BlockParamLiteral, @@ -23,7 +23,6 @@ import * as _ from 'lodash';  import { marshaller } from './marshaller';  import { BlockWithoutTransactionDataRPC, BlockWithTransactionDataRPC, Web3WrapperErrors } from './types'; -import { utils } from './utils';  const BASE_TEN = 10; | 
