> For the complete documentation index, see [llms.txt](https://docs.abey.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.abey.com/dpos/staking_abi.md).

# Abey staking ABI

*Last updated: January 2026*

This document describes the **events** and **functions** exposed by the Abey staking contract ABI.

***

### Events

#### `Deposit`

Emitted when a validator deposits stake and registers a public key.

| Name   | Type    | Indexed | Description              |
| ------ | ------- | ------- | ------------------------ |
| from   | address | true    | Validator address        |
| pubkey | bytes   | false   | Validator BFT public key |
| value  | uint256 | false   | Amount deposited         |
| fee    | uint256 | false   | Validator fee rate       |

***

#### `Delegate`

Emitted when a delegator delegates stake to a validator.

| Name   | Type    | Indexed | Description       |
| ------ | ------- | ------- | ----------------- |
| from   | address | true    | Delegator address |
| holder | address | true    | Validator address |
| value  | uint256 | false   | Amount delegated  |

***

#### `Undelegate`

Emitted when a delegator cancels delegated stake.

| Name   | Type    | Indexed | Description        |
| ------ | ------- | ------- | ------------------ |
| from   | address | true    | Delegator address  |
| holder | address | true    | Validator address  |
| value  | uint256 | false   | Amount undelegated |

***

#### `WithdrawDelegate`

Emitted when a delegator withdraws unlocked stake.

| Name   | Type    | Indexed | Description       |
| ------ | ------- | ------- | ----------------- |
| from   | address | true    | Delegator address |
| holder | address | true    | Validator address |
| value  | uint256 | false   | Amount withdrawn  |

***

#### `Cancel`

Emitted when a validator cancels a portion of their stake.

| Name  | Type    | Indexed | Description       |
| ----- | ------- | ------- | ----------------- |
| from  | address | true    | Validator address |
| value | uint256 | false   | Amount canceled   |

***

#### `Withdraw`

Emitted when a validator withdraws unlocked stake.

| Name  | Type    | Indexed | Description       |
| ----- | ------- | ------- | ----------------- |
| from  | address | true    | Validator address |
| value | uint256 | false   | Amount withdrawn  |

***

#### `Append`

Emitted when a validator adds additional stake.

| Name  | Type    | Indexed | Description       |
| ----- | ------- | ------- | ----------------- |
| from  | address | true    | Validator address |
| value | uint256 | false   | Amount appended   |

***

#### `SetFee`

Emitted when a validator updates their fee rate.

| Name | Type    | Indexed | Description       |
| ---- | ------- | ------- | ----------------- |
| from | address | true    | Validator address |
| fee  | uint256 | false   | New fee rate      |

***

#### `SetPubkey`

Emitted when a validator updates their public key.

| Name   | Type    | Indexed | Description        |
| ------ | ------- | ------- | ------------------ |
| from   | address | true    | Validator address  |
| pubkey | bytes   | false   | New BFT public key |

***

### Functions

#### `deposit(bytes pubkey, uint256 fee, uint256 value)`

Registers a validator by depositing stake and setting a public key.

***

#### `setFee(uint256 fee)`

Updates the validator’s fee rate.

***

#### `setPubkey(bytes pubkey)`

Updates the validator’s BFT public key.

***

#### `append(uint256 value)`

Adds additional stake to an existing validator deposit.

***

#### `delegate(address holder, uint256 value)`

Delegates stake to a validator.

***

#### `undelegate(address holder, uint256 value)`

Cancels a portion of delegated stake.

***

#### `cancel(uint256 value)`

Cancels a portion of the validator’s own stake.

***

#### `withdraw(uint256 value)`

Withdraws unlocked validator stake.

***

#### `withdrawDelegate(address holder, uint256 value)`

Withdraws unlocked delegated stake.

***

### View Functions

#### `lockedBalance(address owner) → uint256`

Returns the total locked balance for an address.

***

#### `getDeposit(address owner) → (uint256 staked, uint256 locked, uint256 unlocked)`

Returns the validator deposit state.

***

#### `getDelegate(address owner, address holder) → (uint256 delegated, uint256 locked, uint256 unlocked)`

Returns the delegation state between a delegator and a validator.
