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


---

# 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://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?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.
