# Assignment 2: Create an “actual” Token

The goal of this assignment is to create your first Aleo token following the current community adopted token standard: ARC21.

Following the specifications in chapter 5.4, your goal is to write a program managing such a token: by handling the registration and initial coin offering of the token. It must import the `token_registry.aleo` program:

```rust
import token_registry.aleo;
```

### Learning Objectives

By completing this assignment, you will:

* Understand how to use the token community standard
* Write your first DeFi program

### Tasks

Your program must include the following transitions:

1. `initialize`: it is responsible for registering the token, calling `token_registry.aleo/register` transition. Your token metadata such as token ID, max supply, name... should all be defined as constants at the beginning of your program.

2. `mint`: it is the transition called by users directly to mint the token  `token_registry.aleo/mint_public`. This minting should be allowed only after a certain block height, defined as a constant `MINT_START_HEIGHT`. Upon minting, the minter should transfer publicly Aleo credits to a `TREASURY` address defined as a constant. `MINT_PRICE` constant will define the price to mint per token.

3. `update_admin`: a transition to update the token admin with the address provided as an input, it calls `token_registry.aleo/update_token_management` to do so.

4. Also, add as a comment at the end of the program the command that will be executed to initialize the token:

```bash
leo execute initialize #...
```
