Skip to main content
Validator withdrawal has now been enabled!

Gnosis Chain underwent Shanghai/Capella Hardfork successfully on August 1 2023, 11:34:20 UTC (slot 10 379 264, epoch 648 704).

What is Validator Withdrawal?

Validator withdrawal moves a validator’s balance from the Beacon Chain to the Execution Layer, paid out in GNO to the validator’s withdrawal address (set with --eth1_withdrawal_address when generating validator keys).

There are two kinds of withdrawals:

TypeTriggerWhat happens?
PartialAutomaticAny balance above 1 GNO is swept to the withdrawal address.
FullValidator signs and broadcasts a voluntary_exit (irreversible)The entire balance is withdrawn to the withdrawal address.

What is the difference between validator withdrawal on Gnosis Chain and Ethereum?

GC vs ETH

  • For users: the experience is identical – funds simply arrive at the withdrawal address.
  • Under the hood: Gnosis Chain uses a smart‑contract (the same address as the deposit contract) to pay out GNO. If the contract temporarily lacks GNO, queued withdrawals are retried once topped up and drained at a fixed rate (4‑16 per slot, TBD).

References

  1. Gnosis Chain Withdrawals spec
  2. Withdrawal Contract

What action should a validator take?

1 · Check your withdrawal credential prefix

Gnosis Chain supports two execution‑address credential prefixes:

PrefixBehaviour on Gnosis ChainBest for
0x02Recommended. Supports active partial withdrawals exactly like Ethereum.All new validators and anyone who wants frequent partial withdrawals.
0x01Legacy auto‑sweep. Fully automatic partial withdrawals: every couple of days the contract sweeps any balance above 1 GNO to the withdrawal address. Does not support validator‑initiated partial withdrawals.Validators that don’t mind waiting for automatic sweeps or plan to exit soon.
0x00BLS‑only prefix (no execution address). No withdrawals possible until upgraded.Must be converted to 0x02 (or at least 0x01).

If you created keys with --eth1_withdrawal_address, you already have 0x02 and are good to go.

How to check

  1. Look up your validator on gnosischa.inWithdrawal tab, or
  2. Open the deposit‑m*.json file you saved when staking and examine withdrawal_credentials.

CheckWC deposit_json


2 · Change your credential (BLS‑to‑Execution)

If you are on 0x00 or want to switch from 0x01 to 0x02, perform a BLS‑to‑Execution change.

  1. Generate the change file with ethdo. Example (online machine):
ethdo validator credentials set \
--connection=http://localhost:<BEACON_PORT> \
--prepare-offline
  1. Sign it on an offline machine:
ethdo validator credentials set \
--offline \
--mnemonic="abandon abandon … art" \
--withdrawal-address=0xYourExecAddress \
--eip4844-prefix=0x02 # ensures 0x02
  1. Broadcast the resulting change-operations.json either via the broadcast tool or with curl:
curl -d @change-operations.json \
-H "Content-Type: application/json" \
-X POST http://127.0.0.1:<BEACON_PORT>/eth/v1/beacon/pool/bls_to_execution_changes
Full step‑by‑step (online/offline) guide

Online and Offline process

The process contains three steps.

  1. Generate data on the online computer.
  2. Create change-operations.json on an offline computer.
  3. Broadcast the change to the Gnosis network.

Prerequisites

  1. Download ethdo on the online computer:
wget https://github.com/wealdtech/ethdo/releases/download/<version>/ethdo-<version>-linux-amd64.tar.gz
  1. Extract and verify installation:
tar -xvf ethdo-<version>-linux-amd64.tar.gz
./ethdo --help

(rest of original tutorial unchanged for brevity)

Further references

  1. Changing withdrawal credential by ethdo
  2. BLS-to‑Execution with ethdo
  3. Teku postBlsToExecutionChange API

3 · Claiming your GNO (partial and full withdrawals)

Because Gnosis Chain pays out GNO rather than the gas token (xDai), withdrawals are not sent automatically to your address. After the Beacon‑chain message has executed you must claim the GNO from the withdrawal contract: 0x0B98057eA310F4d31F2a452B414647007d1645d9.

  1. Connect any wallet on Gnosis Chain (it does not have to be the validator address).

  2. Use:

    • claimWithdrawal(address validatorRecipient) – single validator, or
    • claimWithdrawals(address[] validatorRecipients) – batch.
  3. Enter the withdrawal (recipient) address exactly as displayed on gnosischa.in.

  4. Sign & send – on confirmation the GNO appears at the recipient address.

The withdrawal address and the recipient address are identical. Do not paste the long internal address you may see elsewhere.

validator_recipient_address


Reference material