# near-multicall testing guide
[TOC]
## What's a DAO?
Near-multicall is a tool that serves DAOs, so we'll start by explaining DAOs first.
**DAO** stands for **D**ecentralized **A**utonomous **O**rganization, and is essentially a blockchain account governed by a group of people using rules set by a smart contract. A member can propose to do something, like "Donate 10 $NEAR to charity" or "Buy this NFT for 1 $NEAR". Other DAO members can vote "yes" or "no". If the proposal successfully passes voting, then this is where the true value of DAOs shines: members don't have to trust a person to correctly execute the proposal actions. Instead the smart contract does it, which makes the process trustless.
We put emphasis on code and smart contracts, but luckily you don't have to be a coder to make a DAO, there are projects that allow you to create your own DAO in few clicks: [SputnikDAO](https://v2.sputnik.fund/#/) and [AstroDAO](https://astrodao.com/) are such examples on NEAR protocol.
## What's near-multicall?
Near-multicall is a tool for DAOs to create and execute arbitrary actions in one single proposal. Example: a DAO has $USD tokens and wants to buy NFTs, which are listed for $NEAR tokens. Currently the DAO will have to make a proposal for each step:
1. Exchange $USD tokens for $wNEAR tokens
2. convert $wNEAR to $NEAR
3. Buy the NFT
The DAO members will have to agree and vote 3 times, even though all steps serve one purpose (to buy the NFT). With Near-multicall this can be done in one proposal.
With this test sprint, we'd like to know about bugs or feature suggestions to improve our UX. You can submit feedback [**here**](https://github.com/near-multicall/ui/issues/new/choose).
Additionally for curious developers: we have a bug bounty on [our contracts](https://github.com/near-multicall/contracts) of up to 100 $NEAR for each critical issue that leads to: stealing or permanent freezing of funds by non-admins, or non-admins triggering any malicious logic on behalf of the contract. Other critical issues can be eligible and will be reviewed on case-by-case basis.
## Setting up near-multicall
#### (a) Create a DAO:
For the purpose of this guide, we'll be using SputnikDAO on testnet:
1. Get a NEAR testnet wallet: https://wallet.testnet.near.org/
2. Go to: https://testnet-v2.sputnik.fund/#/
3. Sign in with the wallet you created: ![](https://i.imgur.com/P3IkSxP.png)
4. Click "create new DAO": ![](https://i.imgur.com/Gj8J6Zg.png)
5. Fill out DAO info: ![](https://i.imgur.com/S4IdaeL.png)
In the above picture:
- **Name**: This also determines the DAO address. If we choose "my-test-dao" as DAO name, then DAO address will be "my-test-dao.sputnikv2.testnet". This address works like a normal NEAR account: you can send funds to the DAO from your wallet, the DAO can interact with platforms on NEAR such as Paras or Ref-finance and it can hold several tokens as well as NFTs.
- **Purpose**: any text works here, it does not affect how the DAO will work.
- **Council member**: Your testnet wallet address goes here. This makes you the first member in the DAO.
- **Amount to tranfer**: This is the aomunt of $NEAR tokens you'll be giving to the DAO upon its creation. We suggest 20.
6. Click submit and confirm the transaction:
Upon success you'll find your DAO page by modifying the following link to have its address:
https://testnet-v2.sputnik.fund/#/DAO_ADDRESS
for example:
https://testnet-v2.sputnik.fund/#/my-test-dao.sputnikv2.testnet
we'll use the DAO page to create and vote on proposals, so leave it open on a separate browser tab to use it later.
7. Done! :confetti_ball:
::: info
:round_pushpin:**Note:** If you need assistance with this step, please reach out in [**LNC Telegram**](https://t.me/LearnNEARClub) or [**near-multicall discord**](https://discord.gg/wc6T6bPvdr)
:::
#### (b) Get a near-multicall instance for your DAO:
1. Go to https://multicall.app/ and login with your wallet.
2. Enter the full DAO address in the DAO selector field: ![](https://i.imgur.com/ObGGPWV.png)
Always make sure your DAO address is there during all tests.
3. Create a multicall instance for your DAO: ![](https://i.imgur.com/2cWznPT.gif)
4. go to DAO page (section (a) step 6): you should find a proposal that says: "create multicall instance for this DAO at ...". Vote "yes" on this proposal.
5. go back to https://multicall.app/#/dao and enter DAO address in DAO selector again (like step 2). If you see the following then setup was successful :confetti_ball: ![](https://i.imgur.com/UgC1Mea.png)
:beetle: Seen any bugs? report [<u>**HERE**</u>](https://airtable.com/shrvUuMJzaV5c39zo)
:bulb: Got a suggestion? please use this [<u>**FORM**</u>](https://airtable.com/shreafKyfPcI17IyC)
## Create proposals with multicall
- First proposal will mint 2 tokens
In this test we're going to mint some $USDC and $DAI. If successful, the tokens will appear on your testnet wallet. Let's start:
1. go to: https://multicall.app/#/app
2. enter the DAO address: ![](https://i.imgur.com/ObGGPWV.png)
3. Let's use our first card: ![](https://i.imgur.com/rEfWSDM.gif)
4. fill card information with the following:
Contract address: `nusdc.ft-fin.testnet`
Function name: `mint`
Function arguments (!!! replace YOUR_WALLET_ADDRESS):
```json
{
"account_id": "YOUR_WALLET_ADDRESS",
"amount": "123456789"
}
```
Allocated gas: choose a number between 7 and 10. (i.e. `7.5 Tgas`)
Attached deposit: `0 yocto`
![](https://i.imgur.com/wEFKBxm.png)
5. Second card:
So the previous card was for minting tokens, the second card is just a trick for the wallet to display our token balances
Contract address: `nusdc.ft-fin.testnet`
Function name: `ft_transfer`
Function arguments (!!! replace YOUR_WALLET_ADDRESS):
```json
{
"receiver_id": "YOUR_WALLET_ADDRESS",
"amount": "123456789"
}
```
Allocated gas: choose a number between 7 and 10. (i.e. `7.5 Tgas`)
Attached deposit: `0 yocto`
![](https://i.imgur.com/X5EZbD9.png)
6. Mint a second token:
In steps 4 & 5 we worked on cards that will mint $USDC, so now let's do the same for a second token $USDT. The UI has a "clone" feature so we don't repeat the work all over again. On the new cards we just change the address from `nusdc.ft-fin.testnet` to `nusdt.ft-fin.testnet`
![](https://i.imgur.com/voDbySF.gif)
7. Almost done! we just have to propose our multicall to the DAO
![](https://i.imgur.com/cKDU1yl.png)
8. go to DAO page and vote yes on the proposal:
![](https://i.imgur.com/qq1pnI8.png)
7. Done! Can you see the tokens on your wallet? If you do, congrats, you did it! :confetti_ball:
:beetle: Seen any bugs? report [<u>**HERE**</u>](https://airtable.com/shrvUuMJzaV5c39zo)
:bulb: Got a suggestion? please use this [<u>**FORM**</u>](https://airtable.com/shreafKyfPcI17IyC)
---
If you made it this far, thank you! We appreciate you taking the time to test our project. You can use this [<u>**FORM**</u>](https://airtable.com/shrIXbJCiDgfCRscj) to share your experience, and any general thoughts with us!
---
**Project links:** [**Website**](https://multicall.app/) | [**Github**](https://github.com/near-multicall) | [**Discord**](https://discord.gg/wc6T6bPvdr) | [**Twitter**](https://twitter.com/near_multicall)