PairVault.solcontains most of the implementation for Vaults. Rather than create unique contract instances for each Vault, the state for all Vaults is stored in a mapping. Each Vault has a unique id number created by hashing the metadata on the Vault: asset pair, strategy contract, start time, investment time, and duration of product.
Withdrawstate. Now Liquidity Providers can burn their tranche tokens to collect their share of the tranche asset pool. We compute the fraction of the initial deposit for the investor, and return that fraction of the redeemed pool for the tranche.