> For the complete documentation index, see [llms.txt](https://docs.liquidapps.io/liquidapps-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.liquidapps.io/liquidapps-documentation/cross-chain-bridges/getting-started-with-liquidbridge/eosio-atomic-assets-less-than-greater-than-erc1155-non-fungible-tokens/test-bridge.md).

# Test bridge

**Initialize token contracts**

* Create NFTs on Kylin

For Kylin we'll setup the collection and schema then mint an asset to the test contract.  If you have a pre existing NFT, you can send it to the Kylin test account.

{% tabs %}
{% tab title="Kylin" %}

```bash
export AUTHOR=$KYLIN_TEST_ACCOUNT
export COLLECTION_NAME=nftauthcoll3 # create a different one because this one's taken
export ALLOW_NOTIFY=1
export AUTHORIZED_ACCOUNTS=[$KYLIN_TEST_ACCOUNT] # add additional accounts if necessary
export NOTIFY_ACCOUNTS=[""]
export MARKET_FEE=0.01 # cause we're fair people
export DATA=[]
export SCHEMA_NAME=nftauthsche1
export SCHEMA_FORMAT=[ {name: "name", type: "string"}, {name: "series", type: "string"}, {name: "moment", type: "string"}, {name: "description", type: "string"}, {name: "img", type: "image"}, {name: "backimg", type: "string"}, {name: "rarity", type: "string"} ]
# not working, if you know how to make it (passing array as variable) work, please edit!!
# cleos -u $KYLIN_ENDPOINT push action $KYLIN_TOKEN_ACCOUNT createcol "[\"$AUTHOR\",\"$COLLECTION_NAME\",\"$ALLOW_NOTIFY\",\"$AUTHORIZED_ACCOUNTS\",\"$NOTIFY_ACCOUNTS\",\"$MARKET_FEE\",\"$DATA\"]" -p $KYLIN_TEST_ACCOUNT@active

# create collection
cleos -u $KYLIN_ENDPOINT push transaction '{
  "delay_sec": 0,
  "max_cpu_usage_ms": 0,
  "actions": [
    {
      "account": "bridgeassets",
      "name": "createcol",
      "data": {
        "author": "natdeveloper",
        "collection_name": "nftauthcoll3",
        "allow_notify": true,
        "authorized_accounts": [
          "natdeveloper"
        ],
        "notify_accounts": [],
        "market_fee": 0.01,
        "data": []
      },
      "authorization": [
        {
          "actor": "natdeveloper",
          "permission": "active"
        }
      ]
    }
  ]
}'

# create schema
cleos -u $KYLIN_ENDPOINT push transaction '{
  "delay_sec": 0,
  "max_cpu_usage_ms": 0,
  "actions": [
    {
      "account": "bridgeassets",
      "name": "createschema",
      "data": {
        "authorized_creator": "natdeveloper",
        "collection_name": "nftauthcoll3",
        "schema_name": "nftauthsche1",
        "schema_format": [
          {
            "name": "name",
            "type": "string"
          },
          {
            "name": "series",
            "type": "string"
          },
          {
            "name": "moment",
            "type": "string"
          },
          {
            "name": "description",
            "type": "string"
          },
          {
            "name": "img",
            "type": "image"
          },
          {
            "name": "backimg",
            "type": "string"
          },
          {
            "name": "rarity",
            "type": "string"
          }
        ]
      },
      "authorization": [
        {
          "actor": "natdeveloper",
          "permission": "active"
        }
      ]
    }
  ]
}'
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
If you get errors such as **Transaction exceeded the current network usage limit imposed on the transaction**, see the [Kylin](/liquidapps-documentation/eosio-guides/testnet-creation-guides/creating-cryptokylin-account.md) account setup guides to get more tokens and to stake for more resources.
{% endhint %}

* Mint test tokens

We will mint some test NFT tokens to our test account.&#x20;

{% hint style="warning" %}
Be sure to update the **account name,** the **new asset owner,** the **collection name** and the **actor** signing the transaction.
{% endhint %}

```bash
export AUTHORIZED_MINTER=$KYLIN_TEST_ACCOUNT
export COLLECTION_NAME=$COLLECTION_NAME
export SCHEMA_NAME=$SCHEMA_NAME
export TEMPLATE_ID=-1
export NEW_ASSET_OWNER=$KYLIN_TEST_ACCOUNT
export IMMUTABLE_DATA=[ { "key": "name", "value": [ "string", "The New Silk Road" ] }, { "key": "img", "value": [ "string", "QmSXDsFeNaPa3CJKmn8WKBnA421Zv5r3Ra8n71LZhvEi9s/main/genesis/1.png" ] }, { "key": "backimg", "value": [ "string", "QmSXDsFeNaPa3CJKmn8WKBnA421Zv5r3Ra8n71LZhvEi9s/main/genesis/1_back.jpg" ] }, { "key": "series", "value": [ "string", "Through the Looking Glass" ] }, { "key": "moment", "value": [ "string", "6 - The Silk Road" ] }, { "key": "rarity", "value": [ "string", "genesis" ] }, { "key": "description", "value": [ "string", "Named after an ancient Chinese trade route, the digital silk road is a virtual pathway for the delivery of merchandise." ] } ]
export MUTABLE_DATA=[]
export TOKENS_TO_BACK=[]

cleos -u $KYLIN_ENDPOINT push transaction '{
  "delay_sec": 0,
  "max_cpu_usage_ms": 0,
  "actions": [
    {
      "account": "bridgeassets",
      "name": "mintasset",
      "data": {
        "authorized_minter": "natdeveloper",
        "collection_name": "nftauthcoll3",
        "schema_name": "nftauthsche1",
        "template_id": -1,
        "new_asset_owner": "natdeveloper",
        "immutable_data": [ { "key": "name", "value": [ "string", "The New Silk Road" ] }, { "key": "img", "value": [ "string", "QmSXDsFeNaPa3CJKmn8WKBnA421Zv5r3Ra8n71LZhvEi9s/main/genesis/1.png" ] }, { "key": "backimg", "value": [ "string", "QmSXDsFeNaPa3CJKmn8WKBnA421Zv5r3Ra8n71LZhvEi9s/main/genesis/1_back.jpg" ] }, { "key": "series", "value": [ "string", "Through the Looking Glass" ] }, { "key": "moment", "value": [ "string", "6 - The Silk Road" ] }, { "key": "rarity", "value": [ "string", "genesis" ] }, { "key": "description", "value": [ "string", "Named after an ancient Chinese trade route, the digital silk road is a virtual pathway for the delivery of merchandise." ] } ],
        "mutable_data": [],
        "tokens_to_back": []
      },
      "authorization": [
        {
          "actor": "natdeveloper",
          "permission": "active"
        }
      ]
    }
  ]
}'
```

* Register mapping

The collection author for an NFT **must register that NFT with the bridge** before users can transfer.&#x20;

This will be performed in 2 steps `regcolection` and `regnft`.

The address is the `ERC1155Tradeable.sol` address.

{% hint style="warning" %}
Be sure to update the address to the **atomic assets** contract address if you're in production
{% endhint %}

```bash
cleos -u $KYLIN_ENDPOINT push transaction '{
  "delay_sec": 0,
  "max_cpu_usage_ms": 0,
  "actions": [
    {
      "account": "elevenbridge",
      "name": "regcolection",
      "data": {
        "collection_name": "nftauthcoll3",
        "address": "0xB40fa4E1B1d0Dcc4DAF9d7274E5Ace8E940e8d8F"
      },
      "authorization": [
        {
          "actor": "natdeveloper",
          "permission": "active"
        }
      ]
    }
  ]
}'
```

Register NFT:

```bash
cleos -u $KYLIN_ENDPOINT push transaction '{
  "delay_sec": 0,
  "max_cpu_usage_ms": 0,
  "actions": [
    {
      "account": "elevenbridge",
      "name": "regnft",
      "data": {
        "template_id": -1,
        "schema_name": "nftauthsche1",
        "collection_name": "nftauthcoll3",
        "immutable_data": [
          {
            "key": "name",
            "value": [
              "string",
              "The New Silk Road"
            ]
          },
          {
            "key": "img",
            "value": [
              "string",
              "QmSXDsFeNaPa3CJKmn8WKBnA421Zv5r3Ra8n71LZhvEi9s/main/genesis/1.png"
            ]
          },
          {
            "key": "backimg",
            "value": [
              "string",
              "QmSXDsFeNaPa3CJKmn8WKBnA421Zv5r3Ra8n71LZhvEi9s/main/genesis/1_back.jpg"
            ]
          },
          {
            "key": "series",
            "value": [
              "string",
              "Through the Looking Glass"
            ]
          },
          {
            "key": "moment",
            "value": [
              "string",
              "6 - The Silk Road"
            ]
          },
          {
            "key": "rarity",
            "value": [
              "string",
              "genesis"
            ]
          },
          {
            "key": "description",
            "value": [
              "string",
              "Named after an ancient Chinese trade route, the digital silk road is a virtual pathway for the delivery of merchandise."
            ]
          }
        ],
        "uri": "https://cloudflare-ipfs.com/ipfs/QmSXDsFeNaPa3CJKmn8WKBnA421Zv5r3Ra8n71LZhvEi9s/blocks/1mb.png"
      },
      "authorization": [
        {
          "actor": "natdeveloper",
          "permission": "active"
        }
      ]
    }
  ]
}'
```

Let's test by sending an NFT across.

{% hint style="info" %}
Be sure to update the asset\_id as it may be a different number for you, the asset id, as it may be a different number for you.  This can be found in the `bridgeassets:mintasset` action. To make it simple you can find it by using this query <https://kylin.eosq.app/search?q=%28auth%253Abridgeassets%2520OR%2520receiver%253Abridgeassets%29%2520action%253Amintasset>
{% endhint %}

```bash
export FROM=$KYLIN_TEST_ACCOUNT
export TO=$KYLIN_BRIDGE_ACCOUNT
export ASSET_ID=1099511627801
export MEMO="0x218425295b4a2fa1c73D5108e185921fF580b2fB"
export KYLIN_TOKEN_ACCOUNT=bridgeassets
cleos -u $KYLIN_ENDPOINT push action $KYLIN_TOKEN_ACCOUNT transfer "[\"$FROM\",\"$TO\",[\"$ASSET_ID\"],\"$MEMO\"]" -p $KYLIN_TEST_ACCOUNT@active
```

Now let's see if the tokens make it! Navigate to your user account's address

{% embed url="<https://rinkeby.etherscan.io/address/0x218425295b4a2fa1c73D5108e185921fF580b2fB#tokentxnsErc1155>" %}

![](/files/-MlQpIR2FpUlGWWla7gy)

Now let's send it back!

Go to your `ERC1155Tradeable.sol` NFT contract and scroll to #10. Set operator to **atomictokenpeg1155 contract** account, and approved to 1.

Click on the contract tab, go to Write Contract, and connect using your user's account.

![](/files/-Ma0TdbSNev9qQKBocsL)

![](/files/-MlQpiCLNpVLTs7DTLfN)

Then go to the atomictokenpeg1155 contract and scroll to #6.  Type in the tokenId from the transaction that was sent to your user account.

![](/files/-MlQq7qK97ouyq-1dFml)

To determine the destination address we're going to use a helper function on our bridge contract.

```bash
cleos -u $KYLIN_ENDPOINT push action $KYLIN_BRIDGE_ACCOUNT getdest '["YOUR EOSIO USER ACCOUNT HERE"]' -p $KYLIN_BRIDGE_ACCOUNT@active
```

The assertion error will relay the `uint64_t` for the account specified, and you said EOSIO assertion messages weren't good for anything, pish posh, we move on!

`Destination EOSIO Account Name Value: 11075078730411234672`

The token contract is the `ERC1155Tradeable.sol` token contract.

![](/files/-Mf-Z8u90vvH5SnZsAEj)

Fire. [Example trx](https://rinkeby.etherscan.io/tx/0x7b726fa4983735cafd3f5482afb21c7087c22c2decd4f8800d1c1a9c68829b13)

And shazam you've got the nft! <https://kylin.eosq.app/tx/45b59e2db91836b4b601c7bc72a278968c2fce5f5836d7222cf62e8fa3db4df6>
