Skip to content

Omnipool LST (Sanctum style) #10

@drewstone

Description

@drewstone

Overview

The goal with this spec is for defining a cross-chain omni pool design for LSTs. The pool will whitelist and aggregate LSTs and then we will upgrade our protocol-solidity / masp-protocol bridge to support this omni-pool token. The final design will resemble something like

image

Omni-pool token functionality.

Consider using ERC4262 to represent the webbXYZ token if it works, if not disregard.

  • DEPOSIT - Many tokens can mint shares of webbXYZ proportional to the value of the underlying XYZ holdings. Since these are LSTs, 1 LSTS might be worth more than 1 XYZ token. Therefore, depositing 1 XYZ LST will yield > 1 webbXYZ.
  • WITHDRAW - Burning webbXYZ will return any available token requested if available liquidity permits. We can consider supporting burning into multiple tokens.
  • PRICING - Pricing for tokens is in XYZ terms. There should be an oracle method (incorruptible on ideal chain, i.e. stETH on Ethereum) that tells us the underlying amount of tokens in the LST. https://learn.sanctum.so/docs/protocol/infinity/pricing-mechanism-of-infinity

Read up on Sanctum. The pool should support a swap functionality that allows users to swap between available liquidity on each side of the bridge. I don't know how we would immediately support cross-chain swap but possibly through intents.

Bridging mechanism

The goal is to take webbXYZ tokens (the omni-pool tokens) and bridge them across chains. We can improve the protocol-solidity/masp-protocol private bridge by integrating it with this type of token. The docs for the privacy bridges can be found in

The current bridge leverages a fully-connected graph topology (every anchor connected to each other). Instead we can explore a star-topology, where every anchor is connected to Tangle which hosts a RelayAnchor -- an anchor that maintains edges to all other chains. The flow would be as follows

  • Deposits of assets happen on each respective chain / anchor (even the RelayAnchor).
  • Transfers/Withdraws are all initiated on the RelayAnchor. If the transfer/withdraw verifies successfully on Tangle, then we dispatch a cross-chain message to the destination chain indicated in the transfer/withdrawal which will trigger the asset withdrawal or the data transfer (inclusion of the spent nullifier and UTXO hash in the destination merkle tree).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions