From d1ec4f31f5c007722a2f8eb9911ddadd5ec17c08 Mon Sep 17 00:00:00 2001 From: xVet Date: Wed, 3 Jul 2024 18:03:47 +0200 Subject: [PATCH 1/8] XLS-0046d-dynamic-non-fungible-tokens/README.md --- .../README.md | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 XLS-0046d-dynamic-non-fungible-tokens/README.md diff --git a/XLS-0046d-dynamic-non-fungible-tokens/README.md b/XLS-0046d-dynamic-non-fungible-tokens/README.md new file mode 100644 index 00000000..79e5265e --- /dev/null +++ b/XLS-0046d-dynamic-non-fungible-tokens/README.md @@ -0,0 +1,103 @@ +
+title: Dynamic Non Fungible Tokens (dNFTs)
+type: Spec
+author: Vet 
+co-author: Mayukha Vadari
+
+ +## Abstract + +This proposal aims to provide support for XLS-20 NFTs to modify/upgrade token properties. + +XLS-20 provides -Non-Fungible Token- support, these tokens are immutable and don’t allow any changes. Currently NFTs can’t be modified, resulting often in new mints, which leads to ledger bloat that eat valuable resources as well as experimental approaches to use website endpoints to mimic dynamic abilities. + +Apart from the use of immutable NFTs, there is a wide range of use cases around dNFTs (Dynamic Non-Fungible Tokens) which are considered mutable NFTs. The goal is to provide both options to developers and users to cover all aspects of non fungibility, while choosing the least invasive approach to achieve this functionality. + +## Motivation + +Usually, NFTs are typically static in nature. A static NFT refers to an NFT that possesses unchanging and immutable characteristics stored on the blockchain, rendering them unmodifiable. These static NFTs encompass various forms like images, videos, GIF files, music, and unlockable components. For instance, an illustration of a basketball player making a shot into a hoop serves as an example of a static NFT. + +On the other hand, `dynamic NFTs`, often abbreviated as dNFTs, represent the next phase in the evolution of the NFT landscape. These `dynamic NFTs` seamlessly integrate the inherent uniqueness of NFTs with the inclusion of dynamic data inputs. These inputs can arise from calculations conducted either on the blockchain or off-chain. + +Oracles could supply dynamic real-world data to NFTs. To illustrate, a `dynamic NFT` might showcase real-time updates of a basketball player's performance statistics as they actively play. + + + +## Specification + +### 3. New Transactors and Flags + +### We will specify the following: + + New Transactor + - NFTokenModify + + New Flags + - lsfMutable + +### 3.1 lsfMutable + +New flags for `NFTokenMint`: + + +| Flag Name | Flag Value | Description | +|-------------------|:----------------:|:-------------------------------------------------------------------------------------:| +| `lsfMutable` | `0x00000016` | `Allow issuer (or an entity authorized by the issuer) to modify “URI”.` | + + + +### 3.2 NFTokenModify + + +`NFTokenModify` is used to modify the URI property of a NFT: + +Transaction-specific Fields + +| Field Name | Required? | JSON Type | Internal Type | +|-------------------|:----------------:|:---------------:|:---------------:| +| `TransactionType` | `✔️` | `string` | `UINT16` | + +Indicates the `account` which is owning the NFT, in case of `account` not specified, it's implied that the submitting `account` is also the `Owner` of the NFT. + +| Field Name | Required? | JSON Type | Internal Type | +|-------------------|:----------------:|:---------------:|:---------------:| +| `Owner` | | `string` | `ACCOUNT ID` | + +Indicates the `NFToken` object to be modified. + +| Field Name | Required? | JSON Type | Internal Type | +|-------------------|:----------------:|:---------------:|:---------------:| +| `NFTokenID` | `✔️` | `string` | `UINT256` | + +The new `URI` that points to data and/or metadata associated with the NFT. +If a `URI` is omitted then the corresponding `URI` record in the XRP ledger, if present, is removed. + +| Field Name | Required? | JSON Type | Internal Type | +|-------------------|:----------------:|:---------------:|:---------------:| +| `URI` | | `string` | `BLOB` | + + + + + +Example (modify URI): + + + { + "TransactionType": "NFTokenModify", + "Owner": "rogue5HnPRSszD9CWGSUz8UGHMVwSSKF6", + "Fee": "10", + "Sequence": 33, + “NFTokenID”: “0008C350C182B4F213B82CCFA4C6F59AD76F0AFCFBDF04D5A048C0A300000007", + "URI": "ipfs://bafybeicmns4zsolhliv4ltmn5kipbwcscq4alpsmlayiipfkstksm4rtke/Vet.png", + + ... + + } + + +If `lsfMutable` is not set, executing NFTokenModify should fail! + +If `lsfMutable` is set, executing NFTokenModify should fail when neither `Issuer` or an `account`authorized via `NFTokenMinter`, according to the specific flag, is executing the transaction. + +This approach takes into consideration that `NFToken Flags` are part of the `NFTokenID`, mutating anything that is part of the `NFTokenID` must be avoided. From 498b4f7f4bdc46d0933960fccf8a0b7db61dd3d2 Mon Sep 17 00:00:00 2001 From: Vet <109047316+xVet@users.noreply.github.com> Date: Thu, 4 Jul 2024 16:02:31 +0200 Subject: [PATCH 2/8] Update XLS-0046d-dynamic-non-fungible-tokens/README.md Co-authored-by: tequ --- XLS-0046d-dynamic-non-fungible-tokens/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XLS-0046d-dynamic-non-fungible-tokens/README.md b/XLS-0046d-dynamic-non-fungible-tokens/README.md index 79e5265e..2e7f2c5a 100644 --- a/XLS-0046d-dynamic-non-fungible-tokens/README.md +++ b/XLS-0046d-dynamic-non-fungible-tokens/README.md @@ -33,7 +33,7 @@ Oracles could supply dynamic real-world data to NFTs. To illustrate, a `dynamic - NFTokenModify New Flags - - lsfMutable + - tfMutable ### 3.1 lsfMutable From 5ce56a0188ddd4d1b6e59726292079775b9f440d Mon Sep 17 00:00:00 2001 From: Vet <109047316+xVet@users.noreply.github.com> Date: Thu, 4 Jul 2024 16:03:00 +0200 Subject: [PATCH 3/8] Update XLS-0046d-dynamic-non-fungible-tokens/README.md Co-authored-by: tequ --- XLS-0046d-dynamic-non-fungible-tokens/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/XLS-0046d-dynamic-non-fungible-tokens/README.md b/XLS-0046d-dynamic-non-fungible-tokens/README.md index 2e7f2c5a..eb3acc2c 100644 --- a/XLS-0046d-dynamic-non-fungible-tokens/README.md +++ b/XLS-0046d-dynamic-non-fungible-tokens/README.md @@ -35,14 +35,14 @@ Oracles could supply dynamic real-world data to NFTs. To illustrate, a `dynamic New Flags - tfMutable -### 3.1 lsfMutable +### 3.1 tfMutable New flags for `NFTokenMint`: | Flag Name | Flag Value | Description | |-------------------|:----------------:|:-------------------------------------------------------------------------------------:| -| `lsfMutable` | `0x00000016` | `Allow issuer (or an entity authorized by the issuer) to modify “URI”.` | +| `tfMutable` | `0x00000010` | `Allow issuer (or an entity authorized by the issuer) to modify “URI”.` | From 4ef7de40e4d7caaa32bf038423bc44f4e5fd04ad Mon Sep 17 00:00:00 2001 From: Vet <109047316+xVet@users.noreply.github.com> Date: Thu, 4 Jul 2024 16:03:08 +0200 Subject: [PATCH 4/8] Update XLS-0046d-dynamic-non-fungible-tokens/README.md Co-authored-by: tequ --- XLS-0046d-dynamic-non-fungible-tokens/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/XLS-0046d-dynamic-non-fungible-tokens/README.md b/XLS-0046d-dynamic-non-fungible-tokens/README.md index eb3acc2c..206b0346 100644 --- a/XLS-0046d-dynamic-non-fungible-tokens/README.md +++ b/XLS-0046d-dynamic-non-fungible-tokens/README.md @@ -85,11 +85,12 @@ Example (modify URI): { "TransactionType": "NFTokenModify", + "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Owner": "rogue5HnPRSszD9CWGSUz8UGHMVwSSKF6", "Fee": "10", "Sequence": 33, “NFTokenID”: “0008C350C182B4F213B82CCFA4C6F59AD76F0AFCFBDF04D5A048C0A300000007", - "URI": "ipfs://bafybeicmns4zsolhliv4ltmn5kipbwcscq4alpsmlayiipfkstksm4rtke/Vet.png", + "URI": "697066733A2F2F62616679626569636D6E73347A736F6C686C6976346C746D6E356B697062776373637134616C70736D6C6179696970666B73746B736D3472746B652F5665742E706E67", ... From 8e317319b0e9f14c266c5540c9f1e3dc0a5579d1 Mon Sep 17 00:00:00 2001 From: Vet <109047316+xVet@users.noreply.github.com> Date: Thu, 4 Jul 2024 16:03:21 +0200 Subject: [PATCH 5/8] Update XLS-0046d-dynamic-non-fungible-tokens/README.md Co-authored-by: tequ --- XLS-0046d-dynamic-non-fungible-tokens/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/XLS-0046d-dynamic-non-fungible-tokens/README.md b/XLS-0046d-dynamic-non-fungible-tokens/README.md index 206b0346..39bd8b00 100644 --- a/XLS-0046d-dynamic-non-fungible-tokens/README.md +++ b/XLS-0046d-dynamic-non-fungible-tokens/README.md @@ -97,8 +97,8 @@ Example (modify URI): } -If `lsfMutable` is not set, executing NFTokenModify should fail! +If `tfMutable` is not set, executing NFTokenModify should fail! -If `lsfMutable` is set, executing NFTokenModify should fail when neither `Issuer` or an `account`authorized via `NFTokenMinter`, according to the specific flag, is executing the transaction. +If `tfMutable` is set, executing NFTokenModify should fail when neither `Issuer` or an `account` authorized via `NFTokenMinter`, according to the specific flag, is executing the transaction. This approach takes into consideration that `NFToken Flags` are part of the `NFTokenID`, mutating anything that is part of the `NFTokenID` must be avoided. From 2f624880ec8a260049a8ee01717c53dcf8db24ad Mon Sep 17 00:00:00 2001 From: Vet <109047316+xVet@users.noreply.github.com> Date: Thu, 4 Jul 2024 16:06:22 +0200 Subject: [PATCH 6/8] Update README.md --- XLS-0046d-dynamic-non-fungible-tokens/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XLS-0046d-dynamic-non-fungible-tokens/README.md b/XLS-0046d-dynamic-non-fungible-tokens/README.md index 39bd8b00..a9bb6d21 100644 --- a/XLS-0046d-dynamic-non-fungible-tokens/README.md +++ b/XLS-0046d-dynamic-non-fungible-tokens/README.md @@ -2,7 +2,7 @@ title: Dynamic Non Fungible Tokens (dNFTs) type: Spec author: Vet -co-author: Mayukha Vadari +co-author: Mayukha Vadari, TeQu ## Abstract From 44e9195b710b275f641d68f88b061d4cf5ace8ef Mon Sep 17 00:00:00 2001 From: Vet <109047316+xVet@users.noreply.github.com> Date: Fri, 5 Jul 2024 03:13:51 +0200 Subject: [PATCH 7/8] Update README.md --- XLS-0046d-dynamic-non-fungible-tokens/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XLS-0046d-dynamic-non-fungible-tokens/README.md b/XLS-0046d-dynamic-non-fungible-tokens/README.md index a9bb6d21..be3fa9f2 100644 --- a/XLS-0046d-dynamic-non-fungible-tokens/README.md +++ b/XLS-0046d-dynamic-non-fungible-tokens/README.md @@ -57,7 +57,7 @@ Transaction-specific Fields |-------------------|:----------------:|:---------------:|:---------------:| | `TransactionType` | `✔️` | `string` | `UINT16` | -Indicates the `account` which is owning the NFT, in case of `account` not specified, it's implied that the submitting `account` is also the `Owner` of the NFT. +Indicates the `account` which is owning the NFT, in case of `Owner` not specified, it's implied that the submitting `account` is also the `Owner` of the NFT. | Field Name | Required? | JSON Type | Internal Type | |-------------------|:----------------:|:---------------:|:---------------:| From 3a9a93dd666fe88614017ea726e0680cb811d4d4 Mon Sep 17 00:00:00 2001 From: Vet <109047316+xVet@users.noreply.github.com> Date: Fri, 5 Jul 2024 21:40:47 +0200 Subject: [PATCH 8/8] Update README.md Co-authored-by: Mayukha Vadari --- XLS-0046d-dynamic-non-fungible-tokens/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XLS-0046d-dynamic-non-fungible-tokens/README.md b/XLS-0046d-dynamic-non-fungible-tokens/README.md index be3fa9f2..f2fad7f7 100644 --- a/XLS-0046d-dynamic-non-fungible-tokens/README.md +++ b/XLS-0046d-dynamic-non-fungible-tokens/README.md @@ -9,7 +9,7 @@ co-author: Mayukha Vadari, TeQu This proposal aims to provide support for XLS-20 NFTs to modify/upgrade token properties. -XLS-20 provides -Non-Fungible Token- support, these tokens are immutable and don’t allow any changes. Currently NFTs can’t be modified, resulting often in new mints, which leads to ledger bloat that eat valuable resources as well as experimental approaches to use website endpoints to mimic dynamic abilities. +[XLS-20](link to spec) provides [Non-Fungible Token](link to docs) support, these tokens are immutable and don’t allow any changes. Currently NFTs can’t be modified, resulting often in new mints, which leads to ledger bloat that eat valuable resources as well as experimental approaches to use website endpoints to mimic dynamic abilities. Apart from the use of immutable NFTs, there is a wide range of use cases around dNFTs (Dynamic Non-Fungible Tokens) which are considered mutable NFTs. The goal is to provide both options to developers and users to cover all aspects of non fungibility, while choosing the least invasive approach to achieve this functionality.