icon-project / icon-bridge

The centralized bridge of ICON
Apache License 2.0
21 stars 15 forks source link

story(deployment): setup environment for multi chain transfers #689

Open manishbista28 opened 1 year ago

manishbista28 commented 1 year ago

Overview

We need to setup a testnet environment that bridges multiple chains that we have worked on so far. This will help perform tests and work on any shortcomings (if present)

Contract Addresses of wrapped and native tokens plus addresses of BMC and BTS smart contracts for different chains is given below

{
    "networks": {
        "icon": {
            "uri": "https://lisbon.net.solidwallet.io/api/v3/icon_dex",
            "network_id": "0x2",
            "btp_network_id": "0x2.icon",
            "block_height": 14057820,
            "native_coin": "btp-0x2.icon-ICX",
            "native_token": "btp-0x2.icon-*"
       },
       "bsc": {
            "uri": "https://data-seed-prebsc-1-s1.binance.org:8545",
            "network_id": "0x61",
            "btp_network_id": "0x61.bsc",
            "block_height": 23883737,
            "native_coin": "btp-0x61.bsc-BNB",
            "native_token": "btp-0x61.bsc-*"
       },
       "snow": {
           "uri": "https://arctic-rpc.icenetwork.io:9933",
           "network_id": "0x228",
           "btp_network_id": "0x228.snow",
           "block_height": 541514,
           "native_coin": "btp-0x228.snow-ICZ",
           "native_token": "btp-0x228.snow-*"
       },
       "near": {
            "uri": "",
            "network_id": "0x2",
            "btp_network_id": "0x2.near",
            "block_height": ""
            "native_coin": "btp-0x2.near-NEAR",
            "native_token": "btp-0x2.near-*"
       }
    },
    "contracts" : {
        "icon": {
            "btp-0x2.icon-sICX" : "cx5e55b0661bbe00b6f1f1c1f78c3ef510a58d5d48",
            "btp-0x2.icon-bnUSD" : "cxa54b4bfe3a95044884939dc603669b8a00042f29",
            "btp-0x61.bsc-BNB" : "cx8e39c3e919675dde3edd76a3b980c5a46e4874d3",
            "btp-0x61.bsc-BUSD" : "cx3416c25050e7e461be7a4fdafc12064db0531d80",
            "btp-0x61.bsc-USDT" : "cxf6355a748de9df8912a50ff0d88bdadde0841822",
            "btp-0x61.bsc-USDC" : "cx3b2165492887b99b74bc24546bc47f61182278e7",
            "btp-0x61.bsc-BTCB" : "cxe257d9ec65d84e327d2840fdc5d314385d464f1b",
            "btp-0x61.bsc-ETH" : "cx37a1daac9eee44ffc480dce8109fd473950b8a1c",
            "btp-0x228.snow-ICZ" : "cx53d67818629498e4fd93306b3562fd921118de50",
            "btp-0x2.near-NEAR" : "cxbad3085856f502f1b52b6d79ec6ed61da1f3392d",
            "bmc": "cx8059df76efcd0b076c7493756b5baf6a5bfe03c4",
            "bts": "cx9b16a2374e6fd35f223bb902137ce34013c8a5f2"
       },
       "snow": {
            "btp-0x61.bsc-BNB" : "0x90C73Ae2b1D90AbdF48E2b00dC69A87F7304dBc4",
            "btp-0x61.bsc-BUSD" : "0x033Cd216112119463D69F6B3Ea4f3b81D425d8f2",
            "btp-0x61.bsc-USDT" : "0x1FD65fa5962755123389D76aE2a6A420b9a82d8F",
            "btp-0x61.bsc-USDC" : "0x50faC2F139CeD39bBb5A0D604f6946fdA1f28A9A",
            "btp-0x61.bsc-BTCB" : "0x18fD515F7EB847a1aD847997c9647EeD490Cc8E4",
            "btp-0x61.bsc-ETH" : "0x2a6fb6D76226e96362027B5c34B71B02Cd6Abcf6",
            "btp-0x2.icon-ICX" : "0x63c1162F92E6cae9f8da1308C896b6e8334300c5",
            "btp-0x2.icon-sICX" : "0x3479B6c40739a56A078eC0b61E36c91e94Aef3A6",
            "btp-0x2.icon-bnUSD" : "0xD89e434e69Ce6Ec59659EC719750Ea2456861220",
            "btp-0x2.near-NEAR" : "0x7d35f6393adFf5Def1Ed28a618EEF77BE59d7c67",
            "BMCManagement": "0x0336762080A0F6eA27c3Ba8B3ecC628cA122C796",
            "BMCPeriphery": "0x15FC0d621b7E717b9aC111048ABe88Ea8dF5794c",
            "BTSCore": "0x7a6Cad739314adB23D752379e6A0699755Baa8B8",
            "BTSPeriphery": "0xF8e9a3DF47eF5168EfD7aE1EAf61fa53b70a8687"
       },
       "bsc": {
            "btp-0x61.bsc-BUSD" : "0xB8dadc0502a384E0acef0fb6893C9c988EEaaF04",
            "btp-0x61.bsc-USDT" : "0x640f5E152A5A46cbC7E2E71DeA99801dA21a3362",
            "btp-0x61.bsc-USDC" : "0x1B033fFE15c3CA2C69c15bD071B675B51959ceeD",
            "btp-0x61.bsc-BTCB" : "0xc14e6b4782805d23472B421bBa557AA41DAeaaDa",
            "btp-0x61.bsc-ETH" : "0x598A6afb2cE2692B485b1EeD5E94Fe67591Fe427",
            "btp-0x2.icon-ICX" : "0xb7777953Bc56f7507dE5515A3987604b22218CcE",
            "btp-0x2.icon-sICX" : "0xc8975dCAA3232f192c8cA37D75eF87A3e3FcD3d8",
            "btp-0x2.icon-bnUSD" : "0xB89290bD5d8CEEe52552b41fb45D80DbECF2BB96",
            "btp-0x228.snow-ICZ" : "0x87DC3A36278fC5fE02d0f934e72FA8885Bde6F38",
            "btp-0x2.near-NEAR" : "0x93CfFE2b2DB919D11FF63F02BF9F64AF83A884e1",
            "BMCManagement": "0x807d5674F99A03c8208aEf30143c97C3005D13E4",
            "BMCPeriphery": "0x6B63590D12f06926419eF9bff817d5029a8FD5C0",
            "BTSCore": "0xA60AaCd0483091FFF5c9ba158D49c13CE1F7cd88",
            "BTSPeriphery": "0xd3ED8a0b57F85EF1E7552e875D3C382ef34735Cf"
       },
       "near": {
            "btp-0x61.bsc-BNB" : "",
            "btp-0x61.bsc-BUSD" : "",
            "btp-0x61.bsc-USDT" : "",
            "btp-0x61.bsc-USDC" : "",
            "btp-0x61.bsc-BTCB" : "",
            "btp-0x61.bsc-ETH" : "",
            "btp-0x2.icon-ICX" : "",
            "btp-0x2.icon-sICX" : "",
            "btp-0x2.icon-bnUSD" : "",
            "btp-0x2.snow-ICZ" : "",
            "bmc": "",
            "bts": ""
       }
    }
}

Additional Info:

  1. if you want to fetch old blocks on SNOW chain, you might want to use arctic archive endpoints: HTTP (https://arctic-archive.icenetwork.io:9933) or websocket (wss://arctic-archive.icenetwork.io:9944)
  2. A relay has been run to serve these contracts
manishbista28 commented 1 year ago

How to integrate a new chain "XYZ" to this group:

  1. The chain should deploy bmc and bts smart contracts

  2. Native Coin & Native Tokens of this chain should be registered as wrapped tokens on other chains

  3. Native Coin & Native Token of all other chains should be registered as wrapped coin on this new chain "XYZ".

  4. Link new chain to ICON chain. This has to be done from both chains separately.

    Following methods are called on chain "XYZ" where icon_bmc_btp_address and icon_block_height is known: for method addLink: use icon_bmc_btp_address for method setLinkRxHeight: use icon_bmc_btp_address as link, use icon_block_height as height for method addRelay: use icon_bmc_btp_address as link, use Relay Owner address of "XYZ" chain as addr

    Same methods will be executed for chain ICON where xyz_bmc_btp_address and xyz_block_height is know

  5. Relay can be run for each chain pair on separate applications. But it is also possible to aggregate relay config for all chain pairs to a single relay config and run a single relay application.

manishbista28 commented 1 year ago

How does a BTP Message hop between chains.

For an exchange between a chain and ICON, the hop includes back and forth message exchange between ICON and that chain. For an exchange between chains other than ICON, the message will bridge via ICON i.e. for BSC-> SNOW transfer, message flows as BSC receiver => ICON sender => ICON receiver => SNOW sender and similar for SNOW->BSC transfer.