# Othentic Registry

## Overview

The [Othentic Registry](https://github.com/Othentic-Labs/core-contracts/blob/main/src/NetworkManagement/L1/OthenticRegistry.sol) is a singleton smart contract on L1 that facilitates the integration with shared security protocols and AVSs. The contract manages the registration and interacts with key components such as the Slasher, Delegation Manager, and Strategy Manager.

### Contract Addresses

The Othentic registry contract is deployed on the following L1 chains.

* [Holesky](https://holesky.etherscan.io/address/0xffe9ddb898632D5a20E5d90AA90355b204be89b2)
* [Ethereum](https://etherscan.io/address/0x7e39183cDa5AF65E6A18aF8C3bf0c523127f83bF#code)

## **Features**

**Integration with shared security protocol (EigenLayer) interfaces**\
The contract uses `IOthenticRegistry` interface to manage staking, delegation, and tracking shares for operators and strategies.

**Staking Contract Lookup**\
A multi-chain-aware strategy lookup system is built in, supporting Ethereum mainnet and specific testnets.

**Dynamic Voting Power Consensus**\
In the shared security environment, the Operator's voting power is dynamic and proportional to the amount of re-stake assets locked on Layer 1. The Othentic Registry contract calculates each operator's voting power across multiple shared security protocols, such as EigenLayer and Babylon.

<figure><img src="https://4144525652-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYlSi30nrcEOossIDFFua%2Fuploads%2FCqGvDyszTEk1Op3CmQHr%2Fimage.png?alt=media&#x26;token=0e96b93e-4a95-4e02-b845-98f7a9bb15d4" alt="" width="563"><figcaption></figcaption></figure>

## **Core Functions**

### 1. Governance Management

**registerAvs:** Registers an AVS governance.&#x20;

| Parameter | type            | description     |
| --------- | --------------- | --------------- |
| \_avsName | string (memory) | Name of the AVS |

### 2. Default Strategies Lookup

**getDefaultStrategies:** Returns default strategies based on the chain ID (Mainnet, EigenLayer testnet, or Hardhat testnet).

<table><thead><tr><th>Parameter</th><th width="252">Type</th><th>Description</th></tr></thead><tbody><tr><td>_chainid</td><td>uint256</td><td>Chain Id</td></tr></tbody></table>

### **3. Operator Share & Voting Power Calculations**

The Othentic registry relies on the **`DelegationManager`** contract to manage operator shares and voting power. Here’s a detailed explanation of the relevant functions:

#### **getVotingPower**

Calculates voting power based on assigned shares and multipliers.

<table><thead><tr><th>Parameter</th><th width="252">Type</th><th>Description</th></tr></thead><tbody><tr><td>_operator</td><td>address</td><td>Operator address</td></tr><tr><td>_votingPowerMultipliers</td><td>VotingPowerMultiplier[]</td><td>Array of multipliers and stake weights per staking contract</td></tr><tr><td>_stakingContractDetails</td><td>StakingContractDetails[]</td><td>Array of minimum stake thresholds per staking contract,</td></tr><tr><td>_avsGovernance</td><td>address</td><td>The AVS Governance contract address</td></tr><tr><td>_ignoreMultipliers</td><td>bool</td><td>If <code>true</code>, all multipliers are treated as 1×, skipping weighting logic.</td></tr><tr><td>_revertIfZero</td><td>bool</td><td>If <code>true</code>, the function reverts if any individual staking contract check returns 0 voting power due to insufficient stake</td></tr></tbody></table>

```solidity
struct VotingPowerMultiplier {
    address stakingContract;
    uint256 multiplier;
    uint256 slashableStakeWeight;
    SharedSecurityProvider sharedSecurityProvider;
}

struct StakingContractDetails {
    address stakingContract;
    uint256 minStake;
    uint256 minSlashableStake;
    SharedSecurityProvider sharedSecurityProvider;
}

```

#### **isValidStakeAmount:**&#x20;

Verifies if an operator has the required minimum shares for given strategies.

<table><thead><tr><th width="273.5390625">Parameter</th><th width="172.6171875">Type</th><th>Description</th></tr></thead><tbody><tr><td>_operator</td><td>address</td><td>Operator address</td></tr><tr><td>_minStakePerStakingContracts</td><td>StrategyShares[]</td><td>Strategy shares</td></tr><tr><td>_avsGovernance</td><td>address</td><td>AVS governance address</td></tr></tbody></table>

#### **getOperatorRestakedStrategies**

This function returns Operator shares for specific strategies.

<table><thead><tr><th>Parameter</th><th width="225.44140625">Type</th><th>Description</th></tr></thead><tbody><tr><td>_operator</td><td>address</td><td>Operator address</td></tr><tr><td>_allStrategies</td><td>address[]</td><td>Strategy addresses</td></tr><tr><td>_avsGovernance</td><td>address</td><td>AVS governance address</td></tr></tbody></table>

#### \_getEigenLayerStakes

Fetches the **total stake** and the **slashable portion** of stake for an Operator on EigenLayer, based on their allocation status.

```solidity
function _getEigenLayerStakes(
    address _avsGovernance,
    address _operator,
    address _stakingContract,
    OperatorSet memory _operatorSet
) internal view returns (uint256 slashableStake, uint256 nonSlashableStake)

```

<table><thead><tr><th width="188.7265625">Parameter</th><th width="158.6640625">Type</th><th>Description</th></tr></thead><tbody><tr><td>_avsGovernance</td><td>address</td><td>The address of the AVS Governance contract.</td></tr><tr><td>_operator</td><td>address</td><td>Operator address</td></tr><tr><td>_stakingContract</td><td>address</td><td>The EigenLayer staking contract </td></tr><tr><td>_operatorSet</td><td>OperatorSet</td><td>Set of AVS governance address and Operator Set Id</td></tr></tbody></table>

**Returns**

* `slashableStake`: Amount of stake currently slashable for the Operator.
* `nonSlashableStake`: Remainder of the total stake that is not currently slashable.
