# Brief Intro to the Custodian Bridge Services

## Custodian Bridge Services

We work with licensed custodian service providers to provide the bridge service from other chains to the Exsat EVM. The assets will stay in the addresses managed by custodian service provider. We will mint or release tokens on Exsat EVM accordingly. This approach will give us a safe and compliant way to manage crypto assets.

## Background

### Vaulta and EVM

We use the **Vaulta** (<https://www.vaulta.com/>) blockchain network. The Vaulta blockchain is a next-generation Layer-1 built for speed, scale and finality. Your transfers, swaps, and app interactions happen almost instantly with low (or no) fees.

**Vaulta EVM** is a powerful feature of the Vaulta blockchain that brings the best of Ethereum's capabilities to the Vaulta ecosystem. It allows you to use popular Ethereum-based applications (dApps) on Vaulta, benefiting from faster speeds, lower costs, and a more eco-friendly environment.

### Exsat EVM

Vaulta EVM technology allow entities to run their own EVM layers on the Vaulta blockchain. Exsat runs it’s own EVM layer, the **Exsat EVM.**

#### Exsat EVM Mainnet

RPC: <https://evm.exsat.network/>

Block explorer: <https://scan.exsat.network/>

#### Exsat EVM Testnet

RPC: <https://evm-tst3.exsat.network/>

Block explorer: <https://scan-testnet.exsat.network/>

### Reserved Address

Each Vaulta account has a mapped reserved EVM address. The rule is using the uint64 value of the Vaulta name as the last 8 bytes of the EVM address, and then pad the rest with 0xbb. E.g. the name “eosio.evm” is mapped to “0xbbbbbbbbbbbbbbbbbbbbbbbb5530ea015b900000”

## The Cross Chain Bridges

As mentioned above, the support for native token of the EVM and other tokens will be different. However, the general idea is the same: the user first transfer tokens to addresses managed by the custodian service provider on the source chain, the bridge then mint or release tokens to the EVM address linked to the source chain address.

<figure><img src="https://3042747009-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaDUBtTPZKYj40o0zqoC8%2Fuploads%2FkAbObmLWd2BfHNx5z3Xv%2Ftoken-deposit.png?alt=media&#x26;token=66bac6d9-a533-4aee-8be5-27f6466f3b8f" alt=""><figcaption><p>Deposit tokens to user.</p></figcaption></figure>

<figure><img src="https://3042747009-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaDUBtTPZKYj40o0zqoC8%2Fuploads%2F8zonYz3VKziVUVqv0mBW%2Ftoken-withdraw.png?alt=media&#x26;token=a526c192-517c-4f48-8293-fd240e3909c0" alt=""><figcaption><p>Withdraw tokens.</p></figcaption></figure>

We also allow dApps to manage their own user funds. In this mode, the bridged tokens will be sent to a dApp appointed address. A notification will be sent to the dApp with extra context to distinguish origin later (but still in the same Vaulta Tx).&#x20;

<figure><img src="https://3042747009-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaDUBtTPZKYj40o0zqoC8%2Fuploads%2FWXm4pauc852h87EEkeeC%2Ftoken-deposit-app.png?alt=media&#x26;token=8b05956b-cc39-42fe-bc37-98b30f2e4be9" alt=""><figcaption><p>Deposit tokens to dApp.</p></figcaption></figure>

### BTC Bridge

**Deposit**

1. Get the address for deposit. Currently, end users can apply for such addresses on <https://exsat.network/app/bridge>. However, for application developments, it is preferable that the developer contact the Exsat to generate such addresses.
2. Transfer to the assigned BTC address.
3. Tokens will be transferred to the EVM address linked to the BTC address.

**Withdraw**

1. Transfer to `0xbbbbbbbbbbbbbbbbbbbbbbbb3d6f4ef81dc1b200` (reserved address of bproxy.xsat) with memo in certain format:

   memo format：\<permission\_id>,\<evm\_address>,\<btc\_address>,\<gas\_level>

   * permission\_id：The id for a bridge routine. 1 is used for regular usages for now. It is possible that we have different settings for different routines. (e.g. maybe different custodian/speed/fees)
   * evm\_address：The Sender address. Note that this address is mainly for record keeping, no validation is performed on this.
   * btc\_address：Recipient address.
   * gas\_level：”slow” or “fast“

Example: <https://scan.exsat.network/tx/0x31f885b08611274700b49ac4c6f17af591e8ebff74d3d4a9ee734b275132eafd>

The memo of the above transaction is:

`1,0x1c892C483618a9EbF8250a437f9E952Fc6b7212d,bc1palegjlhn6v6fj5jdkvsg0fm0kdzgms8pzy9vkhzylug2fnmjfkcsx6y9he,slow`&#x20;

For more details, please check [custodian-bridge-for-btc](https://docs.exsat.network/developer-guides/custodian-bridge-for-btc "mention")

### General Token Bridge

**Deposit**

1. Get the address for deposit. Currently, end users can apply for such addresses on <https://exsat.network/app/bridge>. However, for application developments, it is preferable that the developer contact the Exsat to generate such addresses.
2. Transfer token to the assigned address on source chain.
3. Tokens will be transferred to the EVM address linked to the source chain address.

**Withdraw**

1. Locate the helper contract for the token we want to bridge. Each token has a helper contract to handle the withdraw requests.
2. Call the withdraw function:

```solidity
function withdraw(
        uint256 _permissionId,
        string calldata _chainName,
        string calldata _recipientAddress,
        uint256 _amount,
        string calldata _remark
    ) external {}
```

* \_permission\_id: The id for a bridge routine.
* \_chainName: Chain name：e.g. arb, bsc, eth, solana, tron, The chain name must match the settings indexed by the permission id.
* \_recipientAddress: Recipient address
* \_amount: Amount in wei
* \_remark: Memo for the transfer generated in the destination chain if applicable. Can be empty.

The current supported tokens are:

<table><thead><tr><th width="109.640625">permission id</th><th width="101.8046875">chain name</th><th width="87.87890625">symbol</th><th>token contract</th><th>call contract</th></tr></thead><tbody><tr><td>0</td><td>eth</td><td>USDT</td><td>0xA7366BE06B2867a207c0C4F37481fF7B0cE62D87</td><td>0x4f9cC2c21F35f92ee25CBA295684d56E4044F725</td></tr><tr><td>0</td><td>eth</td><td>USDC</td><td>0x893AfC357b656EdD4F0c028670516F846FE89CFb</td><td>0xBB4D7B8953151Cf583dde191c4df4f50b6E96b38</td></tr><tr><td>1</td><td>tron</td><td>USDT</td><td>0xA7366BE06B2867a207c0C4F37481fF7B0cE62D87</td><td>0x4f9cC2c21F35f92ee25CBA295684d56E4044F725</td></tr><tr><td>2</td><td>solana</td><td>USDT</td><td>0xA7366BE06B2867a207c0C4F37481fF7B0cE62D87</td><td>0x4f9cC2c21F35f92ee25CBA295684d56E4044F725</td></tr><tr><td>2</td><td>solana</td><td>USDC</td><td>0x893AfC357b656EdD4F0c028670516F846FE89CFb</td><td>0xBB4D7B8953151Cf583dde191c4df4f50b6E96b38</td></tr><tr><td>0</td><td>bsc</td><td>USDC</td><td>0x893AfC357b656EdD4F0c028670516F846FE89CFb</td><td>0xBB4D7B8953151Cf583dde191c4df4f50b6E96b38</td></tr><tr><td>0</td><td>arb</td><td>USDT</td><td>0xA7366BE06B2867a207c0C4F37481fF7B0cE62D87</td><td>0x4f9cC2c21F35f92ee25CBA295684d56E4044F725</td></tr><tr><td>0</td><td>arb</td><td>USDC</td><td>0x893AfC357b656EdD4F0c028670516F846FE89CFb</td><td>0xBB4D7B8953151Cf583dde191c4df4f50b6E96b38</td></tr><tr><td>0</td><td>bsc</td><td>USDT</td><td>0xA7366BE06B2867a207c0C4F37481fF7B0cE62D87</td><td>0x4f9cC2c21F35f92ee25CBA295684d56E4044F725</td></tr><tr><td>0</td><td>eth</td><td>ETH</td><td>0x81e1Da8BDEbC4686B9025839c72c7FB0229F180C</td><td>0xE077aB9D41F441E5F2C0cB3FA099A92EcFAC3E80</td></tr></tbody></table>

For more details, please check [custodian-bridge-for-non-btc-tokens](https://docs.exsat.network/developer-guides/custodian-bridge-for-non-btc-tokens "mention")
