Skip to main content

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

Before calling, approve the BRON token allowance for BroadcasterRegister:
After the call, the broadcaster status becomes 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 calls registerBroadcasterResponse(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

Every createOrder 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) → wait withdrawalDelayclaimWithdrawBroadcasterAmount() — withdraw with a cooldown.
  • cancelWithdrawalRequest() — cancel a pending withdrawal.
If the BRON balance falls below bronTokenOrderCreationCost, the next createOrder reverts with BR_INVALID_PARAMS.

Order creation

Function

CreateOrderParams

Other parameters

Example


Order lifecycle

Subscribe to OrderStatusChanged(string orderId, OrderStatus status) from OrderEngine. The full status enum and what the broadcaster should do at each step:
Status code 3 (WAIT_FOR_USER_TX) is not emitted as an OrderStatusChanged event. It only appears as a derived value when reading orders via Metadata.getOrderFullResponse(orderId) once the auction has timed out but the user-settlement window is still open. After setUserTxOnBaseNetwork, the order moves directly from AUCTION_IN_PROGRESS to WAIT_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:
Cancellation is allowed only in:
  • 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.
Once the order moves to 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

  • orderId is the idempotency key. The contract reverts with BC_INVALID_PARAMS if an order with the same id already exists.
  • Generate orderId deterministically 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 for OrderStatusChanged(orderId, USER_INITIATED). If it doesn’t arrive within a reasonable confirmation window, query OrderEngine.getOrder(orderId) — if status == NOT_EXIST, the tx didn’t land and you can resubmit with the same orderId.
  • The same logic applies to setUserTxOnBaseNetwork: the _userTxHash is also tracked for uniqueness — BC_INVALID_PARAMS is 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:
The fee is paid in the same token the solver settled in (i.e. the quote token). Fees from different orders / different tokens accumulate independently.

Errors


Reference implementation

BroadcasterService — example using @bronlabs/intents-sdk and ethers: https://github.com/bronlabs-intents/intents-broadcaster-example