Documentation Index
Fetch the complete documentation index at: https://developer.bron.org/llms.txt
Use this file to discover all available pages before exploring further.
Who is a Solver?
A Solver is an independent participant that fulfils user orders during the on-chain auction. Solvers compete by quoting prices, deliver assets on the quote network, and earn order fees.Becoming a Solver
Registration is a two-step process: the solver locks BRON insurance and submits a request, then the Bron DAO accepts it.1. Submit a registration request
Approve BRON for theSolverRegister contract, then call:
PENDING and BRON tokens are locked. While in PENDING, the solver can call cancelSolverRegistration() to back out and reclaim the deposit.
2. DAO approval
The Bron DAO callsregisterSolverResponse(solver, isAccepted). On acceptance, status becomes ACTIVE and the solver can react to orders. Until that point, solverReact reverts.
3. Top up / withdraw insurance
getAvailableAmountToWithdraw(solver) — you cannot withdraw funds currently locked against active orders.
How insurance works
Insurance is the solver’s collateral against failure to deliver. The amount of order volume a solver can react on is calculated as:haircut is configured per insurance token. Haircut and liquidation premium values are not hard-coded in the docs because the DAO can adjust them — read the current values via InsuranceManager.getInsuranceTokens(insuranceTokenAddress).
If the solver fails to deliver in time, oracles trigger liquidation. A backup solver picks up the order and is rewarded a liquidation premium taken from the original solver’s insurance. Once the original solver’s insurance is exhausted, status changes to INACTIVE automatically.
Reacting to orders
solverReact
| Param | Description |
|---|---|
_orderId | Order id |
_solverAddressOnBaseChain | Address where the user will send funds on the base network |
_solverSettlementFromAddress | Address from which the solver will send funds on the quote network |
_price_e18 | Quoted price, scaled by 1e18. Must be >= maxPrice_e18 and strictly better than the current best |
USER_INITIATED and AUCTION_IN_PROGRESS states, until auctionDuration elapses. The contract enforces address bindings:
- A
_solverSettlementFromAddressis bound to one solver per(quoteNetworkId, address)while there are active orders — prevents another solver from frontrunning your settlement address. - A solver can have only one active settlement-from address per quote network — rotation is rejected.
Settling the order
Once the order moves toWAIT_FOR_SOLVER_TX, send funds to the user on the quote network and record the tx hash:
order.solver == msg.sender) can call this — settlement is not “from any address”. The _solverTxHash must be unique on that quote network.
After setSolverTxOnQuoteNetwork, oracles confirm the transaction on-chain. On a positive quorum the order moves to COMPLETED.
Liquidation
If the solver fails to deliver before the configured deadline, oracles can move the order toTO_BE_LIQUIDATED. A new solver picks the order up by reacting again — the new solver is paid a liquidation premium from the original solver’s insurance.
The original solver:
- Loses the locked operation amount + premium from insurance.
- Stays
ACTIVEwhile insurance > 0; goesINACTIVEautomatically once insurance is fully drained. - Can be
SUSPENDEDand ultimatelykickOracle- removed by the DAO (updateSuspendSolverStatus,kickSolver) for repeated failures.
