Entities

Asset

type Asset @entity {
  id: ID! "The local asset address."
  key: Bytes "The key associated with the local asset."
  canonicalId: Bytes "The canonical identifier for the asset."
  canonicalDomain: BigInt "The domain of the canonical identifier for the asset."
  adoptedAsset: Bytes "The address of the adopted asset, if applicable."
  localAsset: Bytes "The address of the local asset."
  blockNumber: BigInt "The block # associated with the local asset, needed in case multiple locals are stored under the same canonicalId."
  status: AssetStatus "The status of the asset, as defined by the AssetStatus enumeration."
}

AssetStatus

type AssetStatus @entity {
  id: ID! "The key associated with the asset status."
  status: Boolean "The status of the asset, represented as a boolean value. True means the asset is active, while false means it is inactive."
}

AssetBalance

type AssetBalance @entity {
  id: ID! "The unique identifier for the asset balance, constructed as 'key-router_address'."
  amount: BigInt! "The amount of the asset held in the balance."
  router: Router! "The router associated with the asset balance."
  asset: Asset! "The asset associated with the balance."
  feesEarned: BigInt! "The total amount of fees earned for the asset balance."
}

Router

type Router @entity {
  id: ID! "The unique identifier for the router."
  isActive: Boolean! "A boolean indicating whether the router is currently active or not."
  owner: Bytes "The address of the current owner of the router."
  recipient: Bytes "The address of the current recipient of router fees."
  proposedOwner: Bytes "The address of the proposed new owner of the router, if any."
  proposedTimestamp: BigInt "The timestamp of the proposed ownership transfer, if any."
  assetBalances: [AssetBalance!]! @derivedFrom(field: "router") "A list of asset balances associated with the router."
}

Setting

type Setting @entity {
  id: ID! "The unique identifier for the setting."
  maxRoutersPerTransfer: BigInt! "The maximum number of routers allowed in a single transfer."
  caller: Bytes! "The address of the caller associated with the setting."
}

Relayer

type Relayer @entity {
  id: ID! "The ID of the relayer"
  isActive: Boolean! "Indicates whether the relayer is currently active"
  relayer: Bytes "The address of the relayer"
}

Sequencer

type Sequencer @entity {
  id: ID!  "Unique identifier for the sequencer entity"
  isActive: Boolean! "Flag indicating if the sequencer is active or not"
  sequencer: Bytes "Address of the sequencer"
}

TransferStatus

enum TransferStatus {
  XCalled
  Executed
  Reconciled
  CompletedSlow
  CompletedFast
}

OriginTransfer

type OriginTransfer @entity {
  id: ID! "The unique identifier for the origin transfer."

  # Meta
  chainId: BigInt "The ID of the chain on which the transfer is taking place."
  transferId: Bytes "The unique identifier for the transfer."
  nonce: BigInt "A unique nonce for the transfer, used to prevent replay attacks."
  status: TransferStatus "The status of the transfer, represented as a TransferStatus enum."
  messageHash: Bytes "The hash of the transfer message."

  # CallParams
  originDomain: BigInt "The domain of the origin chain."
  destinationDomain: BigInt "The domain of the destination chain."
  canonicalDomain: BigInt "The domain of the canonical asset."
  to: Bytes "The address of the destination contract."
  delegate: Bytes "The address of the delegate contract."
  receiveLocal: Boolean "A boolean indicating whether the transfer is receiving a local asset."
  callData: Bytes "The calldata associated with the transfer."
  slippage: BigInt "The maximum amount of slippage allowed for the transfer."
  originSender: Bytes "The address of the sender on the origin chain."
  bridgedAmt: BigInt "The amount of the asset being transferred."
  normalizedIn: BigInt "The normalized amount of the asset being transferred."
  canonicalId: Bytes "The canonical ID of the asset being transferred."

  # Asset
  asset: Asset "The asset being transferred."

  # Message
  message: OriginMessage "The message associated with the transfer."

  # Relayer Fee paid by user
  relayerFee: BigInt "The fee paid by the user for the transfer."
  bumpRelayerFeeCount: BigInt "The number of times the relayer fee has been bumped."

  # XCalled Transaction
  caller: Bytes "The address of the caller."
  transactionHash: Bytes "The hash of the transaction."
  timestamp: BigInt "The timestamp of the transaction."
  gasPrice: BigInt "The price of gas for the transaction."
  gasLimit: BigInt "The limit for gas usage in the transaction."
  blockNumber: BigInt "The number of the block in which the transaction was included."
  txOrigin: Bytes "The address of the original transaction sender."
}

DestinationTransfer

type DestinationTransfer @entity {
  id: ID!  "unique identifier of the destination transfer"

  # Meta
  chainId: BigInt  "chain id of the transfer"
  transferId: Bytes  "unique identifier for the transfer"
  nonce: BigInt  "number used to prevent replay attacks"
  status: TransferStatus  "status of the transfer"
  routers: [Router!]!  "list of routers used for the transfer"

  # CallParams
  originDomain: BigInt  "domain of the origin chain"
  destinationDomain: BigInt  "domain of the destination chain"
  canonicalDomain: BigInt  "canonical domain of the asset"
  to: Bytes  "recipient address on the destination chain"
  delegate: Bytes  "optional delegate address on the destination chain"
  receiveLocal: Boolean  "whether or not to receive the asset locally on the destination chain"
  callData: Bytes  "optional call data for the recipient"
  slippage: BigInt  "slippage allowance for routers to adjust exchange rate"
  bumpSlippageCount: BigInt  "count of times the slippage allowance was increased"
  originSender: Bytes  "sender address on the origin chain"
  bridgedAmt: BigInt  "amount of asset bridged from the origin chain"
  normalizedIn: BigInt  "amount of asset normalized to its canonical representation"
  canonicalId: Bytes  "unique identifier for the asset"

  # Asset
  asset: Asset  "asset being transferred"
  amount: BigInt  "amount of asset being transferred"

  # calculated
  routersFee: BigInt   "total fee paid to routers for the transfer"

  # Executed Transaction
  executedCaller: Bytes  "address of the user who initiated the transaction"
  executedTransactionHash: Bytes  "hash of the executed transaction"
  executedTimestamp: BigInt  "timestamp of the executed transaction"
  executedGasPrice: BigInt  "gas price used for the executed transaction"
  executedGasLimit: BigInt  "gas limit used for the executed transaction"
  executedBlockNumber: BigInt  "block number of the executed transaction"
  executedTxOrigin: Bytes  "address of the user who initiated the transaction on the destination chain"

  # Reconciled Transaction
  reconciledCaller: Bytes  "address of the user who initiated the reconciled transaction"
  reconciledTransactionHash: Bytes  "hash of the reconciled transaction"
  reconciledTimestamp: BigInt  "timestamp of the reconciled transaction"
  reconciledGasPrice: BigInt  "gas price used for the reconciled transaction"
  reconciledGasLimit: BigInt  "gas limit used for the reconciled transaction"
  reconciledBlockNumber: BigInt  "block number of the reconciled transaction"
  reconciledTxOrigin: Bytes  "address of the user who initiated the reconciled transaction on the origin chain"
}

OriginMessage

type OriginMessage @entity {
  id: ID! "unique identifier for each instance of the OriginMessage"

  # origin transfer data
  transferId: Bytes  "ID of the origin transfer"
  destinationDomain: BigInt  "domain where the transfer is being sent to"

  # Dispatch Transaction
  leaf: Bytes  "leaf of the Merkle tree of the message"
  index: BigInt  "index of the message in the Merkle tree"
  message: Bytes  "the message data"
  root: Bytes  "root of the Merkle tree of the message"
  transactionHash: Bytes  "hash of the transaction that dispatched the message"
  blockNumber: BigInt "block number of the transaction that dispatched the message"

  # root count RD
  rootCount: RootCount  "reference to the root count for this message"
}

AggregateRoot

type AggregateRoot @entity {
  id: ID!  "Unique identifier of the entity"
  root: Bytes!  "The root hash of a Merkle tree containing transaction messages"
  blockNumber: BigInt!  "The block number where the root was aggregated"
}

ConnectorMeta

type ConnectorMeta @entity {
  id: ID!  "ConnectorMeta"
  spokeDomain: BigInt  "domain of the spoke network"
  hubDomain: BigInt  "domain of the hub network"

  amb: Bytes  "address of the AMB contract used for bridging"
  rootManager: Bytes  "address of the root manager contract used for managing bridge roots"
  mirrorConnector: Bytes  "address of the MirrorConnector contract used for interacting with the Mirror network"
}

RootCount

type RootCount @entity {
  id: ID!  "unique identifier for the root count, typically a concatenation of the spoke and hub domain IDs"
  count: BigInt  "the current root count for the given spoke and hub domain pair"
}

RootMessageSent

type RootMessageSent @entity {
  id: ID! "Unique identifier for the root message sent"

  spokeDomain: BigInt  "Domain ID for the spoke chain"
  hubDomain: BigInt  "Domain ID for the hub chain"
  root: Bytes  "Root hash for the message"
  count: BigInt  "Number of messages in the root"

  # MessageSent Transaction
  caller: Bytes  "Address of the transaction sender"
  transactionHash: Bytes  "Hash of the transaction"
  timestamp: BigInt  "Timestamp of the transaction"
  gasPrice: BigInt  "Gas price for the transaction"
  gasLimit: BigInt   "Gas limit for the transaction"
  blockNumber: BigInt  "Block number of the transaction"
}