-
Notifications
You must be signed in to change notification settings - Fork 140
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: adding soulbound token #393
Conversation
@robert-zaremba Thanks for the submission! I want to double-check that you have reviewed the prior art: #359 (ideally, mention this in the NEP itself and cover pros and cons), and especially, the resolution #359 (comment) |
@frol , thanks for the link, I didn't see it. I will look and put a review here. |
Renamed query methods to make it NEP-181 compatible: * sbt_tokens_by_owner -> sbt_tokens_for_owner * sbt_supply_by_owner -> sbt_supply_for_owner
@frol updated the spec and added consequences. Compared to #359, this NEP:
TL;DR it is not NFT - transferability. |
**********/ | ||
|
||
/// get the information about specific token ID | ||
fn sbt(&self, token_id: TokenId) -> Option<Token>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
may consider nft
prefix where relevant to make the functions compatible with existing tools. eg : nft_tokens_for_owner
instead of sbt_tokens_for_owner
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually, I was trying to refer to #351, which could be then used as a requirement for SBT NEP to unlock nft_
prefixes by saying that SBT = NEP-171 + NEP-330 + NEP-XXX (that just defines that nft_transfer
is not available) - this way the tooling can reasonably handle the deviation from NEP-171 through introspection.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was bringing up interface registration already in 2020, then created #154 ;)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we reuse nft_
prefix then SBT is a subset of NFT, not an extension. Adding #330 makes sense. We need to discuss more if we want to be compatible with NFT standard, and carry over some of the shortcoming (like representing the token id as a U64
rather than u64
-- more about this in Considerations section)
Thanks for continuing to explore this feature. I think it's interesting. I also hope that a discussion will resume about naming since "soulbound" / "sbt" might end up causing more confusion than clarity, especially as we hope to move towards 1 billion participants in the ecosystem. There was interesting discussion in 359. It would be great to get more people to offer their thoughts and creative ideas. I think mindfulness in naming goes a long way towards helping something be successful. |
I truly think that neither Non-transfareable NFT nor Verifiable Credentials is relevant to what I'm proposing here.
|
It seems like you've thought a lot about it (and I may end up agreeing with you!), but I still feel unable to follow what you're saying. Is your reason for using the word "soul" mainly because E. Glen Weyl did and his paper was popular? I think "soul" is a tricky term (even aside from trying to introduce it into computer science). Additionally (and maybe this question has been answered somewhere, but I haven't found it), if the concept is more about "identity" of the owner, then that would imply to me that ideally the token would be transferable (but somehow limited only to wallets owned by the original owner, and I'm not sure how that would be enforced). E.g. a driver can move her own driver license from one wallet to another. The license itself is still "tied" to the owner. But if we're saying that that problem is too hard to solve for now (allowing the original owner to move the token between wallets that they also own), then maybe it feels like "non-transferrable token" is pretty accurate (although maybe still not sufficiently clear or marketable). |
The reason I'm using word "soul" is to better qualify what we want to model here, and it's pretty accurate with respect to web3 accounts. BTW: Identity could be also modeled using W3C DID. SBT is different.
So this is a key difference between NFT as driving license, and SBT as a "soul".
So, it depends what and how you want to model.
IMHO, it's not accurate. SBT has different meaning, and different consequences. |
Shall we organize a call to discuss the open issues in this PR and finalize it?
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sidenote, I was playing around with the idea of badges using SBT/NFT and realized that internal storage for such use cases could be optimized to only store the badge metadata once for a number of users receiving the same proof/badge/etc.
Given the holiday season is going, I think async will work better.
Ideally, cover the pros and cons of it in the NEP itself, and let's discuss them in the comments to those lines.
Can you share your thoughts about what problem it can solve? |
Thank you to everyone who attended the fifth Contract Standards Work Group call today! The work group members reviewed the NEP and reached the following consensus: Status: Approved
Meeting Recording: @robert-zaremba Thank you for authoring this NEP! Next Steps:
|
4d0e590
to
3ea249b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As a moderator, I approve it and ready to merge it as all the requirements are fulfilled
In #393 we defined Issuer (an entity authorized to mint SBTs in the registry) and SBT Class. We also defined Issuer Metadata and Token Metadata, but we didn't provide interface for class metadata. This was implemented in the reference implementation (in one of the subsequent revisions), but was not backported to the NEP. In this PR * we fix the name of the issuer interface from `SBTContract` to `SBTIssuer`. The original name is wrong and we oversight it in reviews. We talk everywhere about the issuer entity and issuer contract (even the header is _SBT Issuer interface_). * Renames `ContractMetadata` to `IssuerMetadata`. * added `ClassMetadata` struct and `sbt_class_metadata` function to the `SBTIssuer`. --------- Co-authored-by: Alexander Fadeev <[email protected]>
Soulbound Tokens (SBT) are non transferrable NFTs. Even though tranferability is not available, we define a recoverability mechanism.
SBTs are well suited of carrying proof-of-attendence NFTs, proof-of-unique-human "stamps" and other similar credibility-carriers.
NEP Status (Updated by NEP moderators)
SME reviews:
Contract Standards WG voting indications (❔ | 👍 | 👎 ):
Wallet Standards WG voting indications:
Concerns
memo
in events. Thememo
is already part of the transaction, and should not be needed to identify transactions. Processes looking for events, can easily track transaction through event and recovermemo
if needed.Burn
event. Added examplesbt_burn
function, but keeping it not as a part of required interface. Event should be enough.burn
function be part of a standard or a recommendation?sbt_soul_transfer
in the standard interface, comment.