diff --git a/CodeExamples.md b/CodeExamples.md index fc3fe46b..afc4f547 100644 --- a/CodeExamples.md +++ b/CodeExamples.md @@ -677,6 +677,49 @@ Let's check we received the download URL ok ``` + ### 8.1 Add key-value pair to data NFT +Data NFTs can store arbitrary key-value pairs on-chain. This opens up their usage for a broad variety of applications, such as comments & ratings, attestations, and privately sharing data (when the value is encrypted). + +Let's see how! + +Here are the steps: + +1. Setup (same as above) +2. Publish data NFT (same as above) +3. Add key-value pair to data NFT (use the `setData` method) +4. Retrieve value from data NFT (use the `getData` method) + +Let's start by using the `setData` method to update the nft key value store with some data +```Typescript + const nft = new Nft(web3) + const data = 'SomeData' + try { + await nft.setData(freNftAddress, publisherAccount, '1', data) + } catch (e) { + console.error(e) + assert.fail('Download failed') + } +``` + +Under the hood, this uses [ERC725](https://erc725alliance.org/), which augments ERC721 with a well-defined way to set and get key-value pairs. + + + ### 8.2 Add key-value pair to data NFT +```Typescript + const nft = new Nft(web3) + try { + Use the `getData` method to get the data stored in the nft key value store + const data = await nft.getData(freNftAddress, '1') + console.log('Data: ', data) + } catch (e) { + console.error(e) + assert.fail('Download failed') + } +``` + +That's it! Note the simplicity. All data was stored and retrieved from on-chain. We don't need Ocean Provider or Ocean Aquarius for these use cases (though the latter can help for fast querying & retrieval). + + ## Editing this file Please note that CodeExamples.md is an autogenerated file, you should not edit it directly. diff --git a/package.json b/package.json index cf1e8e4e..7a502980 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "test:unit": "npm run mocha -- 'test/unit/**/*.test.ts'", "test:unit:cover": "nyc --report-dir coverage/unit --exclude 'src/@types/**/*' npm run test:unit", "test:integration": "npm run mocha -- 'test/integration/**/*.test.ts'", + "test:guide": "npm run mocha -- 'test/integration/CodeExamples.test.ts'", "test:integration:cover": "nyc --report-dir coverage/integration --no-clean npm run test:integration", "create:guide": "./scripts/createCodeExamples.sh test/integration/CodeExamples.test.ts", "create:guidec2d": "./scripts/createCodeExamples.sh test/integration/ComputeExamples.test.ts", diff --git a/test/integration/CodeExamples.test.ts b/test/integration/CodeExamples.test.ts index fd1737ca..c7ab5738 100644 --- a/test/integration/CodeExamples.test.ts +++ b/test/integration/CodeExamples.test.ts @@ -676,6 +676,49 @@ describe('Marketplace flow tests', async () => { } }) /// /// ``` + + it('8.1 Add key-value pair to data NFT', async () => { + /// Data NFTs can store arbitrary key-value pairs on-chain. This opens up their usage for a broad variety of applications, such as comments & ratings, attestations, and privately sharing data (when the value is encrypted). + + /// Let's see how! + + /// Here are the steps: + + /// 1. Setup (same as above) + /// 2. Publish data NFT (same as above) + /// 3. Add key-value pair to data NFT (use the `setData` method) + /// 4. Retrieve value from data NFT (use the `getData` method) + + /// Let's start by using the `setData` method to update the nft key value store with some data + /// ```Typescript + const nft = new Nft(web3) + const data = 'SomeData' + try { + await nft.setData(freNftAddress, publisherAccount, '1', data) + } catch (e) { + console.error(e) + assert.fail('Download failed') + } + /// ``` + + /// Under the hood, this uses [ERC725](https://erc725alliance.org/), which augments ERC721 with a well-defined way to set and get key-value pairs. + }) /// + + it('8.2 get the key-value pair data from the NFT', async () => { + /// ```Typescript + const nft = new Nft(web3) + try { + /// Use the `getData` method to get the data stored in the nft key value store + const data = await nft.getData(freNftAddress, '1') + console.log('Data: ', data) + } catch (e) { + console.error(e) + assert.fail('Download failed') + } + /// ``` + + /// That's it! Note the simplicity. All data was stored and retrieved from on-chain. We don't need Ocean Provider or Ocean Aquarius for these use cases (though the latter can help for fast querying & retrieval). + }) /// }) /// /// ## Editing this file