{
	"title": "XRPL Meta Database Structure",
	"type": "object",
	"properties": {
		"operations": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/Operation"
			}
		},
		"snapshots": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/Snapshot"
			}
		},
		"ledgers": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/Ledger"
			}
		},
		"accounts": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/Account"
			}
		},
		"accountProps": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/AccountProp"
			}
		},
		"accountBalances": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/AccountBalance"
			}
		},
		"tokens": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/Token"
			}
		},
		"tokenCache": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/TokenCache"
			}
		},
		"tokenProps": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/TokenProp"
			}
		},
		"tokenExchanges": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/TokenExchange"
			}
		},
		"tokenSupply": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/TokenSupply"
			}
		},
		"tokenMarketcap": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/TokenMarketcap"
			}
		},
		"tokenTrustlines": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/TokenTrustlines"
			}
		},
		"tokenHolders": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/TokenHolders"
			}
		},
		"tokenBooks": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/TokenBook"
			}
		},
		"tokenOffers": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/TokenOffer"
			}
		},
		"nfts": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/NFToken"
			}
		},
		"nftOffers": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/NFTokenOffer"
			}
		},
		"nftExchanges": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/NFTokenExchange"
			}
		}
	},
	"definitions": {
		"Operation": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"subjectType": {
					"type": "string",
					"enum": [
						"global",
						"issuer",
						"token"
					]
				},
				"subjectId": {
					"type": "integer"
				},
				"task": {
					"type": "string"
				},
				"time": {
					"type": "integer"
				}
			},
			"required": [
				"subjectType",
				"subjectId",
				"task",
				"time"
			],
			"unique": [
				["subjectType", "subjectId", "task"]
			]
		},
		"Snapshot": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"creationTime": {
					"type": "integer"
				},
				"completionTime": {
					"type": "integer"
				},
				"ledgerSequence": {
					"type": "integer"
				},
				"entriesCount": {
					"type": "integer",
					"default": 0
				},
				"originNode": {
					"type": "string"
				},
				"marker": {
					"type": "any"
				}
			},
			"required": [
				"creationTime",
				"ledgerSequence"
			],
			"unique": [
				"ledgerSequence"
			]
		},
		"Ledger": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"sequence": {
					"type": "integer"
				},
				"hash": {
					"type": "string",
					"format": "hex"
				},
				"closeTime": {
					"type": "integer",
					"format": "timestamp"
				},
				"txCount": {
					"type": "integer"
				},
				"txTypeCounts": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/LedgerTxTypeCount"
					}
				},
				"minFee": {
					"type": "integer"
				},
				"maxFee": {
					"type": "integer"
				},
				"avgFee": {
					"type": "integer"
				}
			},
			"required": [
				"sequence",
				"hash",
				"closeTime",
				"txCount"
			],
			"unique": [
				"sequence"
			],
			"index": [
				"closeTime"
			]
		},
		"LedgerTxTypeCount": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"ledger": {
					"$ref": "#/definitions/Ledger"
				},
				"type": {
					"type": "string",
					"enum": [
						"AccountSet",
						"AccountDelete",
						"CheckCancel",
						"CheckCash",
						"CheckCreate",
						"DepositPreauth",
						"EscrowCancel",
						"EscrowCreate",
						"EscrowFinish",
						"NFTokenAcceptOffer",
						"NFTokenBurn",
						"NFTokenCancelOffer",
						"NFTokenCreateOffer",
						"NFTokenMint",
						"OfferCancel",
						"OfferCreate",
						"Payment",
						"PaymentChannelClaim",
						"PaymentChannelCreate",
						"PaymentChannelFund",
						"SetRegularKey",
						"SignerListSet",
						"TicketCreate",
						"TrustSet"
					]
				},
				"count": {
					"type": "integer"
				}
			},
			"unique": [
				["ledger", "type"]
			],
			"required": [
				"ledger",
				"type",
				"count"
			]
		},
		"Account": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"address": {
					"type": "string",
					"format": "xrpl/address"
				},
				"domain": {
					"type": "string"
				},
				"emailHash": {
					"type": "string",
					"format": "hex"
				},
				"transferRate": {
					"type": "integer"
				},
				"blackholed": {
					"type": "boolean"
				},
				"props": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/AccountProp"
					}
				}
			},
			"required": [
				"address"
			],
			"unique": [
				"address"
			]
		},
		"AccountProp": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"account": {
					"$ref": "#/definitions/Account"
				},
				"key": {
					"type": "string"
				},
				"value": {
					"type": "any"
				},
				"source": {
					"type": "string"
				}
			},
			"required": [
				"account",
				"key",
				"source"
			],
			"unique": [
				["account", "key", "source"]
			]
		},
		"AccountBalance": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"account": {
					"$ref": "#/definitions/Account"
				},
				"token": {
					"$ref": "#/definitions/Token"
				},
				"ledgerSequence": {
					"type": "integer"
				},
				"balance": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": 0
				}
			},
			"required": [
				"account",
				"token",
				"ledgerSequence"
			],
			"unique": [
				["account", "token", "ledgerSequence"]
			],
			"index": [
				["account", "ledgerSequence"],
				["token", "ledgerSequence"]
			]
		},
		"Token": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"issuer": {
					"$ref": "#/definitions/Account"
				},
				"currency": {
					"type": "string",
					"format": "xrpl/currency"
				},
				"props": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/TokenProp"
					}
				}
			},
			"required": [
				"currency"
			],
			"unique": [
				["issuer", "currency"]
			]
		},
		"TokenCache": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"token": {
					"$ref": "#/definitions/Token"
				},
				"tokenCode": {
					"type": "string"
				},
				"tokenName": {
					"type": "string"
				},
				"tokenProps": {
					"type": "any"
				},
				"issuerAddress": {
					"type": "string"
				},
				"issuerName": {
					"type": "string"
				},
				"issuerProps": {
					"type": "any"
				},
				"trustLevel": {
					"type": "integer",
					"default": 0
				},
				"trustlines": {
					"type": "integer",
					"default": 0
				},
				"trustlinesDelta24H": {
					"type": "integer",
					"default": 0
				},
				"trustlinesPercent24H": {
					"type": "number",
					"default": 0
				},
				"trustlinesDelta7D": {
					"type": "integer",
					"default": 0
				},
				"trustlinesPercent7D": {
					"type": "number",
					"default": 0
				},
				"holders": {
					"type": "integer",
					"default": 0
				},
				"holdersDelta24H": {
					"type": "integer",
					"default": 0
				},
				"holdersPercent24H": {
					"type": "number",
					"default": 0
				},
				"holdersDelta7D": {
					"type": "integer",
					"default": 0
				},
				"holdersPercent7D": {
					"type": "number",
					"default": 0
				},
				"supply": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": "0"
				},
				"supplyDelta24H": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": "0"
				},
				"supplyPercent24H": {
					"type": "number",
					"default": 0
				},
				"supplyDelta7D": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": "0"
				},
				"supplyPercent7D": {
					"type": "number",
					"default": 0
				},
				"marketcap": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": "0"
				},
				"marketcapDelta24H": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": "0"
				},
				"marketcapPercent24H": {
					"type": "number",
					"default": 0
				},
				"marketcapDelta7D": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": "0"
				},
				"marketcapPercent7D": {
					"type": "number",
					"default": 0
				},
				"price": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": "0"
				},
				"pricePercent24H": {
					"type": "number",
					"default": 0
				},
				"pricePercent7D": {
					"type": "number",
					"default": 0
				},
				"volume24H": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": "0"
				},
				"volume7D": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": "0"
				},
				"exchanges24H": {
					"type": "integer",
					"default": 0
				},
				"exchanges7D": {
					"type": "integer",
					"default": 0
				},
				"takers24H": {
					"type": "integer",
					"default": 0
				},
				"takers7D": {
					"type": "integer",
					"default": 0
				}
			},
			"required": [
				"token",
				"tokenCode",
				"issuerAddress"
			],
			"unique": [
				"token"
			],
			"index": [
				"tokenCode",
				"tokenName",
				"issuerAddress",
				"issuerName",
				"trustLevel",
				"trustlines",
				"trustlinesDelta24H",
				"trustlinesPercent24H",
				"trustlinesDelta7D",
				"trustlinesPercent7D",
				"holders",
				"holdersDelta24H",
				"holdersPercent24H",
				"holdersDelta7D",
				"holdersPercent7D",
				"supply",
				"supplyDelta24H",
				"supplyPercent24H",
				"supplyDelta7D",
				"supplyPercent7D",
				"marketcap",
				"marketcapDelta24H",
				"marketcapPercent24H",
				"marketcapDelta7D",
				"marketcapPercent7D",
				"price",
				"pricePercent24H",
				"pricePercent7D",
				"volume24H",
				"volume7D",
				"exchanges24H",
				"exchanges7D",
				"takers24H",
				"takers7D"
			]
		},
		"TokenProp": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"token": {
					"$ref": "#/definitions/Token"
				},
				"key": {
					"type": "string"
				},
				"value": {
					"type": "any"
				},
				"source": {
					"type": "string"
				}
			},
			"required": [
				"token",
				"key",
				"source"
			],
			"unique": [
				["token", "key", "source"]
			]
		},
		"TokenExchange": {
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"txHash": {
					"type": "string",
					"format": "hex"
				},
				"maker": {
					"$ref": "#/definitions/Account"
				},
				"taker": {
					"$ref": "#/definitions/Account"
				},
				"sequence": {
					"type": "integer"
				},
				"ledgerSequence": {
					"type": "integer"
				},
				"takerPaidToken": {
					"$ref": "#/definitions/Token"
				},
				"takerGotToken": {
					"$ref": "#/definitions/Token"
				},
				"takerPaidValue": {
					"type": "string",
					"format": "xrpl/xfl"
				},
				"takerGotValue": {
					"type": "string",
					"format": "xrpl/xfl"
				}
			},
			"required": [
				"txHash",
				"maker",
				"taker",
				"ledgerSequence",
				"takerPaidValue",
				"takerGotValue"
			],
			"unique": [
				["txHash", "maker", "sequence"]
			],
			"index": [
				["takerPaidToken", "takerGotToken", "ledgerSequence:desc"]
			]
		},
		"TokenSupply": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"token": {
					"$ref": "#/definitions/Token"
				},
				"ledgerSequence": {
					"type": "integer"
				},
				"value": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": 0
				}
			},
			"required": [
				"token",
				"ledgerSequence"
			],
			"unique": [
				["token", "ledgerSequence"]
			]
		},
		"TokenTrustlines": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"token": {
					"$ref": "#/definitions/Token"
				},
				"ledgerSequence": {
					"type": "integer"
				},
				"value": {
					"type": "integer",
					"default": 0
				}
			},
			"required": [
				"token",
				"ledgerSequence"
			],
			"unique": [
				["token", "ledgerSequence"]
			]
		},
		"TokenHolders": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"token": {
					"$ref": "#/definitions/Token"
				},
				"ledgerSequence": {
					"type": "integer"
				},
				"value": {
					"type": "integer",
					"default": 0
				}
			},
			"required": [
				"token",
				"ledgerSequence"
			],
			"unique": [
				["token", "ledgerSequence"]
			]
		},
		"TokenMarketcap": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"token": {
					"$ref": "#/definitions/Token"
				},
				"ledgerSequence": {
					"type": "integer"
				},
				"value": {
					"type": "string",
					"format": "xrpl/xfl",
					"default": 0
				}
			},
			"required": [
				"token",
				"ledgerSequence"
			],
			"unique": [
				["token", "ledgerSequence"]
			]
		},
		"TokenBook": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"takerPays": {
					"$ref": "#/definitions/Token"
				},
				"takerGets": {
					"$ref": "#/definitions/Token"
				}
			},
			"required": [
				"takerPays",
				"takerGets"
			],
			"unique": [
				["takerGets", "takerPays"]
			],
			"index": [
				"takerPays"
			]
		},
		"TokenOffer": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"account": {
					"$ref": "#/definitions/Account"
				},
				"accountSequence": {
					"type": "integer"
				},
				"book": {
					"$ref": "#/definitions/TokenBook"
				},
				"ledgerSequence": {
					"type": "integer"
				},
				"lastLedgerSequence": {
					"type": "integer"
				},
				"quality": {
					"type": "string",
					"format": "xrpl/xfl"
				},
				"size": {
					"type": "string",
					"format": "xrpl/xfl"
				},
				"expirationTime": {
					"type": "integer"
				}
			},
			"required": [
				"account",
				"accountSequence",
				"book",
				"quality",
				"size",
				"ledgerSequence",
				"lastLedgerSequence"
			],
			"unique": [
				["account", "accountSequence", "ledgerSequence"]
			],
			"index": [
				["book", "ledgerSequence", "lastLedgerSequence", "quality"]
			]
		},
		"NFToken": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"issuer": {
					"$ref": "#/definitions/Account"
				},
				"owner": {
					"$ref": "#/definitions/Account"
				},
				"tokenId": {
					"type": "string",
					"format": "hex"
				},
				"uri": {
					"type": "string"
				}
			},
			"required": [
				"issuer",
				"tokenId"
			],
			"unique": [
				"tokenId"
			]
		},
		"NFTokenOffer": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"account": {
					"$ref": "#/definitions/Account"
				},
				"offerId": {
					"type": "string",
					"format": "hex"
				},
				"nft": {
					"$ref": "#/definitions/NFToken"
				},
				"ledgerSequence": {
					"type": "integer"
				},
				"lastLedgerSequence": {
					"type": "integer"
				},
				"amountToken": {
					"$ref": "#/definitions/Token"
				},
				"amountValue": {
					"type": "string",
					"format": "xrpl/xfl"
				},
				"isSellOffer": {
					"type": "boolean"
				},
				"destination": {
					"$ref": "#/definitions/Account"
				},
				"expirationTime": {
					"type": "integer"
				}
			},
			"required": [
				"account",
				"offerId",
				"nft",
				"ledgerSequence",
				"lastLedgerSequence"
			],
			"unique": [
				"offerId"
			],
			"index": [
				["nft", "ledgerSequence", "lastLedgerSequence"]
			]
		},
		"NFTokenExchange": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"id": true
				},
				"txHash": {
					"type": "string",
					"format": "hex"
				},
				"account": {
					"$ref": "#/definitions/Account"
				},
				"offer": {
					"$ref": "#/definitions/NFTokenOffer"
				},
				"nft": {
					"$ref": "#/definitions/NFToken"
				},
				"ledgerSequence": {
					"type": "integer"
				}
			},
			"required": [
				"txHash",
				"account",
				"offer",
				"nft",
				"ledgerSequence"
			],
			"unique": [
				"txHash"
			],
			"index": [
				["nft", "ledgerSequence"]
			]
		}
	}
}