originalworks / protocol

Protocol of Original Works
https://www.original.works
2 stars 0 forks source link

Create new ISRC record #6

Closed revelator-labs closed 3 months ago

revelator-labs commented 3 months ago

As a RightsController (see role definitions here) (in this case Revelator) I want to register a new ISRC record with the goal of creating an immutable record of the asset, the associated rights being managed, and in which territories they are controlling these rights. Finally we need a method to notify the protocol of the registration, which will trigger the validation of the entry.

Consideration: The creation of this JSON file should be designed in a way that any data provider can easily setup from this repository.

Tasks: Specify ISRC JSON format to include the following objects:

  1. Rights Controller Name (what we call alias on the data channel): "string"
  2. Signature: "??"
  3. ISRC: "string" [fixed format: CC-XXX-YY-NNNNN]
  4. right type: this could be any of the RightsCoverage as defined here - but in the case of Revelator we can hardcode this field with the value: MakeAvailableRight
  5. Territory: "ISO_3166-x"
  6. Factsheet (embed the existing JSON structure of the factsheet)
  7. timestamp
  8. (optional) Token Contract: "0x..."

Devise a method for Rev3 to store this record on AWS and confirm a method for Rev Pro on how to submit the JSON to our Store record on AWS

criadoperez commented 3 months ago

I would also add version , which is the version of the json format and blockchain that will specify what blockchain the token lives in.

Signature will also be a string.

If standard naming is RightsCoverage shouldn't we use that instead of RightType?

Also, I'm assuming that each RightControllerName will have its own format, below it's just an example of the one we are using.

An example json file could be similar to this (still a draft):

{
    "Version":"1.0",
    "RightsControllerName": "Example Alias",
    "Signature": "abc123signaturexyz",
    "ISRC": "US-XXX-20-12345",
    "RightsCoverage": "ReproductionRight",
    "Territory": "ISO_3166-1",
    "Factsheet": {
        "title": "Example Song",
        "artist": "Example Artist",
        "album": "Example Album",
        "release_date": "2020-01-01",
        "genre": "Pop",
        "duration": "3:30"
    },
    "Timestamp": "2024-06-04T12:34:56Z",
    "TokenContract": "0x1234567890abcdef1234567890abcdef12345678",
    "Blockchain": "Polygon"
}

Also of the above fields which ones are not required? I'm guessing Factsheet, blockchain and tokenContract.

I'm also thinking if we should specify the type of token contract or not. Meaning that we may have an ownership token and/or a voting token.

criadoperez commented 3 months ago

Question:

With this implementation we will have multiple files per ISRC (for different Rights and Regions).

This makes sense if different right controllers can publish the same ISRC but for different rights or regions. This is the desired behavior?

denciu commented 3 months ago

Suggestion to consider: maybe instead of Blockchain we'd prefer ChainId? ChainId is constant and universal where network name may change (Polygon was rebranded from Matic).

revelator-labs commented 3 months ago

Good question.. The DDEX music message standard has the format below.. Should we perhaps accept both?

  "avs:Blockchain": {
     "description": "A Type of blockchain.",
     "type": "string",
     "anyOf": [
        {"const": "Ethereum", "description": "Ethereum"},
        {"const": "UserDefined", "description": "A Type of an Entity which is defined by a sender of a DdexMessage in a manner acceptable to its recipient."}
     ]
  },
criadoperez commented 3 months ago

Suggestion to consider: maybe instead of Blockchain we'd prefer ChainId? ChainId is constant and universal where network name may change (Polygon was rebranded from Matic).

I agree that ChainID is more constant. My only concern is that it limits us to EVM chains. Maybe we can put both fields using a generic 'EVM' blockchain when we are using EVMs?

So for example, for Polygon it would be:

  "blockchain": "EVM",
   "chainID": "137"

Or following DDEX format suggested by @revelator-labs :+1:

"Blockchain": {
     "description": "Ethereum",
     "type": "137"
  },
criadoperez commented 3 months ago

The final schema should be in this schema.graphql file once agreed:

criadoperez commented 3 months ago

latest version:

{
    "Version":"1.0",
    "RightsControllerName": "Example Alias",
    "Signature": "abc123signaturexyz",
    "ISRC": "US-XXX-20-12345",
    "RightsCoverage": "ReproductionRight",
    "Territory": "ISO_3166-1",
    "Factsheet": { //optional
        "title": "Example Song",
        "artist": "Example Artist",
        "album": "Example Album",
        "release_date": "2020-01-01",
        "genre": "Pop",
        "duration": "3:30"
    },
    "Blockchain": { //optional
           "name": "EVM",
           "chainID": "137"
           "TokenContract": "0x1234567890abcdef1234567890abcdef12345678",
  },
}
criadoperez commented 3 months ago

This will no longer be a json file. I will be a ERN message. Issue #20 replaces this one.