# ASX

The ASX contract is a governance ERC-20 token with a total supply of 100000000 tokens. The whole supply is minted in time of deployment and the owner of tokens decides how to distribute them. The idea is to distribute them in the following way: 50% - for the staking rewards, 25% - to the team, 25% - to the treasury.

Tokens for the staking rewards are distributed on the StakePrizePool contract as the rewards for the stETH staking.

## Write methods description

### approve()

Sets `_amount` as the allowance of `_spender` over the caller’s tokens. Returns a boolean value indicating whether the operation succeeded.

Parameters:

<table><thead><tr><th width="176.33333333333331">Name</th><th width="156">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_spender</strong></td><td>address</td><td>A spender of tokens.</td></tr><tr><td><strong>_amount</strong></td><td>uint256</td><td>Amount that is allowed to spend.</td></tr></tbody></table>

### burn()

Destroys `_amount` of tokens from the caller.

Parameters:

<table><thead><tr><th width="173.33333333333331">Name</th><th width="160">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_amount</strong></td><td>uint256</td><td>Amount of tokens to destroy (to burn).</td></tr></tbody></table>

### burnFrom()

Destroys `_amount` of tokens from `_account`, deducting from the caller’s allowance.

Parameters:

<table><thead><tr><th width="177.33333333333331">Name</th><th width="160">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_account</strong></td><td>address</td><td>An address where tokens should be burned.</td></tr><tr><td><strong>_amount</strong></td><td>uint256</td><td>Amount of tokens to destroy (to burn).</td></tr></tbody></table>

Requirements:

* the caller must have an allowance for `_account`’s tokens of at least `_amount`.

### decreaseAllowance()

Atomically decreases the allowance granted to `_spender` by the caller.

Parameters:

<table><thead><tr><th width="211">Name</th><th width="143.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_spender</strong></td><td>address</td><td>A spender of tokens.</td></tr><tr><td><strong>_substructedValue</strong></td><td>uint256</td><td>A value that should be subtracted.</td></tr></tbody></table>

Requirements:

* `_spender` cannot be the zero address.
* `_spender` must have an allowance for the caller of at least `_substractedValue`.

### delegate()

Delegate votes from the sender to `_delegatee`.

Parameters:

<table><thead><tr><th width="140.33333333333331">Name</th><th width="111">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_delegatee</strong></td><td>address</td><td>A delegatee for whom all spender’s votes will be delegated.</td></tr></tbody></table>

### delegateBySig()

Delegates votes from the signer to `_delegatee`.

Parameters:

<table><thead><tr><th width="142.33333333333331">Name</th><th width="118">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_delegatee</strong></td><td>address</td><td>A delegatee for whom all spender’s votes will be delegated.</td></tr><tr><td><strong>_nonce</strong></td><td>uint256</td><td>A unique number that must be used only for one signature.</td></tr><tr><td><strong>_expiry</strong></td><td>uint256</td><td>Timestamp when a signature expires.</td></tr><tr><td><strong>_v</strong></td><td>uint8</td><td><code>_v</code> portion of signature.</td></tr><tr><td><strong>_r</strong></td><td>bytes32</td><td><code>_r</code> portion of signature.</td></tr><tr><td><strong>_s</strong></td><td>bytes32</td><td><code>_s</code> portion of signature.</td></tr></tbody></table>

### increaseAllowance()

Atomically increases the allowance granted to `_spender` by the caller.

Parameters:

<table><thead><tr><th width="229">Name</th><th width="164.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_spender</strong></td><td>address</td><td>A spender of tokens.</td></tr><tr><td><strong>_addedValue</strong></td><td>uint256</td><td>A value that should be added.</td></tr></tbody></table>

Requirements:

* `_spender` cannot be the zero address.

### initialize()

Allows to initialize the contract during the deployment.

Parameters:

<table><thead><tr><th width="222.33333333333331">Name</th><th width="100">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_name</strong></td><td>string</td><td>A name of the token.</td></tr><tr><td><strong>_symbol</strong></td><td>string</td><td>A symbol of the token.</td></tr><tr><td><strong>_cap</strong></td><td>uint256</td><td>Maximum supply of the token.</td></tr><tr><td><strong>_initialSupplyReceiver</strong></td><td>address</td><td>A receiver of token that will be minted during the deployment.</td></tr></tbody></table>

### permit()

Allows to create a new permit.

Parameters:

<table><thead><tr><th width="123.33333333333331">Name</th><th width="119">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_owner</strong></td><td>address</td><td>An owner of a permit.</td></tr><tr><td><strong>_spender</strong></td><td>address</td><td>A spender for whom a permit will be created.</td></tr><tr><td><strong>_value</strong></td><td>uint256</td><td>A number of tokens that can be spent using this permit.</td></tr><tr><td><strong>_deadline</strong></td><td>uint256</td><td>Timestamp when a permit expires.</td></tr><tr><td><strong>_v</strong></td><td>uint8</td><td><code>_v</code> portion of signature.</td></tr><tr><td><strong>_r</strong></td><td>bytes32</td><td><code>_r</code> portion of signature.</td></tr><tr><td><strong>_s</strong></td><td>bytes32</td><td><code>_s</code> portion of signature.</td></tr></tbody></table>

### transfer()

Moves `_amount` tokens from the caller’s account to `_to`. Returns a boolean value indicating whether the operation succeeded.

Parameters:

<table><thead><tr><th width="167.33333333333331">Name</th><th width="112">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_to</strong></td><td>address</td><td>A receiver of tokens.</td></tr><tr><td><strong>_amount</strong></td><td>uint256</td><td>Amount of tokens that should be transferred.</td></tr></tbody></table>

Requirements:

* `_to` cannot be the zero address.
* the caller must have a balance of at least `_amount`.

### transferFrom()

Moves `_amount` tokens from `_from` to `_to` using the allowance mechanism. `_amount` is then deducted from the caller’s allowance. Returns a boolean value indicating whether the operation succeeded.

Parameters:

<table><thead><tr><th width="178.33333333333331">Name</th><th width="160">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_from</strong></td><td>address</td><td>Who spends tokens.</td></tr><tr><td><strong>_to</strong></td><td>address</td><td>A receiver of tokens.</td></tr><tr><td><strong>_amount</strong></td><td>uint256</td><td>Amount of tokens that should be transferred.</td></tr></tbody></table>

## Read methods description

### DOMAIN\_SEPARATOR()

A domain separator defined according to EIP-712.

### allowance()

Returns the remaining number of tokens that the`_spender` will be allowed to spend on behalf of the owner through `_transferFrom`. This is zero by default. This value changes when `_approve`, or `_transferFrom`, or `_increaseAllowance`, or `_decreaseAllowance` are called.

Parameters:

| Name          | Type    | Description          |
| ------------- | ------- | -------------------- |
| **\_owner**   | address | An owner of tokens.  |
| **\_spender** | address | A spender of tokens. |

Return:

<table><thead><tr><th width="191.33333333333331">Name</th><th width="153">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_allowance</strong></td><td>uint256</td><td>Remaining number of tokens.</td></tr></tbody></table>

### balanceOf()

Returns the amount of tokens owned by the `_account`.

Parameters:

<table><thead><tr><th width="192.33333333333331">Name</th><th width="155">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_account</strong></td><td>address</td><td>An account whose balance to check.</td></tr></tbody></table>

Return:

<table><thead><tr><th width="191.33333333333331">Name</th><th width="155">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_balance</strong></td><td>uint256</td><td>Amount of tokens owned by the <code>_account</code>.</td></tr></tbody></table>

### cap()

Returns the cap on the token’s total supply.

Return:

<table><thead><tr><th width="188.33333333333331">Name</th><th width="163">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_cap</strong></td><td>uint256</td><td>The cap on the token’s total supply.</td></tr></tbody></table>

### checkpoints()

Get the `_pos`-th checkpoint for `_account`.

Parameters:

<table><thead><tr><th width="189.33333333333331">Name</th><th width="166">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_account</strong></td><td>address</td><td>An account to get a checkpoint.</td></tr><tr><td><strong>_pos</strong></td><td>uint32</td><td>A position of a checkpoint.</td></tr></tbody></table>

### decimals()

Returns the number of decimals used to get its user representation. For example, if `_decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` `(500 / 10 ** 2)`. Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value ERC-20 uses, unless this function is overridden.

Return:

<table><thead><tr><th width="129.33333333333331">Name</th><th width="90">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_decimals</strong></td><td>uint8</td><td>The number of decimals used to get its user representation.</td></tr></tbody></table>

### delegates()

Get the address `_account` is currently delegating to.

Parameters:

<table><thead><tr><th width="203">Name</th><th width="174.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_account</strong></td><td>address</td><td>An address to check.</td></tr></tbody></table>

Return:

<table><thead><tr><th width="206.33333333333331">Name</th><th width="170">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_delegate</strong></td><td>address</td><td>A delegate of an <code>_account</code>.</td></tr></tbody></table>

### getCurrentVotes()

Comp version of the `getVotes` method, with `uint96` return type. Gets the current balance of votes for the `_account`.

Parameters:

<table><thead><tr><th width="158.33333333333331">Name</th><th width="153">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_account</strong></td><td>address</td><td>An account where to check the balance of votes.</td></tr></tbody></table>

Return:

<table><thead><tr><th width="160.33333333333331">Name</th><th width="155">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_balance</strong></td><td>uint96</td><td>Current balance of votes for the <code>_account</code>.</td></tr></tbody></table>

### getPastTotalSupply()

Retrieve the `_totalSupply` at the end of `_blockNumber`. Note, this value is the sum of all balances. It is but NOT the sum of all the delegated votes!

Parameters:

<table><thead><tr><th width="181">Name</th><th width="127.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_blockNumber</strong></td><td>uint256</td><td>A block number to check the total supply for.</td></tr></tbody></table>

Requirements:

* `_blockNumber` must have been already mined.

Return:

<table><thead><tr><th width="177.33333333333331">Name</th><th width="132">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_totalSupply</strong></td><td>uint256</td><td>The <code>_totalSupply</code> at the end of <code>_blockNumber</code>.</td></tr></tbody></table>

### getPastVotes()

&#x20;Retrieve the number of votes for an `_account` at the end of `_blockNumber`.

Parameters:

<table><thead><tr><th width="161.33333333333331">Name</th><th width="118">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_account</strong></td><td>address</td><td>An account for which to check the number of votes.</td></tr><tr><td><strong>_blockNumber</strong></td><td>uint256</td><td>A block number where to check the number of votes for an account.</td></tr></tbody></table>

Requirements:

* `_blockNumber` must have been already mined.

Return:

<table><thead><tr><th width="136.33333333333331">Name</th><th width="102">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_balance</strong></td><td>uint256</td><td>The number of votes for an <code>_account</code> at the end of <code>_blockNumber</code>.</td></tr></tbody></table>

### getPriorVotes()

Comp version of the `getPastVotes` method, with `uint96` return type. Retrieve the number of votes for an `_account` at the end of `_blockNumber`.

Parameters:

<table><thead><tr><th width="164.33333333333331">Name</th><th width="110">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_account</strong></td><td>address</td><td>An account for which to check the number of votes.</td></tr><tr><td><strong>_blockNumber</strong></td><td>uint256</td><td>A block number where to check the number of votes for an account.</td></tr></tbody></table>

Requirements:

* `_blockNumber` must have been already mined.

Return:

<table><thead><tr><th width="140.33333333333331">Name</th><th width="106">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_balance</strong></td><td>uint96</td><td>The number of votes for an <code>_account</code> at the end of <code>_blockNumber</code>.</td></tr></tbody></table>

### getVotes()

Gets the current votes balance for an `_account`.

Parameters:

<table><thead><tr><th width="152.33333333333331">Name</th><th width="97">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_account</strong></td><td>address</td><td>An account where to check the number of votes.</td></tr></tbody></table>

Return:

<table><thead><tr><th width="152.33333333333331">Name</th><th width="127">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_balance</strong></td><td>uint256</td><td>The current balance of votes for an <code>_account</code>.</td></tr></tbody></table>

### name()

Returns the name of the token.

Return:

<table><thead><tr><th width="131.33333333333331">Name</th><th width="145">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_name</strong></td><td>string</td><td>The name of the token.</td></tr></tbody></table>

### nonces()

Returns the number of used nonces for an `_owner`.

Parameters:

<table><thead><tr><th width="140.33333333333331">Name</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_owner</strong></td><td>address</td><td>A user for whom to check the number of nonces.</td></tr></tbody></table>

Return:

<table><thead><tr><th width="143.33333333333331">Name</th><th width="132">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_amount</strong></td><td>uint256</td><td>The number of nonces for an <code>_owner</code>.</td></tr></tbody></table>

### numCheckpoints()

Get number of checkpoints for `_account`.

Parameters:

<table><thead><tr><th width="126.33333333333331">Name</th><th width="128">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_account</strong></td><td>address</td><td>An account for whom to check the number of checkpoints.</td></tr></tbody></table>

Return:

<table><thead><tr><th width="164.33333333333331">Name</th><th width="156">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_amount</strong></td><td>uint32</td><td>The number of checkpoints for <code>_account</code>.</td></tr></tbody></table>

### symbol()

Returns the symbol of the token, usually a shorter version of the name.

Return:

<table><thead><tr><th width="180.33333333333331">Name</th><th width="156">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_symbol</strong></td><td>string</td><td>The symbol of the token.</td></tr></tbody></table>

### totalSupply()

Returns the amount of tokens in existence.

Return:

<table><thead><tr><th width="183">Name</th><th width="136.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>_totalSupply</strong></td><td>uint256</td><td>The amount of tokens in existence.</td></tr></tbody></table>


---

# 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.asymetrix.io/resources/developers-docs/asx.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.
