# Players in CCTP Express

## Users

An user is the player who initiate a transaction. He signs an off-chain message that indicate the details of the order, and the necessary funds will be transferred to the source chain `SpokePool` once a `CrossChainOrder` is initiated by any filler.

## Fillers

Fillers listen to the orders disseminated from the mempool. They `initiate` a `CrossChainOrder` on source chain `SpokePool` and `fillOrder` on the destination chain `SpokePool` with necessary funds.&#x20;

Fillers save transaction time and cost for users, they earn filler fees from the gas fee saved for the users. They get funds repaid at the destination chain.&#x20;

Running a filler is permissionless. Developers can run the open source filler software or build their own.&#x20;

## Iris

[Iris](https://developers.circle.com/stablecoins/docs/generic-message-passing) is the off-chain attestation service developed by Circle team that facilitates message passing in its Generalized Message Passing procedure adopted by CCTP. Message passing is a three-step process:

1. An on-chain component on source domain emits a message.
2. Iris signs the message.
3. The on-chain component at the destination domain receives the message, and forwards the message body to the specified recipient.

## Datadaemon

Datadaemon is an off-chain player that maintain the stability and functionality of the system, which:

1. Calls `repayFunds` and `rebalanceFunds` at the `HubPool`, initiating the compution of -
   1. the aggregate amount to repay each filler, and&#x20;
   2. the amount to transfer from a `SpokePool` with surplus fund to one in deficit to ensure sufficient funds for settling repayments to fillers.
2. Checks the state balance at the `HubPool` with the `SpokePools` to ensure the accuracy of the repayment and rebalancing system.
3. Calls `repayFunds` and `rebalanceFunds` at SpokePools and provides merkle root hash with transaction details, which executes funds repayment and rebalancing.

Datadaemon is a decentralized player where anyone can run the software.

## Hub Pool

The Hub Pool is a smart contract deployed on the settlement chain. It performs below functions:

1. Controlling repayments and rebalancing - the `HubPool` collects attestations from Iris, it determines the aggregate amounts to repay to fillers and rebalance between `SpokePools`. (See Step#7 of [cctp-express-architecture](https://cctp-express.gitbook.io/cctp-express/concept/cctp-express-architecture "mention"))
2. Data Availability Layer - it collects and stores all `Deposit` and `Fill` attestations from Iris, which represents all transactions processed by fillers in the system. They are made available to everyone.

## Spoke Pool

Spoke Pools are the smart contracts deployed on every supported chain to perform below functions:

1. After fillers initiated a `CrossChainOrder`, the Spoke Pool on the origin chain receives the funds from the User as an escrow, and emits a `Deposit` message to Iris;
2. After fillers initiated a `fillOrder`, the Spoke Pool on the destination chain releases funds to the user and emits a `Fill` message to Iris;
3. It repays to fillers and transfer funds to other Spoke Pools according to the `repayFunds` and `rebalanceFunds` instructions.&#x20;
