import { BelongsTo, Column, DataType, ForeignKey, HasMany, HasOne, Index, Model, Table, } from 'sequelize-typescript'; import { IExtraData } from '../utils/interfaces'; import { EvmBlock } from './evmBlock'; import { EvmContract } from './evmContract'; import { EvmReceiptLog } from './evmReceiptLog'; import { EvmTokenEvent } from './evmTokenEvent'; import { EvmTransaction } from './evmTransaction'; @Table export class EvmReceipt extends Model { @Column(DataType.STRING) root: string; @Column(DataType.SMALLINT) type: number; @Column(DataType.BOOLEAN) status: boolean; @Column(DataType.INTEGER) gasUsed: number; @Column(DataType.TEXT) logsBloom: string; @Index({ name: 'evmReceipt-transactionIndex-index', using: 'HASH', }) @Column(DataType.SMALLINT) transactionIndex: number; @Column(DataType.INTEGER) cumulativeGasUsed: number; @Column({ type: DataType.JSONB, allowNull: true, defaultValue: null }) extraData: IExtraData; // relations M-1 @Index({ name: 'evmReceipt-EvmBlock-index', using: 'BTREE', }) @ForeignKey(() => EvmBlock) @Column(DataType.INTEGER) evmBlockHeight: number; @ForeignKey(() => EvmTransaction) @Column(DataType.INTEGER) evmTransactionId: number; @ForeignKey(() => EvmContract) @Column(DataType.INTEGER) evmContractId: number; @BelongsTo(() => EvmBlock, 'evmBlockHeight') evmBlock: EvmBlock; @BelongsTo(() => EvmTransaction, 'evmTransactionId') evmTransaction: EvmTransaction; @BelongsTo(() => EvmContract, 'evmContractId') evmContract: EvmContract; // relations 1-M @HasMany(() => EvmReceiptLog, { foreignKey: 'evmReceiptId' }) evmReceiptLogs: EvmReceiptLog[]; @HasMany(() => EvmTokenEvent, { foreignKey: 'evmReceiptId' }) evmTokenEvents: EvmTokenEvent[]; // relations 1-1 @HasOne(() => EvmContract, { foreignKey: 'deploymentEvmReceiptId', constraints: false }) deployedEvmContract: EvmContract; }