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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bridge-docs.orbitchain.io/contract/orbithub.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
