# Wallet Integration for Mesa Frontend
## Short intro
Mesa is a framework for doing decentralized token sales, a IDO Plattform, on ethereum. We are currently working on a MVP wich has two sales mechanisme, a fixed price sale and a auction called Fairsale. The MVP has a interface for the investors, so people investing in a project/token.
## Code
Mesa Fe: https://github.com/cryptonative-ch/mesa-interface
Mesa SC: https://github.com/cryptonative-ch/mesa-smartcontracts/
Mesa JS SDK: https://github.com/cryptonative-ch/mesa-js
Mesa Subgraph: https://github.com/cryptonative-ch/mesa-subgraph
Deployed Contracts: xdai/rinkeby https://mesa-1.gitbook.io/mesa/developers-1/smart-contracts/deployed-contracts
More Info: https://mesa-1.gitbook.io/
Kontakt: @martinkrung on keybase or mk@cryptonative.ch or @martinkrung on twitter
## To see this running, use this script
```
echo 'This installs a local instance of the mesa-subgraph and add some date to it, this uses docker'
git clone https://github.com/cryptonative-ch/mesa-subgraph
cd mesa-subgraph/
yarn install
yarn explore-local &
cd ..
echo 'Wait for the interface to be installed..'
git clone https://github.com/cryptonative-ch/mesa-interface
cd mesa-interface/
yarn install
yarn start:subgraph &
echo 'Mesa Interface now running on http://localhost:3000/'
```
## Project State
Dev Team is working on subgraph integration on the FE. What's missing is the communication from the user to the chain. We also work on a Mesa javascript SDK right now. We have a xDai strategy first.
## What has to be done
We need an implementation of a wallet for metamask and wallet connector. We will launch on xDai and think we will add new networks soon. Network switcher should be ready to use.
Best would be to use similar wallet code from swapr (https://swapr.dev https://swapr.eth.link code https://github.com/levelkdev/dxswap-dapp/
. Swapr is also a project made by dxDao.
Design for wallet interaction:
https://www.figma.com/file/7vH0nZB72tizFbhT7gtizo/Mesa-MVP?node-id=408%3A170
## List of features to implement
### Must have
- Wallet integration with metamask
- Wallet integration with wallet connect
- Follow the UX design from figma (For tx/wallet states, rest is mostly done)
- Standard network is xDai, Contracts here: (https://mesa-1.gitbook.io/mesa/)
- Make rinkeby as a second network which can be configured off/on (Rinkeby is our test network)
- Show/Detect pending tx on low gas tx which may be stuck for some time
- Detection of wrong networks
- Implement interaction on the fixed price sale and FairSale single view
- If you miss a specific design, please make variation of an existing one
- Write test for the written code
- Small documentation which function to call in the FE
### Nice to have, make some options for this in your offer
- Use of Metamask Network Switcher API
- Modular Approach to use the same wallet connector on different products
- Abstraction layer between wallet connector, design and functionality for specific smart contract on a product
- Use language keys for internationalization (It's integrated, but not used everywhere)
# Functions to call on the smart contracts
There are two sales in the MVP, a fixed price sale and an auction, called FairSale.
In the MVP only with this both contracts has to be interacted. The MVP only covers the need for persons taking part in a sale. For the rest there is no interface yet.
## FixedPrice
Smart Contract for FixedPrice: https://github.com/cryptonative-ch/mesa-smartcontracts/blob/main/contracts/sales/FixedPriceSale.sol
For a FixedPrice Sale there are this 3 function calls to be made from the investor facing interface.
### buyTokens
If an investor buys a token, he makes an order but does not get the token back yet. Only after the sale has closed and the threshold is reached, the investor will be able to claim the token. If the threshold is not reached, the invested amount has to be withdrawn afterwards.
https://github.com/cryptonative-ch/mesa-smartcontracts/blob/26a59272a7014c41dbb88616b9fa0736ef1a94b8/contracts/sales/FixedPriceSale.sol#L171
### claimTokens
This is the function users call to claim the bought token after the sale has finished.
https://github.com/cryptonative-ch/mesa-smartcontracts/blob/26a59272a7014c41dbb88616b9fa0736ef1a94b8/contracts/sales/FixedPriceSale.sol#L231
### releaseTokens
This is the function users call to claim to get the invested token back if the threshold has not been hit.
https://github.com/cryptonative-ch/mesa-smartcontracts/blob/26a59272a7014c41dbb88616b9fa0736ef1a94b8/contracts/sales/FixedPriceSale.sol#L208
This info is also here: https://app.gitbook.com/@mesa-1/s/mesa/developers-1/smart-contracts/fixed-price-sale
## Fairsale
Fairsale interaction is little complex than fixed price:
Smart Contract for Fairsale: https://github.com/cryptonative-ch/mesa-smartcontracts/blob/main/contracts/sales/FairSale.sol
### placeOrders
The investor places a bid at a certain price. One investor can place several order at a different price. At this point it's not clear if he/she will get tokens at the end.
https://github.com/cryptonative-ch/mesa-smartcontracts/blob/26a59272a7014c41dbb88616b9fa0736ef1a94b8/contracts/sales/FairSale.sol#L205
### cancelOrders
A bid can be canceled during the sale. Token are returned to the biders wallet.
https://github.com/cryptonative-ch/mesa-smartcontracts/blob/26a59272a7014c41dbb88616b9fa0736ef1a94b8/contracts/sales/FairSale.sol#L258
### claimFromParticipantOrder
After the auction is finished, the user can withdraw either his unfilled bid or the bought token.
https://github.com/cryptonative-ch/mesa-smartcontracts/blob/26a59272a7014c41dbb88616b9fa0736ef1a94b8/contracts/sales/FairSale.sol#L465
This info is also here: https://app.gitbook.com/@mesa-1/s/mesa/developers-1/smart-contracts/fairsale-auction