Orbit Bridge
  • Introduction
  • Overview
  • Core Concept
  • How it works
    • Features
    • Differentiation
    • Bridge Validator
    • Bridge Operator
    • Governance
  • Bridging Transactions
    • Ethereum
    • BNB Chain
    • Klaytn
    • Heco
    • Polygon
    • Celo
    • ICON
    • XRP
  • Validator Guide
    • Notes for Validator Nodes
    • Hardware Specifications
    • Validator Reward Structure
    • Quick Start
    • REST API
    • Configuration
    • Troubleshooting
  • Operator Guide
    • Hardware Specifications
    • Quick Start
    • REST API
    • Configuration
    • Troubleshooting
  • Official Bridge Governance
  • Token Registration for Bridging
    • Registration Using Etherscan
    • Registration Using Remix
    • Bridge to The Open Network(TON)
      • Registration on TON Using Etherscan
      • Registration on TON Using Remix
  • FAQ
    • General [EN]
    • General [KO]
    • Gas Fee Guide [EN]
    • Gas Fee Guide [KO]
    • Guide for Adding RPC Network [EN]
    • Guide for Adding RPC Network [KO]
    • Anti-Phishing [EN]
    • Anti-Phishing [KO]
    • Transaction delay after setting the gas fee
    • Integration Guide
      • 1. List of supported chains
      • 2. Contract Addresses
      • 3. How to use an Orbit Bridge
      • 4. Chain Explorers
      • 5. API
  • Contract
    • OrbitHub
    • Bridge
      • Ethereum
      • BNB Chain
      • Klaytn
      • Heco
      • Polygon
      • Celo
      • ICON
      • XRP
    • Vault (Layer 1)
      • Ethereum
      • BNB Chain
      • Klaytn
      • Heco
      • Polygon
      • Celo
      • XRP
    • Minter (Layer 2)
      • Ethereum
      • Avalanche
      • BNB Chain
      • Klaytn
      • Celo
      • Fantom
      • Harmony
      • Polygon
      • Moonriver
      • OKExChain
      • Orbit
      • Gnosis
      • ICON
      • XRP
    • BridgeReceiver
    • Governance
    • Glossary
  • LINK
    • Orbit Bridge Github
    • Orbit Bridge Website
  • POLICIES
    • Layer Fee
    • Bridge Fee
      • Current
      • History
        • Ethereum Layer1
        • BNB Layer 1
        • Ripple Layer 1
        • Klaytn Layer 1
    • Terms of Use [EN]
    • Terms of Use [KO]
  • Bridging Assets
    • Ethereum Layer 1
    • Ripple Layer 1
    • BNB Layer 1
  • CROSS CHAIN TIPS
    • ICON
    • Celo
    • HECO
    • XRP
Powered by GitBook
On this page
  • Verification Process
  • Verification of transactions with Vaults
  • Verification of transactions with Minters
  • Verification for the execution of transactions to each destination chain is carried out in a transaction consensus process.
  • Verification Hash
  • Swap & RequestSwap Hash
  • Subscribe Orbitchain
  • Verification Detail for SmartContract based transaction
  • Verification Detail for Terra transaction

Was this helpful?

  1. How it works

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.

  • 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

    • bytes32 bytes32s[0] : verify Governance Identifier validator's own id.

  • Get transaction from Vault / Minter chain using bytes32 bytes32s[1]

  • 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

Verification Detail for Terra transaction

Mint token to other chains

  • Pre-defined in launch-governance settings

    • address hubContract : SwapRelay event must be from hubContract address

    • bytes32 bytes32s[0] : verify Governance Identifier validator's own id.

  • Get transaction from Terra node using bytes32 bytes32s[1]

  • 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

    • 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

Release token to Terra address

  • Typically, verify release of tokens takes place in the minting chain.

  • 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 (use 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));

PreviousDifferentiationNextBridge Operator

Last updated 2 years ago

Was this helpful?

Sample Transaction.

HERE