vaultDeposit Contract

Validator deposit contract ABI and address constants

ABI and address constants for Seismic's Eth2-style validator deposit contract.

Overview

The deposit contract is a genesis contract that manages validator deposits for the Seismic network. Validators deposit ETH (minimum 1 ETH, typically 32 ETH) along with their public keys, signatures, and withdrawal credentials to join the validator set.

The contract maintains a Merkle tree of deposits and emits a DepositEvent for each successful deposit.

Constants

DEPOSIT_CONTRACT_ADDRESS

The canonical deposit contract address, deployed at a fixed genesis address on all Seismic networks.

from seismic_web3 import DEPOSIT_CONTRACT_ADDRESS

# Genesis address matching Ethereum's deposit contract
DEPOSIT_CONTRACT_ADDRESS: str = "0x00000000219ab540356cBB839Cbe05303d7705Fa"

DEPOSIT_CONTRACT_ABI

Complete ABI for the IDepositContract interface.

from seismic_web3 import DEPOSIT_CONTRACT_ABI

DEPOSIT_CONTRACT_ABI: list[dict[str, Any]]

Import

ABI Contents

Functions

Function
Parameters
Returns
Description

deposit()

node_pubkey, consensus_pubkey, withdrawal_credentials, node_signature, consensus_signature, deposit_data_root

None

Deposit ETH to become a validator (payable)

get_deposit_count()

None

bytes

Get total number of deposits (view)

get_deposit_root()

None

bytes32

Get Merkle root of all deposits (view)

supportsInterface()

interfaceId

bool

Check ERC-165 interface support (pure)

Events

Event
Parameters
Description

DepositEvent

node_pubkey, consensus_pubkey, withdrawal_credentials, amount, node_signature, consensus_signature, index

Emitted on successful deposit

Full ABI

Usage Examples

Creating a Contract Instance

Query Deposit Count

Query Deposit Root

Making a Validator Deposit

Listening to Deposit Events

Check Interface Support

Deposit Requirements

Minimum Deposit

  • Minimum: 1 ETH

  • Standard validator deposit: 32 ETH

  • Amount must be specified in both gwei (for root computation) and wei (for transaction value)

Required Keys

  1. Node Public Key (32 bytes)

    • ED25519 public key for node identity

    • Used for node-to-node communication

  2. Consensus Public Key (48 bytes)

    • BLS12-381 public key for consensus participation

    • Used for block signing and attestations

Required Signatures

  1. Node Signature (64 bytes)

    • ED25519 signature over deposit data

    • Proves ownership of node private key

  2. Consensus Signature (96 bytes)

    • BLS12-381 signature over deposit data

    • Proves ownership of consensus private key

Withdrawal Credentials

32-byte ETH1-style withdrawal credentials:

  • Format: 0x01 + 11 zero bytes + 20-byte Ethereum address

  • Use make_withdrawal_credentials() helper to generate

Deposit Data Root

32-byte SHA-256 hash of the deposit data:

  • Computed using SSZ hash tree root

  • Use compute_deposit_data_root() helper to compute

  • Must match on-chain verification

Deposit Process

  1. Generate ED25519 and BLS12-381 key pairs

  2. Create withdrawal credentials from Ethereum address

  3. Sign deposit message with both private keys

  4. Compute deposit data root

  5. Call deposit() with all parameters + ETH value

  6. Contract verifies signatures and root

  7. Contract adds deposit to Merkle tree

  8. Emits DepositEvent with deposit details

Security Considerations

Key Management

  • Never reuse validator keys across networks

  • Store private keys securely (hardware wallet or HSM recommended)

  • Back up withdrawal credentials separately

  • Use different keys for node and consensus

Withdrawal Address

  • Set withdrawal credentials to a secure address you control

  • Cannot be changed after deposit (in most configurations)

  • Consider using a multi-sig or cold wallet

Deposit Root Verification

  • Always verify deposit_data_root matches expected value

  • Contract will reject mismatched roots

  • Use the provided compute_deposit_data_root() helper

Gas Estimation

  • Deposit function requires approximately 300-500k gas

  • Set sufficient gas limit to avoid failed deposits

  • Failed deposits will revert and refund ETH

When to Use

Use the deposit contract when:

  • Becoming a Seismic validator

  • Increasing validator stake (additional deposits)

  • Building validator onboarding tools

  • Monitoring validator deposits

  • Verifying deposit Merkle tree

Contract Source

This ABI matches the IDepositContract interface defined in:

See Also

Last updated