Skip to main content

Validator Contract Functions

Complete function reference for individual validator contracts on 0G Chain.

Quick Links

Function Types​

View Functions (Free to Call)​

Query validator state without gas costs.

Write Functions (Require Gas)​

Modify validator state - cost gas to execute.


View Functions​

Validator Information​

consensusPubkey()​

Returns the validator's BLS public key.

Returns: 48-byte BLS public key


operatorAddress()​

Returns the validator operator's wallet address.

Returns: Operator address


description()​

Returns validator metadata.

Returns:

  • Moniker (name)
  • Identity (verification key)
  • Website
  • Security contact
  • Details

commissionRate()​

Returns current commission rate.

Returns: Rate in parts per million (e.g., 100000 = 10%)


withdrawalFeeInGwei()​

Returns fee charged for withdrawals.

Returns: Fee in Gwei


bondStatus()​

Returns validator's current status.

Returns:

  • Unspecified - Not activated
  • Bonded - Active
  • Unbonding - Exiting
  • Unbonded - Fully exited

Delegation Queries​

tokens()​

Returns total tokens delegated to this validator.

Returns: Total tokens in Wei


delegatorShares()​

Returns total shares issued.

Returns: Total shares


getDelegation(address delegator)​

Returns delegation info for a specific delegator.

Parameters:

  • delegator - Delegator's address

Returns:

  • Validator address
  • Number of shares owned

convertToTokens(uint shares)​

Converts shares to token amount.

Parameters:

  • shares - Number of shares

Returns: Equivalent token amount

Use Case: Calculate token value of your shares


convertToShares(uint tokens)​

Converts tokens to shares.

Parameters:

  • tokens - Token amount

Returns: Equivalent shares

Use Case: Calculate shares you'll receive when delegating


Rewards & Earnings​

rewards()​

Returns accumulated rewards pending distribution.

Returns: Reward amount in Wei


commission()​

Returns accumulated commission earned by operator.

Returns: Commission in Wei


tipFee()​

Returns withdrawable tip fees.

Returns: Tip fee amount in Wei

Calculation: Contract balance - (commission + rewards + stakes + pending withdrawals)


stakes()​

Returns amount actively staked in beacon chain.

Returns: Staked amount in Wei


annualPercentageYield()​

Returns current APY.

Returns: APY in basis points (e.g., 1500 = 15%)


Withdrawal Queue​

withdrawCount()​

Returns number of pending withdrawals.

Returns: Count of pending withdrawals


getWithdraw(uint64 index)​

Returns details of a specific withdrawal.

Parameters:

  • index - Position in queue (0-based)

Returns:

  • Completion height
  • Delegator address
  • Amount

committedWithdrawAmount(uint blockHeight)​

Returns total withdrawal amount committed up to a block height.

Parameters:

  • blockHeight - Block number

Returns: Total committed amount


nextDepositAmount()​

Returns amount pending deposit to chain.

Returns: Pending deposit in Wei


nextWithdrawalAmount()​

Returns amount pending withdrawal from chain.

Returns: Pending withdrawal in Wei


failedWithdrawCount()​

Returns count of failed withdrawals.

Returns: Number of failed withdrawals


failedWithdrawAmount()​

Returns total amount in failed withdrawals.

Returns: Failed withdrawal amount


Write Functions​

Validator Configuration​

setCommissionRate(uint32 commissionRate_)​

Updates validator commission rate.

Who Can Call: Operator only

Parameters:

  • commissionRate_ - New rate (parts per million)

Constraints: Must be ≤ protocol maximum


setWithdrawalFeeInGwei(uint96 withdrawalFeeInGwei_)​

Updates withdrawal fee.

Who Can Call: Operator only

Parameters:

  • withdrawalFeeInGwei_ - New fee in Gwei

Constraints: Must be ≤ protocol maximum


setDescription(Description description_)​

Updates validator description.

Who Can Call: Operator only

Parameters:

  • description_ - New description struct

Delegation Operations​

delegate(address delegatorAddress)​

Delegate tokens to this validator.

Who Can Call: Anyone

Parameters:

  • delegatorAddress - Address to credit with shares

Payment Required: Yes (minimum 1 Gwei)

Example:

validator.delegate{value: 100 ether}(msg.sender);

undelegate(address withdrawalAddress, uint shares)​

Undelegate tokens from validator.

Who Can Call: Anyone with shares

Parameters:

  • withdrawalAddress - Address to receive tokens
  • shares - Number of shares to undelegate

Payment Required: Yes (must pay withdrawal fee)

Constraints:

  • Must own enough shares
  • Operator must maintain minimum self-delegation
  • Tokens released after withdrawal delay

Example:

uint96 fee = validator.withdrawalFeeInGwei();
validator.undelegate{value: fee * 1 gwei}(recipient, shares);

Earnings Management​

withdrawCommission(address withdrawalAddress)​

Withdraw accumulated commission.

Who Can Call: Operator only

Parameters:

  • withdrawalAddress - Address to receive commission

Constraints:

  • Must have ≥1 Gwei commission
  • Goes to withdrawal queue (not instant)

withdrawTipFee(address withdrawalAddress)​

Withdraw accumulated tip fees.

Who Can Call: Operator only

Parameters:

  • withdrawalAddress - Address to receive tips

Constraints:

  • Only withdraws excess balance
  • Immediate transfer (not queued)

System Operations​

distributeRewards()​

Distribute rewards to delegators and commission to operator.

Who Can Call: Anyone (called by system)

Process:

  1. Community tax deducted
  2. Commission calculated
  3. Remaining distributed to delegators

processWithdrawQueue()​

Process pending withdrawals that are ready.

Who Can Call: Anyone

When: After withdrawal delay period

Process:

  • Checks ready withdrawals
  • Transfers funds
  • Failed transfers go to failed stack

processFailedWithdrawStack()​

Retry failed withdrawals.

Who Can Call: Anyone

Process:

  • Retries all failed withdrawals
  • Still-failed amounts sent to community pool

Common Use Cases​

For Delegators​

Before Delegating:

// Check validator settings
uint32 commission = validator.commissionRate();
uint96 withdrawalFee = validator.withdrawalFeeInGwei();
uint bondStatus = validator.bondStatus(); // Should be 1 (Bonded)
uint apy = validator.annualPercentageYield();

Delegate Tokens:

validator.delegate{value: amount}(yourAddress);

Check Your Delegation:

(, uint shares) = validator.getDelegation(yourAddress);
uint tokens = validator.convertToTokens(shares);

Undelegate:

uint96 fee = validator.withdrawalFeeInGwei();
validator.undelegate{value: fee * 1 gwei}(withdrawalAddress, shares);
// Wait for withdrawal delay, then call processWithdrawQueue()

For Validator Operators​

Update Settings:

validator.setCommissionRate(50000); // 5%
validator.setWithdrawalFeeInGwei(1); // 1 Gwei

Check Earnings:

uint commissionAmount = validator.commission();
uint tipFeeAmount = validator.tipFee();

Withdraw Earnings:

// Withdraw commission (queued)
validator.withdrawCommission(yourAddress);

// Withdraw tips (immediate)
validator.withdrawTipFee(yourAddress);

Monitor Status:

uint totalDelegated = validator.tokens();
uint activeStake = validator.stakes();
uint pendingWithdrawals = validator.withdrawCount();

Important Notes​

Key Constraints
  • Withdrawal Delays: Undelegations enter a queue with delay period
  • Minimum Amounts: Most operations require ≥1 Gwei
  • Fee Requirements: Undelegation requires prepaid withdrawal fee
  • Self-Delegation: Operators must maintain minimum or lose commission
Best Practices
  • Always check bondStatus() before delegating
  • Use convertToTokens() to calculate delegation value
  • Monitor failedWithdrawCount() and process if needed
  • Operators should regularly claim commission and tips


Need help? Join our Discord for support.