# Navigators Season 2: Growth Grants Proposal Template
## Title
Auro Wallet :Mina Custom token's are coming!
## Project Background
Auro Wallet is an open source wallet on the Mina Protocol, support mina transfer, staking, zkApp interaction and other features.
Currently mina will release the token standard. As a wallet, we need to support the token standard as soon as possible so that users can view token assets and transfers conveniently and quickly.
We plan to support the asset display, transfer and token management (display, hide) feature of mina token. The token standard we will be building for is [mina fungible token](https://github.com/MinaFoundation/mina-fungible-token), which is also the token standard currently promoted by mina.
## Proposal Overview
**Problem:**
Custom tokens are an important feature of the chain. Although the Mina token standard will be released, no wallets currently support them.
**Solution:**
Auro will add support for custom tokens in both chrome extension & mobile App. Users can send, receive and see history of custom tokens.
The details of the token standard supported are as follows:
- [Mina fungible token](https://github.com/MinaFoundation/mina-fungible-token): standard token asset display, transfer, display and hide.
- [Contract](https://github.com/o1-labs/o1js/blob/main/src/lib/mina/token/token-contract.ts): standard asset display, display and hide
**Impact:**
- Users can easily view token balances and details, as well as perform operations such as transfers and payments.
- Existing or new applications can benefit from this feature.
**Audience:**
All Mina token holders. All Auro Wallet users who use tokens on the Mina.
## Architecture & Design
### **Detailed Design/Architecture:**

There are mainly client-side (including mobile-apps and chrome-extension, which are used as extension below) and server-side.
Users do not need to add tokens manually. The current token assets come from the daemon node.Daemon node requirements for returning tokens assets are (need to inherit or implement the [basic token contract](https://github.com/o1-labs/o1js/blob/main/src/lib/mina/token/token-contract.ts). Users can manage the returned assets (whether they are displayed on the page, does not affect the actual asset changes) and transfer token assets.See below for details.
The following changes are expected to the architecture/components:
#### The client-side:
- **UI**
- Display mina and all token assets balance
- Display the token information of the user, including icon symbol, tokenId, balance, amount, currency.
- Display user token transaction records
- The transfer page supports part and all transfer of main currency and tokens
- **Extension Background**
- Manage the token information configured by the user, such as hide and display token
- Handle requests from the UI, including sign transactions, broadcast, loop transaction status, etc.
#### The server-side:
- **Daemon node service**
- Return mina and token assets balances.
- Return token pending-transaction records.
- Return token information, such as symbol, publicKey, etc.
- **Token build service**
- Mainly used to process the transfer token information submitted by extension, package params to zkCommand, and then return to extension, for sign and broadcast. This server is used because some security of chrome and android do not support o1js (shareArrayBuffer is disabled for security reasons), so o1js cannot be used on chrome extension and mobile app. It can only be implemented by external zkApp or service. Considering the experience and compatibility, the service is introduced into o1js as a bridge for extension and mobile-apps to use o1js.(Only token transfers need to use this service, mina transfers do not need. mina transfer only need mina-signer.)
- **Archive node service**
- Get token transaction records from archive-node through tokenId and user-publickey, and return to the extension
**Vision:**
Auro Wallet’s vision is to be the favorite wallet for Mina Protocol users and developers, and create more possibilities together with Mina.
**Existing Work :**
https://github.com/aurowallet/auro-wallet-browser-extension
https://github.com/aurowallet/auro-wallet-mobile-app
**Production Timeline :**
Currently in the development stage, it is expected to be released in June.
## Budget & milestones
- **Deliverables**:
- The extension supports custom token asset display and transfer.
- Mobile App supports token asset display and transfer.
- Both include test cases.
- **Mid-Point milestones:**
- Token-building service completed
- Token transfer work well in the extension.
- Token building service performance test completed
- Token transaction record
- **Project Timeline :** 5 weeks
- Extension support token: 3 weeks
- Extension develop token feature.
- Token build service.
- token transaction history.
- Mobile App support token: 2 weeks
- **Budget Requested :**
23000 MINA
- **Budget Breakdown:**
- Product Manager: 1 Product Manager * 1 weeks * 30 hours per week * 30 MINA/hour = 900 MINA
- UI/UX: 1 Designer * 1 weeks * 30 hours per week * 30 MINA/hour = 900 MINA
- Front-end/Back-end developer: 2 engineers * 5 weeks * 40 hours per week * 45 MINA/hour = 18000 MINA
- Operation and maintenance: 1 engineer * 1 week * 30 hours per week * 30 MINA/hour = 900 MINA
- Backend server and other costs: 2300 MINA
- **Wallet Address:**
B62qpDuvZmpWkt4hVqUvWQsHCw2F1hY2QXQg1dK5T8Er1313FQVAMaQ
## Team Info
- **Proposer Github**:
- https://github.com/wjdfx
- **Proposer Experience**:
- We have extensive experience in blockchain development and have developed auro-wallet.
- **Team Members**:
- https://github.com/wjdfx
- https://github.com/lvshaoping007
- https://github.com/icedev5
- https://github.com/sugarT365
- https://github.com/lzg0321
- **Achievements**:
- https://github.com/aurowallet/auro-wallet-browser-extension
- https://github.com/aurowallet/auro-wallet-mobile-app
- https://github.com/aurowallet/mina-provider
## Risks & Mitigations
- What risks or dependencies do you foresee with building this project ?
- o1js needs to be smaller than 4 MB (required by Firefox).
- ShareArraybuffer used by o1js requires the runtime environment to support coep and coop, but the extension side does not support this environment.
- The token standard has not been fully determined, and the development progress will change with the progress of the token standard.
- What are your migtigations if any?
- Use the server to build a token script, that is, start a backend service. The extension and mobile app submit the build parameters to the server. The server packages the transaction and returns the transaction body to be signed. After the extension and mobile app verify that the returned transaction information is the same as the information submitted locally, they sign and broadcast.
- Split functional modules to reduce functional coupling. After the token standard is released, minimize the affected parts.