# Hord Token

## Code

`HordToken.sol`

## Address

`HordToken` is deployed at [`0x43A96962254855F16b925556f9e97BE436A43448`](https://etherscan.io/address/0x43A96962254855F16b925556f9e97BE436A43448) on the Ethereum mainnet.

## Overview

Implementation of the `IERC20` interface.

This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using `_mint`. For a generic mechanism see `ERC20PresetMinterPauser`.

TIP: <https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226>\[How to implement supply mechanisms].

We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of `ERC20` applications.

Additionally, an `Approval` event is emitted on calls to `transferFrom`. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification.

Finally, the non-standard `decreaseAllowance` and `increaseAllowance` functions have been added to mitigate the well-known issues around setting allowances. See `IERC20-approve`.

## Events

### Approval

<pre class="language-solidity"><code class="lang-solidity"><strong>event Approval(address indexed owner, address indexed spender, uint256 value);
</strong></code></pre>

Emitted each time an approval occurs via \_approve

### Transfer

```solidity
event Transfer(address indexed from, address indexed to, uint256 value);
```

Emitted each time a transfer occurs via \_[transfer](https://docs.uniswap.org/protocol/V2/reference/smart-contracts/Pair-ERC-20#transfer-1) or \_[burn](https://docs.uniswap.org/protocol/V2/reference/smart-contracts/pair#burn-1).

## Read-Only Functions

### name

```solidity
function name() external pure returns (string memory);
```

* Returns the name of the token. \[`Hord Token`]

### symbol

```solidity
function symbol() external pure returns (string memory);
```

* Returns the symbol of the token, usually a shorter version of the name. \[`HORD`]

### decimals

```solidity
function decimals() external pure returns (uint8);
```

* Returns the number of decimals used to get its user representation. \[`18`]

### totalSupply

```solidity
function totalSupply() external view returns (uint);
```

* Returns the total amount of HORD tokens.

### balanceOf

```solidity
function balanceOf(address account) external view returns (uint);
```

* Returns the amount of tokens owned by an `account` address.

### allowance

```solidity
function allowance(address owner, address spender) external view returns (uint256);
```

* Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through `transferFrom`.

## State-Changing Functions

### approve

```solidity
function approve(address spender, uint256 amount) external returns (bool);
```

* Sets `amount` as the allowance of `spender` over the caller's tokens.
* Returns a boolean value indicating whether the operation succeeded.
* Emits an [`Approval`](#approval) event.

### transfer

```solidity
function transfer(address recipient, uint256 amount) external returns (bool);
```

* Moves `amount` tokens from the caller's account to `recipient`.
* Returns a boolean value indicating whether the operation succeeded.
* Emits a [`Transfer`](#transfer) event.

### transferFrom

```solidity
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
```

* Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.
* Returns a boolean value indicating whether the operation succeeded.
* Emits a [`Transfer`](#transfer) event.

### burn

```solidity
function burn(uint amount) public virtual;
```

* Destroys `amount` tokens from `msg.sender`, reducing the total supply.
* Emits a [`Transfer`](#transfer) event.

### increaseAllowance

```solidity
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool)
```

* Atomically increases the allowance granted to `spender` by the caller.
* This is an alternative to `approve` that can be used as a mitigation for problems described in `IERC20-approve`.
* Emits an [`Approval`](#approval) event indicating the updated allowance.

### decreaseAllowance

```solidity
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool)
```

* Atomically decreases the allowance granted to `spender` by the caller.
* This is an alternative to `approve` that can be used as a mitigation for problems described in `IERC20-approve`.
* Emits an [`Approval`](#approval) event indicating the updated allowance.
