Skip to main content
This table captures all staking-related events on Monad, providing a comprehensive record of delegations, undelegations, and withdrawals. It includes the validator’s auth_address through a join with validator creation data.

Table Schema

Column NameData TypeDescription
event_typeVARCHARType of staking event (delegate, undelegate, withdraw)
delegator_addressVARCHARAddress of the delegator performing the action
validator_idVARCHARUnique identifier of the validator (integer as string)
auth_addressVARCHARThe validator’s authorization/operator address (from validator_creation join)
amount_strVARCHARString representation of the MON amount for precision
amountDECIMALFloat representation of the MON amount
activation_epochINTEGEREpoch when the action takes effect. For delegate/undelegate, this is activationEpoch. For withdraw, this is withdrawEpoch
withdraw_idVARCHARUnique identifier for the withdrawal request (null for delegate events)
extra_fieldsVARIANTRaw parameters from the event
transaction_hashVARCHARHash of the transaction containing the event
transaction_indexINTEGERIndex of the transaction in the block
log_indexINTEGERIndex of the event log in the transaction
block_timestampTIMESTAMPTimestamp of the block containing the event
block_numberINTEGERBlock number containing the event
block_hashVARCHARHash of the block containing the event
unique_idVARCHARUnique identifier for the event

Event Types

Delegate

A delegation event occurs when a delegator stakes MON tokens with a validator. The activation_epoch indicates when the delegation becomes active and starts earning rewards.

Undelegate

An undelegation event occurs when a delegator initiates the unstaking process. The activation_epoch indicates when the undelegation takes effect.

Withdraw

A withdrawal event occurs when a delegator claims their previously undelegated tokens. The activation_epoch represents the withdrawEpoch when the withdrawal is processed. Each withdrawal has a unique withdraw_id.

Sample Query

Find the top delegators by total delegated amount:
SELECT
  delegator_address,
  SUM(CASE WHEN event_type = 'delegate' THEN amount ELSE 0 END) as total_delegated,
  SUM(CASE WHEN event_type = 'undelegate' THEN amount ELSE 0 END) as total_undelegated,
  COUNT(*) as total_events
FROM monad.staking.events
GROUP BY delegator_address
ORDER BY total_delegated DESC
LIMIT 100;