type Transaction @entity { id: ID! currency: Bytes! maturity: BigInt! side: Int! executionPrice: BigInt! user: User! executionType: TransactionExecutionType! futureValue: BigInt! amount: BigInt! feeInFV: BigInt! averagePrice: BigDecimal! lendingMarket: LendingMarket! order: Order! createdAt: BigInt! blockNumber: BigInt! txHash: Bytes! } type Order @entity { id: ID! orderId: BigInt! user: User! currency: Bytes! side: Int! maturity: BigInt! inputUnitPrice: BigInt! inputAmount: BigInt! filledAmount: BigInt! status: OrderStatus! statusUpdatedAt: BigInt! lendingMarket: LendingMarket! isPreOrder: Boolean! type: OrderType! transactions: [Transaction!]! @derivedFrom(field: "order") isCircuitBreakerTriggered: Boolean! createdAt: BigInt! blockNumber: BigInt! txHash: Bytes! } type LendingMarket @entity { id: ID! currency: Bytes! maturity: BigInt! isActive: Boolean! transactions: [Transaction!]! @derivedFrom(field: "lendingMarket") orders: [Order!]! @derivedFrom(field: "lendingMarket") volume: BigInt! dailyVolume: [DailyVolume!]! @derivedFrom(field: "lendingMarket") openingUnitPrice: BigInt! lastLendUnitPrice: BigInt! lastBorrowUnitPrice: BigInt! offsetAmount: BigInt! } enum TransactionExecutionType { Maker Taker } enum OrderType { Market Limit Unwind } enum OrderStatus { Open PartiallyFilled Filled Killed Cancelled } type User @entity { id: ID! # wallet address createdAt: BigInt! transactionCount: BigInt! transactions: [Transaction!]! @derivedFrom(field: "user") orderCount: BigInt! orders: [Order!]! @derivedFrom(field: "user") liquidationCount: BigInt! liquidations: [Liquidation!]! @derivedFrom(field: "user") transferCount: BigInt! transfers: [Transfer!]! @derivedFrom(field: "user") deposits: [Deposit!]! @derivedFrom(field: "user") } type DailyVolume @entity { id: ID! # currency-maturity-date(yyyy-mm-dd) currency: Bytes! maturity: BigInt! day: String! # dd-mm-yyyy volume: BigInt! timestamp: BigInt! lendingMarket: LendingMarket! } type Protocol @entity { id: ID! # 1 totalUsers: BigInt! } type Liquidation @entity { id: ID! collateralCurrency: Bytes! debtCurrency: Bytes! debtMaturity: BigInt! debtAmount: BigInt! user: User! timestamp: BigInt! blockNumber: BigInt! txHash: Bytes! } enum TransferType { Deposit Withdraw } type Transfer @entity { id: ID! user: User! currency: Bytes! amount: BigInt! transferType: TransferType! timestamp: BigInt! blockNumber: BigInt! txHash: Bytes! } type Deposit @entity { id: ID! user: User! currency: Bytes! amount: BigInt! } type TransactionCandleStick @entity { id: ID! # A composite ID, e.g., "currency-maturity-interval-epochTime" interval: BigInt! # interval in seconds currency: Bytes! maturity: BigInt! timestamp: BigInt! # The start time of the interval open: BigInt! close: BigInt! high: BigInt! low: BigInt! average: BigDecimal! volume: BigInt! volumeInFV: BigInt! lendingMarket: LendingMarket! }