From 21cbf05362e995acb788b49e7d358beaf03e3311 Mon Sep 17 00:00:00 2001 From: Alex Browne Date: Tue, 4 Dec 2018 20:20:49 -0800 Subject: Change type of transactions.gas_used and gas_price to BigNumber/numeric --- ...983324954-ConvertTransactionGasPriceToBigNumber.ts | 19 +++++++++++++++++++ packages/pipeline/src/entities/transaction.ts | 11 ++++++----- packages/pipeline/src/parsers/web3/index.ts | 5 +++-- packages/pipeline/test/entities/transaction_test.ts | 5 +++-- 4 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 packages/pipeline/migrations/1543983324954-ConvertTransactionGasPriceToBigNumber.ts diff --git a/packages/pipeline/migrations/1543983324954-ConvertTransactionGasPriceToBigNumber.ts b/packages/pipeline/migrations/1543983324954-ConvertTransactionGasPriceToBigNumber.ts new file mode 100644 index 000000000..dcb0fd727 --- /dev/null +++ b/packages/pipeline/migrations/1543983324954-ConvertTransactionGasPriceToBigNumber.ts @@ -0,0 +1,19 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class ConvertTransactionGasPriceToBigNumber1543983324954 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE raw.transactions + ALTER COLUMN gas_price TYPE numeric USING gas_price::numeric, + ALTER COLUMN gas_used TYPE numeric USING gas_used::numeric;`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE raw.transactions + ALTER COLUMN gas_price TYPE numeric USING gas_price::bigint, + ALTER COLUMN gas_used TYPE numeric USING gas_used::bigint;`, + ); + } +} diff --git a/packages/pipeline/src/entities/transaction.ts b/packages/pipeline/src/entities/transaction.ts index 91e4ecb5d..742050177 100644 --- a/packages/pipeline/src/entities/transaction.ts +++ b/packages/pipeline/src/entities/transaction.ts @@ -1,6 +1,7 @@ +import { BigNumber } from '@0x/utils'; import { Column, Entity, PrimaryColumn } from 'typeorm'; -import { numberToBigIntTransformer } from '../utils'; +import { bigNumberTransformer, numberToBigIntTransformer } from '../utils'; @Entity({ name: 'transactions', schema: 'raw' }) export class Transaction { @@ -11,8 +12,8 @@ export class Transaction { @PrimaryColumn({ name: 'block_number', transformer: numberToBigIntTransformer }) public blockNumber!: number; - @Column({ type: 'bigint', name: 'gas_used', transformer: numberToBigIntTransformer }) - public gasUsed!: number; - @Column({ type: 'bigint', name: 'gas_price', transformer: numberToBigIntTransformer }) - public gasPrice!: number; + @Column({ type: 'numeric', name: 'gas_used', transformer: bigNumberTransformer }) + public gasUsed!: BigNumber; + @Column({ type: 'numeric', name: 'gas_price', transformer: bigNumberTransformer }) + public gasPrice!: BigNumber; } diff --git a/packages/pipeline/src/parsers/web3/index.ts b/packages/pipeline/src/parsers/web3/index.ts index 86f924151..f986efc59 100644 --- a/packages/pipeline/src/parsers/web3/index.ts +++ b/packages/pipeline/src/parsers/web3/index.ts @@ -1,3 +1,4 @@ +import { BigNumber } from '@0x/utils'; import { BlockWithoutTransactionData, Transaction as EthTransaction } from 'ethereum-types'; import { Block, Transaction } from '../../entities'; @@ -41,8 +42,8 @@ export function parseTransaction(rawTransaction: EthTransaction): Transaction { tx.blockHash = rawTransaction.blockHash; tx.blockNumber = rawTransaction.blockNumber; - tx.gasUsed = rawTransaction.gas; - tx.gasPrice = rawTransaction.gasPrice.toNumber(); + tx.gasUsed = new BigNumber(rawTransaction.gas); + tx.gasPrice = rawTransaction.gasPrice; return tx; } diff --git a/packages/pipeline/test/entities/transaction_test.ts b/packages/pipeline/test/entities/transaction_test.ts index 027de7d32..634844544 100644 --- a/packages/pipeline/test/entities/transaction_test.ts +++ b/packages/pipeline/test/entities/transaction_test.ts @@ -1,3 +1,4 @@ +import { BigNumber } from '@0x/utils'; import 'mocha'; import 'reflect-metadata'; @@ -17,8 +18,8 @@ describe('Transaction entity', () => { const transaction = new Transaction(); transaction.blockHash = '0x6ff106d00b6c3746072fc06bae140fb2549036ba7bcf9184ae19a42fd33657fd'; transaction.blockNumber = 6276262; - transaction.gasPrice = 3000000; - transaction.gasUsed = 125000; + transaction.gasPrice = new BigNumber(3000000); + transaction.gasUsed = new BigNumber(125000); transaction.transactionHash = '0x6dd106d002873746072fc5e496dd0fb2541b68c77bcf9184ae19a42fd33657fe'; await testSaveAndFindEntityAsync(transactionRepository, transaction); }); -- cgit