# Abey staking contract

*Last updated: January 2026*

### Contract Address

The Abey staking contract is deployed at the following address:

```
0x000000000000000000747275657374616b696E67
```

***

### Contract JSON ABI

Refer to the official documentation for the full ABI definition:

* [Staking ABI](https://github.com/AbeyFoundation/documents/blob/master/DPOS/DPOS/staking_abi.md)

***

### Contract Interface

This section describes how validators and delegators interact with the staking contract.

***

### `deposit`

A node can participate as a validator and propose new blocks by calling the `deposit` function.

To create a validator, you must deposit a certain amount of `ABEY` and register your validator public key. Delegators may bond their tokens to a validator and share block rewards proportionally. Validators may charge an additional fee rate on delegator rewards.

#### Fee Rate Calculation

```
feeRate = fee / 10000
```

After depositing, the node becomes a validator candidate. Only validators with a deposit balance greater than **20,000 ABAY** may be selected as active candidates.

#### Parameters

| Name   | Type    | Description                                                |
| ------ | ------- | ---------------------------------------------------------- |
| pubkey | bytes   | BFT public key (65 bytes)                                  |
| fee    | uint256 | Percentage of reward charged to delegators (`fee / 10000`) |
| value  | wei     | Amount of `abey` to deposit                                |

***

### `cancel`

A validator may cancel (unstake) a portion of their deposited balance. Once canceled, the amount is locked in the contract for approximately **2 weeks** before it can be withdrawn.

#### Parameters

| Name  | Type    | Description                                     |
| ----- | ------- | ----------------------------------------------- |
| value | uint256 | Amount to unlock from the staking balance (wei) |

***

### `append`

A validator may increase their staking balance by depositing additional `abey` using the `append` function.

#### Parameters

| Name  | Type | Description                          |
| ----- | ---- | ------------------------------------ |
| value | wei  | Amount of additional `abey` to stake |

***

### `withdraw`

A validator may withdraw unlocked tokens after the 2-week locking period. The full deposit state can be queried using the `getDeposit` function.

#### Parameters

| Name  | Type          | Description                           |
| ----- | ------------- | ------------------------------------- |
| value | uint256 (wei) | Amount of unlocked tokens to withdraw |

***

### `getDeposit`

Retrieves the deposit balance of a validator. Deposits exist in three states:

* **staked**: Tokens actively staked and eligible for rewards
* **locked**: Tokens canceled but still in the lock period
* **unlocked**: Tokens available for withdrawal

#### Parameters

| Name  | Type    | Description                     |
| ----- | ------- | ------------------------------- |
| owner | address | Validator deposit owner address |

#### Return Values

Returns a tuple of three `uint256` values: `(staked, locked, unlocked)`

| Name     | Type    | Description                      |
| -------- | ------- | -------------------------------- |
| staked   | uint256 | Amount currently staked          |
| locked   | uint256 | Amount canceled but still locked |
| unlocked | uint256 | Amount available for withdrawal  |

***

### `delegate`

Users who do not operate a validator node may delegate their tokens to an existing validator to earn staking rewards.

If a validator’s own deposit is less than **20,000 ABAY**, delegators will not receive rewards because the validator will not be elected.

#### Parameters

| Name   | Type    | Description                                 |
| ------ | ------- | ------------------------------------------- |
| holder | address | Address of the validator being delegated to |
| value  | wei     | Amount of `abey` delegated                  |

***

### `undelegate`

A delegator may cancel a portion of their delegated stake. The canceled amount is locked for approximately **2 weeks** before it becomes withdrawable.

#### Parameters

| Name   | Type    | Description                               |
| ------ | ------- | ----------------------------------------- |
| holder | address | Validator address                         |
| value  | uint256 | Amount of delegated stake to unlock (wei) |

***

### `withdrawDelegate`

Delegators may withdraw unlocked tokens after the lock period. The delegation balance can be queried using the `getDelegate` function.

#### Parameters

| Name   | Type    | Description                           |
| ------ | ------- | ------------------------------------- |
| holder | address | Validator address                     |
| value  | uint256 | Amount of unlocked tokens to withdraw |

***

### `getDelegate`

Returns the delegation balance of a delegator. The balance states are identical to `getDeposit`.

#### Parameters

| Name   | Type    | Description                   |
| ------ | ------- | ----------------------------- |
| owner  | address | Owner of the delegated tokens |
| holder | address | Validator address             |

#### Return Values

Returns a tuple of three `uint256` values: `(staked, locked, unlocked)`

| Name     | Type    | Description                                    |
| -------- | ------- | ---------------------------------------------- |
| staked   | uint256 | Amount currently delegated and earning rewards |
| locked   | uint256 | Amount canceled but still locked               |
| unlocked | uint256 | Amount available for withdrawal                |


---

# Agent Instructions: 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.abey.com/dpos/staking_contract.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.
