Skip to main content

Get Started

Requirements

Solvers looking at bidding for this module's user operations must have some bonded atlETH on Atlas, and have their smart contracts ready.

Connect to the operations relay

Find here a complete guide to connect to the operations-relay.

Send solver operations

Once connected to the operations-relay, you will start receiving partial user operations. Filter the incoming operations to the chain ID this module is deployed on, and to the module's contract address, via the partialUserOperation.chainId and partialUserOperation.control properties.

In this module, the data field of user operations is concealed. It provides hints instead, via the partialUserOperation.hints field, with the following format.

{
"pools": [
"0x01",
"0x02",
...
]
}

The pools property holds an array of addresses. These addresses are the liquidity pools where the user's swap will be routed. These are randomized, meaning the first address is not necessarily the first pool that will be hit by the swap.

At that stage, the solver is unable to calculate/simulate the user's swap and decide if it will result in an interesting arbitrage, or not. Not knowing the direction and the amount of the user's swap, the solver is forced to solve this (maybe) opportunity on-chain. This means the solver's contract must be ready to take the provided hints as input, and make the necessary computation to find out if an arbitrage opportunity exists, and in such case, make a profit from it.

Find here an example on how to build a solver operation.