> For the complete documentation index, see [llms.txt](https://bridge-docs.orbitchain.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bridge-docs.orbitchain.io/contract/orbithub.md).

# 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;
}
```
