This is the README from the
juice-v3-migration GitHub Repository.
Since the v3 contract went live recently so in order for existing projects to migrate their treasuries & project tokens to V3 we have come up with some migration tools in the form of smart contracts that'll help to make this process efficient & seamless for the users
First up we have the allocators by which v1 & v2 project owners can migrate their treasuries to v3, so we basically use a couple of custom allocator implementations for both v1 & v2, so inside
allocate we fetch the
primary terminal and add to its balance with
Next up we have the project token deployer for v1 & v2 project token holders to migrate to v3, so to start things project owners can deploy a
v3 token for their project by calling
deploy on the v3 token deployer which will also call
setFor to attach the token to the project.
After the token is deployed token holders can call
migrate to send their v1/v2 claimed & unclaimed token balances & get the appropriate v3 tokens minted to them.
Another interesting thing is since the migration logic lies in the v3 token contract in order to make sure that v3 redemptions are smooth we calculate the
total supply of v3 tokens + (v1 total supply - v1 token balance in v3 contract i.e the balances that have been already migrated) + (v2 total supply - v2 token balance in v3 contract i.e the balances that have been already migrated)
An understanding of how the Juicebox protocol's distributions with allocations & project token economics is an important prereq to understand the migration process.
For migration of the treasuries
V2Allocator contracts need to be deployed & then attached as an
allocator to the respective v1 & v2 projects.
For migration of the project tokens
JBV3TokenDeployer will be deployed and then v3 project owners can deploy their tokens, so that the token holders can call
The deployment process is pretty straightforward with deployer scripts for the
Quick all-in-one command:
git clone https://github.com/jbx-protocol/juice-v3-migration && cd juice-v3-migration && foundryup && git submodule update --init --recursive --force && yarn install && forge test --gas-report
To get set up:
- Install Foundry.
curl -L https://foundry.paradigm.xyz | sh
- Install external lib(s)
git submodule update --init --recursive --force && yarn install
- Run tests:
- Update Foundry periodically:
Configure the .env variables, and add a mnemonic.txt file with the mnemonic of the deployer wallet. The sender address in the .env must correspond to the mnemonic account.
The deployments are stored in ./broadcast
See the Foundry Book for available options.