Skip to main content

Events

All amounts named units are normalized 6-decimal protocol units; native amounts are in the token's own decimals. Swap and queue events are emitted from the proxy address even though the swap engine runs in a linked library.

Core events

Deposit

Emitted when a user deposits into a pool.

event Deposit(
address indexed user,
uint16 indexed poolId,
address indexed asset,
uint256 nativeAmount,
uint256 units
);
ParameterDescription
userAddress that deposited
poolIdPool credited (0 = hub)
assetAsset deposited
nativeAmountWhat was actually pulled, native units (sub-unit dust is not pulled)
unitsNormalized amount credited, and DLRS minted for a hub deposit

Withdraw

Emitted when a user withdraws from a pool.

event Withdraw(
address indexed user,
uint16 indexed poolId,
address indexed asset,
uint256 units,
uint256 nativeAmount
);
ParameterDescription
userAddress that withdrew
poolIdPool debited
assetAsset withdrawn
unitsNormalized value withdrawn (DLRS burned on the hub)
nativeAmountNative amount sent to the user

Liquidity provider events

Spoke deposits and withdrawals emit these instead of Deposit / Withdraw.

SpokeLiquidityAdded

event SpokeLiquidityAdded(
uint16 indexed poolId,
address indexed provider,
address indexed asset,
uint256 nativeAmount,
uint256 valueUnits,
uint256 sharesMinted
);

asset is either the spoke's own asset or a hub asset funding the spoke's DLRS side.


SpokeLiquidityRemoved

event SpokeLiquidityRemoved(
uint16 indexed poolId,
address indexed provider,
address indexed asset,
uint256 sharesBurned,
uint256 valueUnits,
uint256 nativeAmount
);

SpokeRedeemed

Emitted by redeemSpoke, which pays both sides of the pool proportionally.

event SpokeRedeemed(
uint16 indexed poolId,
address indexed provider,
uint256 sharesBurned,
uint256 spokeUnits,
uint256 dlrsUnits
);

Swap events

Swap

Emitted on any swap, from both swap and swapExactInput.

event Swap(
address indexed user,
address indexed offerAsset,
address indexed wantAsset,
uint256 amountIn,
uint256 amountFilled,
uint256 amountQueued
);
ParameterDescription
userAddress that swapped
offerAssetInput asset
wantAssetOutput asset
amountInTotal input, normalized units
amountFilledFilled instantly
amountQueuedEscrowed into the queue (always 0 for swapExactInput)

Queue events

QueueJoined

Emitted when a new queue position is created.

event QueueJoined(
uint256 indexed positionId,
address indexed owner,
address offerAsset,
address wantAsset,
uint256 amount
);
ParameterDescription
positionIdUnique position identifier
ownerAddress that joined
offerAssetAsset escrowed by the position
wantAssetAsset the position is waiting for
amountEscrowed amount, normalized units

QueueFilled

Emitted when a position receives a fill, full or partial.

event QueueFilled(
uint256 indexed positionId,
address indexed owner,
uint256 filled,
uint256 remaining
);
ParameterDescription
filledAmount filled in this transaction
remainingAmount still escrowed (0 if the position closed)

QueueCancelled

Emitted when a position is cancelled and its escrow returned.

event QueueCancelled(
uint256 indexed positionId,
address indexed owner,
uint256 amountReturned
);

QueuePositionRefunded

Emitted when paying a position's owner fails—for example a token blacklist—and the escrow is converted into the canonical receipt instead of bricking the queue: hub escrow becomes reserves plus minted DLRS, spoke escrow becomes spoke reserves plus receipt shares.

event QueuePositionRefunded(
uint256 indexed positionId,
address indexed owner,
address offerAsset,
uint256 units
);

Registry events

PoolCreated

event PoolCreated(uint16 indexed poolId, uint8 kind);

kind: 0 = Hub, 1 = Spoke. The hub is created at initialization.


AssetListed

event AssetListed(
address indexed asset,
uint16 indexed poolId,
uint8 decimals,
address priceFeed
);

Decimals are frozen at listing time.


Spoke lifecycle

event MinDlrsReserveSet(uint16 indexed poolId, uint256 oldMin, uint256 newMin);
event SpokeWindDownStarted(uint16 indexed poolId);
event PoolRemoved(uint16 indexed poolId);

Admin events

Risk controls

event PriceFeedUpdated(address indexed asset, address indexed feed);
event PegToleranceSet(uint256 tolerance);
event MaxStalenessSet(uint256 staleness);
event DepositsPausedSet(address indexed asset, bool paused);
event PoolPausedSet(uint16 indexed poolId, bool paused);
event LaunchCapSet(uint16 indexed poolId, uint256 cap);

LaunchCapSet with cap == 0 means the cap was removed. Global pause emits OpenZeppelin's Paused / Unpaused.


Reserve accounting

event ReservesSynced(address indexed asset, uint256 previousReserves, uint256 newReserves);
event TokensRescued(address indexed asset, address indexed to, uint256 amount);
event EscrowHaircut(address indexed asset, uint16 indexed poolId, uint256 oldEscrow, uint256 newEscrow);

ReservesSynced only ever decreases reserves, and marks down DLRS backing—worth alerting on. EscrowHaircut is a guardian emergency action on a balance-impaired asset.


Role transfers

Every role transfer is two-step: an *Initiated event when the current holder nominates, and a *Completed event when the nominee accepts.

event GovernorTransferInitiated(address indexed currentGovernor, address indexed pendingGovernor);
event GovernorTransferCompleted(address indexed previousGovernor, address indexed newGovernor);
event GuardianTransferInitiated(address indexed currentGuardian, address indexed pendingGuardian);
event GuardianTransferCompleted(address indexed previousGuardian, address indexed newGuardian);
event UpgraderTransferInitiated(address indexed currentUpgrader, address indexed pendingUpgrader);
event UpgraderTransferCompleted(address indexed previousUpgrader, address indexed newUpgrader);

Implementation changes emit the standard ERC-1967 Upgraded(address indexed implementation).