Character Bound Tokens

by @bcfh

TL; DR

Character-Bound Tokens are non-transferable NFTs that are bound to characters, which present achievements and unique experiences that you complete or have on Crossbell.

What are Character-Bound Tokens(CBTs)

The concept of CBTs originates from Soulbound Tokens(SBT). SBTs are bound to souls(people's identities) and CBTs are bound to characters(users' identities). SBT is a new kind of token standard that was first introduced by Vitalik Buterin, and it's built for a kind of scenario where it doesn't really matter how much money you can bid for NFTs, but it matters what you've done and what you've accomplished(eg. driver's licenses, university degrees, or killing some extremely difficult monsters in multiplayer online games).

CBTs serve the same purpose. Crossbell is an ownership platform served mainly for social activities, and every application wanting to issue credentials for user engagements or accomplishments should use CBTs standard. For example, Crossbell.io is an official application that runs on Crossbell chain, and its achievement NFTs are good examples of how CBTs can be used. Achievement NFTs celebrate and showcase users' journey on Crossbell by issuing erc1155 tokens to characters who completed specific requirements(like having enough followers or likes).

Because social activities on crossbell.io are initiated by characters as the main body, the CBTs are minted to characters and bound to them. Those achievements can't be sold or transferred alone unless you transfer the whole characters along with CBTs that are bound to them, which makes CBTs non-transferable in a way.

How do CBTs work

Crossbell is social blockchain that is different from Ethereum or other public chains. On Ethereum, it's a common behavior for people to create multiple addresses representing different identities on a variety of occasions. For example, people might create new addresses specifically to interact with a Dex or a NFT project. It may be for asset safety reasons but it really brings a lot of trouble because you have to manage a lot of addresses their corresponding private keys and promise that they don't get leaked or fall into disorder. On Crossbell, you never have to keep multiple addresses and private keys, you just need to hold one address and one private key, because you can create multiple characters and use different characters to interact with different applications, which brings native advantages for Crossbell to support non-transferable feature.

When issuing, CBTs are minted to characters so they are bound to characters and they’re belonging to characters. Transfer functions are limited so you can’t transfer CBTs unless you transfer the whole characters.

Copy
function safeTransferFrom(
address,
address,
uint256,
uint256,
bytes memory
) external virtual override {
revert("non-transferable");
}

/**
* @dev See {IERC1155-safeBatchTransferFrom}.
*/
function safeBatchTransferFrom(
address,
address,
uint256[] memory,
uint256[] memory,
bytes memory
) external virtual override {
revert("non-transferable");
}

As shown above, when transfer functions are called, it reverts with an error message: non-transferable.

Closing thoughts

The concept of Non-transferable Tokens is trending, but there are still many unexplored aspects that need to be considered carefully in the process of implementation, but we at Crossbell would like to be pioneers and gradually refine and popularize this concept during practice.