From 9ffa416aa23dfc1873d70080fa91ae377a93a2f2 Mon Sep 17 00:00:00 2001 From: Nikolay Dorofeev Date: Fri, 17 Nov 2023 14:17:45 +0400 Subject: [PATCH] Store metadata in JSON string --- contracts/contracts/d_social_network_account.tact | 8 ++------ contracts/contracts/d_social_network_master.tact | 13 ++----------- contracts/contracts/d_social_network_post.tact | 9 ++------- contracts/contracts/lib/messages_nft.tact | 4 ++-- contracts/contracts/lib/trait_nft_collection.tact | 4 ++-- contracts/contracts/lib/trait_nft_item.tact | 4 ++-- contracts/contracts/messages_d.tact | 9 ++++----- contracts/scripts/deployTestSocialNetwork.ts | 15 +++++++++------ contracts/tests/DSocialNetworkAccount.spec.ts | 15 +++++++++------ contracts/tests/DSocialNetworkMaster.spec.ts | 8 ++++++-- 10 files changed, 40 insertions(+), 49 deletions(-) diff --git a/contracts/contracts/d_social_network_account.tact b/contracts/contracts/d_social_network_account.tact index 7d36deba..308bb483 100644 --- a/contracts/contracts/d_social_network_account.tact +++ b/contracts/contracts/d_social_network_account.tact @@ -11,7 +11,7 @@ contract DSocialNetworkAccount with NftCollection, NftCollectionRoyaltyExtention master_contract: Address; royalty_params: RoyaltyParams; is_initialized: Bool = false; - collection_content: NftCollectionMetadata; + collection_content: String; init(account_id: Int, master_contract: Address){ self.account_id = account_id; @@ -23,11 +23,7 @@ contract DSocialNetworkAccount with NftCollection, NftCollectionRoyaltyExtention destination: master_contract }; // TODO: set real metadata - self.collection_content = NftCollectionMetadata{ - image: "", - name: "", - description: "" - }; + self.collection_content = "{}"; } get fun get_account_info(): AccountInfo { diff --git a/contracts/contracts/d_social_network_master.tact b/contracts/contracts/d_social_network_master.tact index 2dd50f65..36608ab3 100644 --- a/contracts/contracts/d_social_network_master.tact +++ b/contracts/contracts/d_social_network_master.tact @@ -5,7 +5,7 @@ import "./messages_d.tact"; import "./d_social_network_account.tact"; contract DSocialNetworkMaster with Deployable, OwnableTransferable, Accounting { - version: String = "v0.0.1-no-metadata-arrays"; + version: String = "v0.0.1-metadata-as-json-string"; owner: Address; next_account_index: Int as uint32 = 0; @@ -39,7 +39,7 @@ contract DSocialNetworkMaster with Deployable, OwnableTransferable, Accounting body: InitializeAccount { query_id: 0, owner: ctx.sender, - collection_content: self.generateAccountCollectionContent(msg) + collection_content: msg.account_metadata_json }.toCell(), code: account_init.code, data: account_init.data @@ -50,13 +50,4 @@ contract DSocialNetworkMaster with Deployable, OwnableTransferable, Accounting fun getAccountInit(account_id: Int): StateInit { return initOf DSocialNetworkAccount(account_id, myAddress()); } - - fun generateAccountCollectionContent(msg: RegisterAccount): NftCollectionMetadata { - // TODO: add image link - return NftCollectionMetadata{ - image: "some-image-link", - name: msg.account_name, - description: msg.account_description - }; - } } diff --git a/contracts/contracts/d_social_network_post.tact b/contracts/contracts/d_social_network_post.tact index 883dc08f..41b1861d 100644 --- a/contracts/contracts/d_social_network_post.tact +++ b/contracts/contracts/d_social_network_post.tact @@ -8,19 +8,14 @@ contract DSocialNetworkPost with NftItem { item_index: Int; owner: Address; is_initialized: Bool; - individual_content: NftMetadata; + individual_content: String; init(collection_address: Address, item_index: Int, owner: Address){ self.collection_address = collection_address; self.item_index = item_index; self.owner = collection_address; // TODO: set individual_content - self.individual_content = NftMetadata{ - image: "", - name: "", - description: "", - content_url: "" - }; + self.individual_content = "{}"; self.is_initialized = false; } diff --git a/contracts/contracts/lib/messages_nft.tact b/contracts/contracts/lib/messages_nft.tact index 7e51099d..ec7d543d 100644 --- a/contracts/contracts/lib/messages_nft.tact +++ b/contracts/contracts/lib/messages_nft.tact @@ -14,7 +14,7 @@ struct NftCollectionMetadata { message MintNft { query_id: Int as uint64; - individual_content: NftMetadata; + individual_content: String; } // NFT collection: Royalty exntention @@ -54,7 +54,7 @@ message InitializeNft { query_id: Int as uint64; owner: Address; response_destination: Address; - individual_content: NftMetadata; + individual_content: String; } message(0x5fcc3d14) Transfer { diff --git a/contracts/contracts/lib/trait_nft_collection.tact b/contracts/contracts/lib/trait_nft_collection.tact index 0d620348..bb1d42ed 100644 --- a/contracts/contracts/lib/trait_nft_collection.tact +++ b/contracts/contracts/lib/trait_nft_collection.tact @@ -6,7 +6,7 @@ import "./trait_accounting.tact"; trait NftCollection with Deployable, Ownable, Accounting { next_item_index: Int; owner: Address; - collection_content: NftCollectionMetadata; + collection_content: String; // ===== Customizable functions ===== // @@ -17,7 +17,7 @@ trait NftCollection with Deployable, Ownable, Accounting { // b.append("meta.json"); // return b.toCell(); // TODO: if following works, remove the above - return self.collection_content.toCell(); + return self.collection_content.asSlice().asCell(); } virtual fun getNftItemInit(item_index: Int): StateInit { diff --git a/contracts/contracts/lib/trait_nft_item.tact b/contracts/contracts/lib/trait_nft_item.tact index f21a1b29..4b7042ce 100644 --- a/contracts/contracts/lib/trait_nft_item.tact +++ b/contracts/contracts/lib/trait_nft_item.tact @@ -8,7 +8,7 @@ trait NftItem with Deployable, Ownable, Accounting { item_index: Int; owner: Address; is_initialized: Bool; - individual_content: NftMetadata; + individual_content: String; // ===== Customizable functions ===== // @@ -20,7 +20,7 @@ trait NftItem with Deployable, Ownable, Accounting { // b.append(".json"); // return b.toCell(); // TODO: if following works, remove the above - return self.individual_content.toCell(); + return self.individual_content.asSlice().asCell(); } // --------- Get Function --------- // diff --git a/contracts/contracts/messages_d.tact b/contracts/contracts/messages_d.tact index 03918567..99e6baa3 100644 --- a/contracts/contracts/messages_d.tact +++ b/contracts/contracts/messages_d.tact @@ -4,8 +4,7 @@ import "./lib/messages_nft.tact"; message RegisterAccount { query_id: Int as uint64; - account_name: String; - account_description: String; + account_metadata_json: String; } // Account contract @@ -13,14 +12,14 @@ message RegisterAccount { message InitializeAccount { query_id: Int as uint64; owner: Address; - collection_content: NftCollectionMetadata; + collection_content: String; } struct AccountInfo { id: Int; master_contract: Address; owner: Address; - collection_content: NftCollectionMetadata; + collection_content: String; is_initialized: Bool; } @@ -30,5 +29,5 @@ struct PostInfo { account: Address; id: Int; owner: Address; - nft_content: NftMetadata; + nft_content: String; } diff --git a/contracts/scripts/deployTestSocialNetwork.ts b/contracts/scripts/deployTestSocialNetwork.ts index a4ee7743..6140702b 100644 --- a/contracts/scripts/deployTestSocialNetwork.ts +++ b/contracts/scripts/deployTestSocialNetwork.ts @@ -26,8 +26,12 @@ export async function run(provider: NetworkProvider) { { $$type: 'RegisterAccount', query_id: 0n, - account_name: 'test', - account_description: 'Test account description' + account_metadata_json: JSON.stringify({ + image: 'https://d0rich.me/og/image.jpg', + name: 'test', + description: 'Test account description', + social_links: ['https://d0rich.t.me'] + }) } ) @@ -45,13 +49,12 @@ export async function run(provider: NetworkProvider) { { $$type: 'MintNft', query_id: 0n, - individual_content: { - $$type: 'NftMetadata', + individual_content: JSON.stringify({ name: 'Test post', description: 'Test post description', - image: 'https://test.com/image.png', + image: 'https://d0rich.me/og/image.jpg', content_url: 'https://test.com/content.txt' - } + }) } ) diff --git a/contracts/tests/DSocialNetworkAccount.spec.ts b/contracts/tests/DSocialNetworkAccount.spec.ts index a4b70f8a..f6653fd8 100644 --- a/contracts/tests/DSocialNetworkAccount.spec.ts +++ b/contracts/tests/DSocialNetworkAccount.spec.ts @@ -37,8 +37,12 @@ describe('DSocialNetworkMaster', () => { { $$type: 'RegisterAccount', query_id: 0n, - account_name: 'test', - account_description: 'Test account description' + account_metadata_json: JSON.stringify({ + image: 'https://d0rich.me/og/image.jpg', + name: 'test', + description: 'Test account description', + social_links: ['https://d0rich.t.me'] + }) } ) @@ -72,13 +76,12 @@ describe('DSocialNetworkMaster', () => { { $$type: 'MintNft', query_id: 0n, - individual_content: { - $$type: 'NftMetadata', + individual_content: JSON.stringify({ name: 'Test post', description: 'Test post description', - image: 'https://test.com/image.png', + image: 'https://d0rich.me/og/image.jpg', content_url: 'https://test.com/content.txt' - } + }) } ) diff --git a/contracts/tests/DSocialNetworkMaster.spec.ts b/contracts/tests/DSocialNetworkMaster.spec.ts index 1abea3d5..c3229d41 100644 --- a/contracts/tests/DSocialNetworkMaster.spec.ts +++ b/contracts/tests/DSocialNetworkMaster.spec.ts @@ -43,8 +43,12 @@ describe('DSocialNetworkMaster', () => { { $$type: 'RegisterAccount', query_id: 0n, - account_name: 'test', - account_description: 'Test account description' + account_metadata_json: JSON.stringify({ + image: 'https://d0rich.me/og/image.jpg', + name: 'test', + description: 'Test account description', + social_links: ['https://d0rich.t.me'] + }) } )