Skip to content

GOST Protocol - Cross Chain Token Transfers from/to Ethereum #28

@treeder

Description

@treeder

In an effort to support stablecoins on GoChain, backed by existing stablecoins on Ethereum (USDC, TUSD, PAX, etc), I propose the following cross chain transaction concept, aka GOST Protocol, to be built into GoChain. This concept keeps the transfers decentralized as the protocol is built directly into GoChain and requires all nodes in the network to participate. Tokens can be transferred to GoChain and transferred back to Ethereum at any time. This would make GoChain one of the first (if not the first) truly interoperable blockchains.

Why Move Tokens to GoChain

Much faster transaction speeds, supports much higher transaction volumes and much lower fees that can support day-to-day purchases such as buying coffee or playing games.

Fees

As of right now, the average transaction fee for Ethereum is $0.15:

Screenshot 2019-06-22 at 11 25 15 AM

And the average transaction fee for Bitcoin is $3.66:

Screenshot 2019-06-22 at 11 25 07 AM

Those fees are much too high for day-to-day transactions. You can't use it as payments for coffee if the fee costs just as much as the product.

Speed

Similarly you can't buy coffee if customers have to wait at the cashier for minutes or hours. GoChain transactions are almost always under 5 seconds.

Bitcoin typically takes a minimum of 10 minutes for a single block confirmation since block times are 10 minutes. It's usually longer since the network is typically congested. Ethereum block times are 15 seconds which is a vast improvement over Bitcoin, but the problem is the Ethereum network is also almost always congested so it typically takes minutes for a transaction to make it into a block.

Here is an example of two transactions at the same time performed at a random day/time on GoChain and Ethereum. Ethereum took 3 minutes 29 seconds to make it into a block while the GoChain transaction took 1 second.

D3aCzYpUYAAvxzD

Cross Chain Consensus

Consensus so far in blockchains has been limited to agreement on a single blockchain (ie: the database). There is no reason why consensus has to be restricted to a single data set. GOST Protocol works by the GoChain node network coming to consensus on both GoChain data and another chain's data (Ethereum to start). After a certain number of blocks have passed, we can be fairly certain that the data is set in stone and can no longer be modified, much like exchanges accept transactions after a certain number of block confirmations.

Transferring Tokens to GoChain

Each token on GoChain represents exactly one of the same token on the original chain. Let’s use USDC in this example. Transferring to GoChain requires two steps:

  • User deposits X USDC to a special smart contract on Ethereum - GOST-C1 (very similar to a multi-sig wallet)
  • GoChain nodes monitor this contract for transactions
  • If a transaction is found, the nodes will wait X blocks for confirmation (30-60)
  • After confirmation, a minting transaction is confirmed. X USDC on GoChain (USDC? GOUSDC? GOUSD?) is minted in an ERC20/GO20 token contract on GoChain to the original depositors address

Transferring Tokens back to Ethereum

User has to burn tokens on GoChain to get the original tokens back. This could work the following way:

  • User sends a burn transaction tx3 to burn tokens in in the token contract on GoChain (can include extra data such as a withdrawal address on Ethereum)
  • GoChain nodes accept the burn transaction, tx3, immediately removing the tokens from circulation
  • After X (30-60) block confirmations, each node sends in a transaction to the GOST-C1 wallet on Ethereum which says to transfer the funds to the address in tx3
  • Once a high percent of nodes (75%?) submit their transaction, the transaction proceeds and the tokens are transferred to the user

Future

Beyond this initial use case, this paves the way for massive scalability increases for GoChain by enabling multiple GoChain networks to work together. GoChain -> GoChain transactions means we can create any number of GoChain shards which can then transact across each other.

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