From f91e7387d01a62978ee785f2f4225fb931f15d53 Mon Sep 17 00:00:00 2001 From: garikbesson Date: Mon, 30 Dec 2024 14:39:33 +0100 Subject: [PATCH 1/6] fix saving series metadata --- integration-tests/rust-toolchain.toml | 2 +- nft-series/src/series.rs | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/integration-tests/rust-toolchain.toml b/integration-tests/rust-toolchain.toml index 97c2073..6bec1e7 100644 --- a/integration-tests/rust-toolchain.toml +++ b/integration-tests/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "stable" +channel = "1.81" components = ["rustfmt"] targets = ["wasm32-unknown-unknown"] \ No newline at end of file diff --git a/nft-series/src/series.rs b/nft-series/src/series.rs index ba09da0..6b82395 100644 --- a/nft-series/src/series.rs +++ b/nft-series/src/series.rs @@ -13,7 +13,7 @@ impl Contract { id: U64, metadata: TokenMetadata, royalty: Option>, - price: Option + price: Option, ) { // Measure the initial storage being used on the contract let initial_storage_usage = env::storage_usage(); @@ -35,10 +35,7 @@ impl Contract { royalty, tokens: UnorderedSet::new(StorageKey::SeriesByIdInner { // We get a new unique prefix for the collection - account_id_hash: hash_account_id(&format!( - "{}{}", - id.0, caller - )), + account_id_hash: hash_account_id(&format!("{}.{}", id.0, caller)), }), owner_id: caller, price: price.map(|p| p), @@ -64,12 +61,15 @@ impl Contract { // Get the series and how many tokens currently exist (edition number = cur_len + 1) let mut series = self.series_by_id.get(&id.0).expect("Not a series"); - + // Check if the series has a price per token. If it does, ensure the caller has attached at least that amount - let mut price_per_token = NearToken::from_yoctonear(0); + let mut price_per_token = NearToken::from_yoctonear(0); if let Some(price) = series.price { price_per_token = price; - require!(env::attached_deposit().ge(&price_per_token), "Need to attach at least enough to cover price"); + require!( + env::attached_deposit().ge(&price_per_token), + "Need to attach at least enough to cover price" + ); // If the series doesn't have a price, ensure the caller is an approved minter. } else { // Ensure the caller is an approved minter @@ -140,7 +140,11 @@ impl Contract { // If there's some price for the token, we'll payout the series owner. Otherwise, refund the excess deposit for storage to the caller if price_per_token.gt(&NearToken::from_yoctonear(0)) { - payout_series_owner(required_storage_in_bytes.into(), price_per_token, series.owner_id); + payout_series_owner( + required_storage_in_bytes.into(), + price_per_token, + series.owner_id, + ); } else { refund_deposit(required_storage_in_bytes.into()); } From 0651fb18dc4dd035243afecb40b1226ec3f16710 Mon Sep 17 00:00:00 2001 From: garikbesson Date: Mon, 30 Dec 2024 15:14:51 +0100 Subject: [PATCH 2/6] check royaties don't exceed 100% while minting --- integration-tests/src/tests.rs | 296 ++++++++++++++++++++++++++++----- nft-series/src/series.rs | 10 ++ 2 files changed, 264 insertions(+), 42 deletions(-) diff --git a/integration-tests/src/tests.rs b/integration-tests/src/tests.rs index 3021568..c10d6e7 100644 --- a/integration-tests/src/tests.rs +++ b/integration-tests/src/tests.rs @@ -53,9 +53,17 @@ async fn main() -> Result<(), Box> { test_nft_mint_call(&owner, &alice, &nft_contract).await?; test_nft_approve_call(&bob, &nft_contract, &market_contract).await?; test_sell_nft_listed_on_marketplace(&alice, &nft_contract, &market_contract, &bob).await?; - test_transfer_nft_when_listed_on_marketplace(&alice, &bob, &charlie, &nft_contract, &market_contract).await?; + test_transfer_nft_when_listed_on_marketplace( + &alice, + &bob, + &charlie, + &nft_contract, + &market_contract, + ) + .await?; test_approval_revoke(&alice, &bob, &nft_contract, &market_contract).await?; test_reselling_and_royalties(&alice, &bob, &charlie, &nft_contract, &market_contract).await?; + test_royalties_exceeding_100_percents(&alice, &nft_contract, &market_contract).await?; Ok(()) } @@ -99,7 +107,8 @@ async fn test_nft_mint_call( }, }); - let _ = user.call(contract.id(), "nft_mint") + let _ = user + .call(contract.id(), "nft_mint") .args_json(request_payload) .deposit(NearToken::from_millinear(80)) .transact() @@ -113,15 +122,15 @@ async fn test_nft_mint_call( .json()?; let expected = json!([ - { + { "approved_account_ids": {}, "royalty": {}, "token_id": "1", "owner_id": user.id(), "metadata": { - "expires_at": serde_json::Value::Null, - "extra": serde_json::Value::Null, - "issued_at": serde_json::Value::Null, + "expires_at": serde_json::Value::Null, + "extra": serde_json::Value::Null, + "issued_at": serde_json::Value::Null, "copies": serde_json::Value::Null, "media_hash": serde_json::Value::Null, "reference": serde_json::Value::Null, @@ -159,7 +168,7 @@ async fn test_nft_approve_call( .transact() .await? .json()?; - + assert_eq!(result, true); println!(" Passed ✅ test_nft_approve_call"); Ok(()) @@ -176,21 +185,53 @@ async fn test_sell_nft_listed_on_marketplace( let sale_price: NearToken = NearToken::from_yoctonear(10000000000000000000000000); helpers::mint_nft(seller, nft_contract, token_id).await?; - helpers::pay_for_storage(seller, market_contract, NearToken::from_yoctonear(1000000000000000000000000)).await?; + helpers::pay_for_storage( + seller, + market_contract, + NearToken::from_yoctonear(1000000000000000000000000), + ) + .await?; helpers::approve_nft(market_contract, seller, nft_contract, token_id).await?; - helpers::place_nft_for_sale(seller, market_contract, nft_contract, token_id, approval_id, &sale_price).await?; + helpers::place_nft_for_sale( + seller, + market_contract, + nft_contract, + token_id, + approval_id, + &sale_price, + ) + .await?; let before_seller_balance: NearToken = helpers::get_user_balance(seller).await; let before_buyer_balance: NearToken = helpers::get_user_balance(buyer).await; - helpers::purchase_listed_nft(buyer, market_contract, nft_contract, token_id, sale_price).await?; + helpers::purchase_listed_nft(buyer, market_contract, nft_contract, token_id, sale_price) + .await?; let after_seller_balance: NearToken = helpers::get_user_balance(seller).await; let after_buyer_balance: NearToken = helpers::get_user_balance(buyer).await; - let dp = 1; // being exact requires keeping track of gas usage - assert_eq!(helpers::round_to_near_dp(after_seller_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_seller_balance.saturating_add(sale_price).as_yoctonear(), dp), "seller did not receive the sale price"); - assert_eq!(helpers::round_to_near_dp(after_buyer_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_buyer_balance.saturating_sub(sale_price).as_yoctonear(), dp), "buyer did not send the sale price"); + let dp = 1; // being exact requires keeping track of gas usage + assert_eq!( + helpers::round_to_near_dp(after_seller_balance.as_yoctonear(), dp), + helpers::round_to_near_dp( + before_seller_balance + .saturating_add(sale_price) + .as_yoctonear(), + dp + ), + "seller did not receive the sale price" + ); + assert_eq!( + helpers::round_to_near_dp(after_buyer_balance.as_yoctonear(), dp), + helpers::round_to_near_dp( + before_buyer_balance + .saturating_sub(sale_price) + .as_yoctonear(), + dp + ), + "buyer did not send the sale price" + ); println!(" Passed ✅ test_sell_nft_listed_on_marketplace"); Ok(()) @@ -210,26 +251,53 @@ async fn test_transfer_nft_when_listed_on_marketplace( helpers::mint_nft(seller, nft_contract, token_id).await?; helpers::pay_for_storage(seller, market_contract, NearToken::from_millinear(10)).await?; helpers::approve_nft(market_contract, seller, nft_contract, token_id).await?; - helpers::place_nft_for_sale(seller, market_contract, nft_contract, token_id, approval_id, &sale_price).await?; + helpers::place_nft_for_sale( + seller, + market_contract, + nft_contract, + token_id, + approval_id, + &sale_price, + ) + .await?; helpers::transfer_nft(seller, first_buyer, nft_contract, token_id).await?; // attempt purchase NFT let before_seller_balance: NearToken = helpers::get_user_balance(seller).await; let before_buyer_balance: NearToken = helpers::get_user_balance(second_buyer).await; - helpers::purchase_listed_nft(second_buyer, market_contract, nft_contract, token_id, sale_price).await?; + helpers::purchase_listed_nft( + second_buyer, + market_contract, + nft_contract, + token_id, + sale_price, + ) + .await?; let after_seller_balance: NearToken = helpers::get_user_balance(seller).await; let after_buyer_balance: NearToken = helpers::get_user_balance(second_buyer).await; // assert owner remains first_buyer let token_info: serde_json::Value = helpers::get_nft_token_info(nft_contract, token_id).await?; let owner_id: String = token_info["owner_id"].as_str().unwrap().to_string(); - assert_eq!(owner_id, first_buyer.id().to_string(), "token owner is not first_buyer"); + assert_eq!( + owner_id, + first_buyer.id().to_string(), + "token owner is not first_buyer" + ); // assert balances remain equal - let dp = 1; // being exact requires keeping track of gas usage - assert_eq!(helpers::round_to_near_dp(after_seller_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_seller_balance.as_yoctonear(), dp), "seller balance changed"); - assert_eq!(helpers::round_to_near_dp(after_buyer_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_buyer_balance.as_yoctonear(), dp), "buyer balance changed"); + let dp = 1; // being exact requires keeping track of gas usage + assert_eq!( + helpers::round_to_near_dp(after_seller_balance.as_yoctonear(), dp), + helpers::round_to_near_dp(before_seller_balance.as_yoctonear(), dp), + "seller balance changed" + ); + assert_eq!( + helpers::round_to_near_dp(after_buyer_balance.as_yoctonear(), dp), + helpers::round_to_near_dp(before_buyer_balance.as_yoctonear(), dp), + "buyer balance changed" + ); println!(" Passed ✅ test_transfer_nft_when_listed_on_marketplace"); @@ -248,14 +316,23 @@ async fn test_approval_revoke( helpers::mint_nft(first_user, nft_contract, token_id).await?; helpers::pay_for_storage(first_user, market_contract, NearToken::from_millinear(10)).await?; - helpers::place_nft_for_sale(first_user, market_contract, nft_contract, token_id, approval_id, &sale_price).await?; + helpers::place_nft_for_sale( + first_user, + market_contract, + nft_contract, + token_id, + approval_id, + &sale_price, + ) + .await?; // nft_revoke market_contract call let revoke_payload = json!({ "account_id": market_contract.id(), "token_id": token_id, }); - let _ = first_user.call(nft_contract.id(), "nft_revoke") + let _ = first_user + .call(nft_contract.id(), "nft_revoke") .args_json(revoke_payload) .deposit(helpers::ONE_YOCTO_NEAR) .transact() @@ -265,20 +342,37 @@ async fn test_approval_revoke( let before_seller_balance: NearToken = helpers::get_user_balance(first_user).await; let before_buyer_balance: NearToken = helpers::get_user_balance(second_user).await; helpers::purchase_listed_nft( - second_user, market_contract, nft_contract, token_id, sale_price - ).await?; + second_user, + market_contract, + nft_contract, + token_id, + sale_price, + ) + .await?; let after_seller_balance: NearToken = helpers::get_user_balance(first_user).await; let after_buyer_balance: NearToken = helpers::get_user_balance(second_user).await; // assert owner remains first_user let token_info: serde_json::Value = helpers::get_nft_token_info(nft_contract, token_id).await?; let owner_id: String = token_info["owner_id"].as_str().unwrap().to_string(); - assert_eq!(owner_id, first_user.id().to_string(), "token owner is not first_user"); + assert_eq!( + owner_id, + first_user.id().to_string(), + "token owner is not first_user" + ); // assert balances unchanged - let dp = 1; // being exact requires keeping track of gas usage - assert_eq!(helpers::round_to_near_dp(after_seller_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_seller_balance.as_yoctonear(), dp), "seller balance changed"); - assert_eq!(helpers::round_to_near_dp(after_buyer_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_buyer_balance.as_yoctonear(), dp), "buyer balance changed"); + let dp = 1; // being exact requires keeping track of gas usage + assert_eq!( + helpers::round_to_near_dp(after_seller_balance.as_yoctonear(), dp), + helpers::round_to_near_dp(before_seller_balance.as_yoctonear(), dp), + "seller balance changed" + ); + assert_eq!( + helpers::round_to_near_dp(after_buyer_balance.as_yoctonear(), dp), + helpers::round_to_near_dp(before_buyer_balance.as_yoctonear(), dp), + "buyer balance changed" + ); println!(" Passed ✅ test_approval_revoke"); Ok(()) @@ -293,7 +387,7 @@ async fn test_reselling_and_royalties( ) -> Result<(), Box> { let token_id = "7"; let approval_id = 0; - let sale_price: NearToken = NearToken::from_near(1); // 1 NEAR in yoctoNEAR + let sale_price: NearToken = NearToken::from_near(1); // 1 NEAR in yoctoNEAR // mint with royalties let request_payload = json!({ @@ -308,7 +402,8 @@ async fn test_reselling_and_royalties( user.id().to_string(): 2000 as u128 } }); - let _ = user.call(nft_contract.id(), "nft_mint") + let _ = user + .call(nft_contract.id(), "nft_mint") .args_json(request_payload) .deposit(NearToken::from_yoctonear(helpers::DEFAULT_DEPOSIT)) .transact() @@ -316,37 +411,89 @@ async fn test_reselling_and_royalties( helpers::pay_for_storage(user, market_contract, NearToken::from_millinear(10)).await?; helpers::approve_nft(market_contract, user, nft_contract, token_id).await?; - helpers::place_nft_for_sale(user, market_contract, nft_contract, token_id, approval_id, &sale_price).await?; + helpers::place_nft_for_sale( + user, + market_contract, + nft_contract, + token_id, + approval_id, + &sale_price, + ) + .await?; // first_buyer purchases NFT let mut before_seller_balance: NearToken = helpers::get_user_balance(user).await; let mut before_buyer_balance: NearToken = helpers::get_user_balance(first_buyer).await; - helpers::purchase_listed_nft(first_buyer, market_contract, nft_contract, token_id, sale_price).await?; + helpers::purchase_listed_nft( + first_buyer, + market_contract, + nft_contract, + token_id, + sale_price, + ) + .await?; let mut after_seller_balance: NearToken = helpers::get_user_balance(user).await; let mut after_buyer_balance: NearToken = helpers::get_user_balance(first_buyer).await; // assert owner becomes first_buyer let token_info: serde_json::Value = helpers::get_nft_token_info(nft_contract, token_id).await?; let owner_id: String = token_info["owner_id"].as_str().unwrap().to_string(); - assert_eq!(owner_id, first_buyer.id().to_string(), "token owner is not first_buyer"); + assert_eq!( + owner_id, + first_buyer.id().to_string(), + "token owner is not first_buyer" + ); // assert balances changed - let dp = 1; // being exact requires keeping track of gas usage - assert_eq!(helpers::round_to_near_dp(after_seller_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_seller_balance.saturating_add(sale_price).as_yoctonear(), dp), "seller balance unchanged"); - assert_eq!(helpers::round_to_near_dp(after_buyer_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_buyer_balance.saturating_sub(sale_price).as_yoctonear(), dp), "buyer balance unchanged"); + let dp = 1; // being exact requires keeping track of gas usage + assert_eq!( + helpers::round_to_near_dp(after_seller_balance.as_yoctonear(), dp), + helpers::round_to_near_dp( + before_seller_balance + .saturating_add(sale_price) + .as_yoctonear(), + dp + ), + "seller balance unchanged" + ); + assert_eq!( + helpers::round_to_near_dp(after_buyer_balance.as_yoctonear(), dp), + helpers::round_to_near_dp( + before_buyer_balance + .saturating_sub(sale_price) + .as_yoctonear(), + dp + ), + "buyer balance unchanged" + ); // first buyer lists nft for sale let approval_id = 1; helpers::pay_for_storage(first_buyer, market_contract, NearToken::from_millinear(10)).await?; helpers::approve_nft(market_contract, first_buyer, nft_contract, token_id).await?; - helpers::place_nft_for_sale(first_buyer, market_contract, nft_contract, token_id, approval_id, &sale_price).await?; + helpers::place_nft_for_sale( + first_buyer, + market_contract, + nft_contract, + token_id, + approval_id, + &sale_price, + ) + .await?; // second_buyer purchases NFT - let resale_price = sale_price.saturating_mul(5); // 15 NEAR + let resale_price = sale_price.saturating_mul(5); // 15 NEAR before_seller_balance = helpers::get_user_balance(first_buyer).await; before_buyer_balance = helpers::get_user_balance(second_buyer).await; let before_user_balance: NearToken = helpers::get_user_balance(user).await; - helpers::purchase_listed_nft(second_buyer, market_contract, nft_contract, token_id, resale_price).await?; + helpers::purchase_listed_nft( + second_buyer, + market_contract, + nft_contract, + token_id, + resale_price, + ) + .await?; let after_user_balance: NearToken = helpers::get_user_balance(user).await; after_seller_balance = helpers::get_user_balance(first_buyer).await; after_buyer_balance = helpers::get_user_balance(second_buyer).await; @@ -354,14 +501,79 @@ async fn test_reselling_and_royalties( // assert owner changes to second_buyer let token_info: serde_json::Value = helpers::get_nft_token_info(nft_contract, token_id).await?; let owner_id: String = token_info["owner_id"].as_str().unwrap().to_string(); - assert_eq!(owner_id, second_buyer.id().to_string(), "token owner is not second_buyer"); + assert_eq!( + owner_id, + second_buyer.id().to_string(), + "token owner is not second_buyer" + ); // assert balances changed let royalty_fee = resale_price.saturating_div(5); - assert_eq!(helpers::round_to_near_dp(after_seller_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_seller_balance.saturating_add(resale_price).saturating_sub(royalty_fee).as_yoctonear(), dp), "seller balance unchanged"); - assert_eq!(helpers::round_to_near_dp(after_buyer_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_buyer_balance.saturating_sub(resale_price).as_yoctonear(), dp), "buyer balance unchanged"); - assert_eq!(helpers::round_to_near_dp(after_user_balance.as_yoctonear(), dp), helpers::round_to_near_dp(before_user_balance.saturating_add(royalty_fee).as_yoctonear(), dp), "user balance unchanged"); + assert_eq!( + helpers::round_to_near_dp(after_seller_balance.as_yoctonear(), dp), + helpers::round_to_near_dp( + before_seller_balance + .saturating_add(resale_price) + .saturating_sub(royalty_fee) + .as_yoctonear(), + dp + ), + "seller balance unchanged" + ); + assert_eq!( + helpers::round_to_near_dp(after_buyer_balance.as_yoctonear(), dp), + helpers::round_to_near_dp( + before_buyer_balance + .saturating_sub(resale_price) + .as_yoctonear(), + dp + ), + "buyer balance unchanged" + ); + assert_eq!( + helpers::round_to_near_dp(after_user_balance.as_yoctonear(), dp), + helpers::round_to_near_dp( + before_user_balance + .saturating_add(royalty_fee) + .as_yoctonear(), + dp + ), + "user balance unchanged" + ); println!(" Passed ✅ test_reselling_and_royalties"); Ok(()) } + +async fn test_royalties_exceeding_100_percents( + user: &Account, + nft_contract: &Contract, + market_contract: &Contract, +) -> Result<(), Box> { + let token_id = "7"; + + // mint with royalties + let request_payload = json!({ + "token_id": token_id, + "receiver_id": user.id(), + "metadata": { + "title": "Grumpy Cat", + "description": "Not amused.", + "media": "https://www.adamsdrafting.com/wp-content/uploads/2018/06/More-Grumpy-Cat.jpg" + }, + "perpetual_royalties": { + user.id().to_string(): 5000 as u128, + market_contract.id().to_string(): 6000 as u128 + } + }); + let minting_result = user + .call(nft_contract.id(), "nft_mint") + .args_json(request_payload) + .deposit(NearToken::from_yoctonear(helpers::DEFAULT_DEPOSIT)) + .transact() + .await?; + assert!(minting_result.is_failure()); + + println!(" Passed ✅ test_royalties_exceeding_100_percents"); + Ok(()) +} diff --git a/nft-series/src/series.rs b/nft-series/src/series.rs index 6b82395..0b119c2 100644 --- a/nft-series/src/series.rs +++ b/nft-series/src/series.rs @@ -25,6 +25,16 @@ impl Contract { "only approved creators can add a type" ); + // Check that the total royalty amount does not exceed 100% + if !royalty.is_none() { + let mut total_royalty = 0; + + for (_, v) in royalty.clone().unwrap().iter() { + total_royalty += *v; + } + require!(total_royalty <= 100, "total royalty can't exceed 100%"); + } + // Insert the series and ensure it doesn't already exist require!( self.series_by_id From 165052cf6a06da98fb771376affd35c2d5d4fc38 Mon Sep 17 00:00:00 2001 From: garikbesson Date: Mon, 30 Dec 2024 15:36:01 +0100 Subject: [PATCH 3/6] change toolchain from stable to 1.81.0 --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 72c6389..1e8558e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -18,7 +18,7 @@ jobs: - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: stable + toolchain: 1.81.0 target: wasm32-unknown-unknown - name: Run integration test run: cd integration-tests && cargo run --example integration-tests From e8d503371069ea6b2e29f4a5915f64f60be01597 Mon Sep 17 00:00:00 2001 From: garikbesson Date: Mon, 30 Dec 2024 15:43:37 +0100 Subject: [PATCH 4/6] try to fix github action tests --- .github/workflows/tests.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1e8558e..e1bcf72 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -14,12 +14,7 @@ jobs: RUST_BACKTRACE: 1 steps: - name: Checkout branch - uses: actions/checkout@v2 - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.81.0 - target: wasm32-unknown-unknown + uses: actions/checkout@v4 - name: Run integration test run: cd integration-tests && cargo run --example integration-tests - name: Market tests From c393756947ec158f7a7199c7e42c32e079d5018b Mon Sep 17 00:00:00 2001 From: Guille Date: Mon, 3 Mar 2025 12:23:25 +0100 Subject: [PATCH 5/6] Update integration-tests/rust-toolchain.toml --- integration-tests/rust-toolchain.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/rust-toolchain.toml b/integration-tests/rust-toolchain.toml index 6bec1e7..97c2073 100644 --- a/integration-tests/rust-toolchain.toml +++ b/integration-tests/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.81" +channel = "stable" components = ["rustfmt"] targets = ["wasm32-unknown-unknown"] \ No newline at end of file From 2f19466ba35f0d1ac6b03a2e78f337a33e05c058 Mon Sep 17 00:00:00 2001 From: Guillermo Alejandro Gallardo Diez Date: Mon, 3 Mar 2025 14:17:47 +0100 Subject: [PATCH 6/6] updated versions --- integration-tests/Cargo.toml | 4 ++-- market-contract/Cargo.toml | 6 +++--- nft-contract-approval/Cargo.toml | 2 +- nft-contract-basic/Cargo.toml | 2 +- nft-contract-events/Cargo.toml | 2 +- nft-contract-royalty/Cargo.toml | 2 +- nft-contract-skeleton/Cargo.toml | 2 +- nft-series/Cargo.toml | 6 +++--- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/integration-tests/Cargo.toml b/integration-tests/Cargo.toml index a9659d5..62f9ee5 100644 --- a/integration-tests/Cargo.toml +++ b/integration-tests/Cargo.toml @@ -5,8 +5,8 @@ publish = false edition = "2021" [dev-dependencies] -near-sdk = { version = "5.1.0", features = ["unit-testing"] } -near-workspaces = { version = "0.10.0", features = ["unstable"] } +near-sdk = { version = "5.4.0", features = ["unit-testing"] } +near-workspaces = { version = "0.14.1", features = ["unstable"] } tokio = { version = "1.12.0", features = ["full"] } serde_json = "1" diff --git a/market-contract/Cargo.toml b/market-contract/Cargo.toml index 55b4a83..6091233 100644 --- a/market-contract/Cargo.toml +++ b/market-contract/Cargo.toml @@ -8,11 +8,11 @@ edition = "2021" crate-type = ["cdylib", "rlib"] [dependencies] -near-sdk = { version = "5.1.0", features = ["legacy"] } +near-sdk = { version = "5.4.0", features = ["legacy"] } [dev-dependencies] -near-sdk = { version = "5.1.0", features = ["unit-testing"] } -near-workspaces = { version = "0.10.0", features = ["unstable"] } +near-sdk = { version = "5.4.0", features = ["unit-testing"] } +near-workspaces = { version = "0.14.1", features = ["unstable"] } tokio = { version = "1.12.0", features = ["full"] } serde_json = "1" diff --git a/nft-contract-approval/Cargo.toml b/nft-contract-approval/Cargo.toml index b1b459a..130ae71 100644 --- a/nft-contract-approval/Cargo.toml +++ b/nft-contract-approval/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" crate-type = ["cdylib", "rlib"] [dependencies] -near-sdk = { version = "5.1.0", features = ["legacy"] } +near-sdk = { version = "5.4.0", features = ["legacy"] } serde_json = "1.0.113" [profile.release] diff --git a/nft-contract-basic/Cargo.toml b/nft-contract-basic/Cargo.toml index 6a5b5c8..3e734c0 100644 --- a/nft-contract-basic/Cargo.toml +++ b/nft-contract-basic/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" crate-type = ["cdylib", "rlib"] [dependencies] -near-sdk = { version = "5.1.0", features = ["legacy"] } +near-sdk = { version = "5.4.0", features = ["legacy"] } [profile.release] codegen-units = 1 diff --git a/nft-contract-events/Cargo.toml b/nft-contract-events/Cargo.toml index b1b459a..130ae71 100644 --- a/nft-contract-events/Cargo.toml +++ b/nft-contract-events/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" crate-type = ["cdylib", "rlib"] [dependencies] -near-sdk = { version = "5.1.0", features = ["legacy"] } +near-sdk = { version = "5.4.0", features = ["legacy"] } serde_json = "1.0.113" [profile.release] diff --git a/nft-contract-royalty/Cargo.toml b/nft-contract-royalty/Cargo.toml index b1b459a..130ae71 100644 --- a/nft-contract-royalty/Cargo.toml +++ b/nft-contract-royalty/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" crate-type = ["cdylib", "rlib"] [dependencies] -near-sdk = { version = "5.1.0", features = ["legacy"] } +near-sdk = { version = "5.4.0", features = ["legacy"] } serde_json = "1.0.113" [profile.release] diff --git a/nft-contract-skeleton/Cargo.toml b/nft-contract-skeleton/Cargo.toml index 6a5b5c8..3e734c0 100644 --- a/nft-contract-skeleton/Cargo.toml +++ b/nft-contract-skeleton/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" crate-type = ["cdylib", "rlib"] [dependencies] -near-sdk = { version = "5.1.0", features = ["legacy"] } +near-sdk = { version = "5.4.0", features = ["legacy"] } [profile.release] codegen-units = 1 diff --git a/nft-series/Cargo.toml b/nft-series/Cargo.toml index 97e5048..d6cc333 100644 --- a/nft-series/Cargo.toml +++ b/nft-series/Cargo.toml @@ -8,12 +8,12 @@ edition = "2021" crate-type = ["cdylib", "rlib"] [dependencies] -near-sdk = { version = "5.1.0", features = ["legacy"] } +near-sdk = { version = "5.4.0", features = ["legacy"] } serde_json = "1.0.113" [dev-dependencies] -near-sdk = { version = "5.1.0", features = ["unit-testing"] } -near-workspaces = { version = "0.10.0", features = ["unstable"] } +near-sdk = { version = "5.4.0", features = ["unit-testing"] } +near-workspaces = { version = "0.14.1", features = ["unstable"] } tokio = { version = "1.12.0", features = ["full"] } serde_json = "1"