LogoLogo
  • Introduction
    • Get started
  • Kiln Products
    • Overview
    • 🧱Validators
      • ⛓️Protocols
        • Algorand (ALGO)
        • Aptos (APT)
        • Avalanche (AVAX)
        • Babylon (BABY)
        • Bittensor (TAO)
        • 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
        • Cardano (ADA)
        • Celestia (TIA)
        • Cosmos (ATOM)
        • Cronos (CRO)
        • DYDX (DYDX)
        • Ethereum (ETH)
          • Native EigenLayer Restaking
          • Deposit into compounding validators
          • Convert skimming validators to compounding validators
        • 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
          • Partial withdraw liquidity
        • 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
        • DeFi Lending in Safe{Wallet}
        • 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 Taurus
      • Stake from Utila
      • Stake with Zodia
  • 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
  • Adding a new oracle member
  • Running the Oracle Daemon

Was this helpful?

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

4. Oracle Daemon

Previous3. Key Provisioning in vFactoryNext5. Depositing via Integration Contracts

Last updated 1 year ago

Was this helpful?

The next step would be to add an oracle member, and start using the Oracle Daemon with the oracle member private key to craft and send reports to the vPool.

By default, the pool expects at least two members before it can start operating, but Kiln runs the global oracle member, so adding one regular member will do the trick.

Remember, you can remove the global oracle member from your vPool only if you have at least 5 members in your oracle quorum, and if you toggle the ejection flag.

Adding a new oracle member

The call is pretty simple, and should be performed by the vFactory admin

TheGraph: Retrieve the vOracleAggregator address of the vPool
{
  vFactories(where:{address:"YOUR_FACTORY_ADDRESS"}) {
    pools {
      address
      oracleAggregator {
        address
      }
    }
  }
}
{
  "data": {
    "vFactories": [
      {
        "pools": [
          {
            "address": "POOL_ADDRESS",
            "oracleAggregator": {
              "address": "ORACLE_AGGREGATOR_ADDRESS"
            }
          }
        ]
      }
    ]
  }
}
cast: Adding a new oracle member

from=ADMIN


cast send $ORACLE_AGGREGATOR_ADDRESS \
    "addMember(address)" \
    $ORACLE_MEMBER_ADDRESS \
    --rpc-url $ETH_RPC_URL
  • You can add the -i flag to interactively provide the private key for the transaction

  • You can add --ledger --from YOUR_ADDRESS to use a Ledger device to perform the transaction

TheGraph: Retrieve all the oracle members and the global member
{
  vFactories(where:{address:"FACTORY_ADDRESS"}) {
    pools {
      oracleAggregator {
        members {
          address
        }
      }
    }
  }
  nexuses {
    globalOracle
  }
}
{
  "data": {
    "vFactories": [
      {
        "pools": [
          {
            "oracleAggregator": {
              "members": [
                {
                  "address": "THE_NEWLY_ADDED_MEMBER"
                }
              ]
            }
          }
        ]
      }
    ],
    "nexuses": [
      {
        "globalOracle": "GLOBAL_ORACLE_MEMBER"
      }
    ]
  }
}

Running the Oracle Daemon

You can find the oracle daemon inside the operatord repository. It contains all the daemons that an operator might need to run.

Configuration

The oracle daemon is configured using a config.yaml file. Let's start by creating a directory for the oracle daemon:

mkdir ~/oracle_datadir

And then, create ~/oracle_datadir/config.yaml, here's how it should look for one oracle member

- service: "oracle"
  config:
    name: "oracle-member-0"
    private-key: "PRIVATE_KEY_IN_HEX"
    pool: "ADDRESS_OF_POOL"
    nexus: "ADDRESS_OF_NEXUS"
    purchase: true
    maxTxCostWei: "1000000000000000000"
  • name is for logging purposes

  • private-key is the private key of the member that you wish to run

  • pool is the address of the vPool you wish to report for

  • nexus is the address of the Nexus contract

  • purchase is set to true if the member will also participate in performing the purchaseValidators call on the vPool

  • maxTxCostWei is the maximum allowed cost of a tx in wei

Running using Docker

docker run -it \
    -v ~/oracle_data:/oracle_data \
    ghcr.io/kilnfi/operatord:latest start-oracle \
    --execution-node-url $ETHEREUM_RPC_URL \
    --consensus-node-url $BEACON_RPC_URL \
    --config-file /oracle_data/operator.yml \
    --database-file /oracle_data/oracle.db

It might take a bit of time to sync, but anything pulled from EL/CL that we'll need to reuse is stored inside the sqlite database that will be created. This would greatly speedup possible restarts. You should now ping Kiln to make sure that the global oracle member is running on their end. If that's the case, we should see oracle reports being posted

TheGraph: Get latest oracle report
{
  vFactories(where:{address:"FACTORY_ADDRESS"}) {
    pools {
      reports(orderBy:epoch,orderDirection:desc,first:1) {
      	epoch
      	preSupply
      	postSupply
    	preUnderlyingSupply
     	postUnderlyingSupply
      	pulledCoverageFunds
      	pulledExecutionLayerRewards
      	pulledExitQueueUnclaimedFunds
    	consensusLayerDelta
      	rewards
      	exitFedEthers
      	newExitedEthers
      	newSkimmedEthers
      	activatedCount
      	stoppedCount
      	balanceSum
      	skimmedSum
      	exitedSum
      	exiting
      }
    }
  }
}
{
  "data": {
    "vFactories": [
      {
        "pools": [
          {
            "reports": [
              {
                "epoch": "185625",
                "preSupply": "640184161527309879390",
                "postSupply": "640184442079975696948",
                "preUnderlyingSupply": "641392925331000000000",
                "postUnderlyingSupply": "641395736166000000000",
                "pulledCoverageFunds": "0",
                "pulledExecutionLayerRewards": "0",
                "pulledExitQueueUnclaimedFunds": "0",
                "consensusLayerDelta": "2810835000000000",
                "revenue": "2810835000000000",
                "exitFedEthers": "0",
                "newExitedEthers": "0",
                "newSkimmedEthers": "0",
                "activatedCount": "20",
                "stoppedCount": "0",
                "balanceSum": "640004118170000000000",
                "skimmedSum": "341616994000000000",
                "exitedSum": "0",
                "exiting": "0"
              }
            ]
          }
        ]
      }
    ]
  }
}
⛓️
🎩
15KB
vOracleAggregator.abi.json