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.
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.
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.
I was bringing up interface registration already in 2020, then created #154 ;)
There was a problem hiding this comment.
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?
|
frol
left a comment
There was a problem hiding this comment.
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
frol
left a comment
There was a problem hiding this comment.
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 <fadeevab.com@gmail.com>
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: * [x] @KazanderDad (NDC GWG): near/NEPs#393 (review) * [x] @alexastrum (Tenamint): near/NEPs#393 Contract Standards WG voting indications (❔ | 👍 | 👎 ): * 👍 @frol: near/NEPs#393 (review) * 👍 @fadeevab: near/NEPs#393 (review) * -- @robert-zaremba (can't vote myself) Wallet Standards WG voting indications: * ❔ @Cameron-Banyan * ❔ @MaximusHaximus * ❔ @esaminu ## Concerns | # | Concern | Resolution | Status | | --- | --- | -- | -- | | 1 | [Rober] Should we Emit NEP-171 Mint and NEP-171 Burn by the SBT contract (in addition to SBT native events emitted by the registry)? If the events will be emitted by registry, then we need new events to include the contract address. | [Robert] Don't emit NFT events. SBT is not NFT. Support: @alexastrum | open | | 2 | [Robert] remove `memo` in events. The `memo` 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 recover `memo` if needed. | currently removed, consequently also removed from registry transactions . Support: @alexastrum | open | | 3 | [Token Spam](near/NEPs#393) | [Robert]: we have a `Burn` event. Added example `sbt_burn` function, but keeping it not as a part of required interface. Event should be enough. | open | | 4 | [Multiple registries](near/NEPs#393). Registry source of truth [comment](near/NEPs#393) | Robert: this is a part of the design: permissionless approach. [Justification for registry](near/NEPs#393) | open | | 5 | [Robert] Approve the proposed multi-token | Support: @alexastrum | open | | 6 | [Robert] Use of milliseconds as a time unit. | [Robert] Currently the standard uses milliseconds. | open | | 7 | Should a `burn` function be part of a standard or a recommendation? | [Robert] We already have the Burn event. IMHO a function should not be part of the standard inteface (similarly to FT and NFT). | open | | 8 | [Robert] Don't include `sbt_soul_transfer` in the standard interface, [comment](near/NEPs#393 (comment)). | [Robert] moving outside of the required interface. | open | | 9 | [Privacy](near/NEPs#393) | [Robert] Concerns have been addressed: [comment-1](near/NEPs#393) and [comment2](near/NEPs#393) | open | | 10 | x | resolution | open | --------- Co-authored-by: Vlad Frolov <frolvlad@gmail.com>
In near/NEPs#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 <fadeevab.com@gmail.com>
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: * [x] @KazanderDad (NDC GWG): near/NEPs#393 (review) * [x] @alexastrum (Tenamint): near/NEPs#393 Contract Standards WG voting indications (❔ | 👍 | 👎 ): * 👍 @frol: near/NEPs#393 (review) * 👍 @fadeevab: near/NEPs#393 (review) * -- @robert-zaremba (can't vote myself) Wallet Standards WG voting indications: * ❔ @Cameron-Banyan * ❔ @MaximusHaximus * ❔ @esaminu ## Concerns | # | Concern | Resolution | Status | | --- | --- | -- | -- | | 1 | [Rober] Should we Emit NEP-171 Mint and NEP-171 Burn by the SBT contract (in addition to SBT native events emitted by the registry)? If the events will be emitted by registry, then we need new events to include the contract address. | [Robert] Don't emit NFT events. SBT is not NFT. Support: @alexastrum | open | | 2 | [Robert] remove `memo` in events. The `memo` 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 recover `memo` if needed. | currently removed, consequently also removed from registry transactions . Support: @alexastrum | open | | 3 | [Token Spam](near/NEPs#393) | [Robert]: we have a `Burn` event. Added example `sbt_burn` function, but keeping it not as a part of required interface. Event should be enough. | open | | 4 | [Multiple registries](near/NEPs#393). Registry source of truth [comment](near/NEPs#393) | Robert: this is a part of the design: permissionless approach. [Justification for registry](near/NEPs#393) | open | | 5 | [Robert] Approve the proposed multi-token | Support: @alexastrum | open | | 6 | [Robert] Use of milliseconds as a time unit. | [Robert] Currently the standard uses milliseconds. | open | | 7 | Should a `burn` function be part of a standard or a recommendation? | [Robert] We already have the Burn event. IMHO a function should not be part of the standard inteface (similarly to FT and NFT). | open | | 8 | [Robert] Don't include `sbt_soul_transfer` in the standard interface, [comment](near/NEPs#393 (comment)). | [Robert] moving outside of the required interface. | open | | 9 | [Privacy](near/NEPs#393) | [Robert] Concerns have been addressed: [comment-1](near/NEPs#393) and [comment2](near/NEPs#393) | open | | 10 | x | resolution | open | --------- Co-authored-by: Vlad Frolov <frolvlad@gmail.com>
In near/NEPs#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 <fadeevab.com@gmail.com>
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
memoin events. Thememois already part of the transaction, and should not be needed to identify transactions. Processes looking for events, can easily track transaction through event and recovermemoif needed.Burnevent. Added examplesbt_burnfunction, but keeping it not as a part of required interface. Event should be enough.burnfunction be part of a standard or a recommendation?sbt_soul_transferin the standard interface, comment.