Mono repository of Token Bridge (Oracle, Deployment, Monitor). TokenBridge is an interoperability solution between EVM-based networks for assets/data cross chain transfers
Go to file
Alexander Kolotov f93ab330cc
Merge the develop branch to the master branch, preparation to v2.7.0-rc0 (#515)
This merge contains the following set of changes:
  * [Improvement] Add /metrics endpoint for prometheus support (#512)
  * [Improvement] Add monitor script for detecting failed AMB messages (#513)
  * [Improvement] Improve performance of BS requests in ALM (#516)
  * [Fix] Add pretty error messages for manual execution transaction reverts (#511)
  * [Fix] Fix resend of stuck pending transactions (#514)
2021-02-25 20:42:51 -06:00
.github/workflows Fix RPC urls in the ultimate tests (#498) 2020-12-20 01:15:46 +03:00
alm Improve performance of BS requests in ALM (#516) 2021-02-25 20:38:13 -06:00
alm-e2e Possibility to allow/block specific addresses in erc-to-native mode (#442) 2020-09-28 14:54:03 +03:00
audit Security Audit report by Quantstamp added (#485) 2020-11-07 13:15:35 +03:00
burner-wallet-plugin Allow cors in monitor server (#472) 2020-10-12 21:16:41 +03:00
commons Detect all AMB mediators in monitor (#493) 2020-12-20 01:19:49 +03:00
contracts@835742dfd8 Update the contract's submodule to the release 5.5.0 (#486) 2020-11-07 16:22:53 +03:00
deployment Add monitor script for detecting failed AMB messages (#513) 2021-02-18 19:26:07 -06:00
deployment-e2e Fix RPC urls in the ultimate tests (#498) 2020-12-20 01:15:46 +03:00
e2e-commons Fix RPC urls in the ultimate tests (#498) 2020-12-20 01:15:46 +03:00
monitor Add /metrics endpoint for prometheus support (#512) 2021-02-25 20:39:48 -06:00
monitor-e2e Support AMB manual lane and allowance/block lists in the monitor (#484) 2020-11-04 22:16:43 +03:00
oracle Fix resend of stuck pending transactions (#514) 2021-02-24 16:11:28 -06:00
oracle-e2e Fix RPC urls in the ultimate tests (#498) 2020-12-20 01:15:46 +03:00
parity Possibility to allow/block specific addresses in erc-to-native mode (#442) 2020-09-28 14:54:03 +03:00
ui Fix RPC urls in the ultimate tests (#498) 2020-12-20 01:15:46 +03:00
ui-e2e Possibility to allow/block specific addresses in erc-to-native mode (#442) 2020-09-28 14:54:03 +03:00
.coveralls.yml Added Coveralls for UI (#59) 2019-05-22 16:09:02 +02:00
.dockerignore Cache fetched events in monitor (#482) 2020-11-04 14:24:42 +03:00
.editorconfig Move .editorconfig to root dir. 2019-05-22 16:33:28 +02:00
.eslintignore Add ALM new styles (#373) 2020-06-26 18:47:45 +03:00
.eslintrc Configured Prettier (#60) 2019-05-22 16:31:09 +02:00
.gitignore ALM manual signatures execution (#471) 2020-11-26 00:22:21 +03:00
.gitmodules Updated links to new repo with tokenbridge contracts (#226) 2019-11-05 15:53:47 +03:00
.nvmrc Add alm basic e2e tests (#407) 2020-07-29 13:30:36 +03:00
.prettierrc Extend line width to 120 (#174) 2019-08-01 15:10:22 +02:00
CODE_OF_CONDUCT.md Update the token-bridge sub-repo (#19) 2019-05-07 16:52:44 +02:00
CONFIGURATION.md Add env variables for selective validator balance checks (#507) 2021-01-10 20:18:06 -06:00
CONTRIBUTING.md Update the token-bridge sub-repo (#19) 2019-05-07 16:52:44 +02:00
Dockerfile.e2e Migrate to GitHub actions (#423) 2020-09-02 17:43:48 +03:00
LICENSE Update the token-bridge sub-repo (#19) 2019-05-07 16:52:44 +02:00
package.json Support of manual lane in the AMB oracle (#483) 2020-10-31 21:02:56 +03:00
README.md Migrate to GitHub actions (#423) 2020-09-02 17:43:48 +03:00
yarn.lock ALM manual signatures execution (#471) 2020-11-26 00:22:21 +03:00

tokenbridge Gitter License: LGPL v3.0

Tokenbridge

Welcome to the POA TokenBridge monorepository!

Please note that this repository as a work in progress.

Overview

The POA TokenBridge allows users to transfer assets between two chains in the Ethereum ecosystem. It is composed of several elements which are contained within this monorepository.

For a complete picture of the POA TokenBridge functionality, it is useful to explore each subrepository.

Structure

Sub-repositories maintained within this monorepo are listed below.

Sub-repository Description
Oracle Oracle responsible for listening to bridge related events and authorizing asset transfers.
UI DApp interface to transfer tokens and coins between chains.
Monitor Tool for checking balances and unprocessed events in bridged networks.
Deployment Ansible playbooks for deploying cross-chain bridges.
Oracle-E2E End to end tests for the Oracle
Monitor-E2E End to end tests for the Monitor
UI-E2E End to end tests for the UI
Deployment-E2E End to end tests for the Deployment
Commons Interfaces, constants and utilities shared between the sub-repositories
E2E-Commons Common utilities and configuration used in end to end tests
ALM DApp interface tool for AMB Live Monitoring
Burner-wallet-plugin TokenBridge Burner Wallet 2 Plugin

Additionally there are Smart Contracts used to manage bridge validators, collect signatures, and confirm asset relay and disposal.

Available deployments

Launched by POA Launched by 3rd parties
POA20 Bridge Ocean TokenBridge
xDai Bridge Thunder bridge
WETC Bridge Volta TokenBridge & DAI bridge to Volta Chain
Artis Brige
Tenda bridge & xDai-to-Tenda bridge

Network Definitions

Bridging occurs between two networks.

  • Home - or Native - is a network with fast and inexpensive operations. All bridge operations to collect validator confirmations are performed on this side of the bridge.

  • Foreign can be any chain; generally it refers to the Ethereum mainnet.

Operational Modes

The POA TokenBridge provides four operational modes:

  • Native-to-ERC20 Coins on a Home network can be converted to ERC20-compatible tokens on a Foreign network. Coins are locked on the Home side and the corresponding amount of ERC20 tokens are minted on the Foreign side. When the operation is reversed, tokens are burnt on the Foreign side and unlocked in the Home network. More Information: POA-to-POA20 Bridge
  • ERC20-to-ERC20 ERC20-compatible tokens on the Foreign network are locked and minted as ERC20-compatible tokens (ERC677 tokens) on the Home network. When transferred from Home to Foreign, they are burnt on the Home side and unlocked in the Foreign network. This can be considered a form of atomic swap when a user swaps the token "X" in network "A" to the token "Y" in network "B". More Information: ERC20-to-ERC20
  • ERC20-to-Native: Pre-existing tokens in the Foreign network are locked and coins are minted in the Home network. In this mode, the Home network consensus engine invokes Parity's Block Reward contract to mint coins per the bridge contract request. More Information: xDai Chain
  • Arbitrary-Message: Transfer arbitrary data between two networks as so the data could be interpreted as an arbitrary contract method invocation.

Initializing the monorepository

Clone the repository:

git clone https://github.com/poanetwork/tokenbridge

If there is no need to build docker images for the TokenBridge components (oracle, monitor, UI), initialize submodules, install dependencies, compile the Smart Contracts:

yarn initialize

Then refer to the corresponding README files to get information about particular TokenBridge component.

Linting

Running linter for all JS projects:

yarn lint

Tests

Running tests for all projects:

yarn test

Additionally there are end-to-end tests for Oracle and UI.

For details on building, running and developing please refer to respective READMEs in sub-repositories.

Building, running and deploying

Please refer to the instructions in sub-directories. Configuration details are available here.

Contributing

See the CONTRIBUTING document for contribution, testing and pull request protocol.

License

This project is licensed under the GNU Lesser General Public License v3.0. See the LICENSE file for details.

References