LogoLogo
  • Introduction
    • Get started
  • Kiln Products
    • Overview
    • 🧱Validators
      • ⛓️Protocols
        • Algorand (ALGO)
        • Aptos (APT)
        • Avalanche (AVAX)
        • Babylon (BABY)
        • Berachain(BERA/BGT)
        • Cardano (ADA)
        • Celestia (TIA)
        • CoreChain (CORE)
        • Cosmos (ATOM)
        • Cronos (CRO)
        • DyDx (DYDX)
        • Ethereum (ETH)
        • Eigenlayer (EIGEN)
        • Fetch.ai (FET)
        • Flare (FLR)
        • Harmony (ONE)
        • Injective (INJ)
        • Iota (IOTA)
        • Kava (KAVA)
        • Kusama (KSM)
        • Mantra (OM)
        • MultiversX (EGLD)
        • Near (NEAR)
        • Oasis (ROSE)
        • Osmosis (OSMO)
        • Peaq (PEAQ)
        • Polkadot (DOT)
        • Polygon (POL - ex MATIC)
        • Sei (SEI)
        • Solana (SOL)
        • Stacks (STX)
        • Starknet (STRK)
        • Story(IP)
        • Sui (SUI)
        • Symbiotic (SYM)
        • Tezos (XTZ)
        • The Open Network (TON)
        • Tron (TRX)
        • Zetachain (ZETA)
    • 🎆Connect
      • Accessing Kiln Connect
      • API specs
      • Postman Demo
      • SDK
        • Getting started
        • How to find Kiln's validators
        • Upgrade guide from v2 to v3
      • Tutorials
        • SOL - Tag a stake
        • DYDX - How to bridge your rewards
      • Kiln Connect FAQs
    • 🚀Dashboard
      • Architecture
      • Staking
        • Babylon (BABY)
        • Cardano (ADA)
        • Celestia (TIA)
        • Cosmos (ATOM)
        • Cronos (CRO)
        • DYDX (DYDX)
        • Ethereum (ETH)
          • Native EigenLayer Restaking
        • Fetch.ai (FET)
        • Injective (INJ)
        • Kava (KAVA)
        • Kusama (KSM)
        • Mantra (OM)
        • Near (NEAR)
        • Osmosis (OSMO)
        • Polkadot (DOT)
        • Polygon (POL)
        • Solana (SOL)
        • Tezos (XTZ)
        • The Open Network (TON)
        • TRON (TRX)
        • ZetaChain (ZETA)
      • Reporting
        • Cardano (ADA)
        • Celestia (TIA)
        • Cosmos (ATOM)
        • Cronos (CRO)
        • DYDX (DYDX)
        • Ethereum (ETH)
        • Fetch.ai (FET)
        • Injective (INJ)
        • Kava (KAVA)
        • Kusama (KSM)
        • Mantra (OM)
        • Near (NEAR)
        • Osmosis (OSMO)
        • Polkadot (DOT)
        • Polygon (POL)
        • Solana (SOL)
        • Tezos (XTZ)
        • The Open Network (TON)
        • Tron (TRX)
        • ZetaChain (ZETA)
      • Unstaking
        • Cardano (ADA)
        • Celestia (TIA)
        • Cosmos (ATOM)
        • Cronos (CRO)
        • DYDX (DYDX)
        • Ethereum (ETH)
          • Native EigenLayer Withdraw Flow
        • Fetch.ai (FET)
        • Injective (INJ)
        • Kava (KAVA)
        • Kusama (KSM)
        • Mantra (OM)
        • Near (NEAR)
        • Osmosis (OSMO)
        • Polkadot (DOT)
        • Polygon (POL)
        • Solana (SOL)
          • Deactivate
          • Merge
          • Split
          • Withdraw
        • Tezos (XTZ)
        • Tron (TRX)
        • The Open Network (TON)
        • ZetaChain (ZETA)
      • Import stakes
      • Move stakes
      • Invite a user to your organization
      • Troubleshooting
      • 🎓Tutorials
        • Cosmos Chains - Auto-compound a stake
      • Dashboard FAQs
    • 📥dApp
      • ETH staking
      • EigenLayer
        • Operator delegation
        • Native restaking
        • Liquid restaking
      • 🔒Security
      • Kiln dApp FAQ
    • ⛓️Onchain
      • 🙋‍♀️Dedicated Validators
        • Key concepts
          • Deposit Flow
          • Rewards Management
          • Unstaking
        • How to integrate
          • 1. Contract Interactions
          • 2. Administration
      • 🤽‍♂️Pooled Staking
        • Key concepts
          • Staking Positions
          • Oracle Reports
          • Exit & Withdrawal
        • How to integrate
          • 🐎Getting Started
          • 🏗️Architecture overview
          • 😊User experience
          • 📃Integration contract
          • ⛑️Contract governance
          • ℹ️Contract ABI
          • 📥Using TheGraph
          • 🥩Staking Interactions
            • Staking
            • Rewards
            • Unstaking & Withdrawals
      • 🎡Tokenized Validators
      • 🎩Node Operators: how to integrate
        • Dedicated Validators (v1)
          • Manage Validators
        • Pooled Staking
          • 1. Using TheGraph for Setup
          • 2. Deploying vPool
          • 3. Key Provisioning in vFactory
          • 4. Oracle Daemon
          • 5. Depositing via Integration Contracts
          • 6. Exit Daemon
          • 7. Deploy Integration Contract (optional)
      • 🔓Security
        • Staking Risks
        • Audits & Bug Bounties
        • Business Continuity
        • Source code
    • 💰DeFi
      • 🦋Morpho via Kiln DeFi
      • 💻How to integrate?
        • Smart contract interactions
        • Governance
        • Reporting data
        • Administration
        • Supported DeFi Protocols
        • Additional Rewards Management
      • 🔓Security
        • Risks
        • Audits & Bug Bounty
        • Pause
        • Source code
        • Compliance Features
      • Kiln DeFi FAQ
    • 🪄Widget
      • 🧑‍🎨Customize - Widget Editor
      • ☄️Integrate - No/Low Code
    • 🛠️More Tools
      • ETH Batch Deposit Contract
      • Safe CD
  • Integrations
    • 🔭Plan your integration
    • 🔌Integrate Kiln products
    • 📱Wallets
      • Stake from Ledger Live
        • Direct Staking
        • Using Kiln Widget
          • DeFi Lending in Ledger Live
        • Using Kiln dApp
          • Dedicated Validators
          • Pooled Staking
          • EigenLayer Restaking
      • Stake from Safe{Wallet}
        • How to stake ETH on Safe & FAQ
        • Using Kiln dApp
      • Stake from Squads
    • 🏢Custody platforms
      • Stake from Anchorage
      • Stake from Bitgo
      • Stake from Coinbase Custody/Prime
      • Stake from Copper
      • Stake from Cordial Systems
      • Stake from DFNS
      • Stake from Finoa
      • Stake from Fireblocks
      • Stake from Fordefi
      • Stake from Hex Safe
      • Stake from Ledger Enterprise
      • Stake from Metamask Institutional
      • Stake from Rakkar
      • Stake from Utila
  • Working with Kiln
    • ☑️Staking & DeFi Track Record
    • ✅Security & Insurances
    • ☎️Support
      • FAQs
        • Enzyme FAQ
        • EigenLayer FAQ
        • Kiln x Safe{Wallet} FAQ
        • Ledger Live FAQ
Powered by GitBook
On this page
  • Running the Exit Daemon
  • Configuration
  • Running
  • Reports
  • REST API
  • Webhook

Was this helpful?

Export as PDF
  1. Kiln Products
  2. Onchain
  3. Node Operators: how to integrate
  4. Pooled Staking

6. Exit Daemon

Handling exit requests

As the channels can automatically select a number of validators that should be stopped, the "Exit Daemon" is here to signal the exit requests on a given vFactory.

This utility is a REST endpoint and also a webhook for the operators to automate exit flow of the validators.

📝 You will run one Exit Daemon for one vFactory

Running the Exit Daemon

You can find the exit daemon inside the operatord repository.

Configuration

The daemon is configured using a config.yaml file, the same as the Oracle Daemon.

You have the option to either incorporate the following lines into a new configuration file or append them to the existing Oracle Daemon configuration file:

- service: "exit"
  config:
    factory: "0xcA43EFe1Ebde9AF74b5693bEACb2dfCC93cFc590"
    hook-endpoint: "http://localhost:9654/report"
  • factory: Address of the operator vFactory (mandatory).

  • hook-endpoint: REST endpoint that will be called (POST) when a report is available (optional).

Running

Then, we can run the exit daemon by running:

docker run -it \
    -v ~/exit_data:/exit_data \
    ghcr.io/kilnfi/operatord:latest start-exit \
    --execution-node-url $ETHEREUM_RPC_URL \
    --consensus-node-url $BEACON_RPC_URL \
    --config-file /exit_data/operator.yml \
  • execution-node-url is an rpc endpoint on the execution layer (geth, erigon, etc...).

  • consensus-node-url is an rpc endpoint on the consensus layer (prysm, lighthouse, etc...).

  • config-file is the path to the file we configured above.

Reports

At every epoch (finalized), if exits are needed, the Exit Daemon craft a report for each withdrawal channel associated with the specified vFactory.

A report follows this JSON structure:

{
  "epoch": 187680,
  "withdrawalChannel": "0100000000000000000000000b226a56495872ad23a43130eae0bad248cc7aa1",
  "lastRequestTxHash": "584dbab6737f5b1a8aa75645555cb1b8953224d2b06800aab8f73eb6d9450f8b",
  "validatorCountToExit": 2,
  "totalCurrentlyExited": 1,
  "suggestedValidatorExits": [
    {
      "publicKey": "99069f008d9807eb57fd4527af4da3fa821e19c1c382261309f7d7db3587a0f3ba28ac2b151709619034b8a18cf04d82",
      "index": 495139
    },
    {
      "publicKey": "ac4fa72a8acef9feb475c1225985b25f8cc4a01322f3360b5edcb9cd3a932b301dfb2a3b0cbd08344ce14f9ec7bc348e",
      "index": 495140
    }
  ],
  "exitableValidators": [
    {
      "publicKey": "85057a9a0ec28095bdf604ccfcf2ade3f8887938b05d987be8c8274021908aadab44d7dd7c214ac6ce576cd8b48b20ce",
      "index": 495924
    },
    {
      "publicKey": "ac95f5c11153eec413e687e03d61c3cc80ceaf1431434022a69cdd50b9147a2676a5d37665c08e0e446323273edb2f9c",
      "index": 495865
    },
    (...)
  ]
}
  • epoch: Epoch of the report

  • withdrawalChannel: Withdrawal channel id.

  • lastRequestTxHash: TX hash of the latest SetExitTotal event.

  • validatorCountToExit: Delta between the requested and actual exited validators.

  • totalCurrentlyExited: Total exited validators for the withdrawal channel.

  • suggestedValidatorExits: Lists suggested validators, providing their index and public key, that are eligible for exit. The suggested validators for exit are those with the oldest activationEpoch.

  • exitableValidators: Complete list of index / public Keys of all the currently exitable validators of the withdrawal channel.

REST API

The last (up to date) reports can be accessed using the REST API.

curl -X GET http://localhost:2020/reports | jq

Webhook

Every epoch, the daemon has the capability to forward the reports to an endpoint.

As outlined in the configuration, you can specify a hook-endpoint in the configuration file. This endpoint will be triggered with a POST request when a report becomes available.

To illustrate its operation, we've created a demo server:

docker run -it \
    ghcr.io/kilnfi/operatord:latest start-demo-server \
    --endpoint $ENDPOINT \

The demo server accepts these reports and displays the corresponding JSON data in the terminal. It provides access to these reports via the /report route.

Previous5. Depositing via Integration ContractsNext7. Deploy Integration Contract (optional)

Last updated 11 months ago

Was this helpful?

⛓️
🎩