diff options
author | Alex Browne <stephenalexbrowne@gmail.com> | 2018-12-05 12:20:49 +0800 |
---|---|---|
committer | Alex Browne <stephenalexbrowne@gmail.com> | 2018-12-05 12:20:49 +0800 |
commit | e0348f9c044b4909260e4864398b4f50232da620 (patch) | |
tree | 2250eb061a4b2c27d3dc1727a26e1380cb8d9226 | |
parent | 2e704ac01a077b0c73288aaa53c9cf66c73e27f1 (diff) | |
download | dexon-sol-tools-e0348f9c044b4909260e4864398b4f50232da620.tar.gz dexon-sol-tools-e0348f9c044b4909260e4864398b4f50232da620.tar.zst dexon-sol-tools-e0348f9c044b4909260e4864398b4f50232da620.zip |
Change type of transactions.gas_used and gas_price to BigNumber/numeric
4 files changed, 31 insertions, 9 deletions
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<any> { + 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<any> { + 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); }); |