# AI Pack: hooks-contracts

- Description: Hooks contracts for protocol integrations.
- Remote: https://github.com/symbioticfi/hooks
- Remote ref: HEAD
- Commit: b3b7624094aa0f7e3f74eec99c6083e00c6bfc7e
- Generated (UTC): 2026-06-02T10:22:21.999Z
- Repomix: 1.14.1
- Preset: contract
- Ignore patterns: .gitignore, .dockerignore, .prettierignore, .npmignore, .nvmrc, .editorconfig, .gitattributes, **/.github/**, **/.husky/**, **/.vscode/**, **/.idea/**, **/.DS_Store, node_modules/, dist/, build/, .turbo/, .next/, out/, cache/, broadcast/, bin/, coverage*, *.test, target/, docs/, abis/, bindings/, test/**, !test/integration/**, script/utils/**, package-lock.json, pnpm-lock.yaml, yarn.lock, bun.lockb, .pre-commit-config.yaml
- Flags: compress

---

This file is a merged representation of a subset of the codebase, containing files not matching ignore patterns, combined into a single document by Repomix.
The content has been processed where content has been compressed (code blocks are separated by ⋮---- delimiter).

# File Summary

## Purpose

This file contains a packed representation of a subset of the repository's contents that is considered the most important context.
It is designed to be easily consumable by AI systems for analysis, code review,
or other automated processes.

## File Format

The content is organized as follows:

1. This summary section
2. Repository information
3. Directory structure
4. Repository files (if enabled)
5. Multiple file entries, each consisting of:
   a. A header with the file path (## File: path/to/file)
   b. The full contents of the file in a code block

## Usage Guidelines

- This file should be treated as read-only. Any changes should be made to the
  original repository files, not this packed version.
- When processing this file, use the file path to distinguish
  between different files in the repository.
- Be aware that this file may contain sensitive information. Handle it with
  the same level of security as you would the original repository.

## Notes

- Some files may have been excluded based on .gitignore rules and Repomix's configuration
- Binary files are not included in this packed representation. Please refer to the Repository Structure section for a complete list of file paths, including binary files
- Files matching these patterns are excluded: .gitignore, .dockerignore, .prettierignore, .npmignore, .nvmrc, .editorconfig, .gitattributes, **/.github/**, **/.husky/**, **/.vscode/**, **/.idea/**, **/.DS_Store, node_modules/, dist/, build/, .turbo/, .next/, out/, cache/, broadcast/, bin/, coverage*, *.test, target/, docs/, abis/, bindings/, test/**, !test/integration/**, script/utils/**, package-lock.json, pnpm-lock.yaml, yarn.lock, bun.lockb, .pre-commit-config.yaml
- Files matching patterns in .gitignore are excluded
- Files matching default ignore patterns are excluded
- Content has been compressed - code blocks are separated by ⋮---- delimiter
- Files are sorted by Git change count (files with more changes are at the bottom)

# Directory Structure

```
script/
  deploy/
    FullRestakeDecreaseHook.s.sol
    FullRestakeResetHook.s.sol
    Hooks.s.sol
    NetworkRestakeDecreaseHook.s.sol
    NetworkRestakeRedistributeHook.s.sol
    NetworkRestakeResetHook.s.sol
    OperatorSpecificDecreaseHook.s.sol
    OperatorSpecificResetHook.s.sol
specs/
  FullRestakeDelegatorHooks.md
  NetworkRestakeDelegatorHooks.md
  OperatorSpecificDelegatorHooks.md
src/
  contracts/
    fullRestakeDelegator/
      FullRestakeDecreaseHook.sol
      FullRestakeResetHook.sol
    networkRestakeDelegator/
      NetworkRestakeDecreaseHook.sol
      NetworkRestakeRedistributeHook.sol
      NetworkRestakeResetHook.sol
    operatorSpecificDelegator/
      OperatorSpecificDecreaseHook.sol
      OperatorSpecificResetHook.sol
  interfaces/
    fullRestakeDelegator/
      IFullRestakeDecreaseHook.sol
      IFullRestakeResetHook.sol
    networkRestakeDelegator/
      INetworkRestakeDecreaseHook.sol
      INetworkRestakeRedistributeHook.sol
      INetworkRestakeResetHook.sol
    operatorSpecificDelegator/
      IOperatorSpecificDecreaseHook.sol
      IOperatorSpecificResetHook.sol
.env.example
.gitmodules
foundry.toml
LICENSE
package.json
README.md
remappings.txt
```

# Files

## File: script/deploy/FullRestakeDecreaseHook.s.sol

```solidity
// SPDX-License-Identifier: BUSL-1.1
⋮----
import {Script, console2} from "forge-std/Script.sol";
⋮----
import {FullRestakeDecreaseHook} from "../../src/contracts/fullRestakeDelegator/FullRestakeDecreaseHook.sol";
⋮----
contract FullRestakeDecreaseHookScript is Script {
function run() public {
```

## File: script/deploy/FullRestakeResetHook.s.sol

```solidity
// SPDX-License-Identifier: BUSL-1.1
⋮----
import {Script, console2} from "forge-std/Script.sol";
⋮----
import {FullRestakeResetHook} from "../../src/contracts/fullRestakeDelegator/FullRestakeResetHook.sol";
⋮----
contract FullRestakeResetHookScript is Script {
function run(uint48 period, uint256 slashCount) public {
```

## File: script/deploy/Hooks.s.sol

```solidity
// SPDX-License-Identifier: BUSL-1.1
⋮----
import {Script, console2} from "forge-std/Script.sol";
⋮----
import {FullRestakeDecreaseHook} from "../../src/contracts/fullRestakeDelegator/FullRestakeDecreaseHook.sol";
import {NetworkRestakeDecreaseHook} from "../../src/contracts/networkRestakeDelegator/NetworkRestakeDecreaseHook.sol";
import {NetworkRestakeRedistributeHook} from
    "../../src/contracts/networkRestakeDelegator/NetworkRestakeRedistributeHook.sol";
import {OperatorSpecificDecreaseHook} from
    "../../src/contracts/operatorSpecificDelegator/OperatorSpecificDecreaseHook.sol";
⋮----
contract HooksScript is Script {
function run() public {
```

## File: script/deploy/NetworkRestakeDecreaseHook.s.sol

```solidity
// SPDX-License-Identifier: BUSL-1.1
⋮----
import {Script, console2} from "forge-std/Script.sol";
⋮----
import {NetworkRestakeDecreaseHook} from "../../src/contracts/networkRestakeDelegator/NetworkRestakeDecreaseHook.sol";
⋮----
contract NetworkRestakeDecreaseHookScript is Script {
function run() public {
```

## File: script/deploy/NetworkRestakeRedistributeHook.s.sol

```solidity
// SPDX-License-Identifier: BUSL-1.1
⋮----
import {Script, console2} from "forge-std/Script.sol";
⋮----
import {NetworkRestakeRedistributeHook} from
    "../../src/contracts/networkRestakeDelegator/NetworkRestakeRedistributeHook.sol";
⋮----
contract NetworkRestakeRedistributeHookScript is Script {
function run() public {
```

## File: script/deploy/NetworkRestakeResetHook.s.sol

```solidity
// SPDX-License-Identifier: BUSL-1.1
⋮----
import {Script, console2} from "forge-std/Script.sol";
⋮----
import {NetworkRestakeResetHook} from "../../src/contracts/networkRestakeDelegator/NetworkRestakeResetHook.sol";
⋮----
contract NetworkRestakeResetHookScript is Script {
function run(uint48 period, uint256 slashCount) public {
```

## File: script/deploy/OperatorSpecificDecreaseHook.s.sol

```solidity
// SPDX-License-Identifier: BUSL-1.1
⋮----
import {Script, console2} from "forge-std/Script.sol";
⋮----
import {OperatorSpecificDecreaseHook} from
    "../../src/contracts/operatorSpecificDelegator/OperatorSpecificDecreaseHook.sol";
⋮----
contract OperatorSpecificDecreaseHookScript is Script {
function run() public {
```

## File: script/deploy/OperatorSpecificResetHook.s.sol

```solidity
// SPDX-License-Identifier: BUSL-1.1
⋮----
import {Script, console2} from "forge-std/Script.sol";
⋮----
import {OperatorSpecificResetHook} from "../../src/contracts/operatorSpecificDelegator/OperatorSpecificResetHook.sol";
⋮----
contract OperatorSpecificResetHookScript is Script {
function run(uint48 period, uint256 slashCount) public {
```

## File: specs/FullRestakeDelegatorHooks.md

```markdown
## Hooks

### FullRestakeDecreaseHook

FullRestakeDecreaseHook supports `onSlash()` calls only from `FullRestakeDelegator`.

This hook decreases the network's limit by the slashed amount and decreases the operator's limit also by the slashed amount. It doesn't change stake amounts for other operators.

### FullRestakeResetHook

FullRestakeResetHook supports `onSlash()` calls only from `FullRestakeDelegator`.

This hook resets the slashed operator's limit to zero in case it was slashed a configured number of times during a configured period of time.
```

## File: specs/NetworkRestakeDelegatorHooks.md

```markdown
## Hooks

### NetworkRestakeDecreaseHook

NetworkRestakeDecreaseHook supports `onSlash()` calls only from `NetworkRestakeDelegator`.

This hook decreases the network’s limit by the slashed amount and decreases the slashed operator’s shares (in case of network limit less than or equal to the active deposits, the stake will be decreased by the slashed amount, not changing other operators' stakes, otherwise, the stake changes depend on the active deposits).

### NetworkRestakeRedistributeHook

NetworkRestakeRedistributeHook supports `onSlash()` calls only from `NetworkRestakeDelegator`.

This hook decreases the slashed operator's shares by slashed percent from the given stake, redistributing the decreased stake to other operators.

### NetworkRestakeResetHook

NetworkRestakeResetHook supports `onSlash()` calls only from `NetworkRestakeDelegator`.

This hook resets the slashed operator's shares to zero in case it was slashed a configured number of times during a configured period of time.
```

## File: specs/OperatorSpecificDelegatorHooks.md

```markdown
## Hooks

### OperatorSpecificDecreaseHook

OperatorSpecificDecreaseHook supports `onSlash()` calls only from `OperatorSpecificDelegator`.

This hook decreases the network's limit by the slashed amount.

### OperatorSpecificResetHook

OperatorSpecificResetHook supports `onSlash()` calls only from `OperatorSpecificDelegator`.

This hook resets the slashing network's limit to zero in case it was slashed a configured number of times during a configured period of time.
```

## File: src/contracts/fullRestakeDelegator/FullRestakeDecreaseHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IFullRestakeDecreaseHook} from "../../interfaces/fullRestakeDelegator/IFullRestakeDecreaseHook.sol";
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
import {IEntity} from "@symbioticfi/core/src/interfaces/common/IEntity.sol";
import {IFullRestakeDelegator} from "@symbioticfi/core/src/interfaces/delegator/IFullRestakeDelegator.sol";
⋮----
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
⋮----
contract FullRestakeDecreaseHook is IFullRestakeDecreaseHook {
⋮----
/**
     * @inheritdoc IDelegatorHook
     */
function onSlash(
⋮----
uint48, /* captureTimestamp */
bytes calldata /* data */
```

## File: src/contracts/fullRestakeDelegator/FullRestakeResetHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IFullRestakeResetHook} from "../../interfaces/fullRestakeDelegator/IFullRestakeResetHook.sol";
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
import {IEntity} from "@symbioticfi/core/src/interfaces/common/IEntity.sol";
import {IFullRestakeDelegator} from "@symbioticfi/core/src/interfaces/delegator/IFullRestakeDelegator.sol";
import {IVault} from "@symbioticfi/core/src/interfaces/vault/IVault.sol";
⋮----
import {CircularBuffer} from "@openzeppelin/contracts/utils/structs/CircularBuffer.sol";
import {Time} from "@openzeppelin/contracts/utils/types/Time.sol";
⋮----
contract FullRestakeResetHook is IFullRestakeResetHook {
⋮----
/**
     * @inheritdoc IFullRestakeResetHook
     */
⋮----
/**
     * @inheritdoc IDelegatorHook
     */
function onSlash(
⋮----
uint256, /* slashedAmount */
uint48, /* captureTimestamp */
bytes calldata /* data */
```

## File: src/contracts/networkRestakeDelegator/NetworkRestakeDecreaseHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {INetworkRestakeDecreaseHook} from "../../interfaces/networkRestakeDelegator/INetworkRestakeDecreaseHook.sol";
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
import {IEntity} from "@symbioticfi/core/src/interfaces/common/IEntity.sol";
import {INetworkRestakeDelegator} from "@symbioticfi/core/src/interfaces/delegator/INetworkRestakeDelegator.sol";
import {IBaseSlasher} from "@symbioticfi/core/src/interfaces/slasher/IBaseSlasher.sol";
import {ISlasher} from "@symbioticfi/core/src/interfaces/slasher/ISlasher.sol";
import {IVetoSlasher} from "@symbioticfi/core/src/interfaces/slasher/IVetoSlasher.sol";
⋮----
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
⋮----
contract NetworkRestakeDecreaseHook is INetworkRestakeDecreaseHook {
⋮----
/**
     * @inheritdoc IDelegatorHook
     */
function onSlash(
```

## File: src/contracts/networkRestakeDelegator/NetworkRestakeRedistributeHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {INetworkRestakeRedistributeHook} from
    "../../interfaces/networkRestakeDelegator/INetworkRestakeRedistributeHook.sol";
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
import {IEntity} from "@symbioticfi/core/src/interfaces/common/IEntity.sol";
import {INetworkRestakeDelegator} from "@symbioticfi/core/src/interfaces/delegator/INetworkRestakeDelegator.sol";
import {IVault} from "@symbioticfi/core/src/interfaces/vault/IVault.sol";
import {IBaseSlasher} from "@symbioticfi/core/src/interfaces/slasher/IBaseSlasher.sol";
import {ISlasher} from "@symbioticfi/core/src/interfaces/slasher/ISlasher.sol";
import {IVetoSlasher} from "@symbioticfi/core/src/interfaces/slasher/IVetoSlasher.sol";
⋮----
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
⋮----
contract NetworkRestakeRedistributeHook is INetworkRestakeRedistributeHook {
⋮----
/**
     * @inheritdoc IDelegatorHook
     */
function onSlash(
```

## File: src/contracts/networkRestakeDelegator/NetworkRestakeResetHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {INetworkRestakeResetHook} from "../../interfaces/networkRestakeDelegator/INetworkRestakeResetHook.sol";
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
import {IEntity} from "@symbioticfi/core/src/interfaces/common/IEntity.sol";
import {INetworkRestakeDelegator} from "@symbioticfi/core/src/interfaces/delegator/INetworkRestakeDelegator.sol";
import {IVault} from "@symbioticfi/core/src/interfaces/vault/IVault.sol";
⋮----
import {CircularBuffer} from "@openzeppelin/contracts/utils/structs/CircularBuffer.sol";
import {Time} from "@openzeppelin/contracts/utils/types/Time.sol";
⋮----
contract NetworkRestakeResetHook is INetworkRestakeResetHook {
⋮----
/**
     * @inheritdoc INetworkRestakeResetHook
     */
⋮----
/**
     * @inheritdoc IDelegatorHook
     */
function onSlash(
⋮----
uint256, /* slashedAmount */
uint48, /* captureTimestamp */
bytes calldata /* data */
```

## File: src/contracts/operatorSpecificDelegator/OperatorSpecificDecreaseHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IOperatorSpecificDecreaseHook} from
    "../../interfaces/operatorSpecificDelegator/IOperatorSpecificDecreaseHook.sol";
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
import {IEntity} from "@symbioticfi/core/src/interfaces/common/IEntity.sol";
import {IOperatorSpecificDelegator} from "@symbioticfi/core/src/interfaces/delegator/IOperatorSpecificDelegator.sol";
⋮----
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
⋮----
contract OperatorSpecificDecreaseHook is IOperatorSpecificDecreaseHook {
⋮----
/**
     * @inheritdoc IDelegatorHook
     */
function onSlash(
⋮----
address, /* operator */
⋮----
uint48, /* captureTimestamp */
bytes calldata /* data */
```

## File: src/contracts/operatorSpecificDelegator/OperatorSpecificResetHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IOperatorSpecificResetHook} from "../../interfaces/operatorSpecificDelegator/IOperatorSpecificResetHook.sol";
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
import {IEntity} from "@symbioticfi/core/src/interfaces/common/IEntity.sol";
import {IOperatorSpecificDelegator} from "@symbioticfi/core/src/interfaces/delegator/IOperatorSpecificDelegator.sol";
import {IVault} from "@symbioticfi/core/src/interfaces/vault/IVault.sol";
⋮----
import {CircularBuffer} from "@openzeppelin/contracts/utils/structs/CircularBuffer.sol";
import {Time} from "@openzeppelin/contracts/utils/types/Time.sol";
⋮----
contract OperatorSpecificResetHook is IOperatorSpecificResetHook {
⋮----
/**
     * @inheritdoc IOperatorSpecificResetHook
     */
⋮----
/**
     * @inheritdoc IDelegatorHook
     */
function onSlash(
⋮----
address, /* operator */
uint256, /* slashedAmount */
uint48, /* captureTimestamp */
bytes calldata /* data */
```

## File: src/interfaces/fullRestakeDelegator/IFullRestakeDecreaseHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
⋮----
interface IFullRestakeDecreaseHook is IDelegatorHook {
```

## File: src/interfaces/fullRestakeDelegator/IFullRestakeResetHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
⋮----
interface IFullRestakeResetHook is IDelegatorHook {
⋮----
/**
     * @notice Get a period during which the slashing should occur to reset the operator's stake.
     * @return threshold period
     */
function PERIOD() external view returns (uint48);
⋮----
/**
     * @notice Get a number of slashes that should occur during the PERIOD to reset the operator's stake.
     * @return threshold count
     */
function SLASH_COUNT() external view returns (uint256);
```

## File: src/interfaces/networkRestakeDelegator/INetworkRestakeDecreaseHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
⋮----
interface INetworkRestakeDecreaseHook is IDelegatorHook {
```

## File: src/interfaces/networkRestakeDelegator/INetworkRestakeRedistributeHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
⋮----
interface INetworkRestakeRedistributeHook is IDelegatorHook {
```

## File: src/interfaces/networkRestakeDelegator/INetworkRestakeResetHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
⋮----
interface INetworkRestakeResetHook is IDelegatorHook {
⋮----
/**
     * @notice Get a period during which the slashing should occur to reset the operator's stake.
     * @return threshold period
     */
function PERIOD() external view returns (uint48);
⋮----
/**
     * @notice Get a number of slashes that should occur during the PERIOD to reset the operator's stake.
     * @return threshold count
     */
function SLASH_COUNT() external view returns (uint256);
```

## File: src/interfaces/operatorSpecificDelegator/IOperatorSpecificDecreaseHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
⋮----
interface IOperatorSpecificDecreaseHook is IDelegatorHook {
```

## File: src/interfaces/operatorSpecificDelegator/IOperatorSpecificResetHook.sol

```solidity
// SPDX-License-Identifier: MIT
⋮----
import {IDelegatorHook} from "@symbioticfi/core/src/interfaces/delegator/IDelegatorHook.sol";
⋮----
interface IOperatorSpecificResetHook is IDelegatorHook {
⋮----
/**
     * @notice Get a period during which the slashing should occur to reset the operator's stake.
     * @return threshold period
     */
function PERIOD() external view returns (uint48);
⋮----
/**
     * @notice Get a number of slashes that should occur during the PERIOD to reset the operator's stake.
     * @return threshold count
     */
function SLASH_COUNT() external view returns (uint256);
```

## File: .env.example

```
ETH_RPC_URL=
ETH_RPC_URL_HOLESKY=
ETHERSCAN_API_KEY=
```

## File: .gitmodules

```
[submodule "lib/forge-std"]
	path = lib/forge-std
	url = https://github.com/foundry-rs/forge-std
[submodule "lib/openzeppelin-contracts"]
	path = lib/openzeppelin-contracts
	url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "lib/openzeppelin-contracts-upgradeable"]
	path = lib/openzeppelin-contracts-upgradeable
	url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
[submodule "lib/core"]
	path = lib/core
	url = https://github.com/symbioticfi/core
```

## File: foundry.toml

```toml
[profile.default]
evm_version = "cancun"
solc = "0.8.25"
optimizer = true
optimizer_runs = 200
via_ir = true
src = "src"
out = "out"
libs = ["lib"]
fs_permissions = [{ access = "read-write", path = "./"}]
gas_reports = ["*"]
gas_limit = "18446744073709551615"

[rpc_endpoints]
mainnet = "${ETH_RPC_URL}"
holesky = "${ETH_RPC_URL_HOLESKY}"

[fmt]
bracket_spacing = false
int_types = "long"
line_length = 120
multiline_func_header = "params_first"
number_underscore = "thousands"
quote_style = "double"
tab_width = 4

[fuzz]
runs = 4096
max_test_rejects = 262144


# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options
```

## File: LICENSE

```
MIT License

Copyright (c) 2024 Symbiotic

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```

## File: package.json

```json
{
    "name": "@symbioticfi/hooks",
    "version": "1.0.0",
    "description": "Symbiotic Hooks repository contains several basic on-slash hook implementations for different delegator types.",
    "homepage": "https://symbiotic.fi/",
    "bugs": "https://github.com/symbioticfi/hooks/issues",
    "license": "MIT",
    "author": "Symbiotic Team",
    "files": ["src/**/*", "test/mocks/**/*", "out/**/*.json"],
    "repository": {
        "type": "git",
        "url": "https://github.com/symbioticfi/hooks.git"
    },
    "keywords": ["solidity", "ethereum", "smart", "contracts", "security"],
    "dependencies": {
        "@openzeppelin/contracts": "5.1.0",
        "@openzeppelin/contracts-upgradeable": "5.1.0",
        "@symbioticfi/core": "1.0.0-devnet.9"
    }
}
```

## File: README.md

````markdown
**[Symbiotic Protocol](https://symbiotic.fi) is an extremely flexible and permissionless shared security system.**

This repository contains default on-slash hooks.

[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/symbioticfi/hooks)

## Technical Documentation

Can be found [here](./specs).

## Security

Security audits can be found [here](./audits).

## Usage

### Env

Create `.env` file using a template:

```
ETH_RPC_URL=
ETH_RPC_URL_HOLESKY=
ETHERSCAN_API_KEY=
```

\* ETH_RPC_URL is optional.<br/>\* ETH_RPC_URL_HOLESKY is optional.<br/>\* ETHERSCAN_API_KEY is optional.

### Build

```shell
forge build
```

### Test

```shell
forge test
```

### Format

```shell
forge fmt
```

### Gas Snapshots

```shell
forge snapshot
```
````

## File: remappings.txt

```
forge-std/=lib/forge-std/src/
@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/
@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/
@symbioticfi/core/=lib/core/
```
