The Synthetix fee reclamation mechanism prevents atomic transactions that incorporate a Synth <> Synth exchange, breaking composability. This is due to the waiting period imposed after exchange Synth exchange to mitigate frontrunning of oracle price updates.
Justin has written a SIP that proposes creating virtual Synths for each exchange, this virtual Synth logic could be implemented into an AMM to use Synths as bridges between pools, however this will require changes to each AMM contract. We believe a Synth bridge between USD, BTC & ETH pools would allow for extremely low slippage trades between these pools enabling deep liquidity from ETH -> USD and BTC -> USD.
Currently if we want to bridge USD and BTC pools there is a lack of a common asset. However, Synths can be exchanged with infinite liquidity allowing them to act as a liquid bridge between any pool that contains sUSD, sBTC or sETH.
A trade would work like this:
- USDC -> sUSD (rate set by the AMM)
- sUSD -> sBTC (rate set by Chainlink Oracle)
- sBTC -> WBTC (rate set by the AMM)
This trade cannot currently be done atomically due to fee reclamation. We introduce virtual Synths and exchange sUSD -> sBTC with (vsBTC as the output) then we exchange vsBTC -> vWBTC so the user would have a virtual representation of WBTC until the Oracle rate is confirmed. After this the vWBTC can be settled to WBTC. We leave the specific implementation of the AMM logic to each DEX.