# Introduction

‌Welcome to the Orbit Bridge documentation! This book covers everything you need to know about setting and managing the Orbit Bridge IBC protocol.

<figure><img src="/files/gFXfRZTrK520y2IoKbmz" alt=""><figcaption></figcaption></figure>

Orbit Chain has worked to surpass the ever-present scalability and connectivity constraints that have limited traditional public chains. Our improvements and innovations grow user accessibility and convenience so blockchain-based protocols and services can have more real-life integration. Orbit IBC, the basis of the Orbit Chain, is the world’s first open Hub Chain. It allows various chains to be linked to Orbit Chain and their digital assets can be handled and used freely within Orbit.

While many interchain platforms aim to support major public chains (Bitcoin, Ethereum, Ripple, Klaytn, BNB, ICON, etc.), Orbit Chain is the world’s first and only chain to actually be able to support the operation of these [various protocols](https://explorer.orbitchain.io/gateways/orbit/all/deposits). Some key examples are [Orbit’s DEX protoco](https://allbit.com/)l, which supports asset exchange, the [Divine protocol](https://trinito.io/), which enables lending and borrowing using assets in the chain, and the [Staking-as-a-Service protocol](https://explorer.orbitchain.io/gateways/staking/all), which allows staking to heterogeneous chains through Orbit. Having developed its own technology and services, Orbit Chain currently hosts more than $30M USD of assets on its network.

This documentation explores how Orbit Chain IBC’s role has been taken one step further and introduces the new Orbit Bridge IBC protocol, which allows different chains to communicate and enables the completely decentralized, free movement of assets.

‌Orbit Bridge is an interchain communication protocol that allows communication between heterogeneous blockchains. Before, with Orbit Pegging IBC, assets were integrated and used within Orbit Chain through communication between blockchains, including Orbit Chain. Orbit Bridge IBC allows different blockchains to communicate with each other using Orbit Chain. It was built using a Multi-signature BFT consensus to establish a decentralized, trustless consensus process. Through this, users can utilize the various assets of many public chains in all dApps through simple transactions on each chain.

* Sending cross-chain data between heterogeneous chains
  * Users can send assets or data to any chain connected to Orbit Bridge.
* Trustless, Secure Multiple-Signature Verification
  * All consensus happens on-chain, and all authority throughout this process is decentralized.&#x20;
* Fast, Secure Consensus Process
  * The consensus process is smart contract-based and goes through Orbit Chain.&#x20;


# Overview

Inter-Blockchain Communication (IBC) is a technology that enables communication between heterogeneous blockchains. The need for IBC technology to connect the fragmented blockchain ecosystem continues to grow as new public chains continue to emerge and more dApps are developed. As the demand for network functions such as storage of personal information and decentralized finance (DeFi) increases, IBC is becoming even more critical.

Orbit Chain developed its own Inter-Blockchain Communication (IBC) technology with the aim of connecting the blockchain ecosystem. Since launching, Orbit Chain has established a new ecosystem where assets of different chains can be used on a single decentralized platform. In other words, Orbit Chain has thus far focused on being a hub for heterogeneous chains-- enabling a token economy with interoperability and scalability as heterogeneous assets enter Orbit Chain.&#x20;

‌Orbit Chain has developed different decentralized IBC protocols where transactions are verified on chain depending on the use of the assets. These decentralized IBC protocols enable a number of chains and assets to enter Orbit Chain in a reliable manner. A variety of finance protocols were made to take advantage of this newly provided liquidity.

‌The various IBCs that Orbit Chain has deployed and the protocols that leverage the assets through them are as follows:

**‌1) Normal IBC:** Assets received through Normal IBC are utilized in Orbit's DEX Protocol, which supports exchange of assets, and the Divine Protocol, which supports the lending and borrowing of assets.

**‌2) Staking IBC:** Staking IBC supports the Staking-as-a-Service protocol to enable decentralized staking of the native assets of PoS-based chains from one end-point to another chain through Orbit Chain.

**‌3) Token Economy IBC:** When an asset moves from one chain to another, it helps maintain the token economy of that asset.&#x20;

‌Orbit Chain realized the importance of connecting the fragmented blockchain world from the beginning. With proven technology and practical services created and developed through years of researching interchain, Orbit Chain has introduced its results to the market. In the future, Orbit Chain's interchain technology will extend beyond a single solution or service to provide flexible and seamless usability to users of a large assortment of public chains.

‌There is a wide variety of public platform chains in the market, and they all want plentiful liquidity in their network ecosystem so their chain is more actively used. The various tokenized assets in these networks have the goal of being recognized and holding value in a multitude of financial ecosystems including decentralized finance (DeFi). For example, USDT has been issued and used in various chains, but its utility as a stablecoin has been best recognized within Ethereum as it was used to meet the Ethereum ecosystem’s decentralized finance demands. Ethereum was able to certify the value of its network by holding USDT assets with a market capitalization of more than $16B USD. As such, free movement of tokenized assets to and from other networks is a benefit to both platforms and token foundations.

Orbit Chain aims to further push the status quo and make Orbit IBC a single, on-chain connection point for various platform chains and token projects through an open bridge platform that enables the establishment of validator sets that are separate from Orbit Governance.<br>


# Core Concept

The Orbit Bridge model allows seamless asset transfers and connects token economies across chains. It is different from current IBC offerings like the Ren Protocol (Ren) and WBTC, which utilize IBC technology to provide liquidity to the Ethereum ecosystem, in that Orbit Bridge has achieved complete decentralization. In the cases of Ren and WBTC, transactions related to asset movement are verified and communicated off-chain by hidden validators. How consensus is reached is not transparently disclosed. This means that their protocols have relatively low decentralization, going against the basic principle of blockchain.&#x20;

Orbit Chain's IBC is not only highly efficient, but it differentiates itself by transparently managing the consensus process without forming any components off-chain.

‌The Orbit IBC Bridge was created through continuous R\&D to make it more transparent, have more finality in block creation, and make the bridge itself more scalable. It was designed not for simple token bridging, but for the establishment of an ecosystem of completely decentralized communication between heterogeneous chains. Just as locking tokens in token bridging is matched with a request and minting with execution, requests and execution are important starting points for various assets to be connected, without boundaries, between chains.

**1) Setting Governance in the Origin Chain and Destination Chain**

Orbit Bridge is open-source, so anyone who wants to take the initiative in transferring assets with their own governance consensus can create a vault within that chain. The great advantage of directly setting governance is that in an IBC where governance is structured, the overall policy and direction, including asset selection, are determined by consensus and no assets can be moved unless consensus is reached.

‌Thus, even if Orbit Bridge has IBC governance that connects Ethereum and Klaytn, those who do not trust the established governance can create a new IBC bridge by setting their own governance. Additionally, one entity can set a different governance consensus between an Origin Chain and Destination Chain. For example, the total number of validators and minimum required signatures between the chains can be different (e.g. Terra origin governance 4-of-7, Tron destination governance 3-of-5).&#x20;

‌This IBC platform bridge emphasizes the trustless philosophy of blockchain and open sourced to allow anyone to build IBC to freely move assets. Bridges are secure because bridge users can trust the validators who manage and validate asset movement.

**2) Scaling assets to make Orbit Bridge the connection point between many public chains**&#x20;

‌One of the most important upgrades of the new Orbit Bridge is scalability of movable assets. Scalability of assets means that any asset of a public chain can be moved to a heterogeneous chain if consensus is reached in an IBC’s governance, rather than just a specific asset like DAI in EVERYDAI.

If Orbit Bridge allows a wide range of assets to move freely, the platform chains currently growing DeFi in a fragmented state can see a variety of benefits. More than anything, liquidity issues, which are oft cited as the biggest problem in decentralized finance, can be solved by attracting assets of heterogeneous chains, not just assets of their own chain. We also expect that by using bridges to distribute the assets that each service area, such as payment, needs, we can lower blockchain entry hurdles for operators of existing centralized services.


# How it works

![Orbit Bridge system structure diagram](/files/-MLg97rOaNp5Zcosnc8j)

The Orbit Bridge system has Governance groups comprised of the roles: Operator and Validator. Bridging protocols either use a MPC-based transaction consensus method or a Multi-sig based transaction consensus method. Orbit Bridge uses Multi-sig based transaction consensus. Through this, the Operator, who sends data, and the Validator work together to efficiently and quickly process transactions. Additionally, as the consensus and validation processes happen through transactions on Orbit Chain, they are transparent and trustless. The validators use a separate private channel and a blockchain without central authority to complete their tasks.&#x20;

* Operator
  * Relays the information needed by Governance for actual operation.
  * Each piece data signed by the Validators is assembled and executed by forming a transaction that runs on the chain.
* Validator
  * A group of Validators constituting Governance verify the TX generated by each chain and records verification in the chain to reach an consensus.


# Features

How Orbit Bridge works - Fully on-chain/decentralized alidation/Vaults/Minters

The Orbit Bridge system has Governance groups composed of the roles: Operator and Validator. Orbit Bridge uses Multi-sig based transaction consensus. Through this, the Operator, who sends data, and the Validator work together to efficiently and quickly process transactions. Additionally, as the consensus and validation processes are recorded on Orbit Chain, they are transparent and trustworthy.

### Operator

Relays the information needed by Governance for actual operation. Each piece of data signed by the Validators is assembled and executed by forming a transaction that runs on the chain. Collect signatures of validators gathered in OrbitChain MIG (MultisigWallet) and generate a transaction of withdrawal from Vault or mint from Minter.

### Validator

A group of Validators constituting Governance verify the TX generated by each chain and record verification in the chain to reach a consensus.

### Vault

The place where assets are deposited into when a bridging transaction occurred on Native Chain(Origin Chain).

### Minter &#x20;

Receive a request to withdraw from a chain that oToken(a token bridged via Orbit Bridge) was minted, or mint an oToken to another chain from a chain where the token is originally issued on.

<br>


# Differentiation

What makes Orbit Bridge differentiate from other bridge protocols

### Safety/Credibility - 100% On-Chain Validation

Unlike other cross-chain platforms which use MPC(multiparty computation) and off-chain structure, all transactions and assets are managed 100% on chain under highly trusted validators in Orbit Bridge.&#x20;

While a single private key is shared among validators in MPC, each validator has its own key in Orbit Bridge enabling enhanced security.

#### Scalability (1) - Connecting Token Economy

It is not simply a ‘bridge’ for transferring assets between chains. Rather it enables utilization of locked-up assets in a ‘vault’ on its original chain thereby connecting token economy.

E.g. Orbit Farm(connecting locked up assets to lending platforms through smart contract)

Successful connection with Venus on BNB Chain&#x20;

Currently in the process of connecting with Compound on Ethereum

#### Scalability (2) - Cross-Chain Swap

USDTs from Layer 2 chains (Polygon, Avalanche, BNBChain etc) can be bridged to form a pool composed of ‘O’ assets(oUSDT-B, oUSDT-H, oUSDT), these pools can then be used to operate Cross-Chain Swap protocols

E.g. Portkey, a Cross-Chain Swap protocol on Belt Finance uses Orbit Bridge as a Cross-Chain solution and provides swap functions to Layer 2 chains within 2 minutes

#### Scalability (3) - Master Orbit

Current Market limitation:&#x20;

DeFi protocols with governance tokens based on MasterChef(smartcontract) face intrinsic limitations as tokens can only be distributed in accordance with blocks on each specific chain. Thus, maintaining and managing identical tokens when expanding the protocol to various chains can be tricky for the business and development.

Solution:&#x20;

Orbit Bridge provides an environment where tokens that are issued on a certain chain can be bridged and distributed via received quantity not through block based calculations. &#x20;

#### Scalability (4) - NFT Bridge and Function Customization&#x20;

Orbit Bridge is an all-round bridge providing a comprehensive service in processing both multichain signatures and saved datas on blockchain as well as bridging tokens. Fungible Tokens, Non-Fungible Tokens and if necessary specific token types can be transferred through Orbit Bridge.&#x20;

<br>

### Efficiency - Setting Governance in the Origin Chain and Destination Chain

Experience multichain bridging with paying low fees

Orbit Bridge is open-source, so anyone who wants to take the initiative in transferring assets with their own governance consensus can create a vault within that chain. The great advantage of directly setting governance is that in an IBC where governance is structured, the overall policy and direction, including asset selection, are determined by consensus and no assets can be moved unless consensus is reached. ‌Thus, even if Orbit Bridge has IBC governance that connects Ethereum and Klaytn, those who do not trust the established governance can create a new IBC bridge by setting their own governance. Additionally, one entity can set a different governance consensus between an Origin Chain and Destination Chain. For example, the total number of validators and minimum required signatures between the chains can be different (e.g. Terra origin governance 4-of-7, Tron destination governance 3-of-5).

<br>


# Bridge Validator

The transactions and information that each each Validator verifies depends on the governance group to which it belongs. They perform verification based on the block data of each chain according to the

## **Verification Process**

### Verification of transactions with Vaults

* Verifies that the transaction object data (transaction hash, block number, method, parameter, memo ... ) sent to a Vault matches the data passed to OrbitHub or BridgeContract.
* Data to be verified
  * Block Confirmation. ( ex, ETH & KLAYTN : 24 block confirmation )
  * Verification that relayed data by operator and `Deposit` event data in transaction are the same.

### Verification of transactions with Minters

* Verifies that the transaction object data (transaction hash, block number, method, parameter, memo ...) sent to a Minter matches the data passed to OrbitHub or BridgeContract.
* Data to be verified
  * Block Confirmation. ( ex, ETH & KLAYTN : 24 block confirmation )
  * Verification that relayed data by operator and `RequestSwap` event data in transaction are the same.

### Verification for the execution of transactions to each destination chain is carried out in a transaction consensus process.

* For Tendermint affiliates, consensus is required prior to signing transactions of fee and sequence information. Thus, Validators verify that the actual transaction signature transfer fee is appropriate and sequence can be executed.

## **Verification Hash**

Used to prevent double spending

### Swap & RequestSwap Hash

```
bytes32 hash = sha256(abi.encodePacked(hubContract, fromChain, toChain, fromAddr, toAddr, token, bytes32s, uints));
```

Used as verification hash to execute Minting or Release.&#x20;

* `address hubContract` : Orbit Hub Contract Address
* `string fromChain` : Chain Symbol requesting bridging.
* `string toChain` : Chain Symbol to execute bridging.
* `bytes fromAddr` : Address of the chain requesting bridging.
* `bytes toAddr` : Address of chain to execute bridging.
* `bytes token` : Token Information to be executed bridging.
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process.
  * index 0 : Governance Identifier.
  * index 1 : Transaction Hash of fromChain.
* `uint[] uints` : Uint data array used in the bridging consensus process
  * index 0 : Token Amount to be executed bridging.
  * index 1 : Token Decimal to be executed bridging
  * index 2 ( optional ) : Unique Identifier for Requesting Bridging ( ex, depositId in ETH, KLAYTN )

### Subscribe Orbitchain

* Validator should subscribe *OrbitChain*'s new block and detect *SwapRelay* event

```
event SwapRelay(string fromChain, string toChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints);
```

### Verification Detail for SmartContract based transaction

* Supported chains : Ethereum, Klaytn, Icon
* Events detail of Vault / Minter contracts

```
event Deposit(string fromChain, string toChain, address fromAddr, bytes toAddr, address token, uint8 decimal, uint amount, uint depositId, uint block);
event SwapRequest(string fromChain, string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, uint block);
```

* Pre-defined in launch-governance settings
  * `address hubContract` : SwapRelay event must be from hubContract address&#x20;
  * `bytes32 bytes32s[0]` : verify Governance Identifier validator's own id.
* Get transaction from Vault / Minter chain using `bytes32 bytes32s[1]`  &#x20;
* Parse event and compare params with SwapRelay event
  * `string fromChain`
  * `string toChain`
  * `bytes fromAddr`
  * `bytes toAddr`
  * `bytes token`
  * ~~`uint[] uints[0:2]`~~ : Must be equal to amount, decimal and depositId in array order.
* Hash two variables from the beginning of an `bytes32[] bytes32s`
* Hash three variables from the beginning of an `uint[] uints`&#x20;

### Verification Detail for Terra transaction

#### Mint token to other chains

* Sample Transaction. [HERE](https://finder.terra.money/tequila-0004/tx/4BA94A68FC288399057D518B3DF399289F947CA82E98101767D0F162FAB66AD1)&#x20;
* Pre-defined in launch-governance settings
  * `address hubContract` : *SwapRelay* event must be from hubContract address&#x20;
  * `bytes32 bytes32s[0]` : verify Governance Identifier validator's own id.
* Get transaction from Terra node using `bytes32 bytes32s[1]`  &#x20;
* Verify transaction exist and succeeded
* Filter messages that meet the message type *bank/MsgSend*  and send to vault address
* Verify vault address same with *SwapRelay* event's `bytes fromAddr`
* Verify filtered messages's token denom and amount of token same with *SwapRelay* event&#x20;
  * `bytes token`
  * `uint uints[0]`
* Parse memo in JSON format and compare with *SwapRelay* event
  * `string toChain`
  * `bytes toAddr`
* `uint uints[1]` value must 6
* Hash two variables from the beginning of an `bytes32[] bytes32s`
* Hash three variables from the beginning of an `uint[] uints`&#x20;

#### Release token to Terra address

* Typically, verify release of tokens takes place in the minting chain.&#x20;
* But, don't support COSMWASM yet, additional step needed for build Terra transaction
* Events will be validated

```
event TransactionSuggested(bytes32 govId, uint suggestIndex);
event TransactionSelected(bytes32 govId, uint selectionIndex);
```

* Verification transaction suggest
  * Get orbitchain suggestion data object using *Governance Identifier*, *suggestIndex (*&#x75;se pre-defined gov id in launch-governance)
  * Get orbitchain swap data object(include swapDataArray) using *Governance Identifier*, suggest data's `uint uints[0]`
  * Verify vault have sufficient funds. have more than swapDataArray's  `uint uints[0]`
  * Verify suggestion's gas properly estimated
  * Verify suggestion's fee properly estimated
  * Verify suggestion's sequence same with vault address's sequence
  * Build hash

```
bytes32 hash = sha256(abi.encodePacked(address(this), govId, suggestIndex, s.uints, s.signatureHash));
```

&#x20;


# Bridge Operator

* Operators act automonously from Governance to make all bridging tasks possible by continously managing the tasks of each chain.&#x20;

**Operating Process**

* Transaction information relay for a Vault
  * Transfers to Orbit Chain's Orbit Hub the transaction information (transaction hash, method, event, memo, etc.) that each chain has for Vault so that Validators can reach consensus quickly.&#x20;
* Transaction information relay for Minters
  * Transfers to Orbit Chain's Orbit Hub the transaction information (transaction hash, method, event, memo, etc.) that each chain has for Vault so that Validators can reach consensus quickly.&#x20;
* Process information relay for building a multiple signature wallet transaction in each bridge contract&#x20;
  * Suggest transaction object for each chain specification (sequence format , transaction fee situation etc) and support to successful consensus
* Executes the agreed transactions on each chain
  * Through Orbit chain, the Validator signs the transaction based on the completed transaction information so that it can run on each chain.


# Governance

* Orbit Bridge defines Governance on each chain on the basis of their respective vault.&#x20;
* The Origin Chain's vault is created with a Multi-Sig wallet, so if there is no governance concensus, no assets can be moved.&#x20;
* Governance has mint/burn/execute permissions on the Destination chain&#x20;
* A pair of what destination chain to bridge must be registered.
* Depend on specification of each chain governance have different consensus in same governance.

## BridgeGovernance Setting Authorization

### OrbitHub

* `function addBridgeInfo`
  * Function to save data such as Multi-Sig Wallet, Nonce, Sequence, etc. to be used and managed in Bridge Contract
  * The function must be executed using the Multi-Sig Wallet registered in Orbit Hub.
  * Params
    * `string memory chain` : Chain Symbol of Bridge Contract (ex, ETH, KLAYTN, TERRA)
    * `address mig` : Multi-Sig Wallet Contract Address to be used in Bridge Contract
    * `uint[] memory uints` : Uint Data Array to be managed in the Bridge Contract
    * `bytes32[] memory bytes32s` : Bytes32 Data Array to be managed in the Bridge Contract
    * `bytes memory comment` : Bytes Data to be managed in the Bridge Contract<br>

* `function removeBridgeInfo`
  * Function to delete data used and managed in Bridge Contract
  * The function must be executed using the Multi-Sig Wallet registered in Orbit Hub.
  * Params
    * `string memory chain` : Chain Symbol of Bridge Contract (ex, ETH, KLAYTN, TERRA)<br>

* `function changeHubMig`
  * Function to replace the Multi-Sig Wallet registered in Orbit Hub Contract
  * The function must be executed using the Multi-Sig Wallet registered in Orbit Hub.
  * Params

    * `address mig` : Multi-Sig Wallet Contract Address

* `function changeBridgeMig`
  * Function to replace the Multi-Sig Wallet registered in Bridge Contract
  * The function must be executed using the Multi-Sig Wallet registered in Orbit Hub.
  * Params
    * `string memory chain` : Chain Symbol of Bridge Contract (ex, ETH, KLAYTN, TERRA)
    * `address mig` : Multi-Sig Wallet Contract Address

### Minter ( Ethereum / Klaytn / Icon )

* `function changeActivate`&#x20;
  * Functions to control Minter functions to respond to problems
  * The function must be executed by the governance of Minter.
  * Params

    * `bool activate` : Minter Status

* `function setValidChain`&#x20;
  * Function to make it possible to receive requests only through a bridging-capable chain
  * The function must be executed by the governance of Minter.
  * Params

    * `string memory _chain` : Chain Symbol ( ex, ETH, KLAYTN, TERRA )

* `function addToken`&#x20;
  * Function to add mapping about tokens to be minted when bridging is executed
  * The function must be executed by the governance of Minter.
  * Params

    * `bytes memory token` : Token Information to be requested bridging from Vault
    * `address tokenAddress` : Token Address to be minted by Bridging execution in Minter

* `function setBridgingFee`&#x20;
  * Function to set the fee amount for Bridging execution.
  * The function must be executed by the governance of Minter.
  * Params

    * `uint _bridgingFee` : Fee Amount for Bridging execution.

* `function setFeeGovernance`&#x20;
  * Function to set the feeGovernance.
  * The function must be executed by the governance of Minter.
  * Params
    * `address _feeGovernance` : Address of FeeGovernance.

### Vault ( Ethereum / Klaytn / Icon )

* `function changeActivate`&#x20;
  * Functions to control Vault functions to respond to problems
  * The function must be executed through Vault's own SubmitTransaction/ ConfirmTransaction logic
  * Params

    * `bool activate` : Minter Status

* `function setValidChain`&#x20;
  * Function to make it possible to receive requests only through a bridging-capable chain
  * The function must be executed through Vault's own SubmitTransaction/ ConfirmTransaction logic
  * Params

    * `string memory _chain` : Chain Symbol ( ex, ETH, KLAYTN, TERRA )

* `function setBridgingFee`&#x20;
  * Function to set the fee amount for Bridging execution.
  * The function must be executed through Vault's own SubmitTransaction/ ConfirmTransaction logic
  * Params

    * `uint _bridgingFee` : Fee Amount for Bridging execution.

* `function setFeeGovernance`&#x20;
  * Function to set the feeGovernance.
  * The function must be executed through Vault's own SubmitTransaction/ ConfirmTransaction logic
  * Params
    * `address _feeGovernance` : Address of FeeGovernance.


# Bridging Transactions

<figure><img src="/files/Al0xzvh0Jex7F8AfKQOD" alt=""><figcaption></figcaption></figure>

One bridge enables the movement of assets between two different blockchains through Locking/Vault, Release/Vault, Minting, and Burning contracts that exist on each blockchain. For example, suppose you send an Ethereum asset, 'ABC', to the Klaytn network. The 'ABC' asset is first sent to Ethereum's Locking contract and as soon as verification is complete, it is then passed to the Minting contract of the Klaytn Blockchain. Afterwards, a new 'ABC' token is issued in Klaytn, corresponding to the assets locked to Ethereum, by a set of validators verifying the Minting contract.

Please note that Terra does not have a token Minting function, so you can move your assets to a heterogenous chain, but you cannot receive assets from other chains. We are planning future support dependent on Terra's smart contract module support.

The transactions of Orbit Bride have some additional processes within the basic Standard process depending on which From and To chain.&#x20;

#### Types of Orbit Bridge Transactions:

* Origin Chain -> Destination Chain
* Destination Chain -> Origin Chain
* Destination Chain -> Destination Chain

#### Standard Orbit Bridge Process

1. **\[     User    ]** Execute transaction in FROM chain
2. **\[ Operator ]** Relay FROM Chain transaction data to OrbitHub.
3. **\[ Validator ]** Verify FROM chain transaction data and sign verification to each governance
4. **\[ Operator ]** Suggest TO chain transaction parameter and data to OrbitHub
5. **\[ Validator ]** Verify TO chain transaction parameter and data to BridgeContract
6. **\[ Validator ]** Sign selected TO chain transaction object to BridgeContract
7. **\[ Operator ]** Assemble validators-signed transaction data and execute on TO chain


# Ethereum

## Vault

### LOCK

* User requesting bridging executes `EthVault.deposit` or `EthVault.depositToken` Function with Bridging Fee.
* `Deposit` event occurs in Eth Vault and Token Lock completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Minter's MINT Process

### RELEASE

* Completes the BURN process of `fromChain` Minter
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data, `EthVault.withdraw` is executed&#x20;
* `Withdraw` event occurs in Eth Vault and Token Release (Transfer) is completed

## Minter

### MINT

* Completes the LOCK process of `fromChain` Vault
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data,  `EthMinter.swap` is executed
* `Swap` event occurs in Eth Minter and Token Minted

Token Initial Name & Symbol minted by Minter

* Name : Orbit Bridge Ethereum Token
* Symbol : OBT

To change the Token Name and Symbol, anyone can make the first change as Public, and from the second change, it can be changed with the authority of the Token Contract Owner (= Minter Contract Owner).

### BURN

* User requesting bridging executes `EthMinter.requestSwap`Function with Bridging Fee.
* `Swap` event occurs in Eth Minter and Token Burn is completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Vault's Release Process


# BNB Chain

## Vault

### LOCK

* User requesting bridging executes `BSCVault.deposit` or `BscVault.depositToken` Function with Bridging Fee.
* `Deposit` event occurs in Eth Vault and Token Lock completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Minter's MINT Process

### RELEASE

* Completes the BURN process of `fromChain` Minter
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data, `BscVault.withdraw` is executed&#x20;
* `Withdraw` event occurs in Eth Vault and Token Release (Transfer) is completed

## Minter

### MINT

* Completes the LOCK process of `fromChain` Vault
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data,  `BscMinter.swap` is executed
* `Swap` event occurs in Eth Minter and Token Minted

Token Initial Name & Symbol minted by Minter

* Name : Orbit Bridge Bsc Token
* Symbol : OBT

To change the Token Name and Symbol, anyone can make the first change as Public, and from the second change, it can be changed with the authority of the Token Contract Owner (= Minter Contract Owner).

### BURN

* User requesting bridging executes `BscMinter.requestSwap`Function with Bridging Fee.
* `Swap` event occurs in Eth Minter and Token Burn is completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Vault's Release Process


# Klaytn

## Vault

### LOCK

* User requesting bridging executes `KlaytnVault.deposit` or `KlaytnVault.depositToken` Function with Bridging Fee.
* `Deposit` event occurs in Klaytn Vault and Token Lock completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Minter's MINT Process

### RELEASE

* Complete the BURN process of `fromChain` Minter
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data `KlaytnVault.withdraw` is executed&#x20;
* `Withdraw` event occurs in Klaytn Vault and Token Release (Transfer) completed

## Minter

### MINT

* Complete the LOCK process of `fromChain` Vault
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data `KlaytnMinter.swap` is executed
* `Swap` event occurs in Klaytn Minter and Token Minted

Token Initial Name & Symbol minted by Minter

* Name : Orbit Bridge Klaytn Token
* Symbol : OBKT

To change the Token Name and Symbol, anyone can make the first change as Public, and from the second change, it can be changed with the authority of the Token Contract Owner (= Minter Contract Owner).

### BURN

* User requesting bridging executes `KlaytnMinter.requestSwap`Function with Bridging Fee.
* `Swap` event occurs in Klaytn Minter and Token Burn completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Vault's Release Process


# Heco

## Vault

### LOCK

* User requesting bridging executes `HecoVault.deposit` or `HecoVault.depositToken` Function with Bridging Fee.
* `Deposit` event occurs in Klaytn Vault and Token Lock completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Minter's MINT Process

### RELEASE

* Complete the BURN process of `fromChain` Minter
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data `HecoVault.withdraw` is executed&#x20;
* `Withdraw` event occurs in Klaytn Vault and Token Release (Transfer) completed

## Minter

### MINT

* Complete the LOCK process of `fromChain` Vault
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data `HecoMinter.swap` is executed
* `Swap` event occurs in Klaytn Minter and Token Minted

Token Initial Name & Symbol minted by Minter

* Name : Orbit Bridge Heco Token
* Symbol : OBT

To change the Token Name and Symbol, anyone can make the first change as Public, and from the second change, it can be changed with the authority of the Token Contract Owner (= Minter Contract Owner).

### BURN

* User requesting bridging executes `HecoMinter.requestSwap`Function with Bridging Fee.
* `Swap` event occurs in Klaytn Minter and Token Burn completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Vault's Release Process


# Polygon

## Vault

### LOCK

* User requesting bridging executes `MaticVault.deposit` or `MaticVault.depositToken` Function with Bridging Fee.
* `Deposit` event occurs in Klaytn Vault and Token Lock completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Minter's MINT Process

### RELEASE

* Complete the BURN process of `fromChain` Minter
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data `MaticVault.withdraw` is executed&#x20;
* `Withdraw` event occurs in Klaytn Vault and Token Release (Transfer) completed

## Minter

### MINT

* Complete the LOCK process of `fromChain` Vault
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data `MaticMinter.swap` is executed
* `Swap` event occurs in Klaytn Minter and Token Minted

Token Initial Name & Symbol minted by Minter

* Name : Orbit Bridge Polygon Token
* Symbol : OBT

To change the Token Name and Symbol, anyone can make the first change as Public, and from the second change, it can be changed with the authority of the Token Contract Owner (= Minter Contract Owner).

### BURN

* User requesting bridging executes `PolygonMinter.requestSwap`Function with Bridging Fee.
* `Swap` event occurs in Klaytn Minter and Token Burn completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Vault's Release Process


# Celo

## Vault

### LOCK

* User requesting bridging executes `CeloVault.deposit` or `CeloVault.depositToken` Function with Bridging Fee.
* `Deposit` event occurs in Klaytn Vault and Token Lock completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Minter's MINT Process

### RELEASE

* Complete the BURN process of `fromChain` Minter
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data `CeloVault.withdraw` is executed&#x20;
* `Withdraw` event occurs in Klaytn Vault and Token Release (Transfer) completed

## Minter

### MINT

* Complete the LOCK process of `fromChain` Vault
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data `CeloMinter.swap` is executed
* `Swap` event occurs in Klaytn Minter and Token Minted

Token Initial Name & Symbol minted by Minter

* Name : Orbit Bridge Celo Token
* Symbol : OBT

To change the Token Name and Symbol, anyone can make the first change as Public, and from the second change, it can be changed with the authority of the Token Contract Owner (= Minter Contract Owner).

### BURN

* User requesting bridging executes `CeloMinter.requestSwap`Function with Bridging Fee.
* `Swap` event occurs in Klaytn Minter and Token Burn completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Vault's Release Process


# ICON

## Minter

### MINT

* Complete the LOCK process of `fromChain` Vault
* Bridge Operator Catch Bridging Data agreed by Bridge Validators
* After the Bridge Operator collects the signature ​​for the agreed Bridging Data `IconMinter.swap` is executed
* `Swap` event occurs in Icon Minter and Token Minted

### BURN

* User requesting bridging executes `IconMinter.requestSwap`Function with Bridging Fee.
* `Swap` event occurs in Icon Minter and Token Burn completed
* Bridge Operator catches the event and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Vault's Release Process


# XRP

## Vault

### LOCK

* User submit `toChain` & `toAddress` in the [BRIDGE](https://bridge.orbitchain.io/) (or direct to orbitchain xrpaddressbook contract) and issued `TAG`.
* The user requesting bridging sends Transfer Transaction with the `TAG` of the rule set in XRPVault
* Bridge Operator catches the transaction and relays bridging data to Orbit Hub
* Bridge Validator consensus on relayed bridging data
* After the agreement is completed, `toChain` Minter's MINT Process

### RELEASE

* Completes the BURN process of `fromChain` Minter
* Bridge Operator proposes raw transaction for bridging data agreed by Bridge Validator
* Bridge Validator proceeds to consensus on Raw Transaction
* Each validator sign to Raw Transaction via own private key
* Using XRP's public Ledger API to broadcast multi-signing transaction

### Reference

* [multi-signing](https://xrpl.org/multi-signing.html)
* [ledger-api](https://xrpl.org/get-started-with-the-rippled-api.html)

&#x20;


# Validator Guide

## Join Official Bridge Launch Governance

* Prepare the private key needed to sign(a.k.a **validating**) the correct cross-chain bridge
* Fork launch governance repository [\[LINK](https://github.com/orbit-chain/bridge-launch-governance)]
* Commit\&Push your governance information to the vault you wish to participate in&#x20;
* Send pull request

{% hint style="warning" %}
Do not expose your private key in information
{% endhint %}

## Launch Instance

{% content-ref url="/pages/-MKXzWz0QWqcJFRvVofZ" %}
[Hardware Specifications](/validator-guide/hardware-specification)
{% endcontent-ref %}

{% content-ref url="/pages/-MKXzvaCSy\_Vn6lNcJFl" %}
[Quick Start](/validator-guide/quick-start)
{% endcontent-ref %}

## Expand Validating

### Vault

* Can participate in other vaults through the public [Github](https://github.com/orbit-chain/bridge-launch-governance).
* Launch another validator instance. Orbit Bridge is based on operating one validator in one vault.

{% hint style="warning" %}
The private key must use a different key from the existing vault.
{% endhint %}

### Chains

* There are basically 3 ways to access the chain
  * Using public node operator(like Ethereum's infura)
  * Directly operate the nodes of the chain(no need to mining block)
  * Some nodes provided by Ozys. Connection limited  by IP

{% hint style="info" %}
Each has its pros and cons. Using public node easy, but have potential stability, security risk. Running your own nodes is complex and expensive, but If you have a good understanding of the chain, can be obtain more secure, stability/
{% endhint %}

* Below are tips for each chain.

{% content-ref url="/pages/-Mc8yH5eyR8lDXmnO70s" %}
[ICON](/cross-chain-guide/icon)
{% endcontent-ref %}

{% content-ref url="/pages/-MlDQUKmyC6IgEZfS86F" %}
[Celo](/cross-chain-guide/celo)
{% endcontent-ref %}


# Notes for Validator Nodes

### Advantages from Orbit Bridge Validator Participation

\- Transmission of decentralized operation method in blockchain ecosystem

\- DAO formation experience for governance consensus for Web3.0 transition (differences from updates through centralized servers in Web2.0)

\- Gain experience in various mainnets through operation of validator nodes and accumulate know-how for node management

\- Understanding and sharing of technology in the blockchain industry that Ozys has researched and developed so far

### Ozys Validator Node Operation Features

\- Sharing the module connecting Web2.0 to Web3.0 and experiencing Orbit Bridge operation through module construction

\- Experience off-chain consensus among various cross-chain operations

\- Korean communication channel while most of the solutions communicate in English

\- Strategic combination between projects and Ozys DeFi products which enables entry into multi-chain&#x20;

### Costs for operating a validator node

\- Server(EC2) costs: minimum requirement is consist of two t3.medium that costs ($0.052000 \* 2) / hourly → approximately $80 a month

\- Monitoring system: checking node’s instance status through AWS cloudwatch, newrelic, datadog → about 10 to 30 minutes total a day

\- Human resources: dedicated manager needed for following up updates on governance, disk usage, logs, bug fixes, and so on


# Hardware Specifications

#### Recommended Specifications Based on AWS <a href="#recommended-specification-based-on-aws" id="recommended-specification-based-on-aws"></a>

<table data-header-hidden><thead><tr><th width="132">Model</th><th>vCPU</th><th>Memory (GiB)</th><th>Storage (GiB)</th><th>EBS Bandwidth (Mbps)</th><th>Network Bandwidth (Gbps)</th><th>Price (Seoul region, USD/h)</th></tr></thead><tbody><tr><td>Model</td><td>vCPU</td><td>Memory (GiB)</td><td>Storage (GiB)</td><td>EBS Bandwidth (Mbps)</td><td>Network Bandwidth (Gbps)</td><td>Price (Seoul region, USD/h)</td></tr><tr><td>t3.medium (recommended)</td><td>2</td><td>4</td><td>EBS-Only</td><td>3,500</td><td>Up to 5</td><td>0.052 USD</td></tr></tbody></table>


# Validator Reward Structure

as of 12/26/2022

\- 100,000 ORC per year with validating the first network (additional 20,000 ORC per year for each participation with additional network validation)

\- Additional compensation of 1500 ORC per quarter to TOP3 validator with validating the most transactions (more networks are more advantageous)

\- wallet address will be confirmed at the beginning of each quarter, and compensation will be paid after confirmation of all validator nodes

\- The compensation plan is subject to change in the future<br>


# Quick Start

The information above is based on AWS ec2 instance, ubuntu LTS 20.04

### Requirements

* Connect to fully synced chain's client, such as Orbit Chain, Ethereum, Klaytn, etc... Some helpful instructions below:
  * Ethereum
    * [infura.io](https://infura.io)
    * [Run Geth](https://geth.ethereum.org/docs/)
  * Klaytn
    * [Run Endpoint Node](https://docs.klaytn.com/getting-started/quick-start/launch-an-en)
  * BSC
    * [RPC](https://docs.binance.org/smart-chain/developer/rpc.html)
    * [Run node](https://docs.binance.org/smart-chain/developer/fullnode.html)
  * HECO
    * [RPC](https://docs.hecochain.com/#/en-us/mainnet)
    * [Run node](https://docs.hecochain.com/#/en-us/dev/deploy)
  * MATIC
    * [RPC](https://docs.matic.network/docs/develop/network-details/network/)
    * [Run node](https://docs.matic.network/docs/integrate/full-node-deployment)
* Docker-Compose

### Using Docker

* For aligned environments, we recommend using Docker.
* Please refer to the links when you have problems regarding Docker installation.
  * [docker-engine](https://docs.docker.com/engine/install/), [docker-compose](https://docs.docker.com/compose/install/)

{% tabs %}
{% tab title="Ubuntu" %}

```bash
echo '# docker engine section
sudo apt update && sudo apt dist-upgrade -y && sudo apt upgrade -y &&
sudo apt-get remove -y docker docker-engine docker.io containerd runc
sudo apt-get install -y\
    apt-transport-https\
    ca-certificates\
    curl\
    jq\
    gnupg-agent\
    software-properties-common &&
curl -fsSL https://download.docker.com/linux/ubuntu/gpg > docker.gpg
sudo apt-key add docker.gpg &&
rm docker.gpg &&
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable" &&
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
# docker compose section
sudo apt install docker-compose-plugin -y
sudo chmod +x /usr/local/bin/docker-compose
# sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose' > init.sh

bash init.sh
```

{% endtab %}

{% tab title="..." %}

{% endtab %}
{% endtabs %}

### Launch (v1.0.5 \~)

Starting from v1.0.5, `.env` is used instead of `settings.js`. You only need to manage `VALIDATOR_PK`, Expanded Nodes, Kas Credential, `TON_API_KEY` instead of RPC endpoints.

* Download source files [**here**](https://github.com/orbit-chain/bridge-dockerize/releases)
* Put your own configuration in `/composes/<chain>/.env`

{% code title=".example.env" overflow="wrap" lineNumbers="true" %}

```bash
VALIDATOR_PK=

# EXPANDED NODE RPC ex) infura, alchemy, etc...
# Type of value must be an array.
# ex) ["https://mainnet.infura.io/v3/[PROJECT_ID]", "https://eth-mainnet.g.alchemy.com/v2/[PROJECT_ID]"]
AVAX=[]
BSC=[]
CELO=[]
ETH=[]
FANTOM=[]
HARMONY=[]
HECO=[]
KLAYTN=[]
MATIC=[]
XDAI=[]

#KAS CREDENTIAL
KAS_ACCESS_KEY_ID=
KAS_SECRET_ACCESS_KEY=

#TON
TON_API_KEY=
```

{% endcode %}

* (1): VALIDATOR\_PK **(required)**
* (6)\~(15): Expanded Nodes (recommended)
* (18)\~(19): Kas Credential (recommended)
* (22): TON\_API\_KEY **(required for `TON`, `ETH`, `KLAYTN`, `METADIUM`, `POLYGON`, `WEMIX` vault validators)**

#### **\[ How to launch ]**

1. Copy `.env`

```bash
cp .example.env ~/bridge-dockerize/composes/<chain>/.env
```

2. Fill `.env` with `VALIDATOR_PK`, `TON_API_KEY`, etc.
3. Launch node

{% code overflow="wrap" %}

```bash
sudo docker compose -f bridge-dockerize/composes/<chain>/docker-compose.yml up -d --build
```

{% endcode %}

###

### Monitoring Commands

* Check connection status

{% code overflow="wrap" %}

```bash
sudo docker compose -f bridge-dockerize/composes/<chain>/docker-compose.yml exec validator curl http://localhost:8984 | jq '.'
```

{% endcode %}

* Check logs

{% code overflow="wrap" %}

```bash
sudo docker compose -f bridge-dockerize/composes/<chain>/docker-compose.yml logs -f validator
```

{% endcode %}

* Restart instance

{% code overflow="wrap" %}

```bash
sudo docker compose -f bridge-dockerize/composes/<chain>/docker-compose.yml up -d --build --force-recreate
```

{% endcode %}

### Launch (Duplicated)

* Download source files [**here**](https://github.com/orbit-chain/bridge-dockerize/releases)
* Download specific vault's **settings.js** file [**here**](https://github.com/orbit-chain/bridge-launch-governance)
* Place your governance key into **settings.js**

```javascript
VALIDATOR_ACCOUNT : {
    TYPE: "PK",
    DATA: "YOUR_PRIVATE_KEY_HERE",
}
```

* If using [infura](https://infura.io/) for eth node, place your infura \[PROJECT ID] into **settings.js**
* replace file into dockerize vault dir.&#x20;

```
cp settings.js ~/bridge-dockerize/[ethvault/xrpvault/bscvault/iconvault]-validator/
```

* Launch node

```bash
tar xvzf bridge-dockerize-0.4.1.tar.gz
cp settings.js bridge-dockerize/[ethvault/xrpvault/bscvault/iconvault]-validator/
sudo docker-compose -f bridge-dockerize/[ethvault/xrpvault/bscvault/iconvault]-validator/docker-compose.yml up -d --build
```

* Check launch status

```
sudo docker-compose -f bridge-dockerize/[ethvault/xrpvault/bscvault/iconvault]-validator/docker-compose.yml exec validator curl http://localhost:8984 | jq '.'
```

```bash
sudo docker-compose -f bridge-dockerize/[ethvault/xrpvault/bscvault/iconvault]-validator/docker-compose.yml logs -f validator
```


# REST API

### Validator APIs

```
GET|POST /
```

> Returns the brief status of validator instance.

```
GET|POST /v1/gov/getAddress/:chain
```

> Returns the chain Address of validator instance.

```
GET|POST /v1/gov/getTransaction/:chain/:address/:transactionId
```

> Returns the submitted transaction in multi-sig wallet contract.

```
GET|POST /v1/gov/confirm/:chain/:address/:transactionId
```

> Returns the transaction hash that has been sent by the Validator.

```
GET|POST /v1/gov/confirmRange/:chain/:address/:start/:end
```

> Returns the transaction hash that has been sent by the Validator.

```
GET|POST /v1/gov/validate/:chain/:address/:sigHash
```

> Returns the transaction hash that has been sent by the Validator.


# Configuration

### Configuration File Format

```
{
    // operating chain list
    chainList: [
        'eth',
        'klaytn',
        'icon'
    ],

    // Bridge Addresses
    BridgeAddress: {
        OrbitHubContract: "0x0000000000000000000000000000000000000000",
        OrbitBridgeHubContract: "0x0000000000000000000000000000000000000000",
        EthBridgeContract: "0x0000000000000000000000000000000000000000",
        KlaytnBridgeContract: "0x0000000000000000000000000000000000000000",
        IconBridgeContract: "0x0000000000000000000000000000000000000000",
        MessageMultiSigWallet: {
            Hub: "0x0000000000000000000000000000000000000000",
            Eth: "0x0000000000000000000000000000000000000000",
            Klaytn: "0x0000000000000000000000000000000000000000",
            Icon: "0x0000000000000000000000000000000000000000"
        },
        Eth: {
            EthVaultContract: "0x0000000000000000000000000000000000000000",
        },
        Klay: {
            KlaytnMinterContract: "0x0000000000000000000000000000000000000000",
            MessageMultiSigWallet: "0x0000000000000000000000000000000000000000",
        },
        Icon: {
            IconMinterContract: "cx0000000000000000000000000000000000000000",
            MessageMultiSigWallet: "cx0000000000000000000000000000000000000000",
        },
        Governance: {
            Chain: "ETH",
            Address: "0x0000000000000000000000000000000000000000",
            Bytes: "0x0000000000000000000000000000000000000000",
            Id: "0x0000000000000000000000000000000000000000000000000000000000000000",
        }
    },

    // Node Endpoints
    Endpoints : {
        Orbit: {
            rpc : "http://orbitchain",
            socket: "ws://orbitchain",
        },
        Eth : {
            rpc : "http://infura",
            socket : "ws://infura",
        },
        Klaytn: {
            // false: Using your node (not public EN), true: Using Kas node
            isKas: false,
    
            // your node configuration (not public EN)
            rpc: "",
            socket: "",

            // Kas configuration
            Kas: {
                // KAS Default
                rpc: "https://node-api.klaytnapi.com/v1/klaytn",
                chainId: 8217,

                // Your Credential
                accessKeyId: "",
                secretAccessKey: ""
            }
        },
        Icon: {
            api: 'https://ctz.solidwallet.io/api/v3',
            debug: 'https://ctz.solidwallet.io/api/debug/v3',
            version: 3,
            nid: 1
        },
    },

    DEBUG: true,
    LOGLEVEL: 'debug',

    // WIP: validator things.
    VALIDATOR_ACCOUNT: {
        TYPE: "PK",
        DATA: "0000000000000000000000000000000000000000000000000000000000000000",
    },
}
```

### Properties

The configuration file has the following configurable properties:

| Name               | Description                                                                                 |
| ------------------ | ------------------------------------------------------------------------------------------- |
| chainList          | List of chains to provide bridging services.                                                |
| BridgeAddress      | Information such as contract and wallet address deployed to each chain for bridging service |
| Endpoints          | Public node endpoints to use for transaction verification                                   |
| VALIDATOR\_ACCOUNT | Validator private key for bridging transaction signing                                      |


# Troubleshooting


# Operator Guide


# Hardware Specifications

#### Recommended Specifications Based on AWS <a href="#recommended-specification-based-on-aws" id="recommended-specification-based-on-aws"></a>

| Model                  | vCPU | Memory (GiB) | Storage (GiB) | EBS Bandwidth (Mbps) | Network Bandwidth (Gbps) | Price (Seoul region, USD/h) |
| ---------------------- | ---- | ------------ | ------------- | -------------------- | ------------------------ | --------------------------- |
| m5.large (recommended) | 2    | 8            | EBS-Only      | 3,500                | Up to 10                 | 0.118 USD                   |


# Quick Start

The information above is based on AWS ec2 instance, ubuntu LTS 18.04

### Requirements

* Connect to a fully synced chain's client, such as Orbit Chain, Ethereum, Klaytn, Terra, etc... Here are some helpful instructions:
  * Ethereum
    * [infura.io](https://infura.io)
    * [Run Geth](https://geth.ethereum.org/docs/)
  * Klaytn
    * [Run Endpoint Node](https://docs.klaytn.com/getting-started/quick-start/launch-an-en)
  * Terra
    * [public lcd](https://lcd.terra.dev)
    * [Run terra node](https://docs.terra.money/node/installation.html)
* Docker-compose

### Using Docker

* for aligned environments, we recommend using Docker.
* Please refer to these links if you have a problem while installing Docker.&#x20;
  * [docker-engine](https://docs.docker.com/engine/install/), [docker-compose](https://docs.docker.com/compose/install/)

{% tabs %}
{% tab title="Ubuntu" %}

```bash
# docker engine section
sudo apt-get remove -y docker docker-engine docker.io containerd runc &&
sudo apt-get update &&
sudo apt-get upgrade -y &&
sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common &&   
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - &&
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable" &&
sudo apt-get update &&
sudo apt-get install docker-ce docker-ce-cli containerd.io -y

# docker compose section
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
```

{% endtab %}

{% tab title="..." %}

{% endtab %}
{% endtabs %}

### Download

* Download source files [here](https://github.com/orbit-chain/bridge-dockerize/releases)
* Download a specific vault's **settings.js** file [here](https://github.com/orbit-chain/bridge-launch-governance)

### Setup Environments

* See the [configuration](https://app.gitbook.com/@orbit-1/s/orbit-bridge/~/drafts/-MKhDXKvuHOaX9Np7mLO/operator-guide/configuration) section.&#x20;
* Place your governance key into **settings.js**
* If using [infur](https://infura.io/) for eth node, place your infura \[PROJECT ID] into **settings.js**

```javascript
VALIDATOR_ACCOUNT : {
    TYPE: "PK",
    DATA: "YOUR_PRIVATE_KEY_HERE",
}
```

* Ddit your redis information into **settings.js, docker-compose.yml**
* It is a hard requirement to match **settings.js**'s REDIS\_HOST and **docker-compose.yml**'s service names.

{% tabs %}
{% tab title="settings.js" %}

```
REDIS_HOST: "redis",
REDIS_PORT: 6379,
REDIS_EXPIRE: 7200,
REDIS_DB : 1,

REDIS_EVENT_HOST: 'redis',
REDIS_EVENT_PORT: 6379,
REDIS_EVENT_DB: 1,
```

{% endtab %}

{% tab title="docker-compose.yml" %}

```
services:
  redis:
    image: redis:latest
```

{% endtab %}
{% endtabs %}

* Ddit your mysql root account's secret into **mysql-secret** before launching Docker.

```
echo "MY_MYSQL_ROOT_PASSWORD" > bridge-dockerize/ethvault/mysql-secret
```

* Edit your mysql information in **settings.js, docker-compose.yml**
* It is a hard requirement to match **settings.js**'s DB\_HOST and **docker-compose.yml**'s service names.

{% tabs %}
{% tab title="settings.js" %}

```
DB_HOST: 'mysql',
DB_PORT: '3306',
DB_USER: 'root',
DB_PASSWORD: mysqlSecret,
DB_DATABASE: 'bridge',
DB_CHARSET: 'utf8mb4',
DB_MIN_POOL_SIZE: 2,
DB_MAX_POOL_SIZE: 10,
```

{% endtab %}

{% tab title="docker-compose.yml" %}

```
services:
  mysql:
    image: mysql:5.7
    volumes:
      - ../data-ethvault/mysql:/var/lib/mysql
    environment:
      MYSQL_DATABASE: bridge
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql-secret
    secrets:
      - mysql-secret
    ports:
      - 13306:3306
    networks:
      - br-ethvault
secrets:
  mysql-secret:
    file: ./mysql-secret
```

{% endtab %}
{% endtabs %}

### Launch

```bash
tar xvzf bridge-dockerize-0.0.1.tar.gz
cp settings.js bridge-dockerize/ethvault/
sudo docker-compose -f bridge-dockerize/ethvault/docker-compose.yml up -d --build
```

### Monitoring

```bash
sudo docker-compose -f bridge-dockerize/ethvault/docker-compose.yml logs -f nodes
```


# REST API

### Parser APIs

```
GET /v1/{chainName}/fullBlock/{blockNum}
e.g. /v1/ozys/fullblock/1234567
```

> Returns the entire block info of the block with the matching block number.

```
GET /v1/{chainName}/scanBlock/{blockNum}
e.g. /v1/terra/scanBlock/1234567
```

> Returns the parsed block info which only contains transactions from/to Orbit Bridge of of the block with the matching block number. Note that this API only exists in specific chains.

```
GET /v1/{chainName}/tx/{hash}
e.g. /v1/ozys/tx/0xb91c7b18851ca37fec6a4aabb6b9595ae5f84a7cf0966321144f48fe6c197617
```

> Returns the transaction info of the transaction with the matching transaction hash.

### Syncer APIs

```
GET /v1/{chainName}/lock-relay
```

> Returns the list of transactions that need to be validated by Orbit Hub.

```
GET /v1/{chainName}/pending-release
```

> Returns the list of transactions that has been validated by Orbit Hub and is waiting to be executed.

### Validator APIs

```
GET|POST /
```

> Returns the brief status of validator instance.

```
GET|POST /v1/gov/confirm/:address/:transactionId
```

> Returns the transaction hash that has been sent by the Validator.


# Configuration

## Settings.js

### Configuration File Format

```
{
    // operating chain list
    chainList: [
        'eth',
        'klaytn',
        'icon',
    ],

    // Bridge Addresses
    BridgeAddress: {
        OrbitHubContract: "0x0000000000000000000000000000000000000000",
        OrbitBridgeHubContract: "0x0000000000000000000000000000000000000000",
        EthBridgeContract: "0x0000000000000000000000000000000000000000",
        KlaytnBridgeContract: "0x0000000000000000000000000000000000000000",
        IconBridgeContract: "0x0000000000000000000000000000000000000000",
        MessageMultiSigWallet: {
            Hub: "0x0000000000000000000000000000000000000000",
            Eth: "0x0000000000000000000000000000000000000000",
            Klaytn: "0x0000000000000000000000000000000000000000",
            Icon: "0x0000000000000000000000000000000000000000"
        },
        Eth: {
            EthVaultContract: "0x0000000000000000000000000000000000000000",
        },
        Klay: {
            KlaytnMinterContract: "0x0000000000000000000000000000000000000000",
            MessageMultiSigWallet: "0x0000000000000000000000000000000000000000",
        },
        Icon: {
            IconMinterContract: "cx0000000000000000000000000000000000000000",
            MessageMultiSigWallet: "cx0000000000000000000000000000000000000000",
        },
        Governance: {
            Chain: "ETH",
            Address: "0x0000000000000000000000000000000000000000",
            Bytes: "0x0000000000000000000000000000000000000000",
            Id: "0x0000000000000000000000000000000000000000000000000000000000000000",
        }
    },

    // Node Endpoints
    Endpoints : {
        Orbit: {
            rpc : "http://orbitchain",
            socket: "ws://orbitchain",
        },
        Eth : {
            rpc : "http://infura",
            socket : "ws://infura",
        },
        Klaytn: {
            // false: Using your node (not public EN), true: Using Kas node
            isKas: false,
    
            // your node configuration (not public EN)
            rpc: "",
            socket: "",

            // Kas configuration
            Kas: {
                // KAS Default
                rpc: "https://node-api.klaytnapi.com/v1/klaytn",
                chainId: 8217,

                // Your Credential
                accessKeyId: "",
                secretAccessKey: ""
            }
        },
        Icon: {
            api: 'https://ctz.solidwallet.io/api/v3',
            debug: 'https://ctz.solidwallet.io/api/debug/v3',
            version: 3,
            nid: 1
        },
        Parser: {
            api: "http://localhost:8084",
        },
        Syncer: {
            api: "http://localhost:9797/v1", 
        },
    },

    DEBUG: true,
    LOGLEVEL: 'debug',

    // WIP: validator things.
    VALIDATOR_ACCOUNT: {
        TYPE: "PK",
        DATA: "0000000000000000000000000000000000000000000000000000000000000000",
    },

    // WIP: operator things.
    OPERATOR_ACCOUNTS: {
        Klay: {
            TYPE: "PK",
            FEE_PAYER_ADDRESS : "0x0000000000000000000000000000000000000000",
            DATA: "0x0000000000000000000000000000000000000000000000000000000000000000",
        },
        Eth: {
            RELEASE: {
                TYPE: "PK",
                ADDRESS: "0x0000000000000000000000000000000000000000",
                DATA: "0000000000000000000000000000000000000000000000000000000000000000",
            },
        },
        Icon: {
            RELEASE: {
                TYPE: "PK",
                ADDRESS: "hx0000000000000000000000000000000000000000",
                DATA: "0000000000000000000000000000000000000000000000000000000000000000",
            },
        },
    },

    // WIP: Parser things.
    REDIS_HOST: "redis",
    REDIS_PORT: 6379,
    REDIS_EXPIRE: 7200,
    REDIS_DB : 1,

    // WIP: syncer things.
    REDIS_EVENT_HOST: 'redis',
    REDIS_EVENT_PORT: 6379,
    REDIS_EVENT_DB: 1,

    REDIS_EVENT_CHANNEL: process.env.PROFILE + 'priestNewBlock',
    REDIS_ETHEVENT_CHANNEL: process.env.PROFILE + 'ethNewBlock',
    REDIS_TERRAEVENT_CHANNEL: process.env.PROFILE + 'terraNewBlock',
    REDIS_KLAYTNEVENT_CHANNEL: process.env.PROFILE + 'klaytnNewBlock',

    REDIS_PUBLISHER_HOST: 'redis',
    REDIS_PUBLISHER_PORT: 6379,
    REDIS_PUBLISHER_DB: 1,

    REDIS_ETH_BRIDGE_CHANNEL: 'ethbridge',
    REDIS_TERRA_BRIDGE_CHANNEL: 'terrabridge',
    REDIS_ORBIT_BRIDGE_CHANNEL: 'orbitbridge',
    REDIS_KLAYTN_BRIDGE_CHANNEL: 'klaytnbridge',

    MIGRATE_BOTTOM_INCLUDE: 10000000,
    MIGRATE_TOP_EXCLUDE: 12785269,

    RPC_SERVER: 'http://localhost:8084',

    TERRA_BALANCE_INQUIRY_ENDPOINT: '/v1/terra/balance',

    ERC20_BALANCE_INQUIRY_ENDPOINT: '/v1/eth/getBalance',

    DB_CLIENT: 'mysql',
    DB_HOST: 'mysql',
    DB_PORT: '3306',
    DB_USER: 'root',
    DB_PASSWORD: 'password',
    DB_DATABASE: 'bridge',
    DB_CHARSET: 'utf8mb4',
    DB_MIN_POOL_SIZE: 2,
    DB_MAX_POOL_SIZE: 10,
    DB_MIGRATION_TABLE_NAME: 'knex_migrations',

    // dev 30 seconds
    REGISTER_INTERVAL: 30,
}
```

### Properties

The configuration file has the following configurable properties:

| Name                                    | Description                                                                                                                            |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| chainList                               | List of chains to provide bridging services.                                                                                           |
| BridgeAddress                           | Information such as contract and wallet address deployed to each chain for bridging service                                            |
| Endpoints                               | Public node endpoints to use for transaction verification                                                                              |
| VALIDATOR\_ACCOUNT                      | Validator private key for bridging transaction signing                                                                                 |
| OPERATOR\_ACCOUNTS                      | Account information to pay the tx fee when generating a transaction                                                                    |
| REDIS\_%                                | Redis instance related information to support communication and simple caching between parser/ syncer/ operator                        |
| MIGRATE\_%                              | Settings for syncer DB management                                                                                                      |
| DB\_%                                   | <p>DB-related settings to be used in syncer. <br>Note that editing this section may lead to discrepancies with docker-compose.yml.</p> |
| RPC\_SERVER, REGISTER\_INTERVAL, etc... | will be removed soon.                                                                                                                  |


# Troubleshooting


# Official Bridge Governance

The conversion of all coins takes place through governance consensus amongst the designated validators of each chain.

## Official governance info repository

<https://github.com/orbit-chain/bridge-launch-governance>

## Ethereum Bridge (Ethereum vault)

* Validator list

  * OZYS ([https://orbitchain.io](https://orbitchain.io/))
  * KLAYTN  ([https://www.klaytn.com](https://www.klaytn.com/))
  * DSRV ([https://www.dsrvlabs.com/en](https://www.dsrvlabs.com/en/))
  * NODE A TEAM ([https://nodeateam.com](https://nodeateam.com/))
  * EVERSTAKE (<https://everstake.one>)
  * HASHQUARK ([https://hashquark.io](https://hashquark.io/))
  * ICON FOUNDATION (<https://icon.foundation>)

* Governance Info

```
{
		// Governance Validator Public Address
		ozys : "0x8a3F117Ef3b40f1661Dedf7f28fC33E7b6fae4F8",
		dxm : "0x67C3c784C49d9ab8757ADb71491df1A1B38FbFA8",
    		klaytn : "0x34ebf4f74a881eb63f666e63ce1ff2f287ca5a8b",
		dsrv : "0x3924Ac70075078A7713f543b72e3F8817ecEc646",
		node_a_team : "0xd1176F2f576C102F6516D386De53ec7a72Cc1491",
		everstake : "0xa6dc28CbcB2f8060a00b4FA67F9b67775AC5a3a1",
		hashquark : "0x6013f0B3ffE1fFdcA3Fc6A8cd705b1Af048F7437",
		icon : "0x1c0cd56f1c3e2cf13b9b44dbe5529104bade543e",
		
		// Contract Info
		governance_id : "0x50f408f4b0fb17bf4f5143de4bd95802410d00422f008e9deef06fb101a0f060",
		
		// https://etherscan.io/address/0x1bf68a9d1eaee7826b3593c20a0ca93293cb489a#code
		eth_vault_contract : "0x1bf68a9d1eaee7826b3593c20a0ca93293cb489a",
		
		// http://scope.klaytn.com/account/0x60070F5D2e1C1001400A04F152E7ABD43410F7B9?tabId=contractCode
		klaytn_minter_contract : "0x60070F5D2e1C1001400A04F152E7ABD43410F7B9"
		
		// https://tracker.icon.foundation/contract/cx0eb215b6303142e37c0c9123abd1377feb423f0e
		icon_minter_contract : "cx0eb215b6303142e37c0c9123abd1377feb423f0e"
		
		// OrbitBridge Klaytn Token List
		korc: "0xfe41102f325deaa9f303fdd9484eb5911a7ba557",
		keth: "0x34d21b1e550d73cee41151c77f3c73359527a396",
		kusdt: "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167",
		kdai: "0x5c74070fdea071359b86082bd9f9b3deaafbe32b",
		kwbtc: "0x16d0e1fbd024c600ca0380a4c5d57ee7a2ecbf9c"
}
```

## Request for launch bridge governance

Orbit Bridge, as a protocol provider, hopes that a variety of governance utilizes our protocol to scale. Please contact the Orbit Chain development team to launch new governance or chains  in Orbit Bridge.

##


# Token Registration for Bridging


# Registration Using Etherscan

Bridge ERC-20 to another chain (Klaytn, Polygon, etc...)

This guide is based on the contract address and amount supplied. Take this guide as a reference and type in the exact numbers and address as told.

### Contract Address

* Token: ORC (0x662b67d00a13faf93254714dd601f5ed49ef2f51)
* Vault address : 0x1bf68a9d1eaee7826b3593c20a0ca93293cb489a

### ▶ STEP 1

#### ERC-20 Token approval Process&#x20;

1. Open the chrome browser.&#x20;
2. Go to "<https://etherscan.io"&#x20>;
3. Search by your \[Token contract]&#x20;
4. Click the 'Contract' tab. Click the 'Write Contract' tab.&#x20;
5. Click 'Connect to Web3' button.&#x20;
6. Connect to your wallet.&#x20;
7. Click the ‘1. approve' row.&#x20;
8. Fill the accurate value to column. \
   (1). \_spender (address): 0x1bf68a9d1eaee7826b3593c20a0ca93293cb489a \
   (2). \_value (uint256): uint256 max - 1 (Maximum value) or Quantity to bridge
9. Click the 'Write' button.

<figure><img src="/files/jb7MKvTejVJjGHh97Dx3" alt=""><figcaption><p>Search by your [Token contract] </p></figcaption></figure>

<figure><img src="/files/DoapNYUXkhDZuhSsRWKg" alt=""><figcaption><p>Click the 'Contract' tab. Click the 'Write Contract' tab.</p></figcaption></figure>

<figure><img src="/files/TCqo5O0yJKInrSLSZwc2" alt=""><figcaption><p>Click 'Connect to Web3' button. </p></figcaption></figure>

<figure><img src="/files/L3eLiqsCIfMF9Jb9DgF7" alt=""><figcaption><p>Connect to your wallet. </p></figcaption></figure>

<figure><img src="/files/iB4APV2fEnoLjbceBg3Y" alt=""><figcaption><p>Click the ‘1. approve' row. Fill the accurate value to column. </p></figcaption></figure>

<figure><img src="/files/2Fbqq0JR2lt5jOdi2DWR" alt=""><figcaption><p>Click the 'Write' button.</p></figcaption></figure>

### ▶ STEP 2

#### depositToken Implement Process&#x20;

1. Open the chrome browser.
2. Go to "<https://etherscan.io"&#x20>;
3. Search by \[vault address]
4. Click the 'Contract' tab. Click the 'Write as Proxy" tab.
5. Click 'Connect to Web3' button.
6. Connect to your wallet.
7. Click the '1. depositToken' row.
8. Fill the accurate value to column.\
   (1) depositToken : 0

   (2) token (address) : \[ORC address]

   (3) toChain (string) : KLAYTN (or ICON or ORBIT)

   (4) toAddr (bytes) : \[Want to receive your wallet address]\
   (5) amount (uint256) : 1,000,000,000,000,000,000 (= 1 ORC) / Decimal 18
9. Click the 'Write' button.

<figure><img src="/files/EsLwoskUZUpqFcSJvman" alt=""><figcaption><p>Search by [vault address]</p></figcaption></figure>

<figure><img src="/files/OxUy3Jm1eZICXz5hGyfP" alt=""><figcaption><p>Click the 'Contract' tab. Click the 'Write as Proxy" tab.</p></figcaption></figure>

<figure><img src="/files/5vpFefDHEcVwUDpfkHNT" alt=""><figcaption><p>Click 'Connect to Web3' button.</p></figcaption></figure>

<figure><img src="/files/Ef5O1czhwMRjVBs36spv" alt=""><figcaption><p>Connect to your wallet.</p></figcaption></figure>

<figure><img src="/files/LN75jmxS9ZSylmKspUGx" alt=""><figcaption><p>Click the '1. depositToken' row. Fill the accurate value to column.</p></figcaption></figure>

<figure><img src="/files/NoqDeDcZDj2sSAoRbcYB" alt=""><figcaption><p>Click the 'Write' button.</p></figcaption></figure>


# Registration Using Remix

Bridge KIP-7 (fungible token, original token on KLAYTN) to another chain (Ethereum, Polygon, etc...)

This guide is based on the contract address and amount supplied. Take this guide as a reference and type in the exact numbers and address as told.

### MetaMask

* Networks

```json
KLAYTN : https://public-en-cypress.klaytn.net
```

* Add Network from the networks dropdown if needed

<figure><img src="/files/svyBG2t5lxgVcSwqy3wc" alt=""><figcaption></figcaption></figure>

* Open Networks again and select the network you added

## [Remix IDE](https://remix.ethereum.org/)

Remix IDE - an online IDE to develop smart contracts.

* [Docs](https://remix-ide.readthedocs.io/en/latest/index.html)
* Download abi files

{% file src="/files/FaKvJ0AGhH1SYTbdR09h" %}
Layer 1 means original token platforms (ex. KSP's Layer 1 => KLAYTN)
{% endfile %}

{% file src="/files/wrR9MRxlL8XiVzE8d35c" %}
ft means Fungible Token (ERC-20, KIP-7)
{% endfile %}

* Load abi files into Remix IDE

<div align="left"><figure><img src="/files/5oq63GVqrm8MXnMksQJb" alt=""><figcaption></figcaption></figure></div>

* Select ft.abi

<div align="left"><figure><img src="/files/CJ2hYXfpPxZjy9M6Lp5U" alt=""><figcaption></figcaption></figure></div>

* Approve Token
  * Select Deploy & Run Transaction on left bar
  * Select Injected Web3 for Environment&#x20;
    * For Metamask
    * Check chainID (ex. KLAYTN : 8217)
  * Put your token address and Load Contract (ex. KSP :  0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654)
  * Put spender and the amount to be bridged&#x20;
    * In this case KLAYTN Layer 1 contract : 0x9Abc3F6c11dBd83234D6E6b2c373Dfc1893F648D
    * If your original token is on a chain other than KLAYTN, please refer to the [Layer 1 contract addresses](broken://pages/7Xbz9zj23T8zpbmhKnd9)
  * Click transact button

<div><figure><img src="/files/MANJLQjywI9R19WCTay4" alt=""><figcaption></figcaption></figure> <figure><img src="/files/sf6aAFMyPIYswFZwiEUo" alt=""><figcaption><p>Updated dropdown menu<br>Select [Injected Provider - MetaMask]</p></figcaption></figure></div>

* Send Transaction using Metamask

<div align="left"><figure><img src="/files/3jfUJyk3zGw2YVrLdZy1" alt=""><figcaption><p>choose edit</p></figcaption></figure> <figure><img src="/files/I9Ba9dacRT36EJdV7kFW" alt=""><figcaption><p>edit gas fee</p></figcaption></figure> <figure><img src="/files/OHSgiT5fk9rcxLoS7BVw" alt=""><figcaption><p>make sure priority fee and fee to 750</p></figcaption></figure></div>

* Bridge Token
  * Load the Layer 1 contract referring to the Approve Token step
  * KLAYTN Layer 1 contract : 0x9Abc3F6c11dBd83234D6E6b2c373Dfc1893F648D
  * Get ChainId for toChain (Use MATIC for POLYGON due to predefined bridge rules)
  * Put chainId to check if toChain is a supported chain
  * Put chainId to check the bridge fee to toChain
    * If chainFee is zero, then value set 0
    * if not, you must put chainFee in VALUE. (ether = 10^18 wei)
  * Dropdown depositToken, fill params and click transact
    * token : your token address \
      (ex. KSP : 0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654)
    * toAddr : address for receive bridged token
    * amount : 1 \
      (ex. 0.04 KSP = 40000000000000000, decimal = 18)\
      Basically, you are sending the minimum amount to register the token, 1/10^18 since the contract is based on the standard of decimal 18
  * Send Transaction referring to the Send Transaction using Metamask step
  * You can check the bridged token by searching for toAddr in toChain's explorer

<figure><img src="/files/ScGT1CUjtnwdlSR2Tr6M" alt=""><figcaption></figcaption></figure>

<div align="center"><figure><img src="/files/gdUysKhy387fMe7BdXFW" alt=""><figcaption><p>If the chainFee shows any gas fee, put the same amount in the GAS FEE value</p></figcaption></figure></div>

<figure><img src="/files/7z7O3OdmGPmU6VaJyyRU" alt=""><figcaption><p>When the transaction is completed, tochain's explorer shows the result as above</p></figcaption></figure>


# Bridge to The Open Network(TON)

Guideline for bridging tokens to TON

TON based wallet has different type as we generally use for ERC20. Please refer to the scripts' hashPart for switching your address to 32byte address\
<https://github.com/jaybbbb/bridge-utils>


# Registration on TON Using Etherscan

Bridge ERC-20 to TON

This guide is based on the contract address and amount supplied. Take this guide as a reference and type in the exact numbers and address as told.

### Contract Address

* Token: ORC (0x662b67d00a13faf93254714dd601f5ed49ef2f51)
* Vault address : 0x1bf68a9d1eaee7826b3593c20a0ca93293cb489a

### ▶ STEP 1

#### ERC-20 Token approval Process&#x20;

1. Open the chrome browser.&#x20;
2. Go to "<https://etherscan.io"&#x20>;
3. Search by your \[Token contract]&#x20;
4. Click the 'Contract' tab. Click the 'Write Contract' tab.&#x20;
5. Click 'Connect to Web3' button.&#x20;
6. Connect to your wallet.&#x20;
7. Click the ‘1. approve' row.&#x20;
8. Fill the accurate value to column. \
   (1). \_spender (address): 0x1bf68a9d1eaee7826b3593c20a0ca93293cb489a \
   (2). \_value (uint256): uint256 max - 1 (Maximum value) or Quantity to bridge
9. Click the 'Write' button.

<figure><img src="/files/jb7MKvTejVJjGHh97Dx3" alt=""><figcaption><p>Search by your [Token contract] </p></figcaption></figure>

<figure><img src="/files/DoapNYUXkhDZuhSsRWKg" alt=""><figcaption><p>Click the 'Contract' tab. Click the 'Write Contract' tab.</p></figcaption></figure>

<figure><img src="/files/TCqo5O0yJKInrSLSZwc2" alt=""><figcaption><p>Click 'Connect to Web3' button. </p></figcaption></figure>

<figure><img src="/files/L3eLiqsCIfMF9Jb9DgF7" alt=""><figcaption><p>Connect to your wallet. </p></figcaption></figure>

<figure><img src="/files/iB4APV2fEnoLjbceBg3Y" alt=""><figcaption><p>Click the ‘1. approve' row. Fill the accurate value to column. </p></figcaption></figure>

<figure><img src="/files/2Fbqq0JR2lt5jOdi2DWR" alt=""><figcaption><p>Click the 'Write' button.</p></figcaption></figure>

### ▶ STEP 2

#### depositToken Implement Process&#x20;

1. Open the chrome browser.
2. Go to "<https://etherscan.io"&#x20>;
3. Search by \[vault address]
4. Click the 'Contract' tab. Click the 'Write as Proxy" tab.
5. Click 'Connect to Web3' button.
6. Connect to your wallet.
7. Click the '1. depositToken' row.
8. Fill the accurate value to column.\
   (1) depositToken : 0

   (2) token (address) : \[ORC address]

   (3) toChain (string) : TON

   (4) toAddr (bytes) : \[Your TON based wallet address that want to receive your token]\
   TON based wallet has different type as we generally use for ERC20. Please refer to the scripts' hashPart for switching your address to 32byte address\
   <https://github.com/jaybbbb/bridge-utils>\
   (5) amount (uint256) : 1 \
   (Basically, you are sending the minimum amount to register the token, 1/10^18 since the contract is based on the standard of decimal 18)
9. Click the 'Write' button.

<figure><img src="/files/EsLwoskUZUpqFcSJvman" alt=""><figcaption><p>Search by [vault address]</p></figcaption></figure>

<figure><img src="/files/OxUy3Jm1eZICXz5hGyfP" alt=""><figcaption><p>Click the 'Contract' tab, and then 'Write as Proxy" tab.</p></figcaption></figure>

<figure><img src="/files/5vpFefDHEcVwUDpfkHNT" alt=""><figcaption><p>Click 'Connect to Web3' button.</p></figcaption></figure>

<figure><img src="/files/Ef5O1czhwMRjVBs36spv" alt=""><figcaption><p>Connect to your wallet.</p></figcaption></figure>

<figure><img src="/files/LN75jmxS9ZSylmKspUGx" alt=""><figcaption><p>Click the '2. depositToken(0x0ac09684)'. Fill in the information.</p></figcaption></figure>

<figure><img src="/files/NoqDeDcZDj2sSAoRbcYB" alt=""><figcaption><p>Click the 'Write' button.</p></figcaption></figure>


# Registration on TON Using Remix

Bridge KIP-7 (fungible token, original token on KLAYTN) to TON

This guide is based on the contract address and amount supplied. Take this guide as a reference and type in the exact numbers and address as told.

### MetaMask

* Networks

```json
KLAYTN : https://public-node-api.klaytnapi.com/v1/cypress
```

* Add Network from the networks dropdown if needed

<figure><img src="/files/QVGNYl9qz4Grydawj4Ln" alt=""><figcaption></figcaption></figure>

* Open Networks again and select the network you added

## [Remix IDE](https://remix.ethereum.org/)

Remix IDE - an online IDE to develop smart contracts.

* [Docs](https://remix-ide.readthedocs.io/en/latest/index.html)
* Download abi files

{% file src="/files/FaKvJ0AGhH1SYTbdR09h" %}
Layer 1 means original token platforms (ex. KSP's Layer 1 => KLAYTN)
{% endfile %}

{% file src="/files/wrR9MRxlL8XiVzE8d35c" %}
ft means Fungible Token (ERC-20, KIP-7)
{% endfile %}

* Load abi files into Remix IDE

<div align="left"><figure><img src="/files/5oq63GVqrm8MXnMksQJb" alt=""><figcaption></figcaption></figure></div>

* Select ft.abi

<div align="left"><figure><img src="/files/CJ2hYXfpPxZjy9M6Lp5U" alt=""><figcaption></figcaption></figure></div>

* Approve Token
  * Select Deploy & Run Transaction on left bar
  * Select Injected Web3 for Environment&#x20;
    * For Metamask
    * Check chainID (ex. KLAYTN : 8217)
  * Put your token address and Load Contract \
    (ex. KSP :  0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654)
  * Put spender and the amount to be bridged&#x20;
    * In this case KLAYTN Layer 1 contract : 0x9Abc3F6c11dBd83234D6E6b2c373Dfc1893F648D
    * If your original token is on a chain other than KLAYTN, please refer to the [Layer 1 contract addresses](broken://pages/7Xbz9zj23T8zpbmhKnd9)
  * Click transact button

<div><figure><img src="/files/MANJLQjywI9R19WCTay4" alt=""><figcaption></figcaption></figure> <figure><img src="/files/sf6aAFMyPIYswFZwiEUo" alt=""><figcaption><p>Updated dropdown menu<br>Select [Injected Provider - MetaMask]</p></figcaption></figure></div>

* Send Transaction using Metamask

<div align="left"><figure><img src="/files/3jfUJyk3zGw2YVrLdZy1" alt=""><figcaption><p>choose edit</p></figcaption></figure> <figure><img src="/files/I9Ba9dacRT36EJdV7kFW" alt=""><figcaption><p>edit gas fee</p></figcaption></figure> <figure><img src="/files/OHSgiT5fk9rcxLoS7BVw" alt=""><figcaption><p>make sure priority fee and fee to 750</p></figcaption></figure></div>

* Bridge Token
  * Load the Layer 1 contract referring to the Approve Token step
  * KLAYTN Layer 1 contract : 0x9Abc3F6c11dBd83234D6E6b2c373Dfc1893F648D
  * Get ChainId for toChain (Use TON for TON due to predefined bridge rules)
  * Put chainId to check if toChain is a supported chain
  * Put chainId to check the bridge fee to toChain
    * If chainFee is zero, then value set 0
    * if not, you do not need to put chainFee in VALUE. (ether = 10^18 wei)
  * Dropdown depositToken, fill params and click transact
    * token : your token address \
      (ex. KSP : 0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654)
    * toAddr : \[Your TON based wallet address that want to receive your token]\
      TON based wallet has different type as we generally use for KIP7. Please refer to the scripts' hashPart for switching your address to 32byte address\
      <https://github.com/jaybbbb/bridge-utils>
    * amount : 1 \
      Basically, you are sending the minimum amount to register the token, 1/10^18 since the contract is based on the standard of decimal 18
  * Send Transaction referring to the Send Transaction using Metamask step
  * You can check the bridged token by searching for toAddr in toChain's explorer

<figure><img src="/files/ScGT1CUjtnwdlSR2Tr6M" alt=""><figcaption></figcaption></figure>

<div align="center"><figure><img src="/files/gdUysKhy387fMe7BdXFW" alt=""><figcaption><p>If the chainFee shows any gas fee, put the same amount in the GAS FEE value</p></figcaption></figure></div>

<figure><img src="/files/7z7O3OdmGPmU6VaJyyRU" alt=""><figcaption><p>When the transaction is completed, tochain's explorer shows the result as above</p></figcaption></figure>


# General \[EN]

### What is [Orbit Bridge](https://bridge.orbitchain.io/)?

[Orbit Bridge](https://bridge.orbitchain.io/) is a bridge service that supports token conversion between mainnets and supports 15 blockchains and 58 tokens. One of the core keywords in the current crypto market is cross-chain. While there are currently at least 100 active public chains, the number of bridges that connect these ecosystems is only about 50. Many of them only support 1 to 3 public chains. The fragmented blockchain ecosystem inevitably faces limits to growth in all aspects, including market capitalization, users (including token holders), and the number of Dapps. Bridges that help users access platforms and interoperate between protocols will be the only key to solving this problem.

### Which wallets are supported in Orbit Bridge?

Orbit Bridge currently supports [MetaMask](https://metamask.io/), [Kaikas](https://docs.kaikas.io/), [Klip](https://www.kakaocorp.com/page/service/service/Klip?lang=ENG\&tab=all), and [D'CENT](https://dcentwallet.com/). Each token supports different wallets, so please check the FROM CHAIN after selecting a TOKEN to convert.

### What is [Orbit Bridge Explorer](https://bridge.orbitchain.io/history)?

[Orbit Bridge Explorer](https://bridge.orbitchain.io/history) allows you to browse transactions of several tokens. You can search by wallet address or tx hash.

### What is the Orbit Bridge Validator?

The conversion of all tokens takes place through governance consensus amongst the designated validators of each chain. The world's leading blockchain infrastructure companies such as [Everstake](https://everstake.one/), [DSRV](https://www.dsrvlabs.com/), [GBV](https://www.gbv.capital/), and [Cosmostation](https://www.cosmostation.io/) have participated in Orbit Bridge as validators.

### How to use Orbit Bridge?

Please check the How-to Guide ([PC](https://bridge.orbitchain.io/assets/orbitbridge_guide_pc_en.pdf), [Mobile](https://bridge.orbitchain.io/assets/orbitbridge_guide_mobile_en.pdf)) to use Orbit Bridge.

### How to check the Gas Fee?

Most blockchains require a gas fee to process a transaction. The Bridge Fee charged for each blockchain is different. Please check [this link](https://bridge-docs.orbitchain.io/faq/gas-fee-guide-en) for more details.

### How to check the TAX?

The Tax charged for each blockchain is different. Please check [this link](https://bridge-docs.orbitchain.io/policies/tax) for more details[.](https://bridge-docs.orbitchain.io/policies/tax)

### How to check the Bridge Fee?

The Bridge Fee charged for each blockchain is different. Please check [this link](https://bridge-docs.orbitchain.io/policies/bridgefee) for more details[.](https://bridge-docs.orbitchain.io/policies/bridgefee)<br>

### How to add an RPC network by blockchain?

Each blockchain has different network names, RPC URLs, chain IDs, etc. If you add a specific network, you must enter the information above in Settings > Network. Please check [this link](https://bridge-docs.orbitchain.io/faq/guide-for-adding-rpc-network-en) for more details.

### How to set the gas fee due to the transaction delay?

Due to the nature of the Ethereum chain, in the case when there is a large number of transactions to be processed, the transaction may not go through or be subjected to a long delay. Please check [this link](https://bridge-docs.orbitchain.io/faq/gas-fee-guide-en) for more details.

### How to check the contract address for each blockchain network layer 1?

The contract address of the bridged token is different from that of the native token. Please check [this link](https://bridge-docs.orbitchain.io/bridging-assets/ethereum-vault) for more details.

### Precautions using Orbit Bridge

* **Tokens accidentally sent to another address will be lost forever.**
* **For tokens converting for the first time, approval is required for the transaction with a first-time contract call and a new address (only once for each token).**
* **When sending your assets to an exchange, please make sure whether or not they support contract-based deposits.**\
  **\*If not, we recommend that you send assets to your wallet and then deposit them back to the exchange.**
* **Orbit Bridge does not have access to the assets sent to the exchange contract, and it is impossible to support the recovery of any asset loss that occurs.**

### Precautions for converting XRP tokens

* **If you select the different networks (BEP2, BEP20, etc.) unsupported, your deposits will likely be lost.**
* **Please ensure the network used for the deposit is Ripple.**
* **Selecting the wrong network may cause loss of your assets.**

### I can't find bridged tokens in my MetaMask.

1\. Add the network in your wallet(Network Name, New RPC URL, Chain ID, Currency Symbol, Block Explorer URL).\
2\. Import a token you converted in your wallet (Token Contract Address, Token Symbol, Decimals of Precision).\
3\. Depending on the network condition, there may be a delay. Please check the progress on the [Orbit Bridge Explorer](https://bridge.orbitchain.io/history) page.

### I can't find bridged tokens in my Kaikas.

1\. Add a token you converted in your wallet (Search or Custom Token: Token Contract Address, Token Symbol).

2\. Depending on the network condition, there may be a delay. Please check the progress on the [Orbit Bridge Explorer](https://bridge.orbitchain.io/history) page.

### What is the difference between bridge and swap?

Bridge supports the movement of assets between chains. For example, if you use a bridge to transfer XRP to the Klaytn chain, it will be converted to oXRP. The letter o is the acronym of Orbit Bridge. Users only need to set both FROM CHAIN and TO CHAIN to convert tokens on a bridge.

Swap refers to an exchange between tokens and tokens. [KLAYswap](https://klayswap.com), a decentralized exchange provides this functionality. Token swaps take place in a liquidity pool. It is a method of exchanging tokens that someone has deposited in a liquidity pool for tokens held by users. The base price of the swap is determined by an algorithm based on a smart contract.

### Has Orbit Bridge completed the smart contract security audits?

Orbit Bridge has been audited by [Theori](https://theori.io/) in 2021. Theori is a young cybersecurity R\&D startup based in Austin, TX.


# General \[KO]

### [**오르빗 브릿지**](https://bridge.orbitchain.io)**는 무엇인가요?**

[오르빗 브릿지](https://bridge.orbitchain.io/)는 각 메인넷 간의 토큰 전환을 지원하는 브릿지 서비스로, 15개의 메인넷과 58개의 토큰을 지원합니다. 현재 암호화폐 시장의 핵심 키워드 중 하나는 크로스체인입니다. 현재 활성화된 퍼블릭 체인은 100여 개가 넘지만, 이 거대한 생태계를 연결하는 브릿지의 수는 50개 정도에 불과합니다. 그 중 다수는 1\~3개의 퍼블릭 체인만 지원합니다. 파편화된 블록체인 생태계는 시가총액, 사용자(토큰 보유자 포함), Dapp 수 등 모든 면에서 성장의 한계에 부딪힐 수밖에 없습니다. 사용자의 플랫폼 접근과 프로토콜 간의 상호 운용을 지원하는 브릿지가 이 문제를 해결하는 유일한 열쇠가 될 것입니다.

### 오르빗 브릿지에서 지원하는 지갑은 무엇인가요?

현재 오르빗 브릿지에서 지원하는 지갑은 [메타마스크](https://metamask.io/), [카이카스](https://docs.kaikas.io/), [클립](https://www.kakaocorp.com/page/service/service/Klip), [디센트](https://dcentwallet.com/)입니다. 토큰별 지원하는 지갑이 다르므로, 자세한 사항은 전환할 토큰 선택 후 From 체인 영역에서 확인해주세요.

### [오르빗 브릿지 익스플로러](https://bridge.orbitchain.io/history)는 무엇인가요?

[오르빗 브릿지 익스플로러](https://bridge.orbitchain.io/history)는 오르빗 브릿지에서 지원하는 블록체인 및 토큰에 대한 트랜잭션 내역 확인 기능을 제공합니다.\
지갑 주소 혹은 트랜잭션 해시로 검색할 수 있습니다.

### 오르빗 브릿지 밸리데이터는 무엇인가요?

모든 토큰 전환은 각 체인에 지정된 밸리데이터 간 거버넌스 합의로 이뤄집니다. [Everstake](https://everstake.one/), [DSRV](https://www.dsrvlabs.com/), [GBV](https://www.gbv.capital/), [Cosmostation](https://www.cosmostation.io/) 등 세계 굴지의 블록체인 인프라 기업들이 오르빗 브릿지의 밸리데이터로 참여하고 있습니다.

### 오르빗 브릿지 이용 방법

오르빗 브릿지 이용 방법은 사용자 가이드([PC](https://bridge.orbitchain.io/assets/orbitbridge_guide_pc_ko.pdf), [Mobile](https://bridge.orbitchain.io/assets/orbitbridge_guide_mobile_ko.pdf))를 확인해주세요.

### **Gas fee 확인 방법**

대부분의 블록체인에서는 거래, 전송 등 트랜잭션을 처리하기 위해 가스 수수료(Gas Fee)가 필요합니다. 블록체인별 부과되는 Gas Fee가 다릅니다. 자세한 내용은 [FAQ > Gas Fee Guide](https://bridge-docs.orbitchain.io/faq/gas-fee-guide-kr)를 확인해주세요[.](https://bridge-docs.orbitchain.io/faq/gas-fee-guide-kr)

### TAX 확인 방법

블록체인별 부과되는 Tax가 다릅니다. 자세한 내용은 [POLICIES > Tax](https://bridge-docs.orbitchain.io/policies/tax)를 확인해주세요.

### Bridge Fee 확인 방법

블록체인별 부과되는 Bridge Fee가 다릅니다. 자세한 내용은 [POLICIES > Bridge Fee](https://bridge-docs.orbitchain.io/policies/bridgefee)를 확인해주세요.

### 블록체인 별 RPC 네트워크 추가 방법

블록체인별 네트워크 이름, RPC URL, 체인 ID 등이 모두 다릅니다. 메타마스크 사용자는 특정 네트워크 등록 시 설정 > 네트워크에서 해당 정보를 입력해야 합니다. 자세한 내용은 [FAQ > Guide for Adding RPC Network를 확인해주세요.](https://bridge-docs.orbitchain.io/faq/guide-for-adding-rpc-network-kr)

### 트랜잭션 지연에 따른 Gas fee 설정 방법

이더리움 체인 특성상, 처리할 트랜잭션 혼잡도가 높아지면 Gas 수수료 재설정 트랜잭션을 실행했음에도 처리가 지연될 수 있습니다. 자세한 내용은 [FAQ > Gas Fee Guide](https://bridge-docs.orbitchain.io/faq/gas-fee-guide-kr)를 확인해주세요.

### 블록체인 네트워크 Layer 1별 컨트랙트 주소 확인 방법

브릿징된 토큰의 컨트랙트 주소는 네이티브 토큰의 것과 다릅니다. 자세한 내용은 [BRIDGING ASSETS](https://bridge-docs.orbitchain.io/bridging-assets/ethereum-vault)를 확인해주세요.

### 오르빗 브릿지 사용 시 유의사항

* **주소 오입력 시 토큰 전환이 정상적으로 이뤄지지 않아 자산을 잃을 수 있습니다.**
* **최초 토큰 전환 시 컨트랙트 승인 트랜잭션을 완료해야 합니다(토큰별 최초 1회).**
* **거래소로 토큰 전송 시 해당 거래소의 컨트랙트 입금 지원 여부를 반드시 확인해주시기 바랍니다.**\
  **\*컨트랙트 입금 불가 시 개인 지갑으로 자산을 전송한 후에 다시 거래소로 입금하시는 것을 권합니다.**
* **오르빗 브릿지는 거래소 컨트랙트로 전송된 자산에 대한 접근 권한이 없으며, 발생하는 자산 손실에 대한 복구 지원이 불가능합니다.**

### XRP 토큰 전환 시 유의사항

* **토큰명이 같아도 전송 네트워크가 다르면(예: BEP2, BEP20 등) 정상적으로 입금되지 않습니다.**
* **출금 시 사용되는 네트워크가 Ripple인지 반드시 확인하시기 바랍니다.**
* **잘못된 네트워크 선택 시 정상 입금 처리 및 복구가 불가능할 수 있습니다.**

### 메타마스크에서 브릿징된 토큰을 확인할 수 없습니다.

1\. 지갑에 네트워크를 등록해주세요(네트워크 이름, 새 RPC URL, 체인 ID, 통화 기호, 블록 탐색기 URL).&#x20;

2\. 지갑에 브릿징된 토큰을 등록해주세요(토큰 컨트랙트 주소, 토큰 기호, 토큰 십진수).

3\. 네트워크의 상태에 따라 지연될 수 있습니다. 진행 상황은 [익스플로러](https://bridge.orbitchain.io/history)에서 확인해주세요.&#x20;

### 카이카스에서 브릿징된 토큰을 확인할 수 없습니다.

1\. 지갑에 브릿징된 토큰을 추가해주세요(토큰 검색 혹은 사용자 정의 토큰: 토큰 컨트랙트 주소, 토큰 심볼).

2\. 네트워크의 상태에 따라 지연될 수 있습니다. 진행 상황은 [익스플로러](https://bridge.orbitchain.io/history)에서 확인해주세요.

### 브릿지와 스왑의 차이점은 무엇인가요?

브릿지는 체인 간의 자산 이동을 지원합니다. 가령 브릿지를 사용해 XRP를 클레이튼 체인으로 전송할 경우 oXRP로 전환됩니다. 여기서 o는 Orbit Bridge의 첫머리 글자인 o를 가리킵니다. 사용자는 브릿지 사용 시 특정 토큰의 출발지(From 체인)와 목적지(To 체인)만 정하면 됩니다.

반면 스왑은 토큰과 토큰 간의 교환을 의미합니다. [KLAYswap](https://klayswap.com/)과 같은 DEX에서 이 기능을 제공하며, 토큰 교환은 유동성 풀에서 이뤄집니다. 유동성 풀에 누군가가 예치한 토큰을 사용자가 보유하고 있는 토큰과 맞바꾸는 방식입니다. 스왑 시 가격은 스마트 컨트랙트를 기반으로 한 알고리즘에 의해 결정됩니다.

### 오르빗 브릿지는 스마트 컨트랙트 보안 감사를 받았나요?

오르빗 브릿지는 2021년에 [티오리(Theori)](https://theori.io/)의 보안 감사를 마쳤습니다. 티오리는 미국 텍사스주의 오스틴시에 본사를 두고 있는 사이버보안 R\&D 스타트업입니다.&#x20;


# Gas Fee Guide \[EN]

Most blockchains require a gas fee to process a transaction. A Gas fee is the fee received from the blockchain and is generated separately from Orbit Bridge fees (Tax, Bridge Fee). If the gas fee occurs in the chain of the asset you want to convert (From chain), you must always have a native token at some cost in your wallet to proceed with the coin conversion normally.

The following transactions usually occur for token conversion:

* **Contract approval (approve) transaction**
* **Transactions for final token conversion**

For assets that are converted for the first time, approval is required for the transaction with a first-time contract call and a new address. This has to be done only once for each token. When it is completed, a ‘transaction for final coin conversion’ proceeds, and the gas fee is required. As such, a maximum of 2 consecutive transactions can be performed per bridge gun, so we recommend that you have enough assets in your wallet to use as gas fees in advance. In general, the gas fee required for each chain is as follows.

#### **Estimated Gas Fee by Blockchain**

* ORBIT: 0 ORC
* ETHEREUM: 0.003647417870370370 ETH (\*\* **0.003 \~ 0.004 ETH**)
* KLAYTN: 0.0025644140499999817 KLAY (\*\* **1\~2 KLAY**)
* BNB: 0.00038354894337000293 BNB (\*\* **0.001\~0.003 BNB**)
* POLYGON: 0.004929315292312894 MATIC
* HECO: 0.0003918617557500031 HT
* CELO: 0.00004307683999999999 CELO
* XDAI: 0.00019813539043626402 XDAI

\*\* () brackets are the recommended holding quantity calculated based on the average gas fee of 1,000 recent bridge transactions (As of 2022-07-13).

As the congestion level of the chain increases, the gas fee rises in real-time, so even if you have the recommended quantity, it may not be possible to proceed with the transaction. In that case, please check the Gas Tracker page for each chain below. In particular, since the gas fee fluctuates severely for ETHEREUM, POLYGON, and FANTOM chains, it is recommended that you check the gas tracker site and reserve a sufficient amount of gas fee if you cannot request a transaction.

#### **Gas Tracker Guide by Blockchain**

* ETHEREUM: <https://etherscan.io/gastracker>
* KLAYTN: <https://docs.klaytn.com/klaytn/design/transaction-fees>
* BNB: <https://bscscan.com/gastracker>
* POLYGON: <https://polygonscan.com/gastracker/>
* FANTOM: <https://ftmscan.com/gastracker>
* HECO: <https://hecoinfo.com/gastracker>
* CELO: [https://explorer.bitquery.io/celo\_rc1/gas](<https://explorer.bitquery.io/celo_rc1/gas >)
* AVALANCHE: <https://snowtrace.io/gastracker>
* MOONRIVER: <https://moonriver.moonscan.io/gastracker>


# Gas Fee Guide \[KO]

대부분의 블록체인에서는 거래, 전송 등 트랜잭션을 처리하기 위해 가스 수수료(Gas fee)가 필요합니다. Gas fee는 블록 체인에서 수취하는 수수료로, 오르빗 브릿지의 비용(Tax, Bridge Fee)과는 별도로 발생합니다. 만약 전환하려는 자산의 체인(From 체인)에서 Gas fee가 발생한다면, 항상 **일정 비용의 네이티브 토큰을 지갑에 보유하고 있어야 정상적으로 토큰 전환을 진행**할 수 있습니다.

코인 전환을 위해서는 일반적으로 다음과 같은 트랜잭션이 발생합니다.

* **컨트랙트 승인(approve)트랜잭션**
* **최종 토 전환을 위한 트랜잭션**

처음으로 브릿지하는 자산은 최초 1회에 한해 **'컨트랙트 승인 트랜잭션'**&#xC744; 진행하며, Gas fee가 필요합니다. 승인 트랜잭션 완료 시, **'최종 토큰 전환을 위한 트랜잭션'**&#xC744; 진행하며 Gas fee가 필요합니다. 이처럼 브릿지 건 당 최대 2번 연속 트랜잭션을 진행할 수 있으므로, 사전에 Gas fee로 사용할 자산을 지갑에 충분히 보유할 것을 권장드립니다. 일반적으로 체인별 필요한 건별 Gas fee는 다음과 같습니다.

#### **블록체인별 예상 Gas fee**

* ORBIT: 0 ORC
* ETHEREUM: 0.003647417870370370 ETH (\*\* **0.003 \~ 0.004 ETH**)
* KLAYTN: 0.0025644140499999817 KLAY (\*\* **1\~2 KLAY**)
* BNB: 0.00038354894337000293 BNB (\*\* **0.001\~0.003 BNB**)
* POLYGON: 0.004929315292312894 MATIC
* HECO: 0.0003918617557500031 HT
* CELO: 0.00004307683999999999 CELO
* XDAI: 0.00019813539043626402 XDAI

\*\* ()괄호는 최근 발생한 Bridge 트랜잭션 1,000건의 평균 Gas fee 기준으로 계산된 권장 보유 수량입니다(2022-07-13 기준).

체인의 혼잡도가 높아지면 Gas Fee가 실시간으로 상승하므로 권장 수량을 보유하더라도 트랜잭션 진행이 불가능할 수 있습니다. 해당 경우에는 아래 체인별 Gas Tracker 페이지를 확인 부탁드립니다. 특히 ETHEREUM, POLYGON, FANTOM 체인은 Gas fee 변동이 심하므로 트랜잭션 요청 불가능 시 Gas Tracker 사이트를 확인해 지갑  Gas fee를 여유있게 보유하는 것을 권장 드립니다.

#### **블록체인별 Gas Tracker 안내**

* ETHEREUM: <https://etherscan.io/gastracker>
* KLAYTN: <https://docs.klaytn.com/klaytn/design/transaction-fees>
* BNB: <https://bscscan.com/gastracker>
* POLYGON: <https://polygonscan.com/gastracker/>
* FANTOM: <https://ftmscan.com/gastracker>
* HECO: <https://hecoinfo.com/gastracker>
* CELO: [https://explorer.bitquery.io/celo\_rc1/gas](<https://explorer.bitquery.io/celo_rc1/gas >)
* AVALANCHE: <https://snowtrace.io/gastracker>
* MOONRIVER: <https://moonriver.moonscan.io/gastracker>


# Guide for Adding RPC Network \[EN]

### MetaMask: Add an RPC Network by each Blockchain

You can add the RPC network after inputting the relevant information in order in Metamask > Settings > Network.

<table><thead><tr><th align="center">Blockchain</th><th align="center">Network Name</th><th width="208" align="center">RPC URL</th><th align="center">Chain ID</th><th align="center">기호</th><th align="center">블록 탐색기 URL</th></tr></thead><tbody><tr><td align="center">Ethereum</td><td align="center">Ethereum Main Network</td><td align="center"><a href="https://api.infura.io/v1/jsonrpc/mainnet">https://api.infura.io/v1/jsonrpc/mainnet</a></td><td align="center">1</td><td align="center">ETH</td><td align="center"><a href="https://etherscan.io">https://etherscan.io</a></td></tr><tr><td align="center">Orbit</td><td align="center">Orbit Chain</td><td align="center"><a href="https://rpc.orbitchain.io">https://rpc.orbitchain.io</a></td><td align="center">0x7e1</td><td align="center">ORC</td><td align="center"><a href="https://explorer.orbitchain.io">https://explorer.orbitchain.io</a></td></tr><tr><td align="center">Klaytn</td><td align="center">Klaytn Mainnet</td><td align="center"><a href="https://public-node-api.klaytnapi.com/v1/cypress">https://public-node-api.klaytnapi.com/v1/cypress</a></td><td align="center">8217</td><td align="center">KLAY</td><td align="center"><a href="https://scope.klaytn.com/">https://scope.klaytn.com/</a></td></tr><tr><td align="center">BNB</td><td align="center">Binance Smart Chain</td><td align="center"><a href="https://bsc-dataseed.binance.org/">https://bsc-dataseed.binance.org/</a></td><td align="center">56</td><td align="center">BNB</td><td align="center"><a href="https://bscscan.com">https://bscscan.com</a></td></tr><tr><td align="center">Avalanche</td><td align="center">Avalanche Network</td><td align="center"><a href="https://api.avax.network/ext/bc/C/rpc">https://api.avax.network/ext/bc/C/rpc</a></td><td align="center">43114</td><td align="center">AVAX</td><td align="center"><a href="https://snowtrace.io/">https://snowtrace.io/</a></td></tr><tr><td align="center">Celo</td><td align="center">Celo</td><td align="center"><a href="https://forno.celo.org">https://forno.celo.org</a></td><td align="center">42220</td><td align="center">CELO</td><td align="center"><a href="https://explorer.celo.org">https://explorer.celo.org</a></td></tr><tr><td align="center">Fantom</td><td align="center">Fantom Opera</td><td align="center"><a href="https://rpc.ftm.tools/">https://rpc.ftm.tools/</a></td><td align="center">250</td><td align="center">FTM</td><td align="center"><a href="https://ftmscan.com/">https://ftmscan.com/</a></td></tr><tr><td align="center">HECO</td><td align="center">Heco-Mainnet</td><td align="center"><a href="https://http-mainnet-node.huobichain.com">https://http-mainnet-node.huobichain.com</a></td><td align="center">128</td><td align="center">HT</td><td align="center"><a href="https://hecoinfo.com">https://hecoinfo.com</a></td></tr><tr><td align="center">Moonriver</td><td align="center">Moonriver</td><td align="center"><a href="https://rpc.moonriver.moonbeam.network">https://rpc.moonriver.moonbeam.network</a></td><td align="center">1285</td><td align="center">MOVR</td><td align="center"><a href="https://moonriver.moonscan.io/">https://moonriver.moonscan.io/</a></td></tr><tr><td align="center">OEC</td><td align="center">OKExChain Mainnet</td><td align="center"><a href="https://exchainrpc.okex.org/">https://exchainrpc.okex.org/</a></td><td align="center">66</td><td align="center">OKT</td><td align="center"><a href="https://www.oklink.com/ko/oec/">https://www.oklink.com/ko/oec/</a></td></tr><tr><td align="center">Polygon</td><td align="center">Polygon Mainnet</td><td align="center"><a href="https://polygon-rpc.com/">https://polygon-rpc.com/</a></td><td align="center">137</td><td align="center">MATIC</td><td align="center"><a href="https://polygonscan.com/">https://polygonscan.com/</a></td></tr><tr><td align="center">xDAI</td><td align="center">Gnosis Chain</td><td align="center"><a href="https://rpc.xdaichain.com/">https://rpc.xdaichain.com/</a></td><td align="center">0x64</td><td align="center">xDai</td><td align="center"><a href="https://blockscout.com/xdai/mainnet/">https://blockscout.com/xdai/mainnet/</a></td></tr></tbody></table>

Ex) Add the Orbit Chain RPC

<div align="left"><img src="/files/pbbVGnbKvRwTCPPdCrc1" alt=""></div>

### How to add RPC network by each blockchain

If adding RPC does not work properly, please refer to the link for each blockchain below.

* Orbit:[ https://medium.com/orbit-chain/connecting-metamask-to-orbit-chain-3b82a16e7300](https://medium.com/orbit-chain/connecting-metamask-to-orbit-chain-3b82a16e7300)&#x20;
* Klaytn:[ ](https://ko.docs.klaytn.com/bapp/tutorials/connecting-metamask)<https://medium.com/klaytn/how-to-add-klaytn-to-metamask-b3bdd970c0e8>
* BNB:[ https://docs.binance.org/smart-chain/wallet/metamask.html](https://docs.binance.org/smart-chain/wallet/metamask.html)
* Avalanche: <https://support.avax.network/en/articles/4626956-how-do-i-set-up-metamask-on-avalanche>
* Celo:[ https://docs.celo.org/getting-started/wallets/using-metamask-with-celo/manual-setup](https://docs.celo.org/getting-started/wallets/using-metamask-with-celo/manual-setup)
* Fantom:[ https://docs.fantom.foundation/tutorials/set-up-metamask](https://docs.fantom.foundation/tutorials/set-up-metamask)
* HECO:[ https://medium.com/heco-chain/how-to-set-up-matemask-for-heco-chian-53eda451424c](https://medium.com/heco-chain/how-to-set-up-matemask-for-heco-chian-53eda451424c)
* Moonriver:[ https://docs.moonbeam.network/builders/get-started/moonriver/](https://docs.moonbeam.network/builders/get-started/moonriver/)
* OEC:[ https://www.okex.com/academy/en/how-to-bridge-assets-from-binance-smart-chain-to-okexchain-on-metamask/](https://www.okex.com/academy/en/how-to-bridge-assets-from-binance-smart-chain-to-okexchain-on-metamask/)
* Polygon:[ https://docs.polygon.technology/docs/develop/metamask/config-polygon-on-metamask/](https://docs.polygon.technology/docs/develop/metamask/config-polygon-on-metamask/)
* xDAI:[ https://www.xdaichain.com/for-users/wallets/metamask/metamask-setup](https://www.xdaichain.com/for-users/wallets/metamask/metamask-setup)


# Guide for Adding RPC Network \[KO]

### 메타마스크 RPC 네트워크 추가 시, 블록체인별 입력사항

메타마스크 > 설정 > 네트워크에서 해당 정보를 모두 입력하면  RPC 네트워크를 추가할 수 있습니다.

<table><thead><tr><th align="center">블록체인</th><th align="center">네트워크 이름</th><th width="208" align="center">RPC URL(필수)</th><th align="center">체인 ID(필수)</th><th align="center">기호</th><th align="center">블록 탐색기 URL</th></tr></thead><tbody><tr><td align="center">Ethereum</td><td align="center">Ethereum Main Network</td><td align="center"><a href="https://api.infura.io/v1/jsonrpc/mainnet">https://api.infura.io/v1/jsonrpc/mainnet</a></td><td align="center">1</td><td align="center">ETH</td><td align="center"><a href="https://etherscan.io">https://etherscan.io</a></td></tr><tr><td align="center">Orbit</td><td align="center">Orbit Chain</td><td align="center"><a href="https://rpc.orbitchain.io">https://rpc.orbitchain.io</a></td><td align="center">0x7e1</td><td align="center">ORC</td><td align="center"><a href="https://explorer.orbitchain.io">https://explorer.orbitchain.io</a></td></tr><tr><td align="center">Klaytn</td><td align="center">Klaytn Mainnet</td><td align="center"><a href="https://public-node-api.klaytnapi.com/v1/cypress">https://public-node-api.klaytnapi.com/v1/cypress</a></td><td align="center">8217</td><td align="center">KLAY</td><td align="center"><a href="https://scope.klaytn.com/">https://scope.klaytn.com/</a></td></tr><tr><td align="center">BNB</td><td align="center">Binance Smart Chain</td><td align="center"><a href="https://bsc-dataseed.binance.org/">https://bsc-dataseed.binance.org/</a></td><td align="center">56</td><td align="center">BNB</td><td align="center"><a href="https://bscscan.com">https://bscscan.com</a></td></tr><tr><td align="center">Avalanche</td><td align="center">Avalanche Network</td><td align="center"><a href="https://api.avax.network/ext/bc/C/rpc">https://api.avax.network/ext/bc/C/rpc</a></td><td align="center">43114</td><td align="center">AVAX</td><td align="center"><a href="https://snowtrace.io/">https://snowtrace.io/</a></td></tr><tr><td align="center">Celo</td><td align="center">Celo</td><td align="center"><a href="https://forno.celo.org">https://forno.celo.org</a></td><td align="center">42220</td><td align="center">CELO</td><td align="center"><a href="https://explorer.celo.org">https://explorer.celo.org</a></td></tr><tr><td align="center">Fantom</td><td align="center">Fantom Opera</td><td align="center"><a href="https://rpc.ftm.tools/">https://rpc.ftm.tools/</a></td><td align="center">250</td><td align="center">FTM</td><td align="center"><a href="https://ftmscan.com/">https://ftmscan.com/</a></td></tr><tr><td align="center">HECO</td><td align="center">Heco-Mainnet</td><td align="center"><a href="https://http-mainnet-node.huobichain.com">https://http-mainnet-node.huobichain.com</a></td><td align="center">128</td><td align="center">HT</td><td align="center"><a href="https://hecoinfo.com">https://hecoinfo.com</a></td></tr><tr><td align="center">Moonriver</td><td align="center">Moonriver</td><td align="center"><a href="https://rpc.moonriver.moonbeam.network">https://rpc.moonriver.moonbeam.network</a></td><td align="center">1285</td><td align="center">MOVR</td><td align="center"><a href="https://moonriver.moonscan.io/">https://moonriver.moonscan.io/</a></td></tr><tr><td align="center">OEC</td><td align="center">OKExChain Mainnet</td><td align="center"><a href="https://exchainrpc.okex.org/">https://exchainrpc.okex.org/</a></td><td align="center">66</td><td align="center">OKT</td><td align="center"><a href="https://www.oklink.com/ko/oec/">https://www.oklink.com/ko/oec/</a></td></tr><tr><td align="center">Polygon</td><td align="center">Polygon Mainnet</td><td align="center"><a href="https://polygon-rpc.com/">https://polygon-rpc.com/</a></td><td align="center">137</td><td align="center">MATIC</td><td align="center"><a href="https://polygonscan.com/">https://polygonscan.com/</a></td></tr><tr><td align="center">xDAI</td><td align="center">Gnosis Chain</td><td align="center"><a href="https://rpc.xdaichain.com/">https://rpc.xdaichain.com/</a></td><td align="center">0x64</td><td align="center">xDai</td><td align="center"><a href="https://blockscout.com/xdai/mainnet/">https://blockscout.com/xdai/mainnet/</a></td></tr></tbody></table>

예) Orbit Chain RPC 네트워크 추가

<div align="left"><img src="/files/RDyTNu9CThsCvq8dqoL2" alt=""></div>

### 블록체인별 RPC 네트워크 추가 방법 안내

RPC 추가가 정상적으로 이루어지지 않을 시 아래 블록체인별 링크를 참고하시기 바랍니다.

* Orbit:[ https://medium.com/orbit-chain/connecting-metamask-to-orbit-chain-3b82a16e7300](https://medium.com/orbit-chain/connecting-metamask-to-orbit-chain-3b82a16e7300)&#x20;
* Klaytn:[ ](https://ko.docs.klaytn.com/bapp/tutorials/connecting-metamask)<https://medium.com/klaytn/how-to-add-klaytn-to-metamask-b3bdd970c0e8>
* BNB:[ https://docs.binance.org/smart-chain/wallet/metamask.html](https://docs.binance.org/smart-chain/wallet/metamask.html)
* Avalanche: <https://support.avax.network/en/articles/4626956-how-do-i-set-up-metamask-on-avalanche>
* Celo:[ https://docs.celo.org/getting-started/wallets/using-metamask-with-celo/manual-setup](https://docs.celo.org/getting-started/wallets/using-metamask-with-celo/manual-setup)
* Fantom:[ https://docs.fantom.foundation/tutorials/set-up-metamask](https://docs.fantom.foundation/tutorials/set-up-metamask)
* HECO:[ https://medium.com/heco-chain/how-to-set-up-matemask-for-heco-chian-53eda451424c](https://medium.com/heco-chain/how-to-set-up-matemask-for-heco-chian-53eda451424c)
* Moonriver:[ https://docs.moonbeam.network/builders/get-started/moonriver/](https://docs.moonbeam.network/builders/get-started/moonriver/)
* OEC:[ https://www.okex.com/academy/en/how-to-bridge-assets-from-binance-smart-chain-to-okexchain-on-metamask/](https://www.okex.com/academy/en/how-to-bridge-assets-from-binance-smart-chain-to-okexchain-on-metamask/)
* Polygon:[ https://docs.polygon.technology/docs/develop/metamask/config-polygon-on-metamask/](https://docs.polygon.technology/docs/develop/metamask/config-polygon-on-metamask/)
* xDAI:[ https://www.xdaichain.com/for-users/wallets/metamask/metamask-setup](https://www.xdaichain.com/for-users/wallets/metamask/metamask-setup)


# Anti-Phishing \[EN]

Anti-Phishing Solution: Personalized Image

Orbit Bridge supports phishing prevention personalized image service (from March 2023). The usage of personalized image service is to distinguish Orbit Bridge and similar phishing websites. Personalized image information is known only to the user and not displayed on phishing websites.

<figure><img src="/files/C5vDRWu6BbDKiLcIwkhE" alt=""><figcaption></figcaption></figure>

**The personalized image** is a combination of the image selected by the user and the personally recognized character entered by the user and is a security service to distinguish each website from Ozys apart from phishing websites. Since the personalized image set by the user is the information only the user can know. It can be hard to secure that information or implement it in the same form on phishing sites. Therefore, it helps users prevent phishing damage.

The personalized image set by the user can be registered and checked regardless of the wallet connection and is applied for each browser, not stored on the service site or remote server. Therefore, if you reinstalled the browser, deleted the browser cache/data, or used the browser in incognito mode, you may reset the registered personalized image.

If the registered personalized image is not initialized and displayed even though there are no those reasons, there is a potential risk of phishing damage. We recommend registering your personalized image after checking whether the site address you accessed is correct. Afterward, check the image is displayed on the website.

There may be phishing via pop-up with messages below.\
*“The personalized image has been initialized due to server maintenance. Please set again.”*\
Technically, the server cannot delete your local storage, so we ask that you pay special attention to the above pop-up or message. If you see a pop-up with messages asking you to reset your personalized image, please check the domain you are currently accessing and the latest announcement from the [Orbit Chain official community](https://t.me/OrbitChainChannel).

You can find the registered personalized images at the top of the website. If the image is not displayed on the page or is shown differently from the registered information you have chosen, never proceed with information input, wallet approval, and transactions on the page. Please use it after sufficiently verifying the site, including the above reconfirmation measures. You can change personalized images an unlimited number of times.

### Anti-Phishing Guide

{% file src="/files/fwB6YEGQJHpsPvmKGRRb" %}


# Anti-Phishing \[KO]

피싱 예방 솔루션: 개인화 이미지

오르빗 브릿지에서 피싱 예방 개인화 이미지 서비스를 지원합니다(2023년 3월\~). 개인화 이미지는 서비스는 오르빗 브릿지와 유사한 피싱 사이트를 구별하기 위한 수단으로 사용됩니다. 개인화 이미지 정보는 오직 해당 이용자만 알 수 있으며, 피싱 사이트에서는 표시될 수 없습니다.

<figure><img src="/files/K012p7s63ksXfswXMHJB" alt=""><figcaption></figcaption></figure>

**개인화 이미지**는 이용자가 직접 선택한 이미지와 직접 입력한 개인 인식 문자의 조합으로, 오지스의 각 서비스 사이트와 피싱 사이트를 구별하는 수단으로 사용할 수 있는 보안 서비스입니다. 이용자가 설정한 개인화 이미지는 이용자 본인만 알 수 있는 정보이므로, 피싱 사이트는 같은 정보 확보 및 동일한 형태로 구현하기 어렵습니다. 따라서 이용자가 피싱 피해를 예방하는 데 도움이 됩니다.

이용자가 설정한 개인화 이미지는 지갑 연결과 관계없이 등록과 확인이 가능하며, 서비스 사이트나 원격지 서버에 저장되지 않고 브라우저별로 적용됩니다. 그러므로 브라우저 재설치, 브라우저 캐시/데이터 삭제, 시크릿 모드에서 브라우저를 사용하는 경우에는 등록한 개인화 이미지가 초기화될 수 있습니다.

이러한 사유가 없음에도 등록한 개인화 이미지가 초기화돼 표시되지 않는 경우, 피싱 피해의 위험이 있습니다. 접속한 사이트 주소의 정상 여부를 확인한 후 개인화 이미지를 등록하고, 이미지가 정상적으로 표시되는 것을 확인한 후에 해당 사이트를 이용할 것을 권장합니다.

“서버 점검으로 인해 개인화 이미지를 초기화했습니다. 다시 등록해주세요.”와 같은 피싱이 있을 수 있습니다. 기술적으로 서버에서는 이용자의 로컬 스토리지를 삭제할 수 없으므로, 이용자는 위와 같은 팝업 혹은 메시지에 대해 각별히 유의해주시길 바랍니다. 먄약 개인화 이미지를 재등록하라는 팝업 혹은 메시지를 접했다면 현재 접속 중인 도메인과 [오르빗 체인 공식 커뮤니티의 최신 공지](https://t.me/OrbitChainChannel)를 확인해주세요.

등록한 개인화 이미지는 사이트 상단에서 확인할 수 있습니다. 등록한 개인화 이미지가 화면에 표시되지 않거나 등록한 정보와 다르게 표시되는 경우, 화면에서 요구하는 정보 입력, 지갑 연결 승인, 트랜잭션 승인 등을 절대로 진행하지 마시고 위와 같은 재확인 조치를 포함한 사이트 검증을 충분히 한 후에 이용하시기 바랍니다. 개인화 이미지는 횟수의 제한 없이 변경할 수 있습니다.

### 피싱 예방 개인화 이미지 가이드

{% file src="/files/SnE1FlGJ17RCwd5ZBGHk" %}


# Transaction delay after setting the gas fee

In case of a transaction delay after setting the gas fee

**\*Korean is provided next to English guidance.**

**Due to the nature of Ethereum chain, in the case when there is a large number of transactions to be processed, the transaction may not go through or be subjected to a long delay.**

**When this happens, you can raise the gas fee and speed up the transaction, or cancel and attempt the transaction again.**

1. **Please make sure the Advanced gas controls are set to “ON”.**

![](/files/dr6bBzNE7YXDvTU3knEn)

![](/files/2rrErQhtDmBNMQheDs55)

![](/files/WuK3rv7yaPea2Du3pAz9)

![](/files/dP3OPf8gzjteVRFl6dwk)

**2. After enabling Advanced gas controls, click on Activities to find the pending transaction.**

![](/files/qRs14rgvQpjCn6BYNs0t)

![](/files/l9IZizn01rTVCs2EvrGO)

**3. Click “Speed up” then raise the gas fee to speed up the transaction, or click “Cancel” and attept again with a higher gas fee.**

![](/files/g701TOajpP4fqwQVnjmF)

![](/files/hTrL24oKOyBJGscYqP8t)

![](/files/gtJGJ4LgxTQsXl8eFznA)

## Gas 수수료 재설정 후에도 트랜잭션이 지연되는 경

**이더리움 체인 특성상, 처리할 트랜잭션 혼잡도가 높아지는 경우, Gas 수수료 재설정 트랜잭션을 실행하였음에도 처리가 지연될 수 있습니다.**

**이러한 경우, 메타마스크에서 직접 Gas 수수료를 높여 가속화시켜 처리를 완료하거나, 취소한 후 다시 트랜잭션을 요청해야 합니다.**

1. **메타마스크 지갑에서 고급 Gas 제어 기능이  활성화(ON) 되어있는지 확인해주세요.**

![](/files/8qBCN0lhLoQRVuQFOUW8)

![](/files/b12TzRKtLHyaa4ZxctVA)

![](/files/0wWKWfqesfjBdZnRo2QI)

![](/files/loFjdajVU03EKiWXL4Cp)

2\. **Gas 재설정을 실행한 내 지갑의 “활동” 탭을 클릭하면 Pending 상태의 트랜잭션을 확인할 수 있습니다.**

![](/files/K9fOD96uhQN1sms3c8xO)

![](/files/PUYxeLwMyFHhRLcom0bK)

**3. “가속화” 또는 “취소” 를 선택한 후, Gas 수수료를 높여 저장한 후 트랜잭션을 실행하면 처리가 완료됩니다.**&#x20;

![](/files/XXhZgGO9Cs1atsfVeGFT)

![](/files/9YzSMZOAOGUC4IexWzsN)

![](/files/DVWxP3FNBQp9ylzcPrXa)


# Integration Guide

1. [List of supported chains](/faq/integration-guide/1.-list-of-supported-chains)
2. [Contract Addresses](/faq/integration-guide/2.-contract-addresses)
3. [How to use an Orbit Bridge](/faq/integration-guide/3.-how-to-use-an-orbit-bridge)
   * EVM
   * STACKS
4. [Chain Explorers](/faq/integration-guide/4.-chain-explorers)
5. [API](/faq/integration-guide/5.-api)

***


# 1. List of supported chains

### Vault

* ETH
* BSC
* CELO
* HECO
* KLAYTN
* POLYGON
* STACKS
* TON
* XRP
* ORBIT

### Minter

* ETH
* AVAX
* BSC
* CELO
* HARMONY
* HECO
* FANTON
* KLAYTN
* MOONRIVER
* OEC
* POLYGON
* STACKS
* TON
* XDAI
* XRP


# 2. Contract Addresses

## Chain Index

* [ETH Vault](#eth-vault)
* [BSC Vault](#bsc-vault)
* [CELO Vault](#celo-vault)
* [HECO Vault](#heco-vault)
* [KLAYTN Vault](#klaytn-vault)
* [POLYGON Vault](#polygon-vault)
* [XRP Vault](#xrp-vault)

### ETH Vault

<table><thead><tr><th width="262">Name</th><th>Contract Address</th></tr></thead><tbody><tr><td>ETH Vault</td><td>0x1bf68a9d1eaee7826b3593c20a0ca93293cb489a</td></tr><tr><td>AVAX Minter</td><td>0x6BD8E3beEC87176BA9c705c9507Aa5e6F0E6706f</td></tr><tr><td>BSC Minter</td><td>0x6BD8E3beEC87176BA9c705c9507Aa5e6F0E6706f</td></tr><tr><td>CELO Minter</td><td>0x6BD8E3beEC87176BA9c705c9507Aa5e6F0E6706f</td></tr><tr><td>FANTOM Minter</td><td>0x6BD8E3beEC87176BA9c705c9507Aa5e6F0E6706f</td></tr><tr><td>HARMONY Minter</td><td>0x6BD8E3beEC87176BA9c705c9507Aa5e6F0E6706f</td></tr><tr><td>HECO Minter</td><td>0x6BD8E3beEC87176BA9c705c9507Aa5e6F0E6706f</td></tr><tr><td>KLAYTN Minter</td><td>0x60070F5D2e1C1001400A04F152E7ABD43410F7B9</td></tr><tr><td>MATIC Minter</td><td>0x6BD8E3beEC87176BA9c705c9507Aa5e6F0E6706f</td></tr><tr><td>MOONRIVER Minter</td><td>0x6BD8E3beEC87176BA9c705c9507Aa5e6F0E6706f</td></tr><tr><td>XDAI Minter</td><td>0x6BD8E3beEC87176BA9c705c9507Aa5e6F0E6706f</td></tr><tr><td>ORBIT Minter</td><td>0x1b57Ce997Ca6a009ce54bB2d37DEbEBadFDbBb06</td></tr></tbody></table>

### BSC Vault

<table><thead><tr><th width="266">Name</th><th>Contract Address</th></tr></thead><tbody><tr><td>BSC Vault</td><td>0x89c527764f03BCb7dC469707B23b79C1D7Beb780</td></tr><tr><td>KLAYTN Minter</td><td>0xB0a83941058b109Bd0543fa26d22eFb8a2D0f431</td></tr><tr><td>ORBIT Minter</td><td>0xd4EC00c84f01361F36D907E061EA652eE50572AF</td></tr><tr><td>HECO Minter</td><td>0xf2C5a817cc8FFaAB4122f2cE27AB8486DFeAb09F</td></tr><tr><td>MATIC Minter</td><td>0x89c527764f03BCb7dC469707B23b79C1D7Beb780</td></tr></tbody></table>

### CELO Vault

<table><thead><tr><th width="259">Name</th><th>Contract Address</th></tr></thead><tbody><tr><td>CELO Vault</td><td>0x979cD0826C2bf62703Ef62221a4feA1f23da3777</td></tr><tr><td>KLAYTN Minter</td><td>0x979cD0826C2bf62703Ef62221a4feA1f23da3777</td></tr><tr><td>ORBIT Minter</td><td>0x979cD0826C2bf62703Ef62221a4feA1f23da3777</td></tr></tbody></table>

### HECO Vault

<table><thead><tr><th width="268">Name</th><th>Contract Address</th></tr></thead><tbody><tr><td>HECO Vault</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr><tr><td>AVAX Minter</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr><tr><td>BSC Minter</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr><tr><td>CELO Minter</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr><tr><td>FANTOM Minter</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr><tr><td>HARMONY Minter</td><td>0x7112999b437404B430acf80667E94D8E62b9e44E</td></tr><tr><td>KLAYTN Minter</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr><tr><td>MATIC Minter</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr><tr><td>MOONRIVER Minter</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr><tr><td>OEC Minter</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr><tr><td>XDAI Minter</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr><tr><td>ORBIT Minter</td><td>0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F</td></tr></tbody></table>

### KLAYTN Vault

<table><thead><tr><th width="273">Name</th><th>Contract Address</th></tr></thead><tbody><tr><td>KLAYTN Vault</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>AVAX Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>BSC Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>CELO Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>ETH Minter</td><td>0x012c6d79b189e1aBD1EFaC759b275c5D49Abd164</td></tr><tr><td>FANTOM Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>HARMONY Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>HECO Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>MATIC Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>MOONRIVER Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>OEC Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>XDAI Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr><tr><td>ORBIT Minter</td><td>0x9abc3f6c11dbd83234d6e6b2c373dfc1893f648d</td></tr></tbody></table>

### POLYGON Vault

<table><thead><tr><th width="276">Name</th><th>Contract Address</th></tr></thead><tbody><tr><td>MATIC Vault</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>AVAX Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>BSC Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>CELO Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>ETH Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>FANTOM Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>HARMONY Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>HECO Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>KLAYTN Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>MOONRIVER Contract</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>OEC Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>XDAI Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr><tr><td>ORBIT Minter</td><td>0x506DC4c6408813948470a06ef6e4a1DaF228dbd5</td></tr></tbody></table>

### XRP Vault

<table><thead><tr><th width="276">Name</th><th>Contract Address</th></tr></thead><tbody><tr><td>XRP Vault</td><td>rLcxBUrZESqHnruY4fX7GQthRjDCDSAWia</td></tr><tr><td>KLAYTN Minter</td><td>0x917655B6C27A3D831b4193CE18ECe6bfcC806BF8</td></tr><tr><td>Orbit Minter</td><td>0xe288716122c53e8df43884cb06b85cffdaa57546</td></tr><tr><td>AVAX Minter</td><td>0xE38ca00A6FD34B793012Bb9c1471Adc4E98386cF</td></tr><tr><td>BSC Minter</td><td>0xE38ca00A6FD34B793012Bb9c1471Adc4E98386cF</td></tr><tr><td>CELO Minter</td><td>0xE38ca00A6FD34B793012Bb9c1471Adc4E98386cF</td></tr><tr><td>FANTOM Minter</td><td>0xE38ca00A6FD34B793012Bb9c1471Adc4E98386cF</td></tr><tr><td>HARMONY Minter</td><td>0xE38ca00A6FD34B793012Bb9c1471Adc4E98386cF</td></tr><tr><td>HECO Minter</td><td>0xE38ca00A6FD34B793012Bb9c1471Adc4E98386cF</td></tr><tr><td>MATIC Minter</td><td>0xE38ca00A6FD34B793012Bb9c1471Adc4E98386cF</td></tr><tr><td>MOONRIVER Minter</td><td>0xE38ca00A6FD34B793012Bb9c1471Adc4E98386cF</td></tr><tr><td>OEC Minter</td><td>0xE38ca00A6FD34B793012Bb9c1471Adc4E98386cF</td></tr><tr><td>WEMIX Minter</td><td>0x3fc270534bBEEF400777B587D03fc66D8Ddd716E</td></tr><tr><td>XDAI Minter</td><td>0xE38ca00A6FD34B793012Bb9c1471Adc4E98386cF</td></tr></tbody></table>


# 3. How to use an Orbit Bridge

**\*\* The chain parameter should have the following format:**&#x20;

`ETH`, `ORBIT`, `KLAYTN`, `BSC`, `MATIC`, `HECO`, `CELO`, `AVAX`, `FANTOM`, `HARMONY`, `MOONRIVER`, `OEC`, `XDAI`&#x20;

## EVM

### Vault Contract Interface

{% code lineNumbers="true" %}

```solidity
interface IVault {
    function deposit(string memory toChain, bytes memory toAddr) payable public;
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount) public; 
}
```

{% endcode %}

* You can use the **vault** to bridge assets to other chains which deployed **minter**. (ex) Bsc vault has only Klaytn, Orbit, Heco and Matic minter. (See [BSC vault contracts](/faq/integration-guide/2.-contract-addresses#bsc-vault)) BNB can bridge to Heco. But cannot bridge to Fantom.
* If you want to bridge **native assets** like ETH or BNB, use `deposit`.
* Otherwise, if you want to bridge **ERC20**, use `depositToken`.&#x20;
* Orbit Bridge has `ETH`, `KLAYTN`, `BSC`, `MATIC`, `HECO`, `CELO` vaults.

#### Details

{% code lineNumbers="true" %}

```solidity
deposit(string memory toChain, bytes memory toAddr) payable
```

{% endcode %}

* `toChain`: Chain symbol to send assets.
* `toAddr`: Address to receive bridged assets. \
  \*\* You must send a transaction with **value** for the amount to be sent.

{% code lineNumbers="true" %}

```solidity
depositToken(address token, string memory toChain, bytes memory toAddr, uint amount)
```

{% endcode %}

* `toChain`: Chain symbol to send assets
* `toAddr`: Address to receive bridged assets
* `amount`: The amounts of tokens to send (wei)

#### Example

1. Bridge 0.1 **ETH** from ETH to **KLAYTN**

* **ETH** is a `native asset` of the Ethereum chain.
* In this case, call the `deposit` method to the ETH vault contract.
* contract address: [0x1bf68a9d1eaee7826b3593c20a0ca93293cb489a](/faq/integration-guide/2.-contract-addresses#eth-vault)

{% code lineNumbers="true" %}

```solidity
deposit("KLAYTN", <to address>){value: 100000000000000000}
```

{% endcode %}

2\. Bridge 10 **BUSD** from **BNB** to **MATIC**

* BUSD is an `ERC20` token based on the BNB chain.
* In this case, call the `depositToken` method to Bsc vault contract.
* contract address: [0x89c527764f03BCb7dC469707B23b79C1D7Beb780](/faq/integration-guide/2.-contract-addresses#bsc-vault)

{% code lineNumbers="true" %}

```solidity
depositToken("MATIC", <to address>, 10000000000000000000)
```

{% endcode %}

### Minter Contract Interface

{% code lineNumbers="true" %}

```solidity
interface IMinter {
    function getChainId(string chain) external view returns (bytes32);
    function chainFee(bytes32 chainId) external view returns (uint256);
    function getTokenAddress(bytes memory token) public view returns(address);
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
}
```

{% endcode %}

* You can use the **minter** to send bridged assets to the origin chain or another chain.
* In this case, only use `requestSwap`
* Depending on the chain, there may be a **chain fee**.
* If there is a chain fee, you need to send a transaction by putting it in **value**.
* Minted Tokens have the **prefix ‘o’** which means bridged by an Orbit Bridge. (oUSDT, oBUSD, oXRP, oETH etc…)

#### Details

{% code lineNumbers="true" %}

```solidity
getChainId(string chain)  
```

{% endcode %}

Returns unique `bytes32` data for each chain.

* `chain`: Chain symbol to send assets.

{% code lineNumbers="true" %}

```solidity
chainFee(bytes32 chainId)
```

{% endcode %}

Returns chain fee for each chain.

* `chainId`: bytes32 data from `getChainId` method.

{% code lineNumbers="true" %}

```solidity
getTokenAddress(bytes memory token)
```

{% endcode %}

* `token`: Address of origin asset. For native assets, it is `0x0000000000000000000000000000000000000000`<br>

{% code lineNumbers="true" %}

```solidity
requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount)
```

{% endcode %}

* `tokenAddress`: Returned value using `getTokenAddress`
* `toChain`: Chain symbol to send assets.
* `toAddr`: Address to receive bridged assets.
* `amount`: The amounts of tokens to send (wei)

####

#### Example

1. Bridge 0.1 **oETH** from **KLAYTN** to **ETH**

* oETH on Klaytn is a bridged `ERC20` token from Eth.
* **ETH** is a native asset of the **Ethereum chain.**
* In this case, use the **Klaytn minter contract** of **Eth vault**
* contract address: [0x60070F5D2e1C1001400A04F152E7ABD43410F7B9](/faq/integration-guide/2.-contract-addresses#eth-vault)

{% code lineNumbers="true" %}

```solidity
requestSwap(
    "0x0000000000000000000000000000000000000000"
    , "KLAYTN"
    , <to address>
    , 100000000000000000 // 0.1 * 10 ** 18
){value: 100000000000000000} // chainFee
```

{% endcode %}

2\. Bridge 10 **oBUSD** from **MATIC** to **HECO**

* oBUSD on Matic is a bridged `ERC20` from BNB chain.
* BUSD is an `ERC20` based on the BNB chain.
* To bridge oBUSD from Matic to Heco, use Matic minter contract of Bsc vault
* contract address: [0x89c527764f03BCb7dC469707B23b79C1D7Beb780](/faq/integration-guide/2.-contract-addresses#bsc-vault)

{% code lineNumbers="true" %}

```solidity
requestSwap(
    "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56" // origin BUSD address
    , "HECO"
    , <to address>
    , 10000000000000000000 // 10 * 10 ** 18
){value: 100000000000000000} // chainFee
```

{% endcode %}

## STACKS

### Minter Contract Interface

{% code lineNumbers="true" %}

```rust
(request-swap (to-chain (buff 256)) (to-addr (buff 20)) (amount uint))
```

{% endcode %}

In the case of Stacks, there is a minter corresponding to **each bridged token**.

* `to-chain`: Chain to send assets. This value can get using bufferCVFromString (see [@stacks/transactions](https://www.npmjs.com/package/@stacks/transactions?activeTab=readme))
* `to-addr`: Address to receive bridged assets.


# 4. Chain Explorers

<table><thead><tr><th width="237">Chain</th><th>URL</th></tr></thead><tbody><tr><td>AVAX</td><td><a href="https://snowtrace.io/">https://snowtrace.io/</a></td></tr><tr><td>BSC</td><td><a href="https://bscscan.com/">https://bscscan.com/</a></td></tr><tr><td>CELO</td><td><a href="https://explorer.celo.org/">https://explorer.celo.org/</a></td></tr><tr><td>ETH</td><td><a href="https://etherscan.io/">https://etherscan.io/</a></td></tr><tr><td>FANTOM</td><td><a href="https://ftmscan.com/">https://ftmscan.com/</a></td></tr><tr><td>HARMONY</td><td><a href="https://explorer.harmony.one/">https://explorer.harmony.one/</a></td></tr><tr><td>HECO</td><td><a href="https://www.hecoinfo.com/en-us/home">https://www.hecoinfo.com/en-us/home</a></td></tr><tr><td>ORBIT</td><td><a href="https://explorer.orbitchain.io/">https://explorer.orbitchain.io/</a></td></tr><tr><td>KLAYTN</td><td><a href="https://scope.klaytn.com/">https://scope.klaytn.com/</a></td></tr><tr><td>MATIC</td><td><a href="https://polygonscan.com/">https://polygonscan.com/</a></td></tr><tr><td>MOONRIVER</td><td><a href="https://moonriver.moonscan.io/">https://moonriver.moonscan.io/</a></td></tr><tr><td>OEC</td><td><a href="https://www.oklink.com/en/okc">https://www.oklink.com/en/okc</a></td></tr><tr><td>STACKS</td><td><a href="https://explorer.stacks.co/?chain=mainnet">https://explorer.stacks.co/?chain=mainnet</a></td></tr><tr><td>XDAI</td><td><a href="https://blockscout.com/xdai/mainnet/">https://blockscout.com/xdai/mainnet/</a></td></tr><tr><td>XRP</td><td><a href="https://xrpscan.com/">https://xrpscan.com/</a></td></tr></tbody></table>


# 5. API

The following APIs are provided for developers who use the bridge function.

### Orbit Bridge APIs:

* List of tokens belonging to each vault.
* Cross-chain transaction status.

{% embed url="<https://documenter.getpostman.com/view/5070734/2s83zdxSAn#fb0558ea-6082-4fef-9214-690006495111>" %}


# OrbitHub

## Code

* `OrbitHub.sol`
* `OrbitHub.impl.sol`

## Address

* Orbit Hub Contract Address : `0xb5680a55d627c52de992e3ea52a86f19da475399`
* Orbit Hub Implementation Contract Address : `0x8eb2abafc23483afb6bed2885bfeddfeaef2a30c`

## Events

### Add / Remove Bridge

```bash
event AddBridge(string chain, address bridgeContract);
event RemoveBridge(string chain, address bridgeContract);
```

Event occurs when Bridge Contract is registered or removed from Orbit Hub Contract

* `string chain` : Chain symbol corresponding to Bridge Contract ( ex, `ETH`, `KLAYTN`, `TERRA` )
* `address bridgeContract` : Bridge Contract Address

### Add / Remove BridgeGovernance

```bash
event AddBridgeGovernance(string chain, bytes wallet, bytes32 govId);
event RemoveBridgeGovernance(bytes32 govId);
```

Event occurs when governance is registered or removed to manage Orbit Bridge System by Orbit Hub Governance

* `string chain` :  Chain symbol of Vault managed by Governance
* `bytes wallet` : Address of Vault managed by Governance
* `bytes32 govId` : Unique Identifier of Governance

### Add / Remove BridgeInfo

```bash
event AddBridgeInfo(string chain, bytes32 govId);
event RemoveBridgeInfo(string chain, bytes32 govId);
```

Event occurs when Bridge Governance adds or removes information such as Multi-Sig Wallet and nonce to be used in Bridge Contract

* `string chain` : Chain symbol corresponding to Bridge Contract ( ex, `ETH`, `KLAYTN`, `TERRA` )
* `bytes32 govId` : Unique Identifier of Governance

### ChangeGovernanceMig

```bash
event ChangeGovernanceMig(bytes32 govId, bytes32 chainId, address mig);
```

Event occurs when Bridge Governance replaces OrbitHub or Brdige Multi-Sig Wallet

* `bytes32 govId` : Unique Identifier of Governance
* `bytes32 chainId` : Unique Identifier of Chain Symbol
* `address mig` : Multi-Sig Wallet Contract Address

### SwapRelay

```bash
event SwapRelay(string fromChain, bytes32[] bytes32s, uint[] uints);
```

Event occurs when Bridge Operator relays bridging data

* `string fromChain` : Chain Symbol requesting bridging
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process

### SwapValidated

```bash
event SwapValidated(uint dataIndex, string fromChain, bytes32[] bytes32s, uint[] uints, address[] vaList);
```

Event occurs when Bridge Validator completes consensus on bridging data

* `uint dataIndex` : Data index recorded in the Swap Data List of Orbit Hub
* `string fromChain` : Chain Symbol requesting bridging
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `address[] vaList` : Validator Address List that participated in the Bridging Data consensus

### SwapNFTRelay

```bash
event SwapNFTRelay(string fromChain, bytes32[] bytes32s, uint[] uints);
```

Event occurs when Bridge Operator relays bridging data

* `string fromChain` : Chain Symbol requesting bridging
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process

### SwapNFTValidated

```bash
event SwapNFTValidated(uint dataIndex, string fromChain, bytes32[] bytes32s, uint[] uints, address[] vaList);
```

Event occurs when Bridge Validator completes consensus on bridging data

* `uint dataIndex` : Data index recorded in the Swap Data List of Orbit Hub
* `string fromChain` : Chain Symbol requesting bridging
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `address[] vaList` : Validator Address List that participated in the Bridging Data consensus

## Interface

```bash
pragma solidity 0.5.0;

interface OrbitHub {
    function getVersion() public pure returns(string memory);
    function getChainId(string memory chain) public view returns(bytes32 chainId);
    function getGovId(string memory chain, bytes memory wallet) public view returns(bytes32 govId);
    function getBridgeContract(string memory chain) public view returns(address);
    function getBridgeMig(string memory chain, bytes32 govId) public view returns(address);
    function getSwapData(bytes32 govId, uint dataIndex) public view returns(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token);
    function getSwapDataArray(bytes32 govId, uint dataIndex) public view returns(bytes32[] memory bytes32s, uint[] memory uints, address[] memory vaList);
    
    function addBridgeInfo(string memory chain, address mig, uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment) public;
    function removeBridgeInfo(string memory chain) public;
    function changeHubMig(address mig) public;
    function changeBridgeMig(string memory chain, address mig) public;
    
    function relaySwap(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints) public;
    function validateSwap(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes32[] memory sigs) public;
    
    function relaySwapNFT(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints) public;
    function validateSwapNFT(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes32[] memory sigs) public;
}
```


# Bridge

* [Ethereum Bridge](/contract/bridge/ethereum)
* [Bsc Bridge](/contract/bridge/ethereum-1)
* [Klaytn Bridge](/contract/bridge/klaytn)
* [Heco Bridge](/contract/bridge/klaytn-1)
* [Polygon Bridge](/contract/bridge/klaytn-2)
* [Celo Bridge](/contract/bridge/klaytn-3)
* [ICON Bridge](/contract/bridge/icon)
* [XRP Bridge](/contract/bridge/xrp)


# Ethereum

## Code

* `EthBridge.sol`
* `EthBridge.impl.sol`

## Address

* Eth Bridge Symbol : `ETH`
* Eth Bridge Contract Address : `0x78d80c33f23a3395c52b3a8c0d0b12253771b9f7`

## Interface

```bash
pragma solidity 0.5.0;

interface EthBridge {
    function getVersion() public pure returns(string memory);
    function getSwapData(bytes32 govId, uint dataIndex) public view returns(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token);
    function getSwapDataArray(bytes32 govId, uint dataIndex) public view returns(bytes32[] memory bytes32s, uint[] memory uints, address[] memory vaList);
    function getGovInfo(bytes32 govId) public view returns(uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment);
        
    function addBridgeInfo(string memory chain, address mig, uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment) public;
    function removeBridgeInfo(string memory chain) public;
    
    function relaySwap() public;
    function validateSwap(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
    
    function relaySwapNFT() public;
    function validateSwapNFT(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
}
```

All functions except the Read-Only Function of ETH Bridge Contract are executed by HubContract.


# BNB Chain

## Code

* `BscBridge.sol`
* `BscBridge.impl.sol`

## Address

* Bsc Bridge Symbol : `BNB`
* Bsc Bridge Contract Address : `0x89c527764f03BCb7dC469707B23b79C1D7Beb780`

## Interface

```bash
pragma solidity 0.5.0;

interface BscBridge {
    function getVersion() public pure returns(string memory);
    function getSwapData(bytes32 govId, uint dataIndex) public view returns(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token);
    function getSwapDataArray(bytes32 govId, uint dataIndex) public view returns(bytes32[] memory bytes32s, uint[] memory uints, address[] memory vaList);
    function getGovInfo(bytes32 govId) public view returns(uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment);
        
    function addBridgeInfo(string memory chain, address mig, uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment) public;
    function removeBridgeInfo(string memory chain) public;
    
    function relaySwap() public;
    function validateSwap(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
    
    function relaySwapNFT() public;
    function validateSwapNFT(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
}
```

All functions except the Read-Only Function of BSC Bridge Contract are executed by HubContract.


# Klaytn

## Code

* `KlaytnBridge.sol`
* `KlaytnBridge.impl.sol`

## Address

* Klaytn Bridge Symbol : `KLAYTN`
* Klaytn Bridge Contract Address : `0x1af95905bb0042803f90e36d79d13aea6cd58969`

## Interface

```bash
pragma solidity 0.5.0;

interface KlaytnBridge {
    function getVersion() public pure returns(string memory);
    function getSwapData(bytes32 govId, uint dataIndex) public view returns(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token);
    function getSwapDataArray(bytes32 govId, uint dataIndex) public view returns(bytes32[] memory bytes32s, uint[] memory uints, address[] memory vaList);
    function getGovInfo(bytes32 govId) public view returns(uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment);
    
    function addBridgeInfo(string memory chain, address mig, uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment) public;
    function removeBridgeInfo(string memory chain) public;
    
    function relaySwap() public;
    function validateSwap(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
    
    function relaySwapNFT() public;
    function validateSwapNFT(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
}
```

All functions except the Read-Only Function of KLAYTN Bridge Contract are executed by HubContract.


# Heco

## Code

* `HecoBridge.sol`
* `HecoBridge.impl.sol`

## Address

* Heco Bridge Symbol : `HECO`
* Heco Bridge Contract Address : `0xE7688F64e96A733EaDdCb5850392347e67Bb197f`

## Interface

```bash
pragma solidity 0.5.0;

interface HecoBridge {
    function getVersion() public pure returns(string memory);
    function getSwapData(bytes32 govId, uint dataIndex) public view returns(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token);
    function getSwapDataArray(bytes32 govId, uint dataIndex) public view returns(bytes32[] memory bytes32s, uint[] memory uints, address[] memory vaList);
    function getGovInfo(bytes32 govId) public view returns(uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment);
    
    function addBridgeInfo(string memory chain, address mig, uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment) public;
    function removeBridgeInfo(string memory chain) public;
    
    function relaySwap() public;
    function validateSwap(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
    
    function relaySwapNFT() public;
    function validateSwapNFT(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
}
```

All functions except the Read-Only Function of HECO Bridge Contract are executed by HubContract.


# Polygon

## Code

* `MaticBridge.sol`
* `MaticBridge.impl.sol`

## Address

* Polygon Bridge Symbol : `MATIC`
* Polygon Bridge Contract Address : `0x1Fc5A2cE72c71563E6EFC1fc35F326D4CCd23B93`

## Interface

```bash
pragma solidity 0.5.0;

interface MaticBridge {
    function getVersion() public pure returns(string memory);
    function getSwapData(bytes32 govId, uint dataIndex) public view returns(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token);
    function getSwapDataArray(bytes32 govId, uint dataIndex) public view returns(bytes32[] memory bytes32s, uint[] memory uints, address[] memory vaList);
    function getGovInfo(bytes32 govId) public view returns(uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment);
    
    function addBridgeInfo(string memory chain, address mig, uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment) public;
    function removeBridgeInfo(string memory chain) public;
    
    function relaySwap() public;
    function validateSwap(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
    
    function relaySwapNFT() public;
    function validateSwapNFT(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
}
```

All functions except the Read-Only Function of MATIC Bridge Contract are executed by HubContract.


# Celo

## Code

* `CeloBridge.sol`
* `CeloBridge.impl.sol`

## Address

* Polygon Bridge Symbol : `CELO`
* Polygon Bridge Contract Address : `0x9fae958393B59ccb5e707B274615e214c8BD0AE1`

## Interface

```bash
pragma solidity 0.5.0;

interface CeloBridge {
    function getVersion() public pure returns(string memory);
    function getSwapData(bytes32 govId, uint dataIndex) public view returns(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token);
    function getSwapDataArray(bytes32 govId, uint dataIndex) public view returns(bytes32[] memory bytes32s, uint[] memory uints, address[] memory vaList);
    function getGovInfo(bytes32 govId) public view returns(uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment);
    
    function addBridgeInfo(string memory chain, address mig, uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment) public;
    function removeBridgeInfo(string memory chain) public;
    
    function relaySwap() public;
    function validateSwap(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
    
    function relaySwapNFT() public;
    function validateSwapNFT(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
}
```

All functions except the Read-Only Function of CELO Bridge Contract are executed by HubContract.


# ICON

## Code

* `IconBridge.sol`
* `IconBridge.impl.sol`

## Address

* Icon Bridge Symbol : `ICON`
* Icon Bridge Contract Address : `0xa7891d03e9357b6b0002bccdf3b744f51a082187`

## Interface

```bash
pragma solidity 0.5.0;

interface IconBridge {
    function getVersion() public pure returns(string memory);
    function getSwapData(bytes32 govId, uint dataIndex) public view returns(string memory fromChain, string memory toChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token);
    function getSwapDataArray(bytes32 govId, uint dataIndex) public view returns(bytes32[] memory bytes32s, uint[] memory uints, address[] memory vaList);
    function getGovInfo(bytes32 govId) public view returns(uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment);
    
    function addBridgeInfo(string memory chain, address mig, uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment) public;
    function removeBridgeInfo(string memory chain) public;
    
    function relaySwap() public;
    function validateSwap(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
    
    function relaySwapNFT() public;
    function validateSwapNFT(bytes32[] memory sigs) public returns (bool major, address[] memory vaList);
}
```

All functions except the Read-Only Function of ICON Bridge Contract are executed by HubContract.


# XRP

## Code

* `XrpBridge.sol`
* `XrpBridge.impl.sol`

## Address

* Xrp Bridge Symbol : `XRP`
* Xrp Bridge Contract Address : `0x4E6C37162021FdA832fB95aFF42Af92c2e8B6257`

## Events

### XrpTransactionSuggested

```bash
event XrpTransactionSuggested(bytes32 govId, uint swapIndex, uint suggestIndex);Event occurs when Bridge Operator proposes Raw Transaction Data of Terra Chain,
```

* `bytes32 govId` : Unique Identifier of Governance
* `uint swapIndex` : Swap Data Index
* `uint suggestIndex` : Suggestion Data Index

### XrpTransactionSelected

```bash
event XrpTransactionSelected(bytes32 govId, uint selectionIndex);
```

Event will occur upon completion of agreement on the raw transaction data of XRP Chain by a Bridge Validator

* `bytes32 govId` : Unique Identifier of Governance
* `uint selectionIndex` : Selection Data Index

### XrpTransactionValidated

```bash
event XrpTransactionValidated(bytes32 govId, uint selectionIndex, string fromChain, bytes32[] bytes32s, uint[] uints);
```

Event occurs when a Bridge Validator submits a Signature for agreed Raw Transaction Data

* `bytes32 govId` : Unique Identifier of Governance
* `uint selectionIndex` : Selection Data Index
* `string fromChain` : Chain Symbol requesting bridging
* `bytes32[] bytes32s` : Bytes32 Data Array corresponding to Selection Data
* `uint[] uints` : Bytes32 Data Array corresponding to Selection Data

## Interface

```bash
pragma solidity 0.5.0;

interface XrpBridge {
    function getVersion() public pure returns(string memory);
    function getStepStatus(bytes32 govId) public view returns(bool needSuggest, bool needRelaySuggestion, bool needRelaySelection, uint dataIndex, uint suggestIndex, uint selectionIndex);
    function getSwapDataArray(bytes32 govId, uint dataIndex) public view returns(bytes32[] memory bytes32s, uint[] memory uints);
    function getGovInfoArray(bytes32 govId) public view returns(uint[] memory uints, bytes32[] memory bytes32s);
    function getSuggestion(uint types, bytes32 govId, uint index) public view returns(uint swapIndex, address[] memory validators, bytes32[] memory signatureHashs, uint fee, uint seq);
    
    function addBridgeInfo(string memory chain, address mig, uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment) public;
    function removeBridgeInfo(string memory chain) public;
    
    function relaySwap() public;
    function validateSwap(bytes32[] memory sigs) public;
    
    function suggestTransaction(bytes32 govId, uint swapIndex, address[] memory validators, bytes32[] memory sigHashs, uint fee, uint seq) public;
    function relayTransactionSuggested(bytes32 govId, uint suggestIndex) public;
    function validateTransactionSuggested(bytes32 govId, uint suggestIndex, address validator, uint8 vSig, bytes32 rSig, bytes32 sSig) public;
    
    function relayTransactionSelected(bytes32 govId, uint selectionIndex) public;
    function validateTransactionSelected(bytes32 govId, uint selectionIndex, address validator, uint8[] memory vSigs, bytes32[] memory rSigs, bytes32[] memory sSigs) public;
}
```


# Vault (Layer 1)

We explain how the following networks act as Vaults in the Orbit Bridge system.

* [Ethereum Vault](/contract/vault/ethereum)
* [Bsc Vault](/contract/vault/ethereum-1)
* [Klaytn Vault](/contract/vault/klaytn)
* [Heco Vault](/contract/vault/klaytn-1)
* [Matic Vault](/contract/vault/klaytn-2)
* [Celo Vault](/contract/vault/klaytn-3)
* [XRP Vault](/contract/vault/xrp)


# Ethereum

## Code

* `EthVault.sol`
* `EthVault.impl.sol`
* `MultiSigWallet.sol`
* Code can be found in [HERE](https://github.com/orbit-chain/bridge-contract)

## Address

* Eth Vault Contract Address: `0x1Bf68A9d1EaEe7826b3593C20a0ca93293cb489a`

## Events

### Deposit

```bash
event Deposit(string toChain, address fromAddr, bytes toAddr, address token, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests bridging to Ethereum Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### DepositNFT

```bash
event DepositNFT(string toChain, address fromAddr, bytes toAddr, address token, uint tokenId, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests NFT bridging to Ethereum Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### Withdraw

```bash
event Withdraw(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes bridging with Ethereum Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data

### WithdrawNFT

```bash
event WithdrawNFT(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes NFT bridging with Ethereum Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data

## Interface

```bash
pragma solidity 0.5.0;

interface EthVault {
    function getVersion() public pure returns(string memory);
    function getChainId(string memory _chain) public view returns(bytes32);
    
    function deposit(string memory toChain, bytes memory toAddr) payable public;
    function deposit(string memory toChain, bytes memory toAddr, bytes memory data) payable public;
    
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount) public;
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public;
    
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId) public;
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId, bytes memory data) public;
    
    function withdraw(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function withdrawNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
}
```


# BNB Chain

## Code

* `BscVault.sol`
* `BscVault.impl.sol`
* `MultiSigWallet.sol`
* Code can be found in [HERE](https://github.com/orbit-chain/bridge-contract)

## Address

* Bsc Vault Contract Address: `0x89c527764f03BCb7dC469707B23b79C1D7Beb780`

## Events

### Deposit

```bash
event Deposit(string toChain, address fromAddr, bytes toAddr, address token, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests bridging to Ethereum Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### DepositNFT

```bash
event DepositNFT(string toChain, address fromAddr, bytes toAddr, address token, uint tokenId, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests NFT bridging to Ethereum Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### Withdraw

```bash
event Withdraw(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes bridging with Ethereum Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data

### WithdrawNFT

```bash
event WithdrawNFT(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes NFT bridging with Ethereum Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data

## Interface

```bash
pragma solidity 0.5.0;

interface BscVault {
    function getVersion() public pure returns(string memory);
    function getChainId(string memory _chain) public view returns(bytes32);
    
    function deposit(string memory toChain, bytes memory toAddr) payable public;
    function deposit(string memory toChain, bytes memory toAddr, bytes memory data) payable public;
    
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount) public;
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public;
    
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId) public;
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId, bytes memory data) public;
    
    function withdraw(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function withdrawNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
}
```


# Klaytn

## Code

* `KlaytnVault.sol`
* `KlaytnVault.impl.sol`
* `MultiSigWallet.sol`

## Address

* Klaytn Vault Contract Address: `0x9Abc3F6c11dBd83234D6E6b2c373Dfc1893F648D`

## Events

### Deposit

```bash
event Deposit(string toChain, address fromAddr, bytes toAddr, address token, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests bridging to Klaytn Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### DepositNFT

```bash
event DepositNFT(string toChain, address fromAddr, bytes toAddr, address token, uint tokenId, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests NFT bridging to Klaytn Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### Withdraw

```bash
event Withdraw(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes bridging with Klaytn Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### WithdrawNFT

```bash
event WithdrawNFT(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes NFT bridging with Klaytn Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

## Interface

```bash
pragma solidity 0.5.0;

interface KlaytnVault {
    function getVersion() public pure returns(string memory);
    function getChainId(string memory _chain) public view returns(bytes32);
    
    function deposit(string memory toChain, bytes memory toAddr) payable public;
    function deposit(string memory toChain, bytes memory toAddr, bytes memory data) payable public;
    
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount) public;
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public;
    
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId) public;
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId, bytes memory data) public;
    
    function withdraw(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function withdrawNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
}
```


# Heco

## Code

* `HecoVault.sol`
* `HecoVault.impl.sol`
* `MultiSigWallet.sol`

## Address

* Heco Vault Contract Address: `0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F`

## Events

### Deposit

```bash
event Deposit(string toChain, address fromAddr, bytes toAddr, address token, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests bridging to Klaytn Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### DepositNFT

```bash
event DepositNFT(string toChain, address fromAddr, bytes toAddr, address token, uint tokenId, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests NFT bridging to Klaytn Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### Withdraw

```bash
event Withdraw(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes bridging with Klaytn Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### WithdrawNFT

```bash
event WithdrawNFT(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes NFT bridging with Klaytn Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

## Interface

```bash
pragma solidity 0.5.0;

interface HecoVault {
    function getVersion() public pure returns(string memory);
    function getChainId(string memory _chain) public view returns(bytes32);
    
    function deposit(string memory toChain, bytes memory toAddr) payable public;
    function deposit(string memory toChain, bytes memory toAddr, bytes memory data) payable public;
    
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount) public;
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public;
    
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId) public;
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId, bytes memory data) public;
    
    function withdraw(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function withdrawNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
}
```


# Polygon

## Code

* `MaticVault.sol`
* `MaticVault.impl.sol`
* `MultiSigWallet.sol`

## Address

* Matic Vault Contract Address: `0x38C92A7C2B358e2F2b91723e5c4Fc7aa8b4d279F`

## Events

### Deposit

```bash
event Deposit(string toChain, address fromAddr, bytes toAddr, address token, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests bridging to Klaytn Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### DepositNFT

```bash
event DepositNFT(string toChain, address fromAddr, bytes toAddr, address token, uint tokenId, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests NFT bridging to Klaytn Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### Withdraw

```bash
event Withdraw(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes bridging with Klaytn Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### WithdrawNFT

```bash
event WithdrawNFT(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes NFT bridging with Klaytn Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

## Interface

```bash
pragma solidity 0.5.0;

interface MaticVault {
    function getVersion() public pure returns(string memory);
    function getChainId(string memory _chain) public view returns(bytes32);
    
    function deposit(string memory toChain, bytes memory toAddr) payable public;
    function deposit(string memory toChain, bytes memory toAddr, bytes memory data) payable public;
    
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount) public;
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public;
    
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId) public;
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId, bytes memory data) public;
    
    function withdraw(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function withdrawNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
}
```


# Celo

## Code

* `CeloVault.sol`
* `CeloVault.impl.sol`
* `MultiSigWallet.sol`

## Address

* Celo Vault Contract Address: `0x979cD0826C2bf62703Ef62221a4feA1f23da3777`

## Events

### Deposit

```bash
event Deposit(string toChain, address fromAddr, bytes toAddr, address token, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests bridging to Klaytn Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### DepositNFT

```bash
event DepositNFT(string toChain, address fromAddr, bytes toAddr, address token, uint tokenId, uint amount, uint depositId, bytes data);
```

Event occurs when a user using the Orbit Bridge System requests NFT bridging to Klaytn Vault

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address token` : Token Information to be executed bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### Withdraw

```bash
event Withdraw(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes bridging with Klaytn Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### WithdrawNFT

```bash
event WithdrawNFT(string fromChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints, bytes data);
```

An event occurs when a bridge operator executes NFT bridging with Klaytn Vault through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Address released by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

## Interface

```bash
pragma solidity 0.5.0;

interface CeloVault {
    function getVersion() public pure returns(string memory);
    function getChainId(string memory _chain) public view returns(bytes32);
    
    function deposit(string memory toChain, bytes memory toAddr) payable public;
    function deposit(string memory toChain, bytes memory toAddr, bytes memory data) payable public;
    
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount) public;
    function depositToken(address token, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public;
    
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId) public;
    function depositNFT(address token, string memory toChain, bytes memory toAddr, uint tokenId, bytes memory data) public;
    
    function withdraw(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function withdrawNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
}
```


# XRP

## Interface

### Deposit (Bridging request)

* User submit `toChain` & `toAddress` in the [BRIDGE](https://bridge.orbitchain.io/) (or direct to orbitchain xrpaddressbook contract) and issued `TAG`.
* The user requesting bridging sends Transfer Transaction with the `TAG` of the rule set in XRP Vault

### Withdraw (Bridging execution)

* Bridge Validator proceeds to consensus on Raw Transaction
* Each validator sign to Raw Transaction via own private key
* Using XRP's public Ledger API to broadcast multi-signing transaction

```javascript
Transaction Memo = [
    {
        type: "govId",
        data: "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
        type: "swapIndex",
        data: "123"
    }
]
```


# Minter (Layer 2)

We explain how the following networks act as Minters in the Orbit Bridge ecosystem.

* Ethereum Minter
* Klaytn Minter
* ICON Minter
* XRP Minter


# Ethereum

## Code

* `EthMinter.sol`
* `EthMinter.impl.sol`

## Events

### Swap

```bash
event Swap(address hubContract, string fromChain, string toChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints);
```

An event occurs when a bridge operator executes bridging with Ethereum Minter through the Orbit Bridge System.

* `address hubContract` : Orbit Hub Contract Address
* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process

### SwapRequest

```bash
event SwapRequest(string fromChain, string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, uint block);
```

Event occurs when a user who use the Orbit Bridge System requests bridging to Ethereum Minter

* `string fromChain` : Chain Symbol requesting bridging
* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `uint block` : Block number requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface EthMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) payable public;
}
```


# Avalanche

## Code

* `AvaxMinter.sol`
* `AvaxMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface AvaxMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# BNB Chain

## Code

* `BscMinter.sol`
* `BscMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface BscMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# Klaytn

## Code

* `KlaytnMinter.sol`
* `KlaytnMinter.impl.sol`
* Code can be found in [HERE](https://github.com/orbit-chain/bridge-contract)

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface KlaytnMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# Celo

## Code

* `CeloMinter.sol`
* `CeloMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface CeloMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# Fantom

## Code

* `FantomMinter.sol`
* `FantomMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface FantomMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# Harmony

## Code

* `HarmonyMinter.sol`
* `HarmonyMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface HarmonyMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# Polygon

## Code

* `MaticMinter.sol`
* `MaticMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface MaticMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# Moonriver

## Code

* `MoonriverMinter.sol`
* `MoonriverMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface MoonriverMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# OKExChain

## Code

* `OecMinter.sol`
* `OecMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface OecMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# Orbit

## Code

* `OrbitMinter.sol`
* `OrbitMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface OrbitMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# Gnosis

## Code

* `XdaiMinter.sol`
* `XdaiMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `string toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface XdaiMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```


# ICON

SCORE SmartContract in ICON

## Code

* `minter.py`
* Code can be found in [HERE](https://github.com/orbit-chain/bridge-contract)

## Events

### Swap

```bash
@eventlog
def Swap(self, hubContract: bytes, fromChain: str, toChain: str, fromAddr: bytes, toAddr: bytes, tokenAddress: bytes, bytes32s: bytes, uints: bytes, data: bytes):
        pass
```

This event occurs when a bridge operator performs bridging with ICON Minter through the Orbit Bridge System.

* `bytes hubContract` : Orbit Hub Contract Address
* `str fromChain` : Chain Symbol requesting bridging
* `str toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes tokenAddress` : Token Address minted by bridging execution
* `bytes bytes32s` : Bytes32 data array used in the bridging consensus process
* `bytes uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
@eventlog
def SwapNFT(self, hubContract: bytes, fromChain: str, toChain: str, fromAddr: bytes, toAddr: bytes, tokenAddress: bytes, bytes32s: bytes, uints: bytes, data: bytes):
        pass
```

This event occurs when a bridge operator performs bridging with ICON Minter through the Orbit Bridge System.

* `bytes hubContract` : Orbit Hub Contract Address
* `str fromChain` : Chain Symbol requesting bridging
* `str toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes tokenAddress` : Token Address minted by bridging execution
* `bytes bytes32s` : Bytes32 data array used in the bridging consensus process
* `bytes uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
@eventlog
def SwapRequest(self, fromChain: str, toChain: str, fromAddr: bytes, toAddr: bytes, token: bytes, tokenAddress: bytes, decimal: int, amount: int, depositId: int, data: bytes):
    pass
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to ICON Minter

* `str fromChain` : Chain Symbol requesting bridging
* `str toChain` : Chain Symbol to execute bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `bytes token` : Token Information to be executed bridging
* `bytes tokenAddress` : Token Address  requesting bridging
* `int decimal` : Token Decimal requesting bridging
* `int amount` : Token Amount requesting bridging
* `int depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data for Bridge Receiver

## Interface

```bash
class MinterInterface(InterfaceScore):
    @interface
    def getTokenAddress(self, token: bytes) -> Address:
        pass

    @interface
    def getChainId(self, chain: str) -> bytes:
        pass

    @interface
    def swap(self, hubContract: bytes, fromChain: str, fromAddr: bytes, toAddr: bytes, token: bytes, bytes32s: bytes, uints: bytes, sigs: str, data: bytes = None):
        pass
    
    @interface
    def swapNFT(self, hubContract: bytes, fromChain: str, fromAddr: bytes, toAddr: bytes, token: bytes, bytes32s: bytes, uints: bytes, sigs: str, data: bytes = None):
        pass
    
    @interface
    @payable
    def requestSwap(self, tokenAddress: Address, toChain: str, toAddr: bytes, amount: int, data: bytes = None):
        pass

    @interface
    @payable
    def def requestSwapNFT(self, nftAddress: Address, toChain: str, toAddr: bytes, tokenId: int, data: bytes = None):
        pass
```


# XRP

Currently, there is no Minter Contract system in XRP Chain, so you can move your xrp to a heterogeneous chain, but you cannot receive assets from other chains.

As XRP's smart contracts change in the future, XRP minting will accordingly  be implemented in the Orbit Bridge system.


# BridgeReceiver

BridgeReceiver for evm based chain ( ETH, KLAYTN, etc.. )

## Event

```
event BridgeReceiverResult(bool success, bytes fromAddr, address tokenAddress, bytes data);
```

&#x20;Event for the result of executing bridging data requested by user

* `bool success` : Result of Bridge Receiver Execution
* `bytes fromAddr` : Address of the chain requesting bridging
* `address tokenAddress` : Token Information to be executed bridging
* `bytes data` : Execution data requested for bridging

## Interface

```
interface OrbitBridgeReceiver {
    function onTokenBridgeReceived(address _token, uint256 _value, bytes calldata _data) external returns(uint);
    function onNFTBridgeReceived(address _token, uint256 _tokenId, bytes calldata _data) external returns(uint);
}
```


# Governance

## Code

* `MessageMultiSigWallet.sol`
* `MultiSigWallet.sol`

## Events

### Confirmation

```bash
event Confirmation(address indexed sender, uint indexed transactionId);
```

Allows an owner to confirm a transaction.

* `address sender` : Owner Address
* `uint transactionId` : Transaction Identifier

### Revocation

```bash
event Revocation(address indexed sender, uint indexed transactionId);
```

Allows an owner to revoke confirmation for a transaction.

* `address sender` : Owner Address
* `uint transactionId` : Transaction Identifier

### Submission

```bash
event Submission(uint indexed transactionId);
```

Adds a new transaction to the transaction mapping if the transaction does not exist yet.

* `uint transactionId` : Transaction Identifier

### Execution

```bash
event Execution(uint indexed transactionId);
```

Transaction succeeded.

* `uint transactionId` : Transaction Identifier

### ExecutionFailure

```bash
event ExecutionFailure(uint indexed transactionId);
```

Transaction failed.

* `uint transactionId` : Transaction Identifier

### OwnerAddition

```bash
event OwnerAddition(address indexed owner);
```

Adds new Owner.

* `address owner` : New Owner Address

### OwnerRemoval

```bash
event OwnerRemoval(address indexed owner);
```

Removes Owner.

* `address owner` : Owner Address

### RequirementChange

```bash
event RequirementChange(uint required);
```

Changes Multi-Sig Wallet Requirement.

* `uint required` : Requirement Value

## Interface

```bash
pragma solidity 0.5.0;

interface MessageMultiSigWallet {
    function getConfirmationCount(uint transactionId) public view returns (uint count);
    function getTransactionCount(bool pending, bool executed) public view returns (uint count);
    function getOwners() public view returns (address[] memory);
    function getConfirmations(uint transactionId) public view returns (address[] memory _confirmations);
    function getTransactionIds(uint from, uint to, bool pending, bool executed) public view returns (uint[] memory _transactionIds);
    function getHashValidators(bytes32 hash) public view returns (address[] memory)
    function isConfirmed(uint transactionId) public view returns (bool);
    function isValidatedHash(bytes32 hash) public view returns (bool);
    
    function submitTransaction(address destination, uint value, bytes memory data) public returns (uint transactionId);
    function confirmTransaction(uint transactionId) public;
    function revokeConfirmation(uint transactionId) public;
    function executeTransaction(uint transactionId) public;
    
    function updateValidate(bytes32 hash) public returns (bool);
    function validate(address validator, bytes32 hash, uint8 v, bytes32 r, bytes32 s) public returns (bool);
}
```


# Glossary

### Implementation Contract

A contract structure using the delegatecall function of Solidity. Contract Function Update is available.

It is divided into a Data Management Contract and Function Management Contract.

### Message Multi-Sig Wallet

The Message Multi-Sig Wallet Contract is a fabricated form of Contract from a Multi-Sig Wallet Contract. A verification function for a particular hash message is added.&#x20;

### Governance

Groups that use the Orbit Bridge system to manage and enforce Bridging requests.

### Governance ID

Bridge Governance Unique Identifier of Orbit Bridge System

* Definition : `sha256(abi.encodePacked(OrbitHubContractAddress, chainSymbol, vault))`

### Chain ID

Unique Identifier for Managing Chain Symbols of String Type in Contract

* Ethereum Chain Symbol : `ETH`&#x20;
* Klaytn Chain Symbol : `KLAYTN`&#x20;
* Terra Chain Symbol : `TERRA`&#x20;
* Definition : `sha256(abi.encodePacked(contractAddress, chainSymbol))`

### Token Summary

Unique Identifier for Managing Token Information of Bytes Type in Contract

* Ethereum Token Information : Token Contract Address ( exception,  eth : zero address )
* Klaytn Token Information : Token Contract Address ( exception, klay : zero address )
* Terra Token Information : Denom
* Definition : `sha256(abi.encodePacked(chainSymbol, tokenInformation))`

### fromChain

Chain Symbol with Bridging Request Catching

* Lock Process of Vault Contract
* Burn Process of Minter Contract

### toChain

Chain Symbol with Bridging Execution

* Release Process of Vault Contract
* Mint Process of Minter contract

### fromAddr

FromChain Address of the user who requested Bridging

### toAddr

ToChain Address to execute Bridging Request

### Suggestion / Selection Data

Used in Chains requiring agreement on Raw Transaction

* Suggestion : Law Transaction Data Proposed by Bridge Operator
* Selection : Law Transaction Data agreed by Bridge Validator

### ERC-20

ERC-20 tokens are fungibile tokens on Ethereum.

### KIP-7

KIP-7 tokens are fungibile tokens on Klaytn.

### IRC-2

IRC-2 tokens are fungibile tokens on Icon.


# Layer Fee

Orbit Bridge activation and usage for token economy

## Ethereum Layer 1

* Globally 0.1% of bridged token

## BNB Layer 1

* Deposit original token in BNB Chain, there are layer fee exemption benefits
* Otherwise, globally 0.1% of bridged token


# Bridge Fee

For operating transaction in destination chain

{% content-ref url="/pages/4KsMq0OnxccIldfXXJDu" %}
[Current](/policies/bridge-fee/current)
{% endcontent-ref %}

{% content-ref url="/pages/IBGt9e0MCv905f2upmbf" %}
[History](/policies/bridge-fee/history)
{% endcontent-ref %}


# Current

Bridge fee by destination chains

## Updated: around 2023-12-22 12:00:00 KST

## To Ethereum

<table><thead><tr><th>FromChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>KLAYTN</td><td>40 KLAY</td><td>KLAY</td></tr><tr><td>ORBIT</td><td>50 OORC</td><td>KLAYTN</td></tr><tr><td>AVAX</td><td>0.2 AVAX</td><td>KLAYTN</td></tr><tr><td>BNB</td><td>0.05 BNB</td><td></td></tr><tr><td>CELO</td><td>5 CELO</td><td></td></tr><tr><td>FANTOM</td><td>14 FTM</td><td></td></tr><tr><td>HARMONY</td><td>120 ONE</td><td></td></tr><tr><td>HECO</td><td>2 HT</td><td></td></tr><tr><td>MOONRIVER</td><td>0.3 MOVR</td><td></td></tr><tr><td>OEC</td><td>0.5 OKT</td><td></td></tr><tr><td>POLYGON</td><td>15 MATIC</td><td></td></tr><tr><td>XDAI</td><td>20 XDAI</td><td></td></tr></tbody></table>

## To ORBIT

<table><thead><tr><th>FromChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>Anywhere</td><td>Free</td><td>KLAYTN</td></tr></tbody></table>

## To KLAYTN

<table><thead><tr><th>FromChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>ETH</td><td>Free</td><td>KLAYT</td></tr><tr><td>ORBIT</td><td>0.1 OORC</td><td>KLAYTN</td></tr><tr><td>ICON</td><td>0.1 ICX</td><td>KLAYTN</td></tr><tr><td>POLYGON</td><td>0.1 MATIC</td><td></td></tr></tbody></table>

## To POLYGON

<table><thead><tr><th>FromChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>ETH</td><td>Free</td><td>KLAYT</td></tr><tr><td>ORBIT</td><td>0.1 OORC</td><td>KLAYTN</td></tr><tr><td>ICON</td><td>0.1 ICX</td><td>KLAYTN</td></tr><tr><td>KLAYTN</td><td>0.5 KLAY</td><td></td></tr></tbody></table>

## To WEMIX

<table><thead><tr><th>FromChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>KLAYTN</td><td>0.5 KLAY</td><td></td></tr></tbody></table>


# History


# Ethereum Layer1

Bridge fee for ethereum based tokens

## To Ethereum

* Last Updated: 2022-03-30 12:00:00 (KST, UTC+9)

<table><thead><tr><th>FromChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>KLAYTN</td><td>20 KLAY</td><td>KLAY</td></tr><tr><td>ORBIT</td><td>50 OORC</td><td>KLAYTN</td></tr><tr><td>AVAX</td><td>0.2 AVAX</td><td>KLAYTN</td></tr><tr><td>BNB</td><td>0.05 BNB</td><td></td></tr><tr><td>CELO</td><td>5 CELO</td><td></td></tr><tr><td>FANTOM</td><td>14 FTM</td><td></td></tr><tr><td>HARMONY</td><td>120 ONE</td><td></td></tr><tr><td>HECO</td><td>2 HT</td><td></td></tr><tr><td>MOONRIVER</td><td>0.3 MOVR</td><td></td></tr><tr><td>OEC</td><td>0.5 OKT</td><td></td></tr><tr><td>POLYGON</td><td>15 MATIC</td><td></td></tr><tr><td>XDAI</td><td>20 XDAI</td><td></td></tr></tbody></table>

## To ORBIT

<table><thead><tr><th>FromChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>Anywhere</td><td>Free</td><td>KLAYTN</td></tr></tbody></table>

## To KLAYTN

<table><thead><tr><th>FromChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>ETH</td><td>Free</td><td>KLAYT</td></tr><tr><td>ORBIT</td><td>0.1 OORC</td><td>KLAYTN</td></tr><tr><td>ICON</td><td>0.1 ICX</td><td>KLAYTN</td></tr></tbody></table>


# BNB Layer 1

Bridge fee for BSC based tokens

## BNB

<table><thead><tr><th>ToChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>ORBIT</td><td>0 BNB</td><td>KLAYTN</td></tr><tr><td>KLAYTN</td><td>0 BNB</td><td>KLAYTN</td></tr><tr><td>HECO</td><td>0 BNB</td><td>KLAYTN</td></tr><tr><td>POLYGON</td><td>0 BNB</td><td></td></tr></tbody></table>

## KLAYTN

<table><thead><tr><th>ToChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>BSC</td><td>1 KLAY</td><td>KLAYTN</td></tr><tr><td>ORBIT</td><td>1 KLAY</td><td>KLAYTN</td></tr><tr><td>HECO</td><td>1 KLAY</td><td>KLAYTN</td></tr><tr><td>POLYGON</td><td>1 KLAY</td><td></td></tr></tbody></table>

## HECO Fee

<table><thead><tr><th>ToChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>BSC</td><td>0.1 HT</td><td>KLAYTN</td></tr><tr><td>ORBIT</td><td>0.1 HT</td><td>KLAYTN</td></tr><tr><td>KLAYTN</td><td>0.1 HT</td><td>KLAYTN</td></tr><tr><td>POLYGON</td><td>0.1 HT</td><td></td></tr></tbody></table>

## POLYGON

<table><thead><tr><th>ToChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>BSC</td><td>3 MATIC</td><td>KLAYTN</td></tr><tr><td>ORBIT</td><td>3 MATIC</td><td>KLAYTN</td></tr><tr><td>HECO</td><td>3 MATIC</td><td>KLAYTN</td></tr><tr><td>KLAYTN</td><td>3 MATIC</td><td></td></tr></tbody></table>

## ORBIT

<table><thead><tr><th>ToChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>BSC</td><td>1 OORC</td><td>KLAYTN</td></tr><tr><td>KLAYTN</td><td>1 OORC</td><td>KLAYTN</td></tr><tr><td>HECO</td><td>1 OORC</td><td>KLAYTN</td></tr><tr><td>POLYGON</td><td>1 OORC</td><td></td></tr></tbody></table>


# Ripple Layer 1

Bridge fee for XRP based token

## XRP

* **FREE**

## KLAYTN

* Current fee

<table><thead><tr><th>ToChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>XRP</td><td>10 KLAY</td><td>KLAYTN</td></tr><tr><td>ORBIT</td><td>10 KLAY</td><td>KLAYTN</td></tr></tbody></table>

* Scheduled to change

<table><thead><tr><th>ToChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>XRP</td><td>0.1 KLAY</td><td>KLAYTN</td></tr><tr><td>ORBIT</td><td>0 KLAY</td><td>KLAYTN</td></tr><tr><td>BNB</td><td>1 KLAY</td><td></td></tr><tr><td>CELO</td><td>0.1 KLAY</td><td></td></tr><tr><td>HECO</td><td>0.1 KLAY</td><td></td></tr><tr><td>MATIC</td><td>0.1 KLAY</td><td></td></tr></tbody></table>

## ORBIT

<table><thead><tr><th>ToChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>XRP</td><td>20 OORC</td><td>KLAYTN</td></tr><tr><td>KLAYTN</td><td>20 OORC</td><td>KLAYTN</td></tr></tbody></table>

## BSC

<table><thead><tr><th>ToChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>XRP</td><td>0 BNB</td><td>KLAYTN</td></tr><tr><td>ORBIT</td><td>0 BNB</td><td>KLAYTN</td></tr><tr><td>CELO</td><td>0.001 BNB</td><td></td></tr><tr><td>HECO</td><td>0.001 BNB</td><td></td></tr><tr><td>KLAYTN</td><td>0.001 BNB</td><td></td></tr><tr><td>MATIC</td><td>0.001 BNB</td><td></td></tr></tbody></table>


# Klaytn Layer 1

Bridge fee for Klaytn based token

## To Ethereum

* Scheduled to change at 2022-03-25 12:00:00 KST

<table><thead><tr><th>FromChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>KLAYTN</td><td>50 -> 20 KLAY</td><td>KLAYTN</td></tr><tr><td>ORBIT</td><td>150 ->50 OORC</td><td>KLAYTN</td></tr><tr><td>AVAX</td><td>0.5 -> 0.2 AVAX</td><td>KLAYTN</td></tr><tr><td>BNB</td><td>0.1 -> 0.05 BNB</td><td></td></tr><tr><td>CELO</td><td>15 -> 5 CELO</td><td></td></tr><tr><td>FANTOM</td><td>25 -> 14 FTM</td><td></td></tr><tr><td>HARMONY</td><td>250 -> 120 ONE</td><td></td></tr><tr><td>HECO</td><td>5 -> 2 HT</td><td></td></tr><tr><td>MOONRIVER</td><td>0.5 -> 0.3 MOVR</td><td></td></tr><tr><td>OEC</td><td>1 -> 0.5 OKT</td><td></td></tr><tr><td>POLYGON</td><td>25 -> 15 MATIC</td><td></td></tr><tr><td>XDAI</td><td>42 -> 20 XDAI</td><td></td></tr></tbody></table>

## To POLYGON

<table><thead><tr><th>FromChain</th><th>Fee</th><th data-hidden>FromChain</th></tr></thead><tbody><tr><td>KLAYTN</td><td>0 KLAY</td><td>KLAYTN</td></tr><tr><td>ORBIT</td><td>0 OORC</td><td>KLAYTN</td></tr><tr><td>AVAX</td><td>0 AVAX</td><td>KLAYTN</td></tr><tr><td>BNB</td><td>0 BNB</td><td></td></tr><tr><td>CELO</td><td>0 CELO</td><td></td></tr><tr><td>FANTOM</td><td>0 FTM</td><td></td></tr><tr><td>HARMONY</td><td>0 ONE</td><td></td></tr><tr><td>HECO</td><td>0 HT</td><td></td></tr><tr><td>MOONRIVER</td><td>0 MOVR</td><td></td></tr><tr><td>OEC</td><td>0 OKT</td><td></td></tr><tr><td>POLYGON</td><td>0 MATIC</td><td></td></tr><tr><td>XDAI</td><td>0 XDAI</td><td></td></tr></tbody></table>


# Terms of Use \[EN]

## Orbit Bridge Terms of Use

&#x20;

#### Article 1 (Purpose)

Orbit Bridge is a decentralized bridge service that supports token conversion between mainnets by using blockchain mainnets developed by third parties as a platform. Hereinafter, the smart contract program that makes up Orbit Bridge and the Orbit Bridge website (<https://bridge.orbitchain.io>, hereinafter individually referred to as “Website”) are collectively referred to as “Services”. These Terms of Use (hereinafter referred to as the “Terms of Use”) are intended to stipulate the rights, duties, and responsibilities of the Services and the user, and other necessary matters when the user uses the Services.

&#x20;

#### Article 2 (Definition of Terms)

① The definitions of terms used in these Terms of Use are as follows.

1\. "Token" refers to virtual assets issued through smart contracts on the blockchain.

2\. "Conversion" refers to a user using the Services to obtain the result of converting a token on one blockchain mainnet into a token on another blockchain mainnet that is intended to have the same value as the token before conversion in principle.

② The definitions of the terms used in these Terms of Use, except for those specified in Paragraph 1, are in accordance with the relevant laws and regulations and service-specific policies.

&#x20;

#### Article 3 (Publication and Revision of Terms of Use)

① The Services post the contents of the Terms of Use on the screen or connection screen of the Website so that users can easily understand them. If the user checks the Terms of Use and continues to use the Services, it is acknowledged that the user has read, understood, and agreed to the Terms of Use.

② The Services may, if necessary, amend these Terms of Use to the extent that it does not violate the relevant laws and regulations.

③ Since the Services do not have individual means of contacting users when the Terms of Use are amended, the date of application and the reason for the amendment are specified and announced through the Website, and the amended contents take effect from the time the amended contents are posted. However, in the case of revision of the Terms of Use that are unfavorable to the user, it shall be notified more carefully through electronic means such as Website notice or notice through official social media channels disclosed as links to the Website from 30 days prior to the effective date of the amended Terms of Use. If the user checks the revised terms and continues to use the Services after the effective date of the revision of the Terms of Use, it is recognized that the user has read, understood, and agreed to the revised Terms of Use.

&#x20;

#### Article 4 (Rules other than Terms of Use)

Matters not stipulated in these Terms of Use and interpretation of these Terms of Use are governed by the relevant laws and regulations of the Republic of Korea, individual rules and detailed Terms of Use announced by the Services, and general commercial practice.

&#x20;

#### Article 5 (Obligations of the Services)

The Services comply with the relevant laws and these Terms of Use and strive to do their best for the stable use of the Services by users.

&#x20;

#### Article 6. (Obligations of Users)

① Users must not engage in the following acts:

1. Infringement of intellectual property rights such as copyrights of the Services and service-related third parties.
2. Acts that damage the reputation of the Services or a third party related to the Services or interfere with the business.
3. Abuse or misuse of known or unknown bugs or vulnerabilities of the Services, and abuse  of using the Services in a way that goes beyond the expected use method for general users and does not conform to the intended purpose of use of the Services.
4. The act of accessing or exposing the Services through automated means such as Agent, Script, Spider, Spyware, Toolbar, etc., or other fraudulent methods without the prior consent of the Services. The act of fraudulently generating or increasing the number of clicks. The act of causing a load on the server of the Services.
5. Change the Services without being granted special rights from the Services, add or insert other programs into the Services, hack or reverse engineer the server, distribute malicious programs, exceed access rights, or access source code or service data. The act of impersonating the Services by leaking or changing it, building a separate server, or arbitrarily changing or stealing a part of the Website.
6. Engaging in the seizure of other users' information or assets, or the right to access such information or assets, without legitimate cause.
7. Acts of deceiving others to gain advantage, acts of causing harm to others in connection with the use of the Services.
8. Violation of current laws, Terms of Use set forth by the Services, and operation policy.
9. Violation of other relevant laws or acts that are unfair.

② Users must comply with the relevant laws, the provisions of these Terms of Use, information on use, and matters notified in relation to the Services. Also, users must not engage in any act that interferes with the operation of the Services.

&#x20;

#### Article 7 (Attribution of Rights)

① All intellectual property rights related to the Services are owned by the right holder as indicated in the source code or other relevant documents. Users have the right to use the Services in accordance with the method intended by the Services within the scope of the purpose of using the Services. Under no circumstances shall it be construed that these intellectual property rights are transferred to the user or the user has rights equivalent to the transfer of such intellectual property rights.

② The user shall not reproduce, transmit, publish, distribute, broadcast, or otherwise use for commercial purposes any information obtained through the use of the Services that belongs to someone other than the user, or cause a third party to use it, without the prior consent of the right holder.

&#x20;

#### Article 8 (Service Provision and Restrictions on Use)

① The Services are designed to keep the latest block synchronization and optimal state as possible, but the Services are suspended/terminated without notice due to circumstances such as natural disasters, server maintenance, increased transaction congestion on the blockchain, computer system failure, software attack, etc. The Services are not guaranteed to work at all times.

② In order to ensure the stable provision of the Services, there may be service interruptions and maintenance. In addition, some functions within the Services may be restricted due to the failure or maintenance of third-party services linked to the Services.

③ The user observes and follows all instructions provided to the user in relation to the Services. The user does not engage in any action that may cause failure or disruption to the Services or any server, network, or other equipment connected to the Services.

④ In accordance with the standards and policies at the time notified by these Terms of Use, service use screens, and other equivalent methods, users may be charged a fee when using the Services. The burden of these fees, etc., can be used as a financial resource for the Services and Orbit Chain-related ecosystem through consultation with the participants who support the operation of the Services. The Services try to transparently disclose their usage through relevant documentation posted or linked on their website.

⑤ In the process of a user converting virtual assets using the Services, if a conversion method is used in which the assets before conversion are frozen in the smart contract belonging to the Services, the frozen virtual assets may be utilized to pursue additional rewards that can be used for the Services and the ecosystem related to the Orbit Chain in an automatic, low-risk manner, such as through deposits or staking provided by a reasonably trustworthy provider in consultation with the participants that enable the Service to be operated. Such utilization is carried out through possible and appropriate procedures such as consent of stakeholders, discussion, and sufficient notice when necessary.

⑥ Due to carelessness of the user, such as token transfer to an external exchange that applies travel rules, incorrect deposit to contract address, failure to input destination tag, incorrect input of wallet address, incorrect confirmation of address or information provided by a third-party service, etc. loss of virtual assets that occurs is entirely the responsibility of the user unless there is intention or gross negligence on the part of the Services. So users should always pay great attention when using the Services.

⑦ The Service are operated by smart contracts that are automatically executed, and none of the Services, their developers, operators, employees, shareholders, partners, and participants who support the Service to be operated (hereinafter referred to as “Service-related persons”) do not assume any custody or management obligations for the user’s virtual assets. All responsibility for the management of the user's virtual assets, including the storage, theft, and loss prevention of the wallet private key and recovery seed phrases, lies with the user himself, and the Service-related-persons are not responsible for it unless there is intention or gross negligence.

⑧ We do not take any responsibility for problems arising from service changes or interruptions unless there is intention or gross negligence on the part of the Services.

&#x20;

#### Article 9 (Provision of Advertisement)

① The Services may place advertisements on the Website.

② You may be connected to advertisements or third-party services provided by others through banners or links on the Website provided by the Services.

③ In case of being linked to advertisements or third-party services provided by others, the third-party services provided in that area are not the service area, and users must use the third-party services at their own responsibility and judgment.

&#x20;

#### Article 10 (Warranty Disclaimer and Limitation of Liability)

**① THE CONTINUITY OF THE FUNCTIONS USED IN THE SERVICES AND THE SERVICES IS NOT GUARANTEED. FEATURES PROVIDED IN THE SERVICES MAY BE ADDED OR PERMANENTLY DELETED AT ANY TIME, AND PART OR ALL OF THE SERVICES MAY BE DISCONTINUED OR CHANGED. HOWEVER, IN THE CASE OF PERMANENT FEATURE DELETION OR SERVICE SUSPENSION, IF THERE ARE USERS WHO ARE AFFECTED BY THIS, WE WILL NOTIFY AND GUIDE USERS ON HOW TO DEAL WITH THEM WITHIN A REASONABLE PERIOD OF 30 DAYS OR MORE IN ADVANCE.**

**② THE SERVICES ARE NOT RESPONSIBLE FOR SERVICES PROVIDED BY THIRD PARTIES, INCLUDING BUT NOT LIMITED TO WALLET APPLICATIONS PROVIDED BY THIRD PARTIES.**

**③ CONTENTS AND INFORMATION, INCLUDING BUT NOT LIMITED TO THE CURRENT PRICE OF TOKENS PROVIDED IN THE SERVICES, ARE SUPPLEMENTARY MATERIALS TO HELP YOU USE THE SERVICES AND ARE NOT RECOMMENDATIONS OR SUGGESTIONS FOR INVESTMENT OR TRADING. THE SERVICES MAKE REASONABLE EFFORTS TO PROVIDE INFORMATION IN A TIMELY AND ACCURATE MANNER WHERE POSSIBLE BUT DO NOT WARRANT THE TIMELINESS, SUITABILITY, OR ACCURACY OF SUCH INFORMATION.**

**④ ALL SOFTWARE, INCLUDING BUT NOT LIMITED TO SMART CONTRACT CODES USED IN THE SERVICES, MAY HAVE FLAWS THAT COULD NOT BE FOUND EVEN WITH THE INDUSTRY'S USUAL LEVEL OF TECHNOLOGY AND EFFORT DUE TO INHERENT COMPLEXITY AND LIMITATIONS, AND THERE IS A RISK OF ASSET LOSS DUE TO THEFT OF ASSETS THROUGH HACKING, ETC., EXPLOITING SUCH DEFECTS**

**⑤ THE SERVICES, THEIR DEVELOPERS, OPERATORS, EMPLOYEES, SHAREHOLDERS, PARTNERS, AND PARTICIPANTS WHO SUPPORT THE SERVICE TO BE OPERATED (HEREINAFTER, REFERRED TO AS THE “WE” OR “US” IN THIS AND NEXT SUBSECTIONS), DO NOT PROVIDE ANY GUARANTEES, WARRANTIES, OR CONDITIONS, EITHER EXPRESS OR IMPLIED, INCLUDING THOSE EXEMPLIFIED ABOVE, TO THE EXTENT PERMITTED BY APPLICABLE LAW IN RELATION TO THE SERVICES. USERS MUST TAKE FULL RESPONSIBILITY FOR THE USE OF THE SERVICES AND USE THE SERVICES WITH AN UNDERSTANDING THAT THE SERVICES ARE PROVIDED “AS-IS” AND “AS AVAILABLE”. USERS UNDERSTAND AND ACKNOWLEDGE THAT COMPUTERS, SOFTWARE, COMMUNICATIONS, AND BLOCKCHAIN SYSTEMS CANNOT BE COMPLETELY FLAWLESS.**

**⑥ UNLESS IT IS WITHIN THE SCOPE OF OUR RESPONSIBILITY AND AT THE SAME TIME THERE IS THE INTENTION OR GROSS NEGLIGENCE ON US, WE ARE NOT LIABLE FOR IT. EVEN IF WE ARE LIABLE FOR IT, WE SHALL NOT BE LIABLE TO YOU FOR: ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL CONSEQUENTIAL OR EXEMPLARY DAMAGES WHICH MAY BE INCURRED BY YOU, HOWEVER CAUSED AND UNDER ANY THEORY OF LIABILITY. THIS SHALL INCLUDE, BUT NOT BE LIMITED TO, ANY LOSS OF PROFIT (WHETHER INCURRED DIRECTLY OR INDIRECTLY), ANY LOSS OF GOODWILL OR BUSINESS REPUTATION, ANY LOSS OF DATA SUFFERED, COST OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR OTHER INTANGIBLE LOSS. UNDER NO CIRCUMSTANCES SHALL WE BE LIABLE TO YOU FOR ANY CLAIMS, PROCEEDINGS, LIABILITIES, OBLIGATIONS, DAMAGES, LOSSES, OR COSTS IN THE AMOUNT EXCEEDING THE AMOUNT YOU PAID US IN EXCHANGE FOR ACCESS TO AND USE THE SERVICES, OR USD$100.00, WHICHEVER IS GREATER. THIS LIMITATION OF LIABILITY SHALL APPLY TO THE FULLEST EXTENT PERMITTED BY LAW.**

&#x20;

#### Article 11 (User Notice)

Since the Services do not have individual contact means for users, the Services may notify users by using commercially reasonable means, including electronic means such as Website notices and notices through official social media channels published as links to the Website. The notices provided by the Services using these means are, in principle, effective immediately upon being posted.

&#x20;

#### Article 12 (Protection of Rights and Cooperation with Judicial Authorities)

In the following cases, actions deemed reasonably necessary to protect crime victims and users may be taken, such as providing the user's service access information (wallet address, login information, etc.) to the relevant regulatory authorities or validators not performing verification procedures necessary for using the Orbit Bridge, etc:

1. If there are reasonable grounds to view it as an asset involved in hacking, money laundering, or other criminal activity.
2. When there is a request from a regulatory agency or judicial agency based on laws or regulations.

&#x20;

#### Article 13 (Competent Court and Governing Law)

① The laws of the Republic of Korea apply to disputes that arise between Service-related persons and users of the Services in relation to the Service use.

② The competent court for litigation regarding disputes between Service-related persons and users of the Services shall be decided by agreement between the parties, and if an agreement is not reached, the court shall be the court under the Civil Procedure Act of the Republic of Korea.

&#x20;

#### Supplementary Provisions

This Terms of Use is in effect as of August 4th, 2023.


# Terms of Use \[KO]

## 오르빗 브릿지 서비스 이용약관

&#x20;

#### 제1조 (목적)

오르빗 브릿지(Orbit Bridge)는 제3자가 개발한 블록체인 메인넷들을 플랫폼으로 활용하여 각 메인넷 간의 토큰 전환을 지원하는 탈중앙 브릿지 서비스입니다. 이하에서는 오르빗 브릿지를 구성하는 스마트 컨트랙트 프로그램 및 오르빗 브릿지 웹사이트(<https://bridge.orbitchain.io> , 이하 개별적으로 “웹사이트”)를 통틀어 “서비스”라 합니다. 본 이용약관(이하 “약관”)은 이용자가 서비스를 사용함에 있어 서비스 및 이용자의 권리, 의무 및 책임사항, 기타 필요한 사항을 규정함을 목적으로 합니다.

&#x20;

#### 제2조 (용어의 정의)

① 이 약관에서 사용하는 용어의 정의는 다음 각 호와 같습니다.

1\. ‘토큰(token)’이라 함은 블록체인 상에서 스마트 컨트랙트를 통해 발행된 가상자산을 의미합니다.

2\. ‘전환’은 이용자가 서비스를 이용하여 한 블록체인 메인넷에서의 토큰을 원칙적으로 전환 전 토큰과 동일한 가치를 지닐 것으로 의도된 다른 블록체인 메인넷에서의 토큰으로 전환하는 결과를 얻는 것을 말합니다.

② 이 약관에서 사용하는 용어의 정의는 제1항에서 정하는 것을 제외하고는 관련 법령 및 서비스별 정책에서 정하는 바에 의하며, 이에 정하지 아니한 것은 일반적인 상관례에 따릅니다.

&#x20;

#### 제3조 (약관의 게시와 개정)

① 서비스는 약관의 내용을 이용자가 쉽게 알 수 있도록 웹사이트 내 화면 또는 연결 화면에 게시합니다. 이용자가 약관을 확인하고 서비스를 계속 이용할 경우, 약관의 내용을 읽고 이해하고 동의한 것으로 인정됩니다.

② 서비스는 필요한 경우 관련 법령을 위배하지 않는 범위에서 이 약관을 개정할 수 있습니다.

③ 서비스는 이용자에 대한 개별적 연락수단을 보유하고 있지 아니하므로, 약관을 개정할 경우에는 적용일자 및 개정사유를 명시하여 웹사이트를 통해 공지하고, 개정 내용이 게시된 시점부터 개정 내용의 효력이 발생합니다. 다만, 이용자에게 불리한 약관의 개정의 경우에는 개정약관의 적용일자 30일 전부터 웹사이트 공지, 웹사이트에 링크 등으로 공개된 공식 SNS 채널을 통한 공지 등의 전자적 수단을 통해 더 신중히 공지하도록 합니다. 약관 개정 효력발생일 이후에 이용자가 개정된 약관을 확인하고 서비스를 계속하여 이용하는 경우 약관의 개정된 내용을 읽고 이해하고 동의한 것으로 인정됩니다.

&#x20;

#### 제4조 (약관 외 준칙)

이 약관에서 정하지 아니한 사항과 본 약관의 해석에 관하여는 대한민국의 관련 법령 또는 서비스가 공지한 개별 규칙 및 세부약관과 일반 상관례에 따릅니다.

&#x20;

#### 제5조 (서비스의 의무)

서비스는 관련 법령과 본 약관을 준수하며 이용자의 안정적인 서비스 이용을 위해 최선을 다하여 노력합니다.

&#x20;

#### 제6조 (이용자의 의무)

① 이용자는 아래의 행위를 하여서는 안 됩니다.

1. 서비스와 서비스 관련 제3자의 저작권 등 지식재산권에 대한 침해
2. 서비스 및 서비스 관련 제3자의 명예를 손상시키거나 업무를 방해하는 행위
3. 서비스의 알려지거나 알려지지 않은 버그 또는 취약점을 악용하거나 오용하는 행위 및 일반적인 이용자에게 기대되는 이용방식을 넘어 서비스의 의도된 이용목적에 부합하지 않는 방식으로 서비스를 이용하는 남용(어뷰징) 행위
4. 서비스의 사전 승낙 없이 에이전트(Agent), 스크립트(Script), 스파이더(Spider), 스파이웨어(Spyware), 툴바(Toolbar) 등의 자동화된 수단, 기타 부정한 방법을 통하여 서비스에 접속하는 행위, 노출횟수 및 클릭 횟수를 부정하게 생성하거나 증가시키는 행위, 서비스의 서버에 부하를 일으키는 행위
5. 서비스로부터 특별한 권리를 부여받지 않고 서비스를 변경하거나, 서비스에 다른 프로그램을 추가·삽입하거나, 서버를 해킹·역설계하거나, 악성 프로그램을 배포하거나 접속 권한을 초과하거나, 소스 코드나 서비스 데이터를 유출·변경하거나, 별도의 서버를 구축하거나, 웹사이트의 일부분을 임의로 변경·도용하여 서비스를 사칭하는 행위
6. 정당한 원인 없이 다른 이용자의 정보 또는 자산, 또는 이러한 정보 또는 자산에 접근할 수 있는 권한을 탈취하는 것에 관여하는 행위
7. 타인을 기망하여 이득을 취하는 행위, 서비스의 이용과 관련하여 타인에게 피해를 입히는 행위
8. 현행 법령, 서비스가 정한 약관 및 운영정책을 위반하는 행위
9. 기타 관련 법령에 위반되거나 부당한 행위

② 이용자는 관련 법령, 본 약관의 규정, 이용안내 및 서비스와 관련하여 공지하거나 통지한 사항 등을 준수하여야 하며 서비스의 업무에 방해되는 행위를 하여서는 아니됩니다.

&#x20;

#### 제7조 (권리의 귀속)

① 서비스와 관련된 모든 지식재산권은 소스코드 등에 의해 공표된 권리자의 소유이며 이용자는 서비스 이용 목적 범위 내에서 서비스에서 의도한 방법에 따라 서비스를 이용할 권리를 가질 뿐 어떠한 경우에도 이러한 지식재산권을 양도받거나 양도받은 것에 준하는 권리를 가진 것으로 해석되지 아니합니다.

② 이용자는 서비스를 이용함으로써 얻은 정보 중 이용자가 아닌 타인에게 지식재산권이 귀속된 정보를 해당 권리자의 사전승낙 없이 복제, 전송, 출판, 배포, 방송 기타 방법에 의하여 영리목적으로 이용하거나 제3자에게 이용하게 하여서는 안 됩니다.

&#x20;

#### 제8조 (서비스의 제공 및 이용 제한)

① 서비스는 가능한 한 최신 블록 동기화 및 최적의 상태를 유지할 수 있도록 설계되어 있으나, 천재지변, 서버점검 또는 블록체인 상의 트랜잭션 혼잡도 상승, 컴퓨터 시스템 오류, 소프트웨어 공격 등의 상황으로 서비스가 예고 없이 중단/종료될 수 있으며, 24시간 제공이 보장되지 않습니다.

② 서비스의 안정적 제공을 위해 서비스 중단 및 점검이 발생할 수 있습니다. 또한 서비스와 연계된 제3자의 서비스 등의 장애 또는 점검 사유로 서비스 내 일부 기능에 제한이 발생할 수 있습니다.

③ 이용자는 서비스와 관련하여 이용자에게 제공된 모든 지침을 준수하고 따르며 서비스 또는 서비스에 연결된 모든 서버, 네트워크 또는 기타 장비에 장애나 중단을 초래할 수 있는 행위에 관여하지 않습니다.

④ 본 약관, 서비스 이용화면, 기타 이에 준하는 방법에 의해 고지되는 해당 시점의 기준과 정책에 따라 이용자에게는 서비스 이용 시 수수료 등의 부담이 부과될 수 있습니다. 이러한 수수료 등의 부담은 서비스가 동작하도록 지원하는 참여자들의 협의를 통해 서비스 및 오르빗 체인(Orbit Chain) 관련 생태계를 위한 재원으로 사용될 수 있으며 서비스는 이에 대한 사용처를 웹사이트에 게시되거나 링크된 관련 문서를 통해 투명하게 공개합니다.

⑤ 이용자가 서비스를 이용하여 가상자산을 전환하는 과정에서 전환 전 자산이 서비스에 속한 스마트 컨트랙트에 동결되는 전환방식이 쓰이는 경우, 이렇게 동결된 가상자산은 서비스가 동작하도록 지원하는 참여자들의 협의를 통해 합리적으로 신뢰할 만한 사업자가 제공하는 예치 또는 스테이킹, 또는 이에 준하는 수준의 낮은 리스크가 예상되는 자동적 방식으로, 서비스 및 오르빗 체인 관련 생태계를 위해 쓰일 수 있는 추가 보상을 추구하기 위해 활용될 수 있습니다. 이러한 활용은 필요 시 이해관계자의 동의, 논의, 충분한 공지와 같은 가능하고 적절한 절차를 거쳐 실행합니다.

⑥ 트래블룰을 적용하는 외부 거래소로의 토큰 전송, 컨트랙트 주소로의 오입금, 데스티네이션 태그 미입력, 지갑 주소 오입력, 제3자 서비스에서 제공한 주소 또는 정보의 부정확한 확인 등 이용자의 부주의로 인하여 발생한 가상자산 손실은 이에 대해 서비스의 고의 또는 중과실이 없는 한 온전히 이용자의 책임이므로 이용자는 서비스 이용에 있어 항상 상당한 주의를 기울여야 합니다.

⑦ 서비스는 자동으로 실행되는 스마트 컨트랙트에 의해 동작하며, 서비스, 서비스의 개발자, 운영자, 임직원, 주주, 파트너사 및 서비스가 동작하도록 지원하는 참여자들(이하 “서비스 관련자”) 중 어느 누구도 이용자의 가상자산에 대한 보관 또는 관리 의무를 부담하지 않습니다. 지갑 Private Key, 시드 구문 등의 보관, 도난 및 분실 방지를 포함하여 이용자의 가상자산의 관리에 대한 모든 책임은 이용자 본인에게 있으며, 서비스 관련자는 고의나 중과실이 없는 한 이에 대해 책임을 지지 않습니다.

⑧ 서비스의 변경, 중단으로 발생하는 문제에 대해서 서비스의 고의 또는 중과실이 없는 한 어떠한 책임도 지지 않습니다.

&#x20;

#### 제9조 (광고의 제공)

① 서비스는 웹사이트 내에 광고를 게재할 수 있습니다.

② 서비스가 제공하는 웹사이트의 배너 또는 링크 등을 통해 타인이 제공하는 광고나 제3자서비스에 연결될 수 있습니다.

③ 타인이 제공하는 광고나 제3자서비스에 연결될 경우 해당 영역에서 제공하는 제3자 서비스는 서비스의 영역이 아니며, 이용자는 자신의 책임과 판단으로 해당 제3자서비스를 이용하여야 합니다.

&#x20;

#### 제10조 (보증부인 및 책임의 제한)

**① 서비스에서 사용되는 기능과 서비스의 지속성은 보장되지 않습니다. 서비스에서 제공되는 기능은 특정 시점에 추가되거나 영구적으로 삭제될 수 있으며 서비스의 일부 또는 전부가 중단되거나 변경될 수 있습니다. 다만, 영구적인 기능 삭제나 서비스 중단의 경우 이로 인해 영향을 받는 이용자가 있는 경우에는 사전에 30일 이상의 합리적인 기간을 두고 이용자의 대처방법에 대해 공지 및 안내할 예정입니다.**

**② 서비스는 제3자가 제공하는 지갑 애플리케이션 등을 비롯한 제3자가 제공하는 서비스에 대해 책임을 지지 않습니다.**

**③ 서비스에서 제공되는 토큰의 현재 가격 등을 비롯한 콘텐츠와 정보는 서비스 이용을 돕기 위한 보조 자료이며, 투자 또는 거래의 권유 및 암시가 아닙니다. 서비스는 가능한 한 적시의 정확한 정보를 제공하기 위해 합리적인 노력을 다하지만 해당 정보의 적시성, 적합성, 정확성을 보증하지 않습니다.**

**④ 서비스에서 사용하는 스마트 컨트랙트 코드를 비롯해 모든 소프트웨어에는 본질적인 복잡성과 한계로 인해 업계 통상 수준의 기술과 노력으로도 발견되지 못한 결함이 존재할 수 있으며, 이러한 결함을 악용한 해킹 등을 통한 자산 탈취로 인한 원금 손실의 위험이 존재합니다.**

**⑤ 서비스는 서비스와 관련하여 관련 법률이 허용하는 한도 내에서 위에 예시된 것을 포함해 명시적으로 또는 묵시적으로 어떠한 보증, 보장 또는 조건도 제공하지 않습니다. 이용자는 서비스 이용에 대한 모든 책임을 지고 서비스가 “있는 그대로(as-is)”, “이용 가능한 대로(as-available)” 제공되는 것을 이해하고 서비스를 이용해야 합니다. 이용자는 컴퓨터, 소프트웨어, 통신, 블록체인 시스템이 완전무결할 수 없음을 이해하고 인정합니다.**

**⑥ 서비스 관련자의 책임영역 내에 있으면서 동시에 서비스 관련자의 고의 또는 중과실이 있는 경우가 아닌 한 서비스 관련자는 이에 대해 책임을 지지 아니하며, 배상책임을 지는 경우에도 그 발생원인을 불문하고 그리고 어떠한 책임이론에 근거한 것이든 상관없이 이용자가 입게 되는 직접, 간접, 부수적, 특별, 결과적 또는 징벌적 손해\[여기에는 모든 이익의 상실(직접적으로 발생하든지 또는 간접적으로 발생하든지 불문함), 신용 또는 사업적 평판의 상실, 데이터 손실로 인한 피해, 대체 제품 또는 서비스를 얻기 위한 비용 또는 기타 무형의 손해 등도 포함]에 대해서는 배상하지 아니합니다. 그 어떤 경우에도 서비스 관련자가 이용자에게 지는 배상책임의 한도는 이용자가 서비스의 이용 대가로 서비스에 지불한 금액과 미화 100.00 달러 중 더 큰 금액을 한도로 합니다. 본 항에 따른 책임 제한은 관련 법령상 허용되는 한도 내에서 효력을 갖습니다.**

&#x20;

#### 제11조 (이용자 공지)

서비스는 이용자에 대한 개별적 연락수단을 보유하고 있지 아니하므로, 웹사이트 공지, 웹사이트에 링크 등으로 공개된 공식 SNS 채널을 통한 공지 등의 전자적 수단을 포함하여 상업적으로 합리적인 수단을 사용하여 공지함으로써 이용자에 대한 통지를 할 수 있습니다. 서비스가 이러한 수단을 사용하여 제공하는 공지 및 통지는 원칙적으로 게시된 시점에 즉시 효력이 발생합니다.

&#x20;

#### 제12조 (권리보호 및 사법기관 협조)

다음 각 호와 같은 경우에는 해당 거래에 관련된 이용자의 서비스 접속정보(지갑주소, 접속정보 등)가 적법한 규제당국 또는 사법기관에 제공되거나, 오르빗 브릿지의 이용에 필요한 밸리데이터들이 검증 절차를 수행하지 않는 등 합리적으로 범죄 피해자 및 이용자 보호를 위해 필요하다고 여겨지는 조치가 취해질 수 있습니다.

1. 해킹, 자금세탁 또는 기타 범죄행위에 연루된 자산으로 볼 수 있는 합리적인 근거가 있는 경우
2. 법령에 근거한 규제기관 또는 사법기관의 요청이 있는 경우

&#x20;

#### 제13조 (관할법원 및 준거법)

① 서비스 이용과 관련하여 서비스 관련자와 이용자 간 발생한 분쟁에 대하여는 대한민국 법을 적용합니다.

② 서비스 관련자와 이용자 간에 발생한 분쟁에 관한 소송의 관할법원은 당사자들이 합의하여 결정하며 합의가 이루어지지 않을 때에는 대한민국 민사소송법에 의한 법원으로 합니다.

&#x20;

#### 부칙

이 약관은 2023년 8월 4일부터 적용됩니다.




---

[Next Page](/llms-full.txt/1)

