# Juno CW20 -> TokenFactory ## Background - Juno v12 contains a permission-less tokenfactory - cost 1 Juno to make a Denom, governance controlled - going on testnet early/mid December, mainnet launch early/mid January ## Considerations - With this launching, new daos/devs will want to use the tokenfactory - This means we need to get ahead on migrating to the new factory to improve dev & legacy code experience ## Reasons to migrate - Native denom is easier in wasm (info.amount instead of Cw20 hooks, can just use --amount in CLI / keplr) - Sending via CLI is easier with `junod tx bank send key addr 100factory/addr/name` - MUCH better/more efficient query via x/bank - easier to Transact natively via CLI without wasm executing msgs - Auto shows up on Mintscan & keplr - Easier for snapshots/airdrops (via `junod export`, rather than paginated CW20 query) - x/bank module is more tested [every chain] than CW20 [20 chains] - only other chain with token factory = osmosis and is permission wasm. Doesn't get the full benefit # Juno working Issue - https://github.com/CosmosContracts/juno/issues/334 --- # Migration of Liquid Tokens ### 1) Airdrop Style - https://github.com/Reecepbcups/cw20-to-native - Not ideal for most, but is _A_ solution - This script queries the CW20s on the network, the holders, and the amounts - Then it produces a file of those as the new denomination to mint. (can query from other chains easily) - Contract developers end support for using CW20 on the old network and ensure only the new factory is used. makes the old CW20 worthless - Could launch solution #2 on that chain if it support permissionless cosmwasm - Needs: - make both scripts in the same language. (1 bash one python right now) ### 2) CW20-to-tokenfactory - https://github.com/Reecepbcups/cw20-to-tokenfactory - `cw20_burn_balance` is a more ideal solution IMO - Developer launches the contract & funds it with some of the new factory tokens - user deposits their CW20 into the contract - The contract sends a 1-1 amount of the native tokens it has to the user who interacted - (There is also an option to make this contract the admin/minter if you would like) - The contract burns the CW20 it was sent - If you need multiple contracts to mint, use CW1->tokenfactory mint - Needs: - UI front end, clean up the contract, ensure there are no vulnerabilities - DAODAO may integrate this in their frontend after v2 launch ### 3) CW20 migration conrtact - Requires you/DAODAO to be the admin of said contract - Create the tokenfactory denom, and deposit amount = the total CW20s in your contract - Write a CW20 contract which on migrate, burns all users tokens and bank sends them the factory token. If not enough bank balance, fail the migrate - Issue - DAODAO well now it has a bunch of tokens for staking tokens, so we have to migrate the staking contract, etc. 2nd hand effects. migrate Cw20 & staking contract & users dont have to touch ### 4) IBC'ed CW20s (terra2 for example, YFoundry) - when you IBC CW20 -> another chian, it makes a native denom. So may have to do the burn contract on the native chain (osmosis/terra2) since x/bank can't burn standard unless we sent to null addr # DAODAO (Staked) Tokens - **CHANGE DEFAULTS FROM CW20 TO TOKENFACTORY AS SOON AS POSSIBLE IN UI** - get daodao to native tokens - Migrating a DAO's voting right tokens to the new native token - Ekez, Jake, Reece - Migration: pre-fill the contract funds with the factory/ denom, migrate then convert the bonded tokens -> the new factory denom #### 1) CW20 staked migrate auto. Similar to #3 above - check total staked cw20, ensure the dao has the same amount of current factory/ tokens - possible to migrate cw20 stake -> native (burn cw20-> mint/give the balance to the new factory/ which are in the daos funds) #### 2) Vote module Middleware (Ekez): - IMO this feels too half way solution - vote module for DAOs which are cw20s, make prop to set VP based on number of staked CW20 + number of native tokens (KLEO may have done?). - Then, UI when someone is staking is always native UI: if someone has liquid CW20, we give them popup to convert to TFactory denom - existing stakers work, new stakers use tokenfactory - when they unstake, the UI will prompt to get in native factory from the CW20 #### 3) CW20 Wrapper - CW20 native token wrapper, migrate CW20 contract. Move all the tokens over to the new native, burn old - backwards compatable, native still managed by cw20 contract functions. best of both, but still a half way solution --- # AMM Pools - Migration of AMM Liquidity Pools Consensus right now is just to require the users to unbond, and rebond the new tokens. Not sure there is much we can do. Is a one-time 14-day hit which sucks Protocols may want to increase native fee pay/airdrop some for the rewards downtime pain for a few months, but best feature in the future rename LP to NetaCW20-Osmo or something?