import { Column, DataType, HasMany, Index, Model, Table } from 'sequelize-typescript'; import { IEvmBlockData } from '../utils/interfaces'; import { EvmAccount } from './evmAccount'; import { EvmContract } from './evmContract'; import { EvmReceipt } from './evmReceipt'; import { EvmReceiptLog } from './evmReceiptLog'; import { EvmTransaction } from './evmTransaction'; @Table export class EvmBlock extends Model { @Index({ name: 'evmBlock-height-index', using: 'HASH', }) @Column({ primaryKey: true, type: DataType.INTEGER }) height: number; @Column(DataType.STRING) hash: string; @Index({ name: 'evmBlock-date-index', using: 'BTREE', }) @Column(DataType.DATE) date: Date; @Column(DataType.STRING) miner: string; @Column(DataType.DECIMAL) baseFeePerGas: string; @Column(DataType.DECIMAL) gasUsed: string; @Column(DataType.DECIMAL) gasLimit: string; @Column({ type: DataType.JSONB, allowNull: true, defaultValue: null }) data: IEvmBlockData; @Column(DataType.INTEGER) transactionsCount: number; @Column(DataType.INTEGER) receiptsCount: number; // relations 1-M @HasMany(() => EvmTransaction, { foreignKey: 'evmBlockHeight' }) evmTransactions: EvmTransaction[]; @HasMany(() => EvmReceipt, { foreignKey: 'evmBlockHeight' }) evmReceipts: EvmReceipt[]; @HasMany(() => EvmReceiptLog, { foreignKey: 'evmBlockHeight' }) evmReceiptLogs: EvmReceiptLog[]; @HasMany(() => EvmAccount, { foreignKey: 'creationEvmBlockHeight' }) createdEvmAccounts: EvmAccount[]; @HasMany(() => EvmContract, { foreignKey: 'deploymentEvmBlockHeight', constraints: false }) deployedEvmContracts: EvmContract[]; }