Cross-chain Bridge design for True Seigniorage Dollar (P.1)
True Seigniorage Dollar is an algorithmic stablecoin that aims to be the first cross-chain seigniorage project, with the implementation of TSD on different blockchain infrastructure. Currently, TSD implemetations can be found on Ethereum and Binance Smart Chain. In this article, we will introduce the Design of the Cross-chain bridge to allow TSD transfer between those 2 blockchains.
The ultimate goal of the bridge is to allow people move their TSD from Ethereum to Binance Smart Chain and vice versa. We learned about many possibilities, including Binance Bridge (Panama project), but it is purely a CEX implementation.
First, two chains are not connected together. Ethereum and Binance Smart Chain run on different nodes network. So we can not call a smart contract directly from other chain by a simple implementation. We also looked at Keeper (Kp3r) or some ideas around Chainlink Oracle approach, but they are not suitable for TSD case.
Secondly, it is the problem about the Minting function of Seigniorage Stablecoin. The system will automatically mint more tokens if TWAP > 1 and will stop minting if TWAP < 1. However, in case a large amount of tokens whose holders want to move from one chain to another chain, we will need extra tokens from the destination chain. We think about the idea of setting up a Bridge fund that will receive a portion of Seigniorage rewards when TWAP > 1 from the system. But what happens if in the destination chain, TWAP < 1? So we do not choose the idea of setting up a Bridge fund that share rewards with DAO and LP Pool.
After many days working tirelessly, we come up with a novel idea for the Cross-chain bridge between Ethereum chain and Binance Smart Chain for TSD -> A hybrid bridge, partial DAO-controlled bridge.
The bridge contains 3 parts:
- The Vaults
- The Queue
- The Minter
Let’s take a simple example of the cross-chain movement. Alice wants to move 5 TSD tokens from Ethereum to Binance Smart Chain. The Bridge should receive 5 eTSD (Ethereum TSD) on the Ethereum side and give 5 bTSD (Binance Smart Chain TSD) to Alice on the BSC side.
So, we need 2 places where Alice can send eTSD to one place (on Ethereum) and receive bTSD from the other place (on BSC). We call them The Vaults. The bridge contains 2 Vaults: eVault and bVault. They are 2 smart contracts on Ethereum (eVault) and Binance Smart Chain (bVault).
- eVault is a smart contract on Ethereum where people can send eTSD to and get bTSD from bVault on BSC.
- eVault also allows people to claim eTSD when they want to move their bTSD on BSC to Ethereum (by sending bTSD to bVault).
The receiving process will not be automatic: When you send eTSD to eVault to transfer it to BSC, you then need to Claiming it from bVault to get bTSD there.
The goal is to allow people seamlessly move tokens between chains, but what if the total supply on 1 side is too much larger than the other side. In the current situation, Ethereum TSD has total supply of 18.9 millions eTSD, while Binance Smart Chain TSD has total supply around 1 million bTSD. If we allow half of the eTSD to be moved to BSC, the apocalypse will happens on BSC side.
That’s why we propose the idea of Batch transfer: Tokens will be transferred in batch, every batch the number of tokens moving should not exceed 10% of the total supply on the destination chain. Example: if the total supply of BSC bTSD is 1 million, the number of tokens allowed to move from Ethereum to BSC in 1 batch should not exceed 100,000 eTSD.
So we introduce The Queue: an abstract queue of tokens that can be divided into batches for the next transfers. Example: if the quota for cross-chain transfer next batch is 100,000 eTSD -> BSC, The Queue is the list of eTSD tokens holders who sent their eTSD to the eVault to wait for the next batch, based on confirmed time of the tx. Imagine there are many people sending to eVault for the cross-chain transfer -> we will have a list of transactions including the senders and the number of eTSD, like this:
- Alice — 10 eTSD (transferred)
- Bob — 20 eTSD (waiting next batch)
- Mike — 30 eTSD (waiting next batch)
The Queue will be published on the website of TSD project, so people can see it and calculate the time their tokens being transferred.
So the process of cross-chain transfer can be summarized in these steps:
- Transfer the number of tokens you want to move to another chain to the Vaults (if you are in ETH and want to transfer tokens to BSC, send eTSD to eVault, if vice versa -> send bTSD tokens to bVault)
- Checking The Queue on the website to see the Batch in which your tokens will be transferred
- Waiting for The Minter to work
We will introduce the concept of The Minter in the next article. See you there.