Non-Fungible Token Connector
The Non-Fungible Token Connector consists of four contracts:
- nft connector
- bridge token deployer
- bridge token
- permissions manager
Once you install the FT connector on the console, the contracts are automatically installed as well.
Setting up the NFT Connectors
nft connector
is automatically set up when the bridge is installed on the console, requiring no additional actions from users. However, here is how it works from a theoretical point.
On the nft connector
contract, the contract owner must set the locker account, which represents the nft_connector
contract on the other chain. This information is used to verify transactions/receipts on the corresponding nft_connector
contract of the other network.
Bridging NFT from NEAR to Calimero (when the original token is on NEAR)
In blockchain terminology, bridging NFTs from NEAR to Calimero involves locking NFTs on NEAR and minting wrapped NFTs (wNFTs) on Calimero.
Call
nft transfer call
on the NFT contract on NEAR to lock the NFTs on NEAR:- Users/DApps send NFTs to the
nft connector
contract on NEAR.
- Users/DApps send NFTs to the
Call NEAR RPC for transaction status:
- Retrieve the transaction status, including the receipt with the event indicating the lock operation. This receipt will be used to prove the transaction on Calimero.
Call the Calimero light client to get the current height:
- Ensure that the
current height
on the light client contract on Calimero is higher than the block height where the NFTs were locked on the source chain.
- Ensure that the
Call NEAR RPC for light client proof:
- Collect all the proof data from the archival node on NEAR required to validate the successful execution of the transaction.
Call
mint()
on the Calimeronft connector
contract:- Perform the following steps:
- If this is the first time transferring the NFT, deploy the
bridge token
on Calimero since wNFT does not exist on Calimero yet. - Prove the outcome using the proof (fails if the proof is invalid), and mint wNFTs on Calimero.
- Get the metadata for the wNFT on Calimero. If it's empty, fetch the metadata from NEAR and set it on Calimero.
- Map the Calimero NFT contract with the NEAR NFT contract using
map contract
on the NEARnft connector
contract. - Congratulations, the wNFTs now exist on Calimero.
- If this is the first time transferring the NFT, deploy the
- Perform the following steps:
Bridging back NFT from Calimero to NEAR (burning the wrapped NFT)
In blockchain terminology, bridging back NFTs from Calimero to NEAR involves burning/withdrawing wNFTs on Calimero and unlocking NFTs on NEAR.
Call
view mapping
on the Calimeronft connector
contract to get the name of the wNFT, as the transfer initiator may only know the NFT name on NEAR.Call
withdraw
on the wNFT (bridge token
) on Calimero:- This transaction needs to be proven to demonstrate that it actually occurred.
- The method burns the specified token ID of the wNFT on Calimero
Call the Calimero RPC for transaction status:
- Retrieve the transaction receipt indicating the burn of the specific wNFT with the given token ID and the recipient on the NEAR side.
Call the NEAR light client to get the current height:
- Ensure that the
current height
on the NEAR light client is higher than the block height where the wNFTs were withdrawn on the destination chain.
- Ensure that the
Call the Calimero RPC for the light client proof.
Call
unlock()
on the NEARnft connector
contract with the obtained proof and a valid block height:- Prove the outcome, and if successful, unlock the NFT on NEAR.
Congratulations, the NFT is now unlocked on the source network.
Bridging between Calimero and NEAR when the original asset is on Calimero
If the original asset exists only on Calimero and not on NEAR, bridging it to NEAR will create a wrapped NFT on NEAR. All steps from the previous sections apply, but inversely, as the bridge operates in a bidirectional manner.
Automatic bridging
All of these steps are automated with the Calimero Bridge service. The users of Calimero private shards do not need to make all the calls manually. Users/DApps only need to make a nft_transfer_call
when locking NFTs on a chain, and the bridge service will handle the rest, automatically transferring the wrapped asset to the other chain. Similarly, when someone wants to unlock the funds, they simply need to make a withdraw
call on the NFT contract, and the bridge service will automatically update all the components. If the tokens were burnt on the starting chain, they will be unlocked on the other side.