# 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.md#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.md#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.md#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.md#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.md#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.


---

# 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/faq/integration-guide/3.-how-to-use-an-orbit-bridge.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.
