Overview
Broadcasters (also called Integrators) — partners that create user orders on-chain on behalf of their users, wallets, or marketplaces. They broadcast user intents into the Bron network and receive a front-end fee per executed order. Each broadcaster must be registered in the BroadcasterRegister smart contract and approved by the Bron DAO before creating any orders.Registration
Registration is a two-step process: the broadcaster funds a BRON deposit and submits a request, then the DAO accepts it.1. Submit a registration request
BroadcasterRegister:
PENDING. BRON tokens are locked in the contract; if the DAO rejects the request, they are returned automatically. The broadcaster can also call cancelBroadcasterRegistration() while still in PENDING to back out and reclaim the deposit.
2. DAO approval
The Bron DAO reviews the request and callsregisterBroadcasterResponse(broadcaster, isAccepted). On acceptance, status becomes ACTIVE and createOrder calls become possible. Until that point, createOrder reverts with BR_INVALID_STATUS.
3. Manage the BRON balance
EverycreateOrder deducts a fixed amount of BRON (bronTokenOrderCreationCost) from the broadcaster balance. Top-up and withdrawal:
topUpBroadcaster(uint256)— add more BRON to your balance.requestWithdrawBroadcasterAmount(uint256)→ waitwithdrawalDelay→claimWithdrawBroadcasterAmount()— withdraw with a cooldown.cancelWithdrawalRequest()— cancel a pending withdrawal.
bronTokenOrderCreationCost, the next createOrder reverts with BR_INVALID_PARAMS.
Order creation
Function
CreateOrderParams
Other parameters
Example
Order lifecycle
Subscribe toOrderStatusChanged(string orderId, OrderStatus status) from OrderEngine. The full status enum and what the broadcaster should do at each step:
Status code3(WAIT_FOR_USER_TX) is not emitted as anOrderStatusChangedevent. It only appears as a derived value when reading orders viaMetadata.getOrderFullResponse(orderId)once the auction has timed out but the user-settlement window is still open. AftersetUserTxOnBaseNetwork, the order moves directly fromAUCTION_IN_PROGRESStoWAIT_FOR_ORACLE_CONFIRM_USER_TX.
The broadcaster’s only required on-chain action after order creation is sending user funds and calling setUserTxOnBaseNetwork. Everything else is driven by the solver and oracles.
Cancellation
The broadcaster can cancel an order by calling:USER_INITIATED— auction has not started or no solver has reacted yet.AUCTION_IN_PROGRESS— provided the user-settlement window (auctionDuration + userSettlementTime) has not yet expired.
WAIT_FOR_USER_TX or later, on-chain cancellation is not available — the order will either complete or expire via timeouts handled by oracles.
Idempotency and retries
orderIdis the idempotency key. The contract reverts withBC_INVALID_PARAMSif an order with the same id already exists.- Generate
orderIddeterministically on your side before sending the transaction, so a tx that gets dropped, replaced, or reorged can be safely retried with the same id. - After submitting
createOrder, watch forOrderStatusChanged(orderId, USER_INITIATED). If it doesn’t arrive within a reasonable confirmation window, queryOrderEngine.getOrder(orderId)— ifstatus == NOT_EXIST, the tx didn’t land and you can resubmit with the sameorderId. - The same logic applies to
setUserTxOnBaseNetwork: the_userTxHashis also tracked for uniqueness —BC_INVALID_PARAMSis raised if a tx hash is reused.
Front-end fee
You set_frontEndFee per order in createOrder (units of 1/100000, max 100000). After an order completes, the fee is automatically credited to your balance and can be withdrawn at any time:
Errors
Reference implementation
BroadcasterService — example using @bronlabs/intents-sdk and ethers:
https://github.com/bronlabs-intents/intents-broadcaster-example