|Network||Ethereum & Optimism|
Enable the transfer of synths for deposit and withdrawal through Optimism Bridge. Initially, only sUSD will be enabled for transfer.
Now that SIP-165 has been completed, sUSD is fungible on L1 and L2. Due to no bridges being set up, however, it is still not possible to send sUSD between layers.
Therefore, in a way similar to how we currently deposit or withdraw SNX from L2, synths will be transferrable using the optimism bridge. A user will be able to call
a public function on
SynthetixBridgeToBase to initiate a transfer to the other layer by burning synths, and after the grace period elapses, the funds will be minted
on the other side.
The spartan council has decided not to support SIP-204 for bridging synths between networks. Therefore, to recoup some of the benefit of SIP-165, we must support some method for synth transfer between layers.
This will also lead to easier migration of debt from L1 to L2, forced or not.
initializeSynthTransfer(bytes32 currencyKey, address destination, uint amount) and
finalizeSynthTransfer(bytes32 currencyKey, address destination, uint amount) will be added to
BaseSynthetixBridge. Upon call to
initializeSynthTransfer, the specified synth will be burnt from the user, and
a cross-chain message sent to the destination chain counterpart to call
finalizeSynthTransfer is called, the usual checks are done to verify the
message origin, and then the appropriate synths are minted for the user.
In order to allow chainlink to track debt which is in transit between chains, the running mapped tallies,
synthTransferReceived will be recorded. By comparing the difference between these values on opposite chains, it is possible to see how much synth is in transit.
The actual mint and burn will be done through
Issuer to reduce
the upgrade complexity.
optimism.github.io repository will need to be updated to include the
sUSD synth information and contract address so that its information appears on Optimism Gateway. If any other synths are approved by the council in the future, they will need to be added using the same process.
Chainlink will need to track 2 new sources per chain for the issued synths and debt ratio oracle, the synths in transit.
In pseudocode, the new equation for the
issued synths value within the debt oracles is:
sum(DebtCache.currentDebt() + SynthetixBridge.synthTransferSent() - SynthetixBridge.synthTransferReceived()) for all chains
Note that the contract calls should be atomic or locked to a specific block on-chain.
Also note, on Optimism, the
SynthetixBridge contract is called
SynthetixBridgeToBase. On mainnet, the contract is called
SynthetixBridgeToOptimism. The appropriate contract should be queried for its address from the
AddressResolver as we are doing with existing addresses.
Chainlink will be responsible for implementing the code for this additional requirement.
crossChainSynthTransferEnabled(bytes32 currencyKey): specifies whether or not synth is allowed to be initiated for transfer to other layer. 0 = disabled, all other values = enabled
Copyright and related rights waived via CC0.