> For the complete documentation index, see [llms.txt](https://docs.turbine.exchange/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.turbine.exchange/reference/contracts/solidity-documentation/univ4-hook/abstract.basehook.md).

# BaseHook

[Git Source](https://github.com/propeller-heads/turbine/blob/90514973167f1eb25cb9eb7756354fb3de34824d/src/univ4-hook/BaseHook.sol)

**Inherits:** IHooks

## State Variables

### POOL\_MANAGER

```solidity
IPoolManager public immutable POOL_MANAGER = IPoolManager(UNIV4_POOL_MANAGER)
```

## Functions

### poolManagerOnly

Only the pool manager may call this function

```solidity
modifier poolManagerOnly() ;
```

### \_poolManagerOnly

```solidity
function _poolManagerOnly() internal view;
```

### selfOnly

Only this address may call this function

```solidity
modifier selfOnly() ;
```

### \_selfOnly

```solidity
function _selfOnly() internal view;
```

### onlyValidPools

Only pools with hooks set to this contract may call this function

```solidity
modifier onlyValidPools(IHooks hooks) ;
```

### \_onlyValidPools

```solidity
function _onlyValidPools(IHooks hooks) internal view;
```

### getHookPermissions

```solidity
function getHookPermissions() public pure virtual returns (Hooks.Permissions memory);
```

### validateHookAddress

```solidity
function validateHookAddress() public view virtual;
```

### lockAcquired

```solidity
function lockAcquired(bytes calldata data) external virtual poolManagerOnly returns (bytes memory);
```

### beforeInitialize

```solidity
function beforeInitialize(address, PoolKey calldata, uint160) external virtual returns (bytes4);
```

### afterInitialize

```solidity
function afterInitialize(address, PoolKey calldata, uint160, int24) external virtual returns (bytes4);
```

### beforeAddLiquidity

```solidity
function beforeAddLiquidity(
    address,
    PoolKey calldata,
    IPoolManager.ModifyLiquidityParams calldata,
    bytes calldata
) external virtual returns (bytes4);
```

### beforeRemoveLiquidity

```solidity
function beforeRemoveLiquidity(
    address,
    PoolKey calldata,
    IPoolManager.ModifyLiquidityParams calldata,
    bytes calldata
) external virtual returns (bytes4);
```

### afterAddLiquidity

```solidity
function afterAddLiquidity(
    address, /* sender **/
    PoolKey calldata, /* key **/
    IPoolManager.ModifyLiquidityParams calldata, /* params **/
    BalanceDelta, /* delta **/
    BalanceDelta, /* feeDelta **/
    bytes calldata /* hookData **/
) external virtual returns (bytes4, BalanceDelta);
```

### afterRemoveLiquidity

```solidity
function afterRemoveLiquidity(
    address,
    PoolKey calldata,
    IPoolManager.ModifyLiquidityParams calldata,
    BalanceDelta,
    BalanceDelta,
    bytes calldata
) external virtual returns (bytes4, BalanceDelta);
```

### beforeSwap

```solidity
function beforeSwap(
    address,
    PoolKey calldata,
    IPoolManager.SwapParams calldata,
    bytes calldata
) external virtual returns (bytes4, BeforeSwapDelta, uint24);
```

### afterSwap

```solidity
function afterSwap(
    address,
    PoolKey calldata,
    IPoolManager.SwapParams calldata,
    BalanceDelta,
    bytes calldata
) external virtual returns (bytes4, int128);
```

### beforeDonate

```solidity
function beforeDonate(
    address,
    PoolKey calldata,
    uint256,
    uint256,
    bytes calldata
) external virtual returns (bytes4);
```

### afterDonate

```solidity
function afterDonate(
    address,
    PoolKey calldata,
    uint256,
    uint256,
    bytes calldata
) external virtual returns (bytes4);
```

## Errors

### NotPoolManager

```solidity
error NotPoolManager();
```

### NotSelf

```solidity
error NotSelf();
```

### InvalidPool

```solidity
error InvalidPool();
```

### LockFailure

```solidity
error LockFailure();
```

### HookNotImplemented

```solidity
error HookNotImplemented();
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.turbine.exchange/reference/contracts/solidity-documentation/univ4-hook/abstract.basehook.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
