https://github.com/christof93/fungiblesbt

A Soulbound Token (SBT) for a decentralized reputation system

https://github.com/christof93/fungiblesbt

Science Score: 13.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.2%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

A Soulbound Token (SBT) for a decentralized reputation system

Basic Info
  • Host: GitHub
  • Owner: Christof93
  • License: mit
  • Language: Solidity
  • Default Branch: main
  • Homepage:
  • Size: 883 KB
Statistics
  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • Open Issues: 1
  • Releases: 0
Created about 3 years ago · Last pushed about 2 years ago
Metadata Files
Readme License

README.md

SBT Icon

FungibleSBT

A Prototype for a Fungible, Soulbound, and Revocable Token

CICD Test Suite Status codecov

Soulbound Tokens (SBTs) were proposed by Ethereum's founder Vitalik Buterin to provide a means for applications such as degrees, lending or reputation. In contrast to more commonly used types of tokens SBTs can only be issued to an account once and can not be transferred further to any other address. This entails that the token can not be sold or exchanged for other currencies.

Among possible use cases might be things such as loyalty points, renting contracts, awards, credit reports attendence certifications or reputation scores. While many of these can be imagined as unique non-fungible artifacts (NFTs) others - like reputation score or loyalty points - are rather fungible tokens in the sense of the ERC20 standard.

This repository implements a soulbound fungible token standard. Furthermore, it proposes an extension of the token which makes it depositable as a collateral. For example in the case of reputation so that the activities which increase reputation can also potentially lead to a loss of reputation. Or so that loyalty points can be burned in exchange for rewards.

What are the properties of the Fungible Soulbound Token?

  1. Nontransferability - The token can not be transferred to another account or exchanged.

    Basic functionalities of the fungible soul bound token

  2. Revocability - The token can be burned by the entity which issued it.

    Basic functionalities of the fungible soul bound token

  3. Fungibility - The individual unitary valued tokens are indistinguishable from each other.

    Basic functionalities of the fungible soul bound token

Since the standard template of fungible tokens is the ERC20 contract I adapt it from the reference implementation of the IERC20 interface in the Openzeppelin contract library. The interface defines the blueprint for a token with the getter functions balanceOf() and totalSupply() which is also implemented in the FungibleSBT contract. Different from the ERC20 contract there are two separate balances - the balance of unassigned tokens which were not yet issued but only distributed or minted and the balance of issued tokens. This mechanism allows to mint the tokens to an account first without directly issuing them and rendering them unspendable. The first and only transfer called issuance is thereby decoupled from the minting process which makes it possible to control the supply of tokens independently of the issue mechanism. For example one might define a constant fixed supply distributed to a predefined list of recipients such as institutions, DAOs or ordinary accounts. Alternatively, the token can also be distributed as a mining reward.

Basic functionalities of the fungible soul bound token

Compile

Install hardhat and openzeppelin contracts npm install --production

compile using the command: npm run compile

Test

Install hardhat and openzeppelin

npm install

compile using the command:

npm run compile

Then, to run the test suite use this command:

npm run test

And run coverage using

npm run coverage

License

This work is published under MIT License.

Copyright (C) 2023 by Christof Bless

Email: christofbless@gmail.com

Owner

  • Name: Christof Bless
  • Login: Christof93
  • Kind: user

NLP, Machine Learning and Semantic Web enthusiast.

GitHub Events

Total
Last Year