Skip to content

Instantly share code, notes, and snippets.

@youfoundron
Last active August 11, 2021 21:40
Show Gist options
  • Save youfoundron/964a29d06e61a344fbd8b0048f981b25 to your computer and use it in GitHub Desktop.
Save youfoundron/964a29d06e61a344fbd8b0048f981b25 to your computer and use it in GitHub Desktop.
multi-vault-balance-logic.md

Balance logic for multiple vaults

Contrived assumptions:

  • USD value of 1 ETH is the same as the USD value of 1 ZEC
  • Wrapped Service Fee is 10% of order value
  • Ethereum network transactions cost 0.1 ETH
  • Zcash network transactions are free
  • Vault balances are real crypto balances in wallets
  • Account balances are abstract balances derived from customer actions

Wrapping with multiple vaults

  1. Starting state
  • Wrapped.com has put 5 ETH in their own vault to pay for gas costs
  • Wrapped.com has put 5 ETH in the customer's vault to pay for gas costs
  • Wrapped.com has 100 ZEC in reserves
Token Wrapped Vault Balance Customer Vault Balance Customer Account Balance
Zcash 100 0 0
Wrapped Zcash 0 0 0
Ether (for gas) 5 5 0
  1. Deposit underlying token
  • Customer Actions:
    • Deposits 10 ZEC into their vault
  • Side Effects:
    • Customer's vault receives 10 ZEC
    • Customer's acccount is credited 10 ZEC
Token Wrapped Vault Balance Customer Vault Balance Customer Account Balance
Zcash 100 10 10
Wrapped Zcash 0 0 0
Ether (for gas) 5 5 0
  1. Wrap 10 ZEC
  • Customer Actions:
    • Executes wrap order of 10 ZEC
  • Side Effects
    • Customer's account is debited 10 ZEC
    • Customer's account is credited 10 WZEC (before fee's)
    • Customer's account is debited 1 WZEC -- 10% service fee
    • Customer's account is debited 0.1 WZEC -- Ethereum network execution cost (0.1 ETH)
    • Customer's vault is minted 8.9 WZEC
Token Wrapped Vault Balance Customer Vault Balance Customer Account Balance
Zcash 100 10 0
Wrapped Zcash 0 8.9 8.9
Ether (for gas) 5 5 0
  1. Withdraw wrapped tokens
  • Customer Action:
    • Withdraws 8.9 WZEC from their vault
  • Side Effects:
    • Customer's account is debited 8.9 WZEC
    • Customer's vault transfers out 8.9 WZEC
    • Customer's vault pays 0.1 ETH to pay for WZEC token transfer
Token Wrapped Vault Balance Customer Vault Balance Customer Account Balance
Zcash 100 10 0
Wrapped Zcash 0 0 0
Ether (for gas) 5 4.9 0

Unwrapping with multiple vaults

  1. Starting state
  • Wrapped.com has put 5 ETH in their own vault to pay for gas costs
  • Wrapped.com has put 5 ETH in the customer's vault to pay for gas costs
  • Wrapped.com has 100 ZEC in reserves
Token Wrapped Vault Balance Customer Vault Balance Customer Account Balance
Zcash 100 0 0
Wrapped Zcash 0 0 0
Ether (for gas) 5 5 0
  1. Deposit wrapped token
  • Customer Action:
    • Deposits 10 WZEC into their vault
  • Side Effects:
    • Customer's vault receives 10 WZEC
    • Customer's acccount is credited 10 WZEC
Token Wrapped Vault Balance Customer Vault Balance Customer Account Balance
Zcash 100 0
Wrapped Zcash 0 10 10
Ether (for gas) 5 5 0
  1. Unwrap 10 WZEC
  • Customer Action:
    • Executes unwrap order of 10 WZEC
  • Side Effects
    • Customer's account is debited 10 WZEC
    • Customer's account is credited 10 ZEC (before fee's)
    • Customer's account is debited 1 ZEC -- 10% service fee
    • Customer's account is debited 0.1 ZEC -- Ethereum network execution cost (0.1 ETH)
    • Customer's vault is burned out of 8.9 WZEC
    • Wrapped vault internally transfers 8.9 ZEC to customer vault (should we / do we need to do this?)
Token Wrapped Vault Balance Customer Vault Balance Customer Account Balance
Zcash 91.1 8.9 8.9
Wrapped Zcash 0 0 0
Ether (for gas) 5 5 0
  1. Withdraw underlying tokens
  • Customer Action:
    • Withdraws 8.9 ZEC from their vault
  • Side Effects:
    • Customer's account is debited 8.9 ZEC
    • Customer's vault transfers out 8.9 ZEC
Token Wrapped Vault Balance Customer Vault Balance Customer Account Balance
Zcash 91.1 0 0
Wrapped Zcash 0 0 0
Ether (for gas) 5 5 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment