You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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>
/// ClassMetadata defines SBT class wide attributes, which are shared and default to all SBTs of
295
+
/// the given class. Must be provided by the Issuer contract. See the `SBTIssuer` trait.
296
+
pubstructClassMetadata {
297
+
/// Issuer class name. Required to be not empty.
298
+
pubname:String,
299
+
/// If defined, should be used instead of `IssuerMetadata::symbol`.
300
+
pubsymbol:Option<String>,
301
+
/// An URL to an Icon. To protect fellow developers from unintentionally triggering any
302
+
/// SSRF vulnerabilities with URL parsers, we don't allow to set an image bytes here.
303
+
/// If it doesn't start with a scheme (eg: https://) then `IssuerMetadata::base_uri`
304
+
/// should be prepended.
305
+
pubicon:Option<String>,
306
+
/// JSON or an URL to a JSON file with more info. If it doesn't start with a scheme
307
+
/// (eg: https://) then base_uri should be prepended.
308
+
pubreference:Option<String>,
309
+
/// Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included.
310
+
pubreference_hash:Option<Base64VecU8>,
311
+
}
312
+
293
313
/// TokenMetadata defines attributes for each SBT token.
294
314
pubstructTokenMetadata {
295
315
pubclass:ClassId, // token class. Required. Must be non zero.
@@ -448,12 +468,18 @@ Example **Soul Transfer** interface:
448
468
449
469
### SBT Issuer interface
450
470
451
-
SBTContract is the minimum required interface to be implemented by issuer. Other methods, such as a mint function, which requests the registry to proceed with token minting, is specific to an Issuer implementation (similarly, mint is not part of the FT standard).
471
+
SBTIssuer is the minimum required interface to be implemented by issuer. Other methods, such as a mint function, which requests the registry to proceed with token minting, is specific to an Issuer implementation (similarly, mint is not part of the FT standard).
472
+
473
+
The issuer must provide metadata object of the Issuer. Optionally, Issuer can also provide metadata object for each token class.
474
+
Issuer level (contract) metadata, must provide information common to all tokens and all classes defined by the issuer. Class level metadata, must provide information common to all tokens of a given class. Information should be deduplicated and denormalized whenever possible.
475
+
Example: The issuer can set a default icon for all tokens (SBT) using `IssuerMetadata::icon` and additionally it can customize an icon of a particular token via `TokenMetadata::icon`.
452
476
453
477
```rust
454
-
pubtraitSBTContract {
455
-
/// returns contract metadata
456
-
fnsbt_metadata(&self) ->ContractMetadata;
478
+
pubtraitSBTIssuer {
479
+
/// Returns contract metadata.
480
+
fnsbt_metadata(&self) ->IssuerMetadata;
481
+
/// Returns SBT class metadata, or `None` if the class is not found.
- Common [type definitions](https://github.com/near-ndc/i-am-human/tree/main/contracts/sbt) (events, traits).
623
+
- Common [type definitions](https://github.com/near-ndc/i-am-human/tree/master/contracts/sbt) (events, traits).
598
624
-[I Am Human](https://github.com/near-ndc/i-am-human) registry and issuers.
599
625
600
626
## Consequences
@@ -667,6 +693,24 @@ The Contract Standards Working Group members approved this NEP on June 30, 2023
667
693
| 9 |[Privacy](https://github.com/near/NEPs/pull/393/#issuecomment-1504309947)| Concerns have been addressed: [comment-1](https://github.com/near/NEPs/pull/393/#issuecomment-1504485420) and [comment2](https://github.com/near/NEPs/pull/393/#issuecomment-1505958549)| resolved |
668
694
| 10 |@frol[suggested](https://github.com/near/NEPs/pull/393/#discussion_r1247879778) to use a struct in `sbt_recover` and `sbt_soul_transfer`. | Motivation to use pair `(number, bool)` rather than follow a common Iterator Pattern. Rust uses `Option` type for that, that works perfectly for languages with native Option type, but creates a "null" problem for anything else. Other common way to implement Iterator is the presented pair, which doesn't require extra type definition and reduces code size. | new |
669
695
696
+
697
+
### v1.1.0
698
+
699
+
700
+
In v1.0.0 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. This update:
701
+
702
+
- Fixes 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).
703
+
- Renames `ContractMetadata` to `IssuerMetadata`.
704
+
- Adds `ClassMetadata` struct and `sbt_class_metadata` function to the `SBTIssuer` interface.
705
+
706
+
Reference implementation: [ContractMetadata, ClassMetadata, TokenMetadata](https://github.com/near-ndc/i-am-human/blob/registry/v1.8.0/contracts/sbt/src/metadata.rs#L18) and [SBTIssuer interface](https://github.com/near-ndc/i-am-human/blob/registry/v1.8.0/contracts/sbt/src/lib.rs#L49).
707
+
708
+
#### Benefits
709
+
710
+
- Improves the documentation and meaning of the issuer entity.
711
+
- Adds missing `ClassMetadata`.
712
+
- Improves issuer, class and token metadata documentation.
713
+
670
714
## Copyright
671
715
672
716
[Creative Commons Attribution 4.0 International Public License (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/)
0 commit comments