ajna-watcher-ts/subgraph-build/schema.graphql

991 lines
34 KiB
GraphQL
Raw Normal View History

2024-03-14 06:26:15 +00:00
# this supports both ERC20 and ERC721 tokens, as union types aren't currently supported
type Token @entity {
# token address
id: Bytes!
# token symbol
symbol: String!
# token name
name: String!
# token decimals
decimals: Int
# indicates whether the token is ERC20 or ERC721
tokenType: String! # ERC20 or ERC721
# number of pools including this token
poolCount: BigInt!
# list of pools including this token
pools: [Pool!]!
# total supply of the token
totalSupply: BigInt
# transactions across all pools that include this token
txCount: BigInt!
}
# # # # # # # # #
# Pool ENTITIES #
# # # # # # # # #
type PoolFactory @entity {
# factory address
id: Bytes!
# indicates type of collateral (ERC20 or ERC721)
poolType: String!
# number of pools deployed by the factory
poolCount: BigInt!
# list of pools deployed by the factory
pools: [Pool!]!
# total number of transactions sent to the factory
txCount: BigInt!
}
type Pool @entity {
# pool address
id: Bytes!
# block pool was created at
createdAtBlockNumber: BigInt!
# creation timestamp
createdAtTimestamp: BigInt!
# address of the pool's collateral token
collateralToken: Token!
# address of the pool's quote token
quoteToken: Token!
# amount of deposit in the pool
poolSize: BigDecimal!
# debt in T0 terms, useful when the caller knows the pending inflator
t0debt: BigDecimal!
# pool inflator snapshot
inflator: BigDecimal!
# interest rate paid by borrowers, excluding fees
borrowRate: BigDecimal!
# interest rate awarded to lenders, excluding fees
lendRate: BigDecimal!
# origination fee paid by borrower on newly drawn debt
borrowFeeRate: BigDecimal!
# fee charged to lenders depositing below the highest threshold price
depositFeeRate: BigDecimal!
# total collateral pledged to the pool
pledgedCollateral: BigDecimal!
# total interest earned by all lenders in the pool
totalInterestEarned: BigDecimal!
# total number of transactions sent to the pool
txCount: BigInt!
# type of pool: "Fungible", Collection", "Subset"
poolType: String!
# LOANS INFORMATION
loansCount: BigInt! # total number of loans in the pool
maxBorrower: Bytes! # address of the borrower with the highest TP in the pool
# normalized total amount of tokens flashloaned from the pool
quoteTokenFlashloaned: BigDecimal!
collateralFlashloaned: BigDecimal!
# PRICES INFORMATION
hpb: BigDecimal! # current highest price bucket
hpbIndex: Int! # current highest price bucket index
htp: BigDecimal! # current highest threshold price
htpIndex: Int! # current highest threshold price index
lup: BigDecimal! # current lowest utilized price
lupIndex: Int! # current lowest utilized price index
# RESERVES INFORMATION
# current reserves contractQuoteBalance + poolDebt - pool.depositSize()
reserves: BigDecimal!
# current pool claimable reserves
claimableReserves: BigDecimal!
# remaining claimable reserves not yet taken
claimableReservesRemaining: BigDecimal!
# current burn epoch
burnEpoch: BigInt!
# total ajna burned in the pool
totalAjnaBurned: BigDecimal!
# list of all reserve auctions for this pool
reserveAuctions: [ReserveAuction!]!
# UTILIZATION INFORMATION
# current pool minimum debt amount for a new borrow
minDebtAmount: BigDecimal!
# current pool utilization across all borrowers
actualUtilization: BigDecimal!
# current pool target utilization rate
targetUtilization: BigDecimal!
# LIQUIDATION INFORMATION
# liquidation bond currently escrowed in the pool
totalBondEscrowed: BigDecimal!
# list of active liquidation auctions in the pool, sorted by kick time
liquidationAuctions: [LiquidationAuction!]!
# normalized contract balances, used for TVL
quoteTokenBalance: BigDecimal!
collateralBalance: BigDecimal!
# ERC721 POOL INFORMATION
# pool subsetHash
subsetHash: Bytes!
# list of tokenIds pledged by the borrower
tokenIdsPledged: [BigInt!]!
# list of tokenIds available to lenders
bucketTokenIds: [BigInt!]!
# list of tokenIds allowed by a subset pool
tokenIdsAllowed: [BigInt!]!
}
type Bucket @entity {
# bucket id: $poolAddress + '#' + $bucketIndex
id: Bytes!
# bucket index
bucketIndex: Int!
# bucket price
bucketPrice: BigDecimal!
# current exchange rate of the bucket
exchangeRate: BigDecimal!
# pool address
poolAddress: String!
# pool in which the bucket belongs
pool: Pool!
# total collateral available in the bucket
collateral: BigDecimal!
# total quote tokens deposited in the bucket, inclusive of interest
deposit: BigDecimal!
# total LP for all lenders in the bucket
lpb: BigDecimal!
# list of lends associated with the bucket
lends: [Lend!]!
# list of PositionLends associated with the bucket
positionLends: [PositionLend!]!
}
# lend occurs per bucket in a pool
type Lend @entity {
# Lend id: $bucketId + '|' + $accountId
id: Bytes!
# bucket to which a lend was made
bucket: Bucket!
# index of the bucket, for querying
bucketIndex: Int!
# pool address
poolAddress: String!
# address of the lender
lender: Bytes!
# pool pointer
pool: Pool!
# amount of LPB lender has in the bucket
lpb: BigDecimal!
# quote equivalent value of the lend's LPB in the bucket (regardless of available deposit in bucket)
lpbValueInQuote: BigDecimal!
# time at which the lend was made
depositTime: BigInt!
}
# each borrower has only one loan with a pool
type Loan @entity {
# Loan id: $poolAddress + '|' + $borrowerId
id: Bytes!
# pool address
poolAddress: String!
# borrower address
borrower: Bytes!
# pool pointer
pool: Pool!
# boolean indicating whether the loan is in liquidations
inLiquidation: Boolean!
# most recent liquidation, whether active or inactive
liquidationAuction: LiquidationAuction
# collateral tokens deposited in a pool by the borrower
collateralPledged: BigDecimal!
# borrower's threshold price
thresholdPrice: BigDecimal!
# list of tokenIds pledged by the borrower
tokenIdsPledged: [BigInt!]!
# debt in T0 terms, useful when the caller knows the pending inflator
t0debt: BigDecimal!
# borrowers t0 neutral price
t0Np: BigDecimal!
}
type Account @entity {
# address of the account
id: Bytes!
# list of pools in which an account is present
pools: [Pool!]!
# kicks executed by the account
kicks: [Kick!]!
# buckets in a pool to which the account has lent quote
lends: [Lend!]!
# loans which the account has taken from pools
loans: [Loan!]!
# liquidation auctions settled
settles: [Settle!]!
# liquidation auctions taken
takes: [Take!]!
# reserve auctions which the account has interacted in
reserveAuctions: [ReserveAuction!]!
# ecosystem coordination proposals created
proposalsCreated: [Proposal!]!
# ecosystem coordination proposals passed and funded
proposalsExecuted: [Proposal!]!
# account to which this account is delegating votes
delegatedTo: Account
# accounts from which votes are delegated
delegatedFrom: [Account!]!
# delegation rewards claimed across all distribution periods
rewardsClaimed: BigDecimal!
# voting state for each distribution period
distributionPeriodVotes: [DistributionPeriodVote!]!
# amount of tokens delegated to this account
tokensDelegated: BigDecimal!
# positions associated with the account
positions: [Position!]!
# total number of transactions sent by the account
txCount: BigInt!
}
type LiquidationAuction @entity {
id: Bytes! # $poolAddress + '|' + $loanId + '|' + blockNumber
pool: Pool! # pool in which the liquidation occurred
borrower: Bytes! # address of the borrower being liquidated
lastTakePrice: BigDecimal! # price of auction upon most recent take
collateral: BigDecimal! # initial collateral up for auction
collateralRemaining: BigDecimal! # collateral which has not been taken
debt: BigDecimal! # initial debt to be covered by the auction
debtRemaining: BigDecimal! # debt which has not been covered
loan: Loan! # loan being liquidated
kicker: Bytes! # address of the kicker
kick: Kick! # kick which triggered the liquidation
kickTime: BigInt! # block timestamp at which the kick was executed
takes: [Take!]! # list of takes which occured using outside liquidity
bucketTakes: [BucketTake!]! # list of takes which involved the pool's book
settles: [Settle!]! # list of possibly-intermediate settles performed on the auction
settle: AuctionSettle # final settlement of the auction
settleTime: BigInt # block timestamp at which the liquidation was settled
settled: Boolean! # boolean indicating whether the auction has been settled
bondSize: BigDecimal! # bond provided by kicker to initate auction
bondFactor: BigDecimal! # bond factor determining the reward or penalty for the kicker
neutralPrice: BigDecimal! # price at which kicker will have their bond returned without penalty or reward
referencePrice: BigDecimal! # max(HTP, NP) used in auction price curve
thresholdPrice: BigDecimal! # Threshold price stamped on the liquidation at time of kick
}
# tracks the reserve auction process across multiple takes in a single auction
# used as start and take events are emitted as ReserveAuction
type ReserveAuction @entity {
id: Bytes! # $poolAddress + '|' + $burnEpoch
pool: Pool! # Pool in which the reserve auction occurred
claimableReservesRemaining: BigDecimal! # uint256 claimable reserves remaining at start or at latest take
lastTakePrice: BigDecimal! # uint256 price of auction upon most recent take, denominated in AJNA
burnEpoch: BigInt! # uint256 burn epoch at which the reserve auction was started
kick: ReserveAuctionKick! # kick information
takes: [ReserveAuctionTake!]! # list of reserve auction takes that occured during this auction process
ajnaBurned: BigDecimal! # total amount of ajna burned across all takes in the reserve auction
}
# LP transferors approved by a lender for a pool, updated upon Approve/RevokeLpTransferors
type LPTransferorList @entity {
id: Bytes! # $poolAddress + '|' + $lender
pool: Pool! # pool in which these transferors have been approved
lender: Bytes! # address of the lender who has approved transferors
transferors: [Bytes!]! # addresses of approved transferors
}
# represents a LP allowance for a single bucket
type LPAllowance @entity {
id: Bytes! # LPAllowanceList.id + '|' + $index
index: Int! # bucket index where an allowance has been granted
amount: BigDecimal! # size of the allowance (measured in LP)
}
# updated upon Increase/Decrease/RevokeLPAllowance
type LPAllowanceList @entity {
id: Bytes! # $poolAddress + '|' + $lender + '|' + $spender
pool: Pool! # pool in which LP allowances have been granted
lender: Bytes! # address of the lender who has granted an allowance
spender: Bytes! # address who has been granted an allowance
allowances: [LPAllowance!]! # list of LP allowances
}
# # # # # # # # # # #
# ERC20 Pool Events #
# # # # # # # # # # #
type AddCollateral @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool to which collateral was added
bucket: Bucket! # Bucket to which collateral was added
actor: Bytes! # address
index: Int! # uint256
amount: BigDecimal! # uint256
lpAwarded: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type AddQuoteToken @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool to which quote was added
bucket: Bucket! # Bucket to which quote was added
lender: Bytes! # address
index: Int! # uint256
amount: BigDecimal! # uint256
lpAwarded: BigDecimal! # uint256
lup: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# emitted when auction has been removed from the liquidation queue
type AuctionSettle @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool whose debt was settled
loan: Loan! # Loan which was settled
borrower: Bytes! # address
collateral: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type BondWithdrawn @entity(immutable: true) {
id: Bytes!
kicker: Bytes! # address
reciever: Bytes! # address
amount: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type BucketBankruptcy @entity(immutable: true) {
id: Bytes!
bucket: Bucket! # Bucket which was bankrupted
index: Int! # uint256
pool: Pool! # Pool whose bucket was bankrupted
lpForfeited: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type BucketTake @entity(immutable: true) {
id: Bytes!
borrower: Bytes! # address
taker: Bytes! # address of the taker
liquidationAuction: LiquidationAuction! # liquidation auction in which the take is occuring
loan: Loan! # loan which was taken
pool: Pool! # pool in which the take is occuring
index: Int! # uint256
auctionPrice: BigDecimal! # price of auction when taken
amount: BigDecimal! # uint256
collateral: BigDecimal! # uint256
bondChange: BigDecimal! # uint256
isReward: Boolean! # bool
lpAwarded: BucketTakeLPAwarded!
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type BucketTakeLPAwarded @entity(immutable: true) {
id: Bytes!
taker: Bytes! # address
pool: Pool! # Pool in which the take occurred
kicker: Bytes! # address
lpAwardedTaker: BigDecimal! # uint256
lpAwardedKicker: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type DrawDebt @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool debt was drawn from
borrower: Bytes! # address
amountBorrowed: BigDecimal! # uint256
collateralPledged: BigDecimal! # uint256
lup: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type Flashloan @entity(immutable: true) {
id: Bytes!
pool: Pool!
borrower: Bytes! # address
amount: BigDecimal! # uint256
}
type Kick @entity {
id: Bytes!
kicker: Bytes! # address of the kicker
pool: Pool! # Pool in which a kick occurred
loan: Loan! # Loan which was kicked
locked: BigDecimal! # amount of quote from the bond locked in the kick (updated on take) TODO: rename bondLocked
claimable: BigDecimal! # amount of quote from the bond claimable by the kicker (updated on settle) TODO: rename bondClaimable?
liquidationAuction: LiquidationAuction! # Liquidation auction which was initiated
borrower: Bytes! # address of the borrower being liquidated
debt: BigDecimal! # amount of debt to be covered
collateral: BigDecimal! # amount of collateral available to liquidate
bond: BigDecimal! # liquidation bond paid by kicker
startingPrice: BigDecimal! # initial price of auction
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type LoanStamped @entity(immutable: true) {
id: Bytes!
pool: Pool!
borrower: Bytes! # address
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type MoveQuoteToken @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool in which quote tokens were moved
lender: Bytes! # address
from: Bucket! # bucket quote token was moved from
to: Bucket! # bucket quote token was moved to
amount: BigDecimal! # uint256
lpRedeemedFrom: BigDecimal! # uint256
lpAwardedTo: BigDecimal! # uint256
lup: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type RemoveCollateral @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool where collateral was removed
bucket: Bucket! # Bucket where collateral was removed
claimer: Bytes! # address
index: Int! # uint256
amount: BigDecimal! # uint256
lpRedeemed: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type RemoveQuoteToken @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool where deposit was removed
bucket: Bucket! # Bucket where deposit was removed
lender: Bytes! # address
index: Int! # uint256
amount: BigDecimal! # uint256
lpRedeemed: BigDecimal! # uint256
lup: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type RepayDebt @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool debt was repaid to
borrower: Bytes! # address
quoteRepaid: BigDecimal! # uint256
collateralPulled: BigDecimal! # uint256
lup: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# starts a claimable reserve auction
type ReserveAuctionKick @entity(immutable: true) {
id: Bytes! # transaction.hash + transaction.from
kicker: Bytes # address of the taker, null if emitted as start of event
reserveAuction: ReserveAuction! # reserve auction in which the take is occuring
pool: Pool! # pool in which the auction was kicked
claimableReserves: BigDecimal! # uint256 initial amount of claimable reserves in the auction
startingPrice: BigDecimal! # uint256 initial auction price
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# indicates AJNA was burned in a claimable reserve auction
type ReserveAuctionTake @entity(immutable: true) {
id: Bytes! # transaction.hash + transaction.from
taker: Bytes # address of the taker, null if emitted as start of event
reserveAuction: ReserveAuction! # reserve auction in which the take is occuring
pool: Pool! # pool in which the take is occuring
claimableReservesRemaining: BigDecimal! # uint256 remaining amount of claimable reserves in the auction
auctionPrice: BigDecimal! # uint256 cost of purchasing one quote token, denominated in AJNA
quotePurchased: BigDecimal! # amount of quote token purchased by taker in this take
ajnaBurned: BigDecimal! # amount of AJNA burned by taker in this take
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# indicates rate was reset on an underutilized pool with high interest rate
type ResetInterestRate @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool whose interest rate was reset
oldBorrowRate: BigDecimal! # uint256
newBorrowRate: BigDecimal! # uint256
oldLendRate: BigDecimal! # uint256
newLendRate: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# emitted for each settle TX; one to many required before auction is settled
type Settle @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool whose debt was settled
liquidationAuction: LiquidationAuction! # Liquidation auction which was settled
loan: Loan! # Loan which was settled
borrower: Bytes! # address
settledDebt: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type Take @entity(immutable: true) {
id: Bytes!
taker: Bytes! # address of the taker
pool: Pool! # Pool in which the take occurred
borrower: Bytes! # address of the borrower being liquidated
liquidationAuction: LiquidationAuction! # Liquidation auction which was taken
loan: Loan! # Loan which was taken
auctionPrice: BigDecimal! # price of auction when taken
amount: BigDecimal! # uint256
collateral: BigDecimal! # uint256
bondChange: BigDecimal! # uint256
isReward: Boolean! # bool
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type TransferLP @entity(immutable: true) {
id: Bytes!
owner: Bytes! # address
newOwner: Bytes! # address
indexes: [Int!]! # uint256[]
lp: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type UpdateInterestRate @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool whose interest rate was updated
# interest rates
oldBorrowRate: BigDecimal! # uint256
newBorrowRate: BigDecimal! # uint256
oldLendRate: BigDecimal! # uint256
newLendRate: BigDecimal! # uint256
# fees
borrowFeeRate: BigDecimal! # uint256
depositFeeRate: BigDecimal! # uint256
# event
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type Approval @entity(immutable: true) {
id: Bytes!
owner: Bytes! # address
approved: Bytes! # address
tokenId: BigInt! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type ApprovalForAll @entity(immutable: true) {
id: Bytes!
owner: Bytes! # address
operator: Bytes! # address
approved: Boolean! # bool
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type MoveLiquidity @entity(immutable: true) {
id: Bytes!
lender: Bytes! # address
tokenId: BigInt! # uint256
pool: Pool!
fromIndex: Int! # uint256
toIndex: Int! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# PositionManager ERC-721 transfer event
type Transfer @entity(immutable: true) {
id: Bytes!
token: Token! # token which was transferred
pool: Pool!
from: Bytes! # address
to: Bytes! # address
tokenId: BigInt! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type PoolCreated @entity(immutable: true) {
id: Bytes!
pool: Pool! # pool which was created
poolType: String! # ERC20 or ERC721
factory: PoolFactory! # address of factory contract used to create pool
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# # # # # # # # # # #
# ERC721 POOL EVENTS #
# # # # # # # # # # #
type AddCollateralNFT @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool to which collateral was added
bucket: Bucket! # Bucket to which collateral was added
actor: Bytes! # address
index: BigInt! # bucket index to which collateral was added
tokenIds: [BigInt!]! # uint256[] list of tokenIds added as collateral
lpAwarded: BigDecimal! # lp awarded for adding collateral
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type AuctionNFTSettle @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool whose debt was settled
loan: Loan! # Loan which was settled
borrower: Bytes! # address
collateral: BigDecimal! # uint256
lp: BigDecimal! # uint256
index: Int! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type DrawDebtNFT @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool from which quote was withdrawn
borrower: Bytes! # address
amountBorrowed: BigDecimal! # uint256
tokenIdsPledged: [BigInt!]! # uint256[]
lup: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type MergeOrRemoveCollateralNFT @entity(immutable: true) {
id: Bytes!
pool: Pool! # Pool in which NFT collateral was merged or removed
actor: Bytes! # address
collateralMerged: BigDecimal! # uint256
toIndexLps: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# # # # # # # # # # # # # # #
# POSITION MANAGER ENTITIES #
# # # # # # # # # # # # # # #
type Position @entity {
id: Bytes! # byte encoded tokenId
tokenId: BigInt # tokenId
indexes: [PositionLend!]! # list of PositionLends which constitute a position
owner: Bytes! # address of the position owner
pool: Pool! # pool that the position is associated with
token: Token! # pointer to LPToken entity
tokenURI: String! # tokenURI of the positionNFT
}
# created to handle the seperate lpb positions for each bucket index
type PositionLend @entity {
id: Bytes! # $positionId + '|' + $bucketIndex
bucket: Bucket! # pointer to associated Bucket entity
bucketIndex: Int! # index of the bucket with lpb
depositTime: BigInt! # time at which the position was deposited
lpb: BigDecimal! # amount of LPB position has in the bucket
lpbValueInQuote: BigDecimal! # quote equivalent value of LPB in the bucket
tokenId: BigInt! # tokenId of the position
}
# # # # # # # # # # # # # #
# POSITION MANAGER EVENTS #
# # # # # # # # # # # # # #
type Burn @entity(immutable: true) {
id: Bytes!
lender: Bytes! # address
tokenId: BigInt! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type MemorializePosition @entity(immutable: true) {
id: Bytes!
pool: Pool!
lender: Bytes! # address
tokenId: BigInt! # uint256
indexes: [Int!]! # uint256[]
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type Mint @entity(immutable: true) {
id: Bytes!
lender: Bytes! # address
pool: Pool!
tokenId: BigInt! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type RedeemPosition @entity(immutable: true) {
id: Bytes!
pool: Pool!
lender: Bytes! # address
tokenId: BigInt! # uint256
indexes: [Int!]! # uint256[]
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# # # # # # # # # # # #
# GRANT FUND ENTITIES #
# # # # # # # # # # # #
type GrantFund @entity {
id: Bytes! # address of the grant fund
treasury: BigDecimal! # Total ajna tokens in the grant fund treasure
distributionPeriods: [DistributionPeriod!]! # List of distribution periods
totalDelegationRewardsClaimed: BigDecimal! # Total delegation rewards claimed across all distribution periods
}
type DistributionPeriod @entity {
id: Bytes! # distribution period id converted to Bytes from uint
distributionId: BigInt! # identifies the distribution period
startBlock: BigInt! # block number the distribution period starts
endBlock: BigInt! # block number the distribution period ends
topSlate: FundedSlate # The current top FundedSlate
slatesSubmitted: [FundedSlate!]! # FundedSlate[] slates submitted in the distribution period
fundsAvailable: BigDecimal! # Total ajna tokens available for distribution in the distribution period
delegationRewardsClaimed: BigDecimal! # Total delegation rewards claimed in the distribution period
fundingVotePowerUsed: BigDecimal! # Total funding vote power used
screeningVotesCast: BigDecimal! # number of screening votes cast
votes: [DistributionPeriodVote!]! # Voter info for the distribution period
proposals: [Proposal!]! # List of proposals submitted in the distribution period
totalTokensDistributed: BigDecimal! # Total ajna tokens distributed to executed proposals in a distribution period
}
type Proposal @entity {
id: Bytes! # proposal id converted to Bytes from uint
proposalId: BigInt! # proposal id stored in original uint format
description: String! # proposal description hashed as part of proposalId
distribution: DistributionPeriod # distributionPeriod in which the proposal was submitted if Standard, null otherwise
executed: Boolean! # bool
screeningVotesReceived: BigDecimal! # uint256
fundingVotesReceived: BigDecimal! # uint256
fundingVotesNegative: BigDecimal! # uint256
fundingVotesPositive: BigDecimal! # uint256
totalTokensRequested: BigDecimal! # uint256
params: [ProposalParams!]! # ProposalParams
}
type ProposalParams @entity {
id: Bytes! # $proposalId + '|' + $paramIndex
target: Bytes! # address
value: BigInt! # uint256
calldata: Bytes! # bytes
recipient: Bytes! # address
tokensRequested: BigDecimal! # uint256
}
type DistributionPeriodVote @entity {
id: Bytes! # $accountId + '|'' + $distributionId
voter: Account! # the account of the voter whose vote state in this distribution is being tracked
distribution: DistributionPeriod! # the distribution period associated with this entity
initialFundingStageVotingPowerRecordedPostVote: BigDecimal! # Voters initial funding stage voting power. Only recorded if the voter cast a screeningVote in this distribution period.
remainingFundingStageVotingPowerRecordedPostVote: BigDecimal! # Voters remaining funding stage voting power.
initialScreeningStageVotingPowerRecordedPostVote: BigDecimal! # Voters initial screening stage voting power. Only recorded if the voter cast a screeningVote in this distribution period.
remainingScreeningStageVotingPowerRecordedPostVote: BigDecimal! # Voters remaining screening stage voting power.
screeningVotes: [ScreeningVote!]! # ScreeningVote[] Array of ScreeningVotes cast.
fundingVotes: [FundingVote!]! # FundingVote[] Array of FundingVotes cast.
}
# 1-1 with Proposal. Multiple screeningVotes on the same proposal write to a single entity
type ScreeningVote @entity {
id: Bytes! # $proposalId + 'screening' + $account.id + $distributionId
distribution: DistributionPeriod! # distribution period the vote was cast in
voter: Account! # actor who cast votes
proposal: Proposal! # proposal being voted on
totalVotesCast: BigDecimal! # total screening votes cast by a single voter on a proposal
votesCast: [VoteCast!]! # array of voteCast entities created for each screeningVote on this proposal
}
# 1-1 with Proposal. Multiple fundingVotes on the same proposal write to a single entity
type FundingVote @entity {
id: Bytes! # $proposalId + 'funding' + $account.id + $distributionId
distribution: DistributionPeriod! # distribution period the vote was cast in
voter: Account! # actor who cast votes
proposal: Proposal! # proposal being voted on
totalVotesCast: BigDecimal! # uint256 total unsquared votes cast on the proposal
votingPowerUsed: BigDecimal! # uint256 # cost of the incremental funding vote to the voter's voting power
votesCast: [VoteCast!]! # array of voteCast entities created for each fundingVote on this proposal
}
type FundedSlate @entity {
id: Bytes! # bytes32 hash of slate proposalIds
distribution: DistributionPeriod! # distribution period the vote was cast in
proposals: [Proposal!]! # uint256[] list of proposalIds
totalTokensRequested: BigDecimal! # total number of tokens requested by all proposals in the slate
totalFundingVotesReceived: BigDecimal! # net funding votes received by all proposals in the slate
updateBlock: BigInt! # block number the slate was updated
}
# # # # # # # # # # #
# GRANT FUND EVENTS #
# # # # # # # # # # #
type DelegateRewardClaimed @entity(immutable: true) {
id: Bytes!
delegateeAddress_: Bytes! # address
distribution: DistributionPeriod! # distribution period the rewards were claimed in
rewardClaimed_: BigInt! # uint256 TODO: remove trailing underscore
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type FundTreasury @entity(immutable: true) {
id: Bytes!
amount: BigInt! # uint256
treasuryBalance: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type FundedSlateUpdated @entity(immutable: true) {
id: Bytes!
distributionId_: BigInt! # uint256
fundedSlateHash_: Bytes! # bytes32
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type ProposalCreated @entity(immutable: true) {
id: Bytes!
proposal: Proposal!
proposer: Bytes! # address
targets: [Bytes!]! # address[]
values: [BigDecimal!]! # uint256[]
signatures: [String!]! # string[]
calldatas: [Bytes!]! # bytes[]
startBlock: BigInt! # uint256
endBlock: BigInt! # uint256
description: String! # string
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type ProposalExecuted @entity(immutable: true) {
id: Bytes!
proposalId: BigInt! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type DistributionPeriodStarted @entity(immutable: true) {
id: Bytes!
distribution: DistributionPeriod! # The newly started distribution period
startBlock: BigInt! # uint256
endBlock: BigInt! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type VoteCast @entity(immutable: true) {
id: Bytes!
voter: Bytes! # address # TODO: should be Account
proposalId: BigInt! # uint256
support: Int! # uint8
weight: BigDecimal! # uint256
reason: String! # string
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# # # # # # # # # # #
# AJNA TOKEN EVENTS #
# # # # # # # # # # #
type DelegateChanged @entity(immutable: true) {
id: Bytes!
delegator: Bytes! # address
fromDelegate: Bytes! # address
toDelegate: Bytes! # address
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
type DelegateVotesChanged @entity(immutable: true) {
id: Bytes!
delegate: Bytes! # address
previousBalance: BigDecimal! # uint256
newBalance: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}
# # # # # # # # # # # #
# BURN WRAPPER EVENTS #
# # # # # # # # # # # #
type BurnWrap @entity(immutable: true) {
id: Bytes!
wrapper: Bytes! # address
account: Account # null if does not already exist
amount: BigDecimal! # uint256
blockNumber: BigInt!
blockTimestamp: BigInt!
transactionHash: Bytes!
}