Arrakis Developer Docs
  • Developer Documentation
  • Arrakis V2 Core
    • Overview
    • ArrakisV2
    • ArrakisV2Factory
    • ArrakisV2Resolver
    • ArrakisV2Helper
    • Contract Addresses
  • Arrakis V2 PALM
    • Overview
    • PALMTerms
    • PALMManager
    • Contract Addresses
  • Tutorials
    • Tutorial #1
      • Setup Your Environment
      • Fund Your Address
      • Deploy Your ArrakisV2 Vault
      • Transfer DAI & WETH to Vault
      • Set Vault Liquidity Positions
      • Track Your Position
      • Shift Vault Liquidity Positions
      • Withdraw Your Tokens
  • Other
    • Arrakis V1 Docs (old)
    • Non-technical Overview
Powered by GitBook
On this page
  1. Tutorials
  2. Tutorial #1

Deploy Your ArrakisV2 Vault

PreviousFund Your AddressNextTransfer DAI & WETH to Vault

Last updated 2 years ago

Now we run a command to initialize a private ArrakisV2 Vault on the DAI/WETH token pair and deposit an initial 1 DAI into the vault:

yarn tutorial1-init --network goerli

Congrats! You instantiated a private ArrakisV2 vault. At the end of the script you should see the address of your newly created DAI/WETH vault:

Copy and keep this vault address and you are ready to move on.

What Does This Script Do?

Notice that 4 transactions were done to initialize a vault in the "private" setting:

  1. deployVault : called on the ArrakisV2Factory this deploys a fresh vault instance (sets initial vault params, for instance your EOA as the vault's owner and manager).

      const tx = await arrakisV2Factory.deployVault(
        {
          feeTiers: feeTiers, // [500, 3000]
          token0: token0, // DAI token address
          token1: token1, // WETH token address
          owner: userAddr, // your address
          init0: init0, // 1 DAI
          init1: init1, // 0 WETH
          manager: userAddr, // your address
          routers: [], // no swap routers
        },
        true // isBeacon = true (beacon proxy)
      );
  2. setRestrictedMint : called on the ArrakisV2 vault contract by the vault owner this restricts who can call the vault's mint function to a single address (your EOA), rendering the vault "private" (without this, anyone can add liquidity into your vault and mint vault shares).

      const tx2 = await vaultContract.setRestrictedMint(
        userAddr // your address
      );
  3. approve : called on the DAI token contract this approves 1 DAI to be transferred to the vault in the subsequent step.

      const tx3 = await daiTokenContract.approve(
        vault, // vault address
        oneDai // 1 DAI
      );
  4. mint : called on the ArrakisV2 vault, this mints the initial ArrakisV2 shares and deposits 1 DAI (because of #2, this only works from your address).

      const tx4 = await vaultContract.mint(
        oneDai, // 1 DAI
        userAddr // your address (recipient)
      );
console readout