From 512694b50916668ca2e29e538d30c41130e60009 Mon Sep 17 00:00:00 2001 From: Jorge Hernandez <3452489+jhernandezb@users.noreply.github.com> Date: Sun, 28 Jan 2024 20:22:25 -0600 Subject: [PATCH 01/24] remove wrapper (#636) * wip * add toml formatting rules * remove custom binding for funding fairburn pool * use helper * remove wrapper usage in contracts * remove bucket code * fix test imports and setup * add custom stargate handler * fix query tests * update types * fix linter * bump rust version * bump rust * fix lint * cosmwasm-check * correctly check capabilities * add capabilities * update schema --- .circleci/config.yml | 2 +- .vscode/settings.json | 9 + Cargo.lock | 1278 ++++++++--------- Cargo.toml | 106 +- .../collections/sg721-base/src/contract.rs | 7 +- contracts/collections/sg721-base/src/lib.rs | 3 +- contracts/collections/sg721-base/src/state.rs | 4 +- .../sg721-base/src/upgrades/v3_0_0.rs | 3 +- .../sg721-base/src/upgrades/v3_1_0.rs | 3 +- .../sg721-metadata-onchain/src/lib.rs | 11 +- contracts/collections/sg721-nt/src/lib.rs | 5 +- .../sg721-updatable/src/contract.rs | 9 +- .../collections/sg721-updatable/src/lib.rs | 12 +- .../factories/base-factory/src/contract.rs | 13 +- .../factories/base-factory/src/helpers.rs | 9 +- .../open-edition-factory/src/contract.rs | 12 +- .../open-edition-factory/src/helpers.rs | 8 +- .../factories/vending-factory/src/contract.rs | 13 +- .../factories/vending-factory/src/helpers.rs | 9 +- contracts/minters/base-minter/src/contract.rs | 18 +- contracts/minters/base-minter/src/helpers.rs | 8 +- .../open-edition-minter/src/contract.rs | 31 +- .../open-edition-minter/src/helpers.rs | 13 +- .../vending-minter-merkle-wl/src/contract.rs | 29 +- .../vending-minter-merkle-wl/src/helpers.rs | 8 +- .../vending-minter-wl-flex/src/contract.rs | 29 +- .../vending-minter-wl-flex/src/helpers.rs | 8 +- contracts/minters/vending-minter/Cargo.toml | 4 +- .../minters/vending-minter/src/contract.rs | 29 +- .../minters/vending-minter/src/helpers.rs | 8 +- contracts/sg-eth-airdrop/src/claim_airdrop.rs | 5 +- contracts/sg-eth-airdrop/src/contract.rs | 21 +- contracts/sg-eth-airdrop/src/query.rs | 6 +- contracts/sg-eth-airdrop/src/reply.rs | 3 +- contracts/splits/src/contract.rs | 10 +- contracts/splits/src/helpers.rs | 7 +- .../schema/sg-whitelist-flex.json | 260 ++++ .../whitelists/whitelist-flex/src/admin.rs | 3 +- .../whitelists/whitelist-flex/src/contract.rs | 24 +- .../whitelist-flex/src/helpers/interface.rs | 4 +- .../whitelist-immutable/src/contract.rs | 15 +- .../whitelist-immutable/src/helpers.rs | 10 +- .../schema/whitelist-mtree.json | 260 ++++ .../whitelist-merkletree/src/admin.rs | 3 +- .../whitelist-merkletree/src/contract.rs | 23 +- .../src/helpers/interface.rs | 4 +- .../whitelist/schema/query_msg.json | 260 ++++ contracts/whitelists/whitelist/src/admin.rs | 3 +- .../whitelists/whitelist/src/contract.rs | 20 +- .../whitelist/src/helpers/interface.rs | 5 +- packages/ethereum-verify/Cargo.toml | 22 +- packages/mint-hooks/src/lib.rs | 20 +- packages/sg1/Cargo.toml | 11 +- packages/sg1/src/lib.rs | 67 +- test-suite/Cargo.toml | 64 +- .../base_factory/tests/integration_tests.rs | 5 +- .../base_minter/tests/integration_tests.rs | 3 +- test-suite/src/common_setup.rs | 1 + test-suite/src/common_setup/contract_boxes.rs | 65 +- test-suite/src/common_setup/keeper.rs | 74 + test-suite/src/common_setup/msg.rs | 12 +- .../common_setup/setup_accounts_and_block.rs | 9 +- .../setup_collection_whitelist.rs | 13 +- .../setup_minter/base_minter/setup.rs | 15 +- .../setup_minter/common/parse_response.rs | 2 +- .../setup_minter/open_edition_minter/setup.rs | 14 +- .../setup_minter/vending_minter/setup.rs | 15 +- .../setup_whitelist_merkletree.rs | 6 +- test-suite/src/common_setup/templates.rs | 13 +- .../src/open_edition_factory/tests/common.rs | 5 +- .../src/open_edition_factory/tests/queries.rs | 7 +- .../src/sg721_base/tests/integration_tests.rs | 14 +- .../setup/collection_whitelist_helpers.rs | 13 +- .../setup/configure_mock_minter.rs | 8 +- .../src/sg_eth_airdrop/setup/execute_msg.rs | 10 +- .../setup/mock_minter_contract.rs | 11 +- .../setup/mock_whitelist_contract.rs | 10 +- .../src/sg_eth_airdrop/setup/test_msgs.rs | 5 +- .../src/sg_eth_airdrop/tests/test_claim.rs | 11 +- .../tests/test_immutable_whitelist.rs | 2 +- .../src/splits/tests/integration_tests.rs | 6 +- .../tests/integration_tests.rs | 6 +- test-suite/src/vending_minter/tests/splits.rs | 8 +- .../src/vending_minter/tests/whitelist.rs | 27 +- .../src/whitelist/tests/integration_tests.rs | 12 +- .../tests/integration_tests.rs | 13 +- .../tests/integration_tests.rs | 14 +- ts/src/WhitelistFlex.client.ts | 2 +- ts/src/WhitelistFlex.message-composer.ts | 2 +- ts/src/WhitelistFlex.types.ts | 51 +- 90 files changed, 2126 insertions(+), 1189 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 test-suite/src/common_setup/keeper.rs diff --git a/.circleci/config.yml b/.circleci/config.yml index 3e1d23ed2..fbca6eea8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -560,7 +560,7 @@ jobs: for W in ./target/wasm32-unknown-unknown/release/*.wasm do echo -n "Checking `basename $W`... " - cosmwasm-check --available-capabilities iterator,staking,stargate,stargaze $W + cosmwasm-check --available-capabilities iterator,staking,stargate,stargaze,cosmwasm_1_4,cosmwasm_1_3,cosmwasm_1_2,cosmwasm_1_1 $W done # This job roughly follows the instructions from https://circleci.com/blog/publishing-to-github-releases-via-circleci/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..3d9aef289 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "[toml]": { + "editor.defaultFormatter": "tamasfe.even-better-toml" + }, + "evenBetterToml.formatter.alignEntries": true, + "evenBetterToml.formatter.alignComments": true, + "evenBetterToml.formatter.allowedBlankLines": 2, + "evenBetterToml.formatter.columnWidth": 120 +} diff --git a/Cargo.lock b/Cargo.lock index 5fb111ff8..7b63bb6d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,26 +2,11 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "aes" -version = "0.8.3" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ "cfg-if", "cipher", @@ -52,24 +37,30 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.0" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2135563fb5c609d2b2b87c1e8ce7bc41b0b45430fa9661f457981503dd5bf0" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] +[[package]] +name = "anybuf" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a03eb4d55fa21466cac727930be07f82581223ee04bcaf61f934e98b7ecb859" + [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "assert_matches" @@ -79,9 +70,9 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "async-channel" -version = "1.9.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" dependencies = [ "concurrent-queue", "event-listener", @@ -90,9 +81,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.5.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" +checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b" dependencies = [ "async-lock", "async-task", @@ -119,29 +110,29 @@ dependencies = [ [[package]] name = "async-io" -version = "1.13.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" dependencies = [ "async-lock", "autocfg", - "cfg-if", "concurrent-queue", "futures-lite", + "libc", "log", "parking", "polling", - "rustix", "slab", - "socket2 0.4.9", + "socket2", "waker-fn", + "windows-sys 0.42.0", ] [[package]] name = "async-lock" -version = "2.8.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" dependencies = [ "event-listener", ] @@ -174,9 +165,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" dependencies = [ "async-stream-impl", "futures-core", @@ -185,37 +176,37 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", ] [[package]] name = "async-task" -version = "4.4.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", ] [[package]] name = "atomic-waker" -version = "1.1.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" +checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" [[package]] name = "atty" @@ -230,9 +221,9 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.1.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" +checksum = "8a8c1df849285fbacd587de7818cc7d13be6cd2cbcd47a04fb1801b0e2706e33" dependencies = [ "proc-macro-error", "proc-macro2", @@ -248,9 +239,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "axum" -version = "0.6.20" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +checksum = "13d8068b6ccb8b34db9de397c7043f91db8b4c66414952c6db944f238c4d3db3" dependencies = [ "async-trait", "axum-core", @@ -276,9 +267,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.3.4" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +checksum = "b2f958c80c248b34b9a877a643811be8dbca03ca5ba827f2b63baf3a81e5fc4e" dependencies = [ "async-trait", "bytes", @@ -291,30 +282,15 @@ dependencies = [ "tower-service", ] -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - [[package]] name = "base-factory" version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "schemars", "serde", "sg-std", @@ -330,9 +306,9 @@ dependencies = [ "base-factory", "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw721 0.18.0", "cw721-base 0.18.0", "schemars", @@ -405,6 +381,12 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dabbe35f96fb9507f7330793dc490461b2962659ac5d427181e451a623751d1" +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + [[package]] name = "bincode" version = "1.3.3" @@ -427,7 +409,7 @@ dependencies = [ "pbkdf2", "rand_core 0.6.4", "ripemd", - "sha2 0.10.7", + "sha2 0.10.8", "subtle", "zeroize", ] @@ -487,7 +469,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -496,7 +478,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -510,9 +492,9 @@ dependencies = [ [[package]] name = "blocking" -version = "1.3.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8" dependencies = [ "async-channel", "async-lock", @@ -520,7 +502,6 @@ dependencies = [ "atomic-waker", "fastrand", "futures-lite", - "log", ] [[package]] @@ -531,9 +512,9 @@ checksum = "128a44527fc0d6abf05f9eda748b9027536e12dff93f5acc8449f51583309350" [[package]] name = "borsh" -version = "0.10.3" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +checksum = "40f9ca3698b2e4cb7c15571db0abc5551dca417a21ae8140460b50309bb2cc62" dependencies = [ "borsh-derive", "hashbrown 0.13.2", @@ -541,9 +522,9 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "0.10.3" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +checksum = "598b3eacc6db9c3ee57b22707ad8f6a8d2f6d442bfe24ffeb8cbb70ca59e6a35" dependencies = [ "borsh-derive-internal", "borsh-schema-derive-internal", @@ -554,9 +535,9 @@ dependencies = [ [[package]] name = "borsh-derive-internal" -version = "0.10.3" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +checksum = "186b734fa1c9f6743e90c95d7233c9faab6360d1a96d4ffa19d9cfd1e9350f8a" dependencies = [ "proc-macro2", "quote", @@ -565,9 +546,9 @@ dependencies = [ [[package]] name = "borsh-schema-derive-internal" -version = "0.10.3" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +checksum = "99b7ff1008316626f485991b960ade129253d4034014616b94f309a15366cc49" dependencies = [ "proc-macro2", "quote", @@ -585,9 +566,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "byte-slice-cast" @@ -603,9 +584,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytecheck" -version = "0.6.11" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" +checksum = "13fe11640a23eb24562225322cd3e452b93a3d4091d62fab69c70542fcd17d1f" dependencies = [ "bytecheck_derive", "ptr_meta", @@ -614,9 +595,9 @@ dependencies = [ [[package]] name = "bytecheck_derive" -version = "0.6.11" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" +checksum = "e31225543cb46f81a7e224762764f4a6a0f097b1db0b175f69e8065efaa42de5" dependencies = [ "proc-macro2", "quote", @@ -631,21 +612,18 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.5.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" dependencies = [ "serde", ] [[package]] name = "cc" -version = "1.0.83" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" [[package]] name = "cfg-if" @@ -655,10 +633,11 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ + "num-integer", "num-traits", ] @@ -687,7 +666,7 @@ dependencies = [ "k256 0.11.6", "lazy_static", "serde", - "sha2 0.10.7", + "sha2 0.10.8", "thiserror", ] @@ -704,7 +683,7 @@ dependencies = [ "hmac", "pbkdf2", "rand", - "sha2 0.10.7", + "sha2 0.10.8", "thiserror", ] @@ -716,24 +695,24 @@ checksum = "c94090a6663f224feae66ab01e41a2555a8296ee07b5f20dab8888bdefc9f617" dependencies = [ "base58check", "base64 0.12.3", - "bech32", + "bech32 0.7.3", "blake2", "digest 0.10.7", - "generic-array 0.14.7", + "generic-array 0.14.6", "hex", "ripemd", "serde", "serde_derive", - "sha2 0.10.7", + "sha2 0.10.8", "sha3", "thiserror", ] [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" dependencies = [ "crossbeam-utils", ] @@ -759,9 +738,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.5" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "convert_case" @@ -784,9 +763,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cosm-orc" @@ -825,7 +804,7 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673d31bd830c0772d78545de20d975129b6ab2f7db4e4e9313c3b8777d319194" dependencies = [ - "prost 0.11.9", + "prost 0.11.8", "prost-types", "tendermint-proto", "tonic", @@ -854,11 +833,12 @@ dependencies = [ [[package]] name = "cosmwasm-crypto" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca101fbf2f76723711a30ea3771ef312ec3ec254ad021b237871ed802f9f175" +checksum = "8ed6aa9f904de106fa16443ad14ec2abe75e94ba003bb61c681c0e43d4c58d2a" dependencies = [ "digest 0.10.7", + "ecdsa 0.16.7", "ed25519-zebra", "k256 0.13.1", "rand_core 0.6.4", @@ -867,18 +847,18 @@ dependencies = [ [[package]] name = "cosmwasm-derive" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c73d2dd292f60e42849d2b07c03d809cf31e128a4299a805abd6d24553bcaaf5" +checksum = "40abec852f3d4abec6d44ead9a58b78325021a1ead1e7229c3471414e57b2e49" dependencies = [ "syn 1.0.109", ] [[package]] name = "cosmwasm-schema" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce34a08020433989af5cc470104f6bd22134320fe0221bd8aeb919fd5ec92d5" +checksum = "b166215fbfe93dc5575bae062aa57ae7bb41121cffe53bac33b033257949d2a9" dependencies = [ "cosmwasm-schema-derive", "schemars", @@ -889,9 +869,9 @@ dependencies = [ [[package]] name = "cosmwasm-schema-derive" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96694ec781a7dd6dea1f968a2529ade009c21ad999c88b5f53d6cc495b3b96f7" +checksum = "8bf12f8e20bb29d1db66b7ca590bc2f670b548d21e9be92499bc0f9022a994a8" dependencies = [ "proc-macro2", "quote", @@ -900,11 +880,12 @@ dependencies = [ [[package]] name = "cosmwasm-std" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a44d3f9c25b2f864737c6605a98f2e4675d53fd8bbc7cf4d7c02475661a793d" +checksum = "ad011ae7447188e26e4a7dbca2fcd0fc186aa21ae5c86df0503ea44c78f9e469" dependencies = [ "base64 0.21.4", + "bech32 0.9.1", "bnum", "cosmwasm-crypto", "cosmwasm-derive", @@ -914,24 +895,25 @@ dependencies = [ "schemars", "serde", "serde-json-wasm", - "sha2 0.10.7", + "sha2 0.10.8", + "static_assertions", "thiserror", ] [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ "cfg-if", ] @@ -948,7 +930,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "subtle", "zeroize", @@ -960,7 +942,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "subtle", "zeroize", @@ -972,7 +954,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "typenum", ] @@ -985,6 +967,16 @@ dependencies = [ "sct", ] +[[package]] +name = "ctor" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ctr" version = "0.9.2" @@ -1039,8 +1031,8 @@ checksum = "d5d8edce4b78785f36413f67387e4be7d0cb7d032b5d4164bcc024f9c3f3f2ea" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", "schemars", "serde", "thiserror", @@ -1048,16 +1040,16 @@ dependencies = [ [[package]] name = "cw-multi-test" -version = "0.16.5" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "127c7bb95853b8e828bdab97065c81cb5ddc20f7339180b61b2300565aaa99d1" +checksum = "c2eb84554bbfa6b66736abcd6a9bfdf237ee0ecb83910f746dff7f799093c80a" dependencies = [ "anyhow", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", "derivative", - "itertools", + "itertools 0.10.5", "k256 0.11.6", "prost 0.9.0", "schemars", @@ -1065,6 +1057,26 @@ dependencies = [ "thiserror", ] +[[package]] +name = "cw-multi-test" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67fff029689ae89127cf6d7655809a68d712f3edbdb9686c70b018ba438b26ca" +dependencies = [ + "anyhow", + "bech32 0.9.1", + "cosmwasm-std", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "derivative", + "itertools 0.12.0", + "prost 0.12.3", + "schemars", + "serde", + "sha2 0.10.8", + "thiserror", +] + [[package]] name = "cw-ownable" version = "0.5.1" @@ -1075,8 +1087,8 @@ dependencies = [ "cosmwasm-std", "cw-address-like", "cw-ownable-derive", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", "thiserror", ] @@ -1104,9 +1116,9 @@ dependencies = [ [[package]] name = "cw-storage-plus" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f0e92a069d62067f3472c62e30adedb4cab1754725c0f2a682b3128d2bf3c79" +checksum = "d5ff29294ee99373e2cd5fd21786a3c0ced99a52fec2ca347d565489c61b723c" dependencies = [ "cosmwasm-std", "schemars", @@ -1130,13 +1142,13 @@ dependencies = [ [[package]] name = "cw-utils" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c80e93d1deccb8588db03945016a292c3c631e6325d349ebb35d2db6f4f946f7" +checksum = "1c4a657e5caacc3a0d00ee96ca8618745d050b8f757c709babafb81208d4239c" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw2 1.1.0", + "cw2 1.1.2", "schemars", "semver", "serde", @@ -1158,14 +1170,15 @@ dependencies = [ [[package]] name = "cw2" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ac2dc7a55ad64173ca1e0a46697c31b7a5c51342f55a1e84a724da4eb99908" +checksum = "c6c120b24fbbf5c3bedebb97f2cc85fbfa1c3287e09223428e7e597b5293c1fa" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", "schemars", + "semver", "serde", "thiserror", ] @@ -1178,7 +1191,7 @@ checksum = "a398696307efadaaa2d0850076f865fa706c959d493cb4203314f72be6b77a64" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", "schemars", "serde", ] @@ -1192,9 +1205,9 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cw-controllers 1.1.0", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw4", "schemars", "serde", @@ -1222,7 +1235,7 @@ checksum = "e3c4d286625ccadc957fe480dd3bdc54ada19e0e6b5b9325379db3130569e914" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-utils 1.0.1", + "cw-utils 1.0.3", "schemars", "serde", ] @@ -1253,9 +1266,9 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cw-ownable", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw721 0.18.0", "cw721-base 0.16.0", "schemars", @@ -1283,12 +1296,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "deranged" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" - [[package]] name = "derivative" version = "2.2.0" @@ -1326,7 +1333,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -1349,9 +1356,9 @@ checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" [[package]] name = "dyn-clone" -version = "1.0.13" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" [[package]] name = "e2e" @@ -1391,9 +1398,9 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.8" +version = "0.16.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" +checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428" dependencies = [ "der 0.7.8", "digest 0.10.7", @@ -1441,9 +1448,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "elliptic-curve" @@ -1456,7 +1463,7 @@ dependencies = [ "der 0.6.1", "digest 0.10.7", "ff 0.12.1", - "generic-array 0.14.7", + "generic-array 0.14.6", "group 0.12.1", "pkcs8 0.9.0", "rand_core 0.6.4", @@ -1475,11 +1482,11 @@ dependencies = [ "crypto-bigint 0.5.3", "digest 0.10.7", "ff 0.13.0", - "generic-array 0.14.7", + "generic-array 0.14.6", "group 0.13.0", "pkcs8 0.10.2", "rand_core 0.6.4", - "sec1 0.7.3", + "sec1 0.7.1", "subtle", "zeroize", ] @@ -1497,42 +1504,15 @@ dependencies = [ "termcolor", ] -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - [[package]] name = "erased-serde" -version = "0.3.31" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +checksum = "4f2b0c2380453a92ea8b6c8e5f64ecaafccddde8ceab55ff7a8ac1029f894569" dependencies = [ "serde", ] -[[package]] -name = "errno" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "eth-keystore" version = "0.5.0" @@ -1549,10 +1529,10 @@ dependencies = [ "scrypt", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "sha3", "thiserror", - "uuid 0.8.2", + "uuid", ] [[package]] @@ -1610,7 +1590,7 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "hex", - "sha2 0.10.7", + "sha2 0.10.8", "sha3", ] @@ -1626,7 +1606,7 @@ dependencies = [ "convert_case", "elliptic-curve 0.12.3", "ethabi", - "generic-array 0.14.7", + "generic-array 0.14.6", "hex", "k256 0.11.6", "open-fastrlp", @@ -1657,7 +1637,7 @@ dependencies = [ "ethers-core", "hex", "rand", - "sha2 0.10.7", + "sha2 0.10.8", "thiserror", ] @@ -1742,9 +1722,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ "percent-encoding", ] @@ -1763,9 +1743,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" dependencies = [ "futures-channel", "futures-core", @@ -1778,9 +1758,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" dependencies = [ "futures-core", "futures-sink", @@ -1788,15 +1768,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" dependencies = [ "futures-core", "futures-task", @@ -1805,15 +1785,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" [[package]] name = "futures-lite" -version = "1.13.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" dependencies = [ "fastrand", "futures-core", @@ -1826,32 +1806,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" dependencies = [ "futures-channel", "futures-core", @@ -1876,9 +1856,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -1887,9 +1867,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "js-sys", @@ -1898,12 +1878,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "gimli" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" - [[package]] name = "gloo-timers" version = "0.2.6" @@ -1940,9 +1914,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.21" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" dependencies = [ "bytes", "fnv", @@ -1950,7 +1924,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap", "slab", "tokio", "tokio-util", @@ -1975,19 +1949,14 @@ dependencies = [ "ahash 0.8.3", ] -[[package]] -name = "hashbrown" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" - [[package]] name = "headers" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" dependencies = [ - "base64 0.21.4", + "base64 0.13.1", + "bitflags", "bytes", "headers-core", "http", @@ -2022,9 +1991,12 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] [[package]] name = "hex" @@ -2071,9 +2043,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "humantime" @@ -2083,9 +2055,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" dependencies = [ "bytes", "futures-channel", @@ -2098,7 +2070,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2", "tokio", "tower-service", "tracing", @@ -2156,9 +2128,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.4.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2210,31 +2182,21 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.9.3" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown 0.12.3", ] -[[package]] -name = "indexmap" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" -dependencies = [ - "equivalent", - "hashbrown 0.14.0", -] - [[package]] name = "inout" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -2247,36 +2209,43 @@ dependencies = [ ] [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ - "hermit-abi 0.3.2", - "libc", - "windows-sys", + "either", ] [[package]] name = "itertools" -version = "0.10.5" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] @@ -2301,7 +2270,7 @@ dependencies = [ "cfg-if", "ecdsa 0.14.8", "elliptic-curve 0.12.3", - "sha2 0.10.7", + "sha2 0.10.8", "sha3", ] @@ -2312,18 +2281,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" dependencies = [ "cfg-if", - "ecdsa 0.16.8", + "ecdsa 0.16.7", "elliptic-curve 0.13.5", "once_cell", - "sha2 0.10.7", + "sha2 0.10.8", "signature 2.1.0", ] [[package]] name = "keccak" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" dependencies = [ "cpufeatures", ] @@ -2345,9 +2314,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.148" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "linked-hash-map" @@ -2355,38 +2324,33 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "log" -version = "0.4.20" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ + "cfg-if", "value-bag", ] [[package]] name = "matchit" -version = "0.7.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed1202b2a6f884ae56f04cff409ab315c5ce26b5e58d7412e484f01fd52f52ef" +checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" [[package]] name = "memchr" -version = "2.6.3" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "mime" -version = "0.3.17" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "minimal-lexical" @@ -2394,24 +2358,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - [[package]] name = "mio" -version = "0.8.8" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", + "log", "wasi", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -2436,38 +2392,39 @@ dependencies = [ ] [[package]] -name = "num-traits" -version = "0.2.16" +name = "num-integer" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", + "num-traits", ] [[package]] -name = "num_cpus" -version = "1.16.0" +name = "num-traits" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ - "hermit-abi 0.3.2", - "libc", + "autocfg", ] [[package]] -name = "object" -version = "0.32.1" +name = "num_cpus" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "memchr", + "hermit-abi 0.2.6", + "libc", ] [[package]] name = "once_cell" -version = "1.18.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "opaque-debug" @@ -2488,9 +2445,9 @@ dependencies = [ "base-factory", "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "sg-metadata", "sg-std", "sg1", @@ -2505,9 +2462,9 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw721-base 0.18.0", "open-edition-factory", "semver", @@ -2565,9 +2522,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.5" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" +checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" dependencies = [ "arrayvec", "bitvec 1.0.1", @@ -2579,9 +2536,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.5" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" +checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", @@ -2591,9 +2548,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.1.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" [[package]] name = "password-hash" @@ -2608,9 +2565,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "pathdiff" @@ -2627,7 +2584,7 @@ dependencies = [ "digest 0.10.7", "hmac", "password-hash", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -2659,26 +2616,25 @@ checksum = "c719dcf55f09a3a7e764c6649ab594c18a177e3599c467983cdf644bfc0a4088" [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.7.3" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" +checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" dependencies = [ - "memchr", "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.3" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a" +checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" dependencies = [ "pest", "pest_generator", @@ -2686,53 +2642,53 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.3" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141" +checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", ] [[package]] name = "pest_meta" -version = "2.7.3" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f" +checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" dependencies = [ "once_cell", "pest", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] name = "pin-project" -version = "1.1.3" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.3" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -2762,9 +2718,9 @@ dependencies = [ [[package]] name = "polling" -version = "2.8.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", "bitflags", @@ -2773,7 +2729,7 @@ dependencies = [ "libc", "log", "pin-project-lite", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -2841,9 +2797,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -2860,12 +2816,22 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.9" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" dependencies = [ "bytes", - "prost-derive 0.11.9", + "prost-derive 0.11.8", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive 0.12.3", ] [[package]] @@ -2875,7 +2841,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" dependencies = [ "anyhow", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", "syn 1.0.109", @@ -2883,24 +2849,37 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.9" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" dependencies = [ "anyhow", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "prost-types" -version = "0.11.9" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" dependencies = [ - "prost 0.11.9", + "prost 0.11.8", ] [[package]] @@ -2925,9 +2904,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -2991,21 +2970,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.5" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ "aho-corasick", "memchr", @@ -3014,9 +2981,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.5" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "rend" @@ -3085,26 +3052,23 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.42" +version = "0.7.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58" +checksum = "c30f1d45d9aa61cbc8cd1eb87705470892289bb2d01943e7803b873a57404dc3" dependencies = [ - "bitvec 1.0.1", "bytecheck", "hashbrown 0.12.3", "ptr_meta", "rend", "rkyv_derive", "seahash", - "tinyvec", - "uuid 1.4.1", ] [[package]] name = "rkyv_derive" -version = "0.7.42" +version = "0.7.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d" +checksum = "ff26ed6c7c4dfc2aa9480b86a60e3c7233543a270a680e10758a507c5a4ce476" dependencies = [ "proc-macro2", "quote", @@ -3145,11 +3109,11 @@ dependencies = [ [[package]] name = "rs_merkle" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05225752ca6ede4cb1b73aa37ce3904affd042e98f28246f56f438ebfd47a810" +checksum = "3b241d2e59b74ef9e98d94c78c47623d04c8392abaf82014dfd372a16041128f" dependencies = [ - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -3164,12 +3128,14 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.32.0" +version = "1.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c4216490d5a413bc6d10fa4742bd7d4955941d062c0ef873141d6b0e7b30fd" +checksum = "2b1b21b8760b0ef8ae5b43d40913ff711a2053cb7ff892a34facff7a6365375a" dependencies = [ "arrayvec", "borsh", + "bytecheck", + "byteorder", "bytes", "num-traits", "rand", @@ -3178,32 +3144,12 @@ dependencies = [ "serde_json", ] -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - [[package]] name = "rustc-hex" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" -[[package]] -name = "rustix" -version = "0.37.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys", -] - [[package]] name = "rustls" version = "0.19.1" @@ -3231,15 +3177,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "salsa20" @@ -3261,9 +3207,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.9.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" +checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" dependencies = [ "cfg-if", "derive_more", @@ -3273,9 +3219,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.9.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" +checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", @@ -3285,18 +3231,18 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.22" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "windows-sys", + "windows-sys 0.42.0", ] [[package]] name = "schemars" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7b0ce13155372a76ee2e1c5ffba1fe61ede73fbea5630d61eee6fac4929c0c" +checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" dependencies = [ "dyn-clone", "schemars_derive", @@ -3306,9 +3252,9 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c" +checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" dependencies = [ "proc-macro2", "quote", @@ -3325,7 +3271,7 @@ dependencies = [ "hmac", "pbkdf2", "salsa20", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -3352,7 +3298,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct 0.1.1", "der 0.6.1", - "generic-array 0.14.7", + "generic-array 0.14.6", "pkcs8 0.9.0", "subtle", "zeroize", @@ -3360,13 +3306,13 @@ dependencies = [ [[package]] name = "sec1" -version = "0.7.3" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" dependencies = [ "base16ct 0.2.0", "der 0.7.8", - "generic-array 0.14.7", + "generic-array 0.14.6", "pkcs8 0.10.2", "subtle", "zeroize", @@ -3374,9 +3320,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.2" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ "bitflags", "core-foundation", @@ -3387,9 +3333,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" dependencies = [ "core-foundation-sys", "libc", @@ -3397,46 +3343,46 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.18" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" [[package]] name = "serde" -version = "1.0.189" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] [[package]] name = "serde-json-wasm" -version = "0.5.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16a62a1fad1e1828b24acac8f2b468971dade7b8c3c2e672bcadefefb1f8c137" +checksum = "a15bee9b04dd165c3f4e142628982ddde884c2022a89e8ddf99c4829bf2c3a58" dependencies = [ "serde", ] [[package]] name = "serde_bytes" -version = "0.11.12" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.189" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -3452,9 +3398,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "4d1bd37ce2324cf3bf85e5a25f96eb4baf0d5aa6eba43e7ae8958870c4ec48ed" dependencies = [ "itoa", "ryu", @@ -3463,13 +3409,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.16" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" +checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", ] [[package]] @@ -3478,8 +3424,8 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", "schemars", "serde", "sg-std", @@ -3494,10 +3440,10 @@ dependencies = [ "async-std", "cosmwasm-schema", "cosmwasm-std", - "cw-multi-test", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-multi-test 0.20.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "ethereum-verify", "ethers-core", "ethers-signers", @@ -3513,7 +3459,7 @@ dependencies = [ "sg1", "sg2", "sg721-base", - "sha2 0.10.7", + "sha2 0.10.8", "sha3", "thiserror", "vending-factory", @@ -3536,7 +3482,7 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", + "cw-storage-plus 1.2.0", "schemars", "serde", "sg-controllers", @@ -3563,7 +3509,7 @@ checksum = "20744734b8049c64747bfb083bbc06a3c7204d1d34881ed3d89698e182aa9f97" dependencies = [ "anyhow", "cosmwasm-std", - "cw-multi-test", + "cw-multi-test 0.16.2", "schemars", "serde", "sg-std", @@ -3576,9 +3522,9 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cw-controllers 1.1.0", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw4", "schemars", "serde", @@ -3595,7 +3541,7 @@ checksum = "4db53aebc2b4f981dc20a51213544adde8beaace6880345627f4babe2e1bc3ab" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-utils 1.0.1", + "cw-utils 1.0.3", "cw721 0.18.0", "schemars", "serde", @@ -3608,9 +3554,9 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "rust_decimal", "schemars", "serde", @@ -3625,9 +3571,9 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "rust_decimal", "schemars", "serde", @@ -3640,8 +3586,9 @@ dependencies = [ name = "sg1" version = "3.5.0" dependencies = [ + "anybuf", "cosmwasm-std", - "cw-utils 1.0.1", + "cw-utils 1.0.3", "serde", "sg-std", "thiserror", @@ -3653,8 +3600,8 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", "schemars", "serde", "sg721", @@ -3678,9 +3625,9 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-multi-test", + "cw-multi-test 0.20.0", "cw-ownable", - "cw-utils 1.0.1", + "cw-utils 1.0.3", "cw721-base 0.18.0", "serde", "thiserror", @@ -3693,9 +3640,9 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cw-ownable", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw721 0.18.0", "cw721-base 0.18.0", "serde", @@ -3712,7 +3659,7 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cw-ownable", - "cw2 1.1.0", + "cw2 1.1.2", "cw721 0.18.0", "cw721-base 0.18.0", "schemars", @@ -3729,8 +3676,8 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw721 0.18.0", "cw721-base 0.18.0", "schemars", @@ -3746,10 +3693,10 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-multi-test", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-multi-test 0.20.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw721 0.18.0", "cw721-base 0.18.0", "schemars", @@ -3800,9 +3747,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -3811,9 +3758,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.8" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" dependencies = [ "digest 0.10.7", "keccak", @@ -3856,9 +3803,9 @@ checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg", ] @@ -3873,16 +3820,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "socket2" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" -dependencies = [ - "libc", - "windows-sys", -] - [[package]] name = "spin" version = "0.5.2" @@ -3939,9 +3876,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.5.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "subtle-encoding" @@ -3965,9 +3902,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", @@ -3980,6 +3917,18 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + [[package]] name = "tap" version = "1.0.1" @@ -4001,7 +3950,7 @@ dependencies = [ "k256 0.11.6", "num-traits", "once_cell", - "prost 0.11.9", + "prost 0.11.8", "prost-types", "ripemd160", "serde", @@ -4041,7 +3990,7 @@ dependencies = [ "flex-error", "num-derive", "num-traits", - "prost 0.11.9", + "prost 0.11.8", "prost-types", "serde", "serde_bytes", @@ -4079,7 +4028,7 @@ dependencies = [ "tokio", "tracing", "url", - "uuid 0.8.2", + "uuid", "walkdir", ] @@ -4117,17 +4066,18 @@ dependencies = [ name = "test-suite" version = "3.5.0" dependencies = [ + "anybuf", "anyhow", "async-std", "base-factory", "base-minter", "cosmwasm-schema", "cosmwasm-std", - "cw-multi-test", + "cw-multi-test 0.20.0", "cw-ownable", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw4", "cw4-group", "cw721 0.18.0", @@ -4157,7 +4107,7 @@ dependencies = [ "sg721-base", "sg721-nt", "sg721-updatable", - "sha2 0.10.7", + "sha2 0.10.8", "shuffle", "thiserror", "url", @@ -4170,31 +4120,30 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.48" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.48" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] name = "time" -version = "0.3.28" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" +checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" dependencies = [ - "deranged", "serde", "time-core", "time-macros", @@ -4202,15 +4151,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] name = "time-macros" -version = "0.2.14" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" +checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" dependencies = [ "time-core", ] @@ -4241,19 +4190,20 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.32.0" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" +checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" dependencies = [ - "backtrace", + "autocfg", "bytes", "libc", + "memchr", "mio", "num_cpus", "pin-project-lite", - "socket2 0.5.4", + "socket2", "tokio-macros", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -4268,13 +4218,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.1.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", ] [[package]] @@ -4290,9 +4240,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.14" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" dependencies = [ "futures-core", "pin-project-lite", @@ -4301,9 +4251,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" dependencies = [ "bytes", "futures-core", @@ -4324,17 +4274,17 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.19.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274" dependencies = [ - "indexmap 2.0.0", + "indexmap", "toml_datetime", "winnow", ] @@ -4359,8 +4309,8 @@ dependencies = [ "hyper-timeout", "percent-encoding", "pin-project", - "prost 0.11.9", - "prost-derive 0.11.9", + "prost 0.11.8", + "prost-derive 0.11.8", "tokio", "tokio-stream", "tokio-util", @@ -4379,7 +4329,7 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", - "indexmap 1.9.3", + "indexmap", "pin-project", "pin-project-lite", "rand", @@ -4417,20 +4367,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ "once_cell", ] @@ -4453,15 +4403,15 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "typenum" -version = "1.17.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" [[package]] name = "uint" @@ -4477,15 +4427,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" @@ -4516,9 +4466,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.4.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", "idna", @@ -4535,17 +4485,15 @@ dependencies = [ "serde", ] -[[package]] -name = "uuid" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" - [[package]] name = "value-bag" -version = "1.4.1" +version = "1.0.0-alpha.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92ccd67fb88503048c01b59152a04effd0782d035a83a6d256ce6085f08f4a3" +checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" +dependencies = [ + "ctor", + "version_check", +] [[package]] name = "vending-factory" @@ -4554,9 +4502,9 @@ dependencies = [ "base-factory", "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "schemars", "serde", "sg-std", @@ -4572,9 +4520,9 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw721 0.18.0", "cw721-base 0.18.0", "rand_core 0.6.4", @@ -4588,7 +4536,7 @@ dependencies = [ "sg2", "sg4", "sg721", - "sha2 0.10.7", + "sha2 0.10.8", "shuffle", "thiserror", "url", @@ -4601,9 +4549,9 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw721 0.18.0", "cw721-base 0.18.0", "rand_core 0.6.4", @@ -4617,7 +4565,7 @@ dependencies = [ "sg2", "sg4", "sg721", - "sha2 0.10.7", + "sha2 0.10.8", "shuffle", "thiserror", "url", @@ -4631,9 +4579,9 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw721 0.18.0", "cw721-base 0.18.0", "rand_core 0.6.4", @@ -4647,7 +4595,7 @@ dependencies = [ "sg2", "sg4", "sg721", - "sha2 0.10.7", + "sha2 0.10.8", "shuffle", "thiserror", "url", @@ -4668,20 +4616,22 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.4.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", + "winapi", "winapi-util", ] [[package]] name = "want" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ + "log", "try-lock", ] @@ -4693,9 +4643,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -4703,24 +4653,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ "cfg-if", "js-sys", @@ -4730,9 +4680,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4740,28 +4690,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" dependencies = [ "js-sys", "wasm-bindgen", @@ -4793,9 +4743,9 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cw-controllers 0.16.0", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "schemars", "serde", "sg-std", @@ -4809,9 +4759,9 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 1.1.0", - "cw-utils 1.0.1", - "cw2 1.1.0", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "hex", "rs_merkle", "rust_decimal", @@ -4857,18 +4807,33 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ "windows-targets", ] [[package]] name = "windows-targets" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -4881,51 +4846,51 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_msvc" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winnow" -version = "0.5.15" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" +checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966" dependencies = [ "memchr", ] @@ -4950,20 +4915,21 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.6.0" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 1.0.109", + "synstructure", ] diff --git a/Cargo.toml b/Cargo.toml index b86fb6c15..41445c084 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,61 +11,63 @@ members = [ resolver = "2" [workspace.package] -version = "3.5.0" +version = "3.5.0" rust-version = "1.73.0" -edition = "2021" -homepage = "https://stargaze.zone" -repository = "https://github.com/public-awesome/launchpad" -license = "Apache-2.0" +edition = "2021" +homepage = "https://stargaze.zone" +repository = "https://github.com/public-awesome/launchpad" +license = "Apache-2.0" [workspace.dependencies] -base-factory = { version = "3.5.0", path = "contracts/factories/base-factory" } -base-minter = { version = "3.5.0", path = "contracts/minters/base-minter" } -cosmwasm-schema = "1.2.1" -cosmwasm-std = "1.2.1" -cw-controllers = "1.1.0" -cw2 = "1.1.0" -cw4 = "1.1.0" -cw4-group = "1.1.0" -cw721 = "0.18.0" -cw721-base = "0.18.0" -cw-multi-test = "0.16.2" -cw-storage-plus = "1.1.0" -cw-utils = "1.0.1" -schemars = "0.8.11" -serde = { version = "1.0.145", default-features = false, features = ["derive"] } -sg1 = { version = "3.5.0", path = "packages/sg1" } -sg2 = { version = "3.5.0", path = "packages/sg2" } -sg4 = { version = "3.5.0", path = "packages/sg4" } -sg721 = { version = "3.5.0", path = "packages/sg721" } -sg721-base = { version = "3.5.0", path = "contracts/collections/sg721-base" } -sg721-nt = { version = "3.5.0", path = "contracts/collections/sg721-nt" } -sg721-updatable = { version = "3.5.0", path = "contracts/collections/sg721-updatable" } -sg-controllers = { version = "3.5.0", path = "packages/controllers" } -sg-metadata = { version = "3.5.0", path = "packages/sg-metadata" } -sg-mint-hooks = { version = "3.5.0", path = "packages/mint-hooks" } -sg-multi-test = { version = "3.1.0" } -sg-splits = { version = "3.5.0", path = "contracts/splits" } -sg-std = { version = "3.2.0" } -sg-whitelist = { version = "3.5.0", path = "contracts/whitelists/whitelist" } -thiserror = "1.0.31" -url = "2.2.2" -sha2 = { version = "0.10.2", default-features = false } - -whitelist-mtree = { version = "3.5.0", path = "contracts/whitelists/whitelist-merkletree" } -vending-minter-merkle-wl = { version = "3.5.0", path = "contracts/minters/vending-minter-merkle-wl" } -vending-factory = { version = "3.5.0", path = "contracts/factories/vending-factory" } -vending-minter = { version = "3.5.0", path = "contracts/minters/vending-minter" } -open-edition-factory = { version = "3.5.0", path = "contracts/factories/open-edition-factory" } -open-edition-minter = { version = "3.5.0", path = "contracts/minters/open-edition-minter" } -whitelist-immutable = { version = "3.5.0", path = "contracts/whitelists/whitelist-immutable" } -sg-whitelist-flex = { version = "3.5.0", path = "contracts/whitelists/whitelist-flex" } -ethereum-verify = { version = "3.5.0", path = "packages/ethereum-verify" } -sg-eth-airdrop = { version = "3.5.0", path = "contracts/sg-eth-airdrop" } -test-suite = { version = "3.5.0", path = "test-suite" } - -semver = "1" -cw-ownable = "0.5.1" +base-factory = { version = "3.5.0", path = "contracts/factories/base-factory" } +base-minter = { version = "3.5.0", path = "contracts/minters/base-minter" } +cosmwasm-schema = "1.5.0" +cosmwasm-std = "1.5.0" +cw-controllers = "1.1.0" +cw2 = "1.1.0" +cw4 = "1.1.0" +cw4-group = "1.1.0" +cw721 = "0.18.0" +cw721-base = "0.18.0" +cw-multi-test = "0.20.0" +cw-storage-plus = "1.2.0" +cw-utils = "1.0.1" +schemars = "0.8.11" +serde = { version = "1.0", default-features = false, features = ["derive"] } +serde_json = "1.0" +sg1 = { version = "3.5.0", path = "packages/sg1" } +sg2 = { version = "3.5.0", path = "packages/sg2" } +sg4 = { version = "3.5.0", path = "packages/sg4" } +sg721 = { version = "3.5.0", path = "packages/sg721" } +sg721-base = { version = "3.5.0", path = "contracts/collections/sg721-base" } +sg721-nt = { version = "3.5.0", path = "contracts/collections/sg721-nt" } +sg721-updatable = { version = "3.5.0", path = "contracts/collections/sg721-updatable" } +sg-controllers = { version = "3.5.0", path = "packages/controllers" } +sg-metadata = { version = "3.5.0", path = "packages/sg-metadata" } +sg-mint-hooks = { version = "3.5.0", path = "packages/mint-hooks" } +sg-multi-test = { version = "3.1.0" } +sg-splits = { version = "3.5.0", path = "contracts/splits" } +sg-std = { version = "3.2.0" } +sg-whitelist = { version = "3.5.0", path = "contracts/whitelists/whitelist" } +thiserror = "1.0.31" +url = "2.2.2" +sha2 = { version = "0.10.2", default-features = false } + +whitelist-mtree = { version = "3.5.0", path = "contracts/whitelists/whitelist-merkletree" } +vending-minter-merkle-wl = { version = "3.5.0", path = "contracts/minters/vending-minter-merkle-wl" } +vending-factory = { version = "3.5.0", path = "contracts/factories/vending-factory" } +vending-minter = { version = "3.5.0", path = "contracts/minters/vending-minter" } +open-edition-factory = { version = "3.5.0", path = "contracts/factories/open-edition-factory" } +open-edition-minter = { version = "3.5.0", path = "contracts/minters/open-edition-minter" } +whitelist-immutable = { version = "3.5.0", path = "contracts/whitelists/whitelist-immutable" } +sg-whitelist-flex = { version = "3.5.0", path = "contracts/whitelists/whitelist-flex" } +ethereum-verify = { version = "3.5.0", path = "packages/ethereum-verify" } +sg-eth-airdrop = { version = "3.5.0", path = "contracts/sg-eth-airdrop" } +test-suite = { version = "3.5.0", path = "test-suite" } + +semver = "1" +cw-ownable = "0.5.1" +anybuf = "0.3.0" [profile.release.package.sg721] codegen-units = 1 diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index d564e99e1..91dc05663 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -2,8 +2,8 @@ use cw721_base::state::TokenInfo; use url::Url; use cosmwasm_std::{ - to_binary, Addr, Binary, ContractInfoResponse, Decimal, Deps, DepsMut, Empty, Env, Event, - MessageInfo, StdError, StdResult, Storage, Timestamp, WasmQuery, + to_json_binary, Addr, Binary, ContractInfoResponse, Decimal, Deps, DepsMut, Empty, Env, Event, + MessageInfo, Response, StdError, StdResult, Storage, Timestamp, WasmQuery, }; use cw721::{ContractInfoResponse as CW721ContractInfoResponse, Cw721Execute}; @@ -14,7 +14,6 @@ use sg721::{ CollectionInfo, ExecuteMsg, InstantiateMsg, RoyaltyInfo, RoyaltyInfoResponse, UpdateCollectionInfoMsg, }; -use sg_std::Response; use crate::msg::{CollectionInfoResponse, NftParams, QueryMsg}; use crate::{ContractError, Sg721Contract}; @@ -358,7 +357,7 @@ where pub fn query(&self, deps: Deps, env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::CollectionInfo {} => to_binary(&self.query_collection_info(deps)?), + QueryMsg::CollectionInfo {} => to_json_binary(&self.query_collection_info(deps)?), _ => self.parent.query(deps, env, msg.into()), } } diff --git a/contracts/collections/sg721-base/src/lib.rs b/contracts/collections/sg721-base/src/lib.rs index bc8f2628a..56e63d706 100644 --- a/contracts/collections/sg721-base/src/lib.rs +++ b/contracts/collections/sg721-base/src/lib.rs @@ -18,11 +18,10 @@ pub mod entry { #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; - use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, StdResult}; + use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; use cw2::set_contract_version; use cw721_base::Extension; use sg721::InstantiateMsg; - use sg_std::Response; // version info for migration info pub const CONTRACT_NAME: &str = "crates.io:sg721-base"; diff --git a/contracts/collections/sg721-base/src/state.rs b/contracts/collections/sg721-base/src/state.rs index 49d87fa23..a3f5eed6c 100644 --- a/contracts/collections/sg721-base/src/state.rs +++ b/contracts/collections/sg721-base/src/state.rs @@ -2,10 +2,10 @@ use cosmwasm_std::{Empty, Timestamp}; use cw_storage_plus::Item; use serde::{de::DeserializeOwned, Serialize}; use sg721::{CollectionInfo, RoyaltyInfo}; -use sg_std::StargazeMsgWrapper; + use std::ops::Deref; -type Parent<'a, T> = cw721_base::Cw721Contract<'a, T, StargazeMsgWrapper, Empty, Empty>; +type Parent<'a, T> = cw721_base::Cw721Contract<'a, T, Empty, Empty, Empty>; pub struct Sg721Contract<'a, T> where T: Serialize + DeserializeOwned + Clone, diff --git a/contracts/collections/sg721-base/src/upgrades/v3_0_0.rs b/contracts/collections/sg721-base/src/upgrades/v3_0_0.rs index 1c3eb7c92..f84165d50 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_0_0.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_0_0.rs @@ -1,8 +1,7 @@ use crate::ContractError; -use cosmwasm_std::{DepsMut, Empty, Env, Event}; +use cosmwasm_std::{DepsMut, Empty, Env, Event, Response}; use cw721_base::Extension; -use sg_std::Response; pub fn upgrade(deps: DepsMut, _env: &Env, response: Response) -> Result { let cw17_res = cw721_base::upgrades::v0_17::migrate::(deps) diff --git a/contracts/collections/sg721-base/src/upgrades/v3_1_0.rs b/contracts/collections/sg721-base/src/upgrades/v3_1_0.rs index 7b1db0344..563ee3f23 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_1_0.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_1_0.rs @@ -1,8 +1,7 @@ use crate::{ContractError, Sg721Contract}; -use cosmwasm_std::{DepsMut, Env, Event}; +use cosmwasm_std::{DepsMut, Env, Event, Response}; use cw721_base::Extension; -use sg_std::Response; pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result { let contract = Sg721Contract::::default(); diff --git a/contracts/collections/sg721-metadata-onchain/src/lib.rs b/contracts/collections/sg721-metadata-onchain/src/lib.rs index e420a03b3..33adf3417 100644 --- a/contracts/collections/sg721-metadata-onchain/src/lib.rs +++ b/contracts/collections/sg721-metadata-onchain/src/lib.rs @@ -20,10 +20,11 @@ pub type Extension = Option; pub mod entry { use super::*; - use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, StdError, StdResult}; + use cosmwasm_std::{ + entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdError, StdResult, + }; use sg721_base::{msg::QueryMsg, ContractError}; - use sg_std::Response; #[entry_point] pub fn instantiate( @@ -93,7 +94,7 @@ mod tests { use cosmwasm_std::testing::{mock_env, mock_info, MockApi, MockQuerier, MockStorage}; use cosmwasm_std::{ - from_slice, to_binary, ContractInfoResponse, ContractResult, Empty, OwnedDeps, Querier, + from_json, to_json_binary, ContractInfoResponse, ContractResult, Empty, OwnedDeps, Querier, QuerierResult, QueryRequest, SystemError, SystemResult, WasmQuery, }; use cw721::Cw721Query; @@ -117,7 +118,7 @@ mod tests { impl Querier for CustomMockQuerier { fn raw_query(&self, bin_request: &[u8]) -> QuerierResult { - let request: QueryRequest = match from_slice(bin_request) { + let request: QueryRequest = match from_json(bin_request) { Ok(v) => v, Err(e) => { return SystemResult::Err(SystemError::InvalidRequest { @@ -138,7 +139,7 @@ mod tests { let mut response = ContractInfoResponse::default(); response.code_id = 1; response.creator = CREATOR.to_string(); - SystemResult::Ok(ContractResult::Ok(to_binary(&response).unwrap())) + SystemResult::Ok(ContractResult::Ok(to_json_binary(&response).unwrap())) } _ => self.base.handle_query(request), } diff --git a/contracts/collections/sg721-nt/src/lib.rs b/contracts/collections/sg721-nt/src/lib.rs index a97887fcf..38228800e 100644 --- a/contracts/collections/sg721-nt/src/lib.rs +++ b/contracts/collections/sg721-nt/src/lib.rs @@ -21,10 +21,11 @@ pub mod entry { use super::*; use crate::msg::ExecuteMsg; - use cosmwasm_std::{Binary, Deps, DepsMut, Empty, Env, MessageInfo, StdError, StdResult}; + use cosmwasm_std::{ + Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdError, StdResult, + }; use cw721::Cw721Execute; use sg721_base::ContractError; - use sg_std::Response; #[entry_point] pub fn instantiate( diff --git a/contracts/collections/sg721-updatable/src/contract.rs b/contracts/collections/sg721-updatable/src/contract.rs index 490a85925..e48cb2e24 100644 --- a/contracts/collections/sg721-updatable/src/contract.rs +++ b/contracts/collections/sg721-updatable/src/contract.rs @@ -1,6 +1,6 @@ use crate::error::ContractError; use crate::state::FROZEN_TOKEN_METADATA; -use cosmwasm_std::{Empty, StdError, Uint128}; +use cosmwasm_std::{Empty, Response, StdError, Uint128}; use cosmwasm_std::{Deps, StdResult}; @@ -20,7 +20,6 @@ use sg1::checked_fair_burn; use sg721_base::ContractError::Unauthorized; use sg721_base::Sg721Contract; pub type Sg721UpdatableContract<'a> = Sg721Contract<'a, Extension>; -use sg_std::Response; const CONTRACT_NAME: &str = "crates.io:sg721-updatable"; const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -235,7 +234,7 @@ mod tests { use crate::msg::ExecuteMsg; use cosmwasm_std::testing::{mock_env, mock_info, MockApi, MockQuerier, MockStorage}; use cosmwasm_std::{ - from_slice, to_binary, ContractInfoResponse, ContractResult, Empty, OwnedDeps, Querier, + from_json, to_json_binary, ContractInfoResponse, ContractResult, Empty, OwnedDeps, Querier, QuerierResult, QueryRequest, SystemError, SystemResult, WasmQuery, }; use cw721::Cw721Query; @@ -260,7 +259,7 @@ mod tests { impl Querier for CustomMockQuerier { fn raw_query(&self, bin_request: &[u8]) -> QuerierResult { - let request: QueryRequest = match from_slice(bin_request) { + let request: QueryRequest = match from_json(bin_request) { Ok(v) => v, Err(e) => { return SystemResult::Err(SystemError::InvalidRequest { @@ -281,7 +280,7 @@ mod tests { let mut response = ContractInfoResponse::default(); response.code_id = 1; response.creator = CREATOR.to_string(); - SystemResult::Ok(ContractResult::Ok(to_binary(&response).unwrap())) + SystemResult::Ok(ContractResult::Ok(to_json_binary(&response).unwrap())) } _ => self.base.handle_query(request), } diff --git a/contracts/collections/sg721-updatable/src/lib.rs b/contracts/collections/sg721-updatable/src/lib.rs index b1c5c7cbc..7d2f9c214 100644 --- a/contracts/collections/sg721-updatable/src/lib.rs +++ b/contracts/collections/sg721-updatable/src/lib.rs @@ -18,12 +18,10 @@ pub mod entry { }, msg::ExecuteMsg, }; - use cosmwasm_std::{entry_point, to_binary, Empty}; - use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, StdResult}; + use cosmwasm_std::{entry_point, to_json_binary, Empty}; + use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; use cw721_base::Extension; - use sg_std::Response; - #[entry_point] pub fn instantiate( deps: DepsMut, @@ -57,9 +55,9 @@ pub mod entry { #[entry_point] pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::EnableUpdatable {} => to_binary(&query_enable_updatable(deps)?), - QueryMsg::EnableUpdatableFee {} => to_binary(&query_enable_updatable_fee()?), - QueryMsg::FreezeTokenMetadata {} => to_binary(&query_frozen_token_metadata(deps)?), + QueryMsg::EnableUpdatable {} => to_json_binary(&query_enable_updatable(deps)?), + QueryMsg::EnableUpdatableFee {} => to_json_binary(&query_enable_updatable_fee()?), + QueryMsg::FreezeTokenMetadata {} => to_json_binary(&query_frozen_token_metadata(deps)?), _ => Sg721UpdatableContract::default().query(deps, env, msg.into()), } } diff --git a/contracts/factories/base-factory/src/contract.rs b/contracts/factories/base-factory/src/contract.rs index 725dd185e..804cd3c8b 100644 --- a/contracts/factories/base-factory/src/contract.rs +++ b/contracts/factories/base-factory/src/contract.rs @@ -1,7 +1,8 @@ #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - ensure, ensure_eq, to_binary, Binary, Deps, DepsMut, Env, MessageInfo, StdResult, WasmMsg, + ensure, ensure_eq, to_json_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, + StdResult, WasmMsg, }; use cw2::set_contract_version; use cw_utils::must_pay; @@ -9,7 +10,7 @@ use sg1::checked_fair_burn; use sg2::msg::UpdateMinterParamsMsg; use sg2::query::{AllowedCollectionCodeIdResponse, AllowedCollectionCodeIdsResponse, Sg2QueryMsg}; use sg2::MinterParams; -use sg_std::{Response, NATIVE_DENOM}; +use sg_std::NATIVE_DENOM; use crate::error::ContractError; use crate::msg::{ @@ -67,7 +68,7 @@ pub fn execute_create_minter( let msg = WasmMsg::Instantiate { admin: Some(info.sender.to_string()), code_id: params.code_id, - msg: to_binary(&msg)?, + msg: to_json_binary(&msg)?, funds: vec![], label: format!( "Minter-{}-{}", @@ -184,12 +185,12 @@ pub fn update_params( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: Sg2QueryMsg) -> StdResult { match msg { - Sg2QueryMsg::Params {} => to_binary(&query_params(deps)?), + Sg2QueryMsg::Params {} => to_json_binary(&query_params(deps)?), Sg2QueryMsg::AllowedCollectionCodeIds {} => { - to_binary(&query_allowed_collection_code_ids(deps)?) + to_json_binary(&query_allowed_collection_code_ids(deps)?) } Sg2QueryMsg::AllowedCollectionCodeId(code_id) => { - to_binary(&query_allowed_collection_code_id(deps, code_id)?) + to_json_binary(&query_allowed_collection_code_id(deps, code_id)?) } } } diff --git a/contracts/factories/base-factory/src/helpers.rs b/contracts/factories/base-factory/src/helpers.rs index 18ceaa70c..84783b3b3 100644 --- a/contracts/factories/base-factory/src/helpers.rs +++ b/contracts/factories/base-factory/src/helpers.rs @@ -1,9 +1,8 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{ - to_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, StdResult, - WasmMsg, WasmQuery, + to_json_binary, Addr, Coin, ContractInfoResponse, CosmosMsg, CustomQuery, Querier, + QuerierWrapper, StdResult, WasmMsg, WasmQuery, }; -use sg_std::CosmosMsg; use crate::msg::ExecuteMsg; @@ -18,7 +17,7 @@ impl FactoryContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, @@ -32,7 +31,7 @@ impl FactoryContract { msg: T, funds: Coin, ) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, diff --git a/contracts/factories/open-edition-factory/src/contract.rs b/contracts/factories/open-edition-factory/src/contract.rs index 5be395cfe..2deb30dd4 100644 --- a/contracts/factories/open-edition-factory/src/contract.rs +++ b/contracts/factories/open-edition-factory/src/contract.rs @@ -1,10 +1,10 @@ #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - ensure, to_binary, Binary, Deps, DepsMut, Env, MessageInfo, StdResult, WasmMsg, + ensure, to_json_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult, WasmMsg, }; use cw2::set_contract_version; -use sg_std::{Response, NATIVE_DENOM}; +use sg_std::NATIVE_DENOM; use base_factory::contract::{ must_be_allowed_collection, must_not_be_frozen, must_pay_exact_amount, update_params, @@ -97,7 +97,7 @@ pub fn execute_create_minter( let wasm_msg = WasmMsg::Instantiate { admin: Some(info.sender.to_string()), code_id: params.code_id, - msg: to_binary(&msg)?, + msg: to_json_binary(&msg)?, funds: vec![], label: format!("OpenEditionMinter-{}", msg.collection_params.name.trim()), }; @@ -157,12 +157,12 @@ pub fn sudo_update_params( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: Sg2QueryMsg) -> StdResult { match msg { - Sg2QueryMsg::Params {} => to_binary(&query_params(deps)?), + Sg2QueryMsg::Params {} => to_json_binary(&query_params(deps)?), Sg2QueryMsg::AllowedCollectionCodeIds {} => { - to_binary(&query_allowed_collection_code_ids(deps)?) + to_json_binary(&query_allowed_collection_code_ids(deps)?) } Sg2QueryMsg::AllowedCollectionCodeId(code_id) => { - to_binary(&query_allowed_collection_code_id(deps, code_id)?) + to_json_binary(&query_allowed_collection_code_id(deps, code_id)?) } } } diff --git a/contracts/factories/open-edition-factory/src/helpers.rs b/contracts/factories/open-edition-factory/src/helpers.rs index 18ceaa70c..476e02d99 100644 --- a/contracts/factories/open-edition-factory/src/helpers.rs +++ b/contracts/factories/open-edition-factory/src/helpers.rs @@ -1,7 +1,7 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{ - to_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, StdResult, - WasmMsg, WasmQuery, + to_json_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, + StdResult, WasmMsg, WasmQuery, }; use sg_std::CosmosMsg; @@ -18,7 +18,7 @@ impl FactoryContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, @@ -32,7 +32,7 @@ impl FactoryContract { msg: T, funds: Coin, ) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, diff --git a/contracts/factories/vending-factory/src/contract.rs b/contracts/factories/vending-factory/src/contract.rs index b37d426cc..8535ff43a 100644 --- a/contracts/factories/vending-factory/src/contract.rs +++ b/contracts/factories/vending-factory/src/contract.rs @@ -3,13 +3,14 @@ use base_factory::ContractError as BaseContractError; #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - ensure, ensure_eq, to_binary, Binary, Deps, DepsMut, Env, MessageInfo, StdResult, WasmMsg, + ensure, ensure_eq, to_json_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, + StdResult, WasmMsg, }; use cw2::set_contract_version; use cw_utils::must_pay; use sg1::checked_fair_burn; use sg2::query::{AllowedCollectionCodeIdResponse, AllowedCollectionCodeIdsResponse, Sg2QueryMsg}; -use sg_std::{Response, NATIVE_DENOM}; +use sg_std::NATIVE_DENOM; use crate::error::ContractError; use crate::msg::{ @@ -98,7 +99,7 @@ pub fn execute_create_minter( let wasm_msg = WasmMsg::Instantiate { admin: Some(info.sender.to_string()), code_id: params.code_id, - msg: to_binary(&msg)?, + msg: to_json_binary(&msg)?, funds: vec![], label: format!("VendingMinter-{}", msg.collection_params.name.trim()), }; @@ -165,12 +166,12 @@ pub fn sudo_update_params( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: Sg2QueryMsg) -> StdResult { match msg { - Sg2QueryMsg::Params {} => to_binary(&query_params(deps)?), + Sg2QueryMsg::Params {} => to_json_binary(&query_params(deps)?), Sg2QueryMsg::AllowedCollectionCodeIds {} => { - to_binary(&query_allowed_collection_code_ids(deps)?) + to_json_binary(&query_allowed_collection_code_ids(deps)?) } Sg2QueryMsg::AllowedCollectionCodeId(code_id) => { - to_binary(&query_allowed_collection_code_id(deps, code_id)?) + to_json_binary(&query_allowed_collection_code_id(deps, code_id)?) } } } diff --git a/contracts/factories/vending-factory/src/helpers.rs b/contracts/factories/vending-factory/src/helpers.rs index 18ceaa70c..84783b3b3 100644 --- a/contracts/factories/vending-factory/src/helpers.rs +++ b/contracts/factories/vending-factory/src/helpers.rs @@ -1,9 +1,8 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{ - to_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, StdResult, - WasmMsg, WasmQuery, + to_json_binary, Addr, Coin, ContractInfoResponse, CosmosMsg, CustomQuery, Querier, + QuerierWrapper, StdResult, WasmMsg, WasmQuery, }; -use sg_std::CosmosMsg; use crate::msg::ExecuteMsg; @@ -18,7 +17,7 @@ impl FactoryContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, @@ -32,7 +31,7 @@ impl FactoryContract { msg: T, funds: Coin, ) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, diff --git a/contracts/minters/base-minter/src/contract.rs b/contracts/minters/base-minter/src/contract.rs index d9e1c9c56..195761eed 100644 --- a/contracts/minters/base-minter/src/contract.rs +++ b/contracts/minters/base-minter/src/contract.rs @@ -6,8 +6,8 @@ use base_factory::state::Extension; #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - to_binary, Addr, Binary, CosmosMsg, Decimal, Deps, DepsMut, Empty, Env, MessageInfo, Reply, - StdResult, Timestamp, WasmMsg, + to_json_binary, Addr, Binary, CosmosMsg, Decimal, Deps, DepsMut, Empty, Env, MessageInfo, + Reply, Response, StdResult, SubMsg, Timestamp, WasmMsg, }; use cw2::set_contract_version; use cw_utils::{must_pay, nonpayable, parse_reply_instantiate_data}; @@ -16,7 +16,7 @@ use sg2::query::Sg2QueryMsg; use sg4::{QueryMsg, Status, StatusResponse, SudoMsg}; use sg721::{ExecuteMsg as Sg721ExecuteMsg, InstantiateMsg as Sg721InstantiateMsg}; use sg721_base::msg::{CollectionInfoResponse, QueryMsg as Sg721QueryMsg}; -use sg_std::{Response, SubMsg, NATIVE_DENOM}; +use sg_std::NATIVE_DENOM; use url::Url; const CONTRACT_NAME: &str = "crates.io:sg-base-minter"; @@ -66,7 +66,7 @@ pub fn instantiate( let wasm_msg = WasmMsg::Instantiate { code_id: msg.collection_params.code_id, - msg: to_binary(&Sg721InstantiateMsg { + msg: to_json_binary(&Sg721InstantiateMsg { name: msg.collection_params.name.clone(), symbol: msg.collection_params.symbol, minter: env.contract.address.to_string(), @@ -160,7 +160,7 @@ pub fn execute_mint_sender( }; let msg = CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: collection_address.to_string(), - msg: to_binary(&mint_msg)?, + msg: to_json_binary(&mint_msg)?, funds: vec![], }); res = res.add_message(msg); @@ -204,7 +204,9 @@ pub fn execute_update_start_trading_time( // execute sg721 contract let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), - msg: to_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime(start_time))?, + msg: to_json_binary( + &Sg721ExecuteMsg::::UpdateStartTradingTime(start_time), + )?, funds: vec![], }; @@ -245,8 +247,8 @@ pub fn update_status( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::Config {} => to_binary(&query_config(deps)?), - QueryMsg::Status {} => to_binary(&query_status(deps)?), + QueryMsg::Config {} => to_json_binary(&query_config(deps)?), + QueryMsg::Status {} => to_json_binary(&query_status(deps)?), } } diff --git a/contracts/minters/base-minter/src/helpers.rs b/contracts/minters/base-minter/src/helpers.rs index 463b56764..5387b1f55 100644 --- a/contracts/minters/base-minter/src/helpers.rs +++ b/contracts/minters/base-minter/src/helpers.rs @@ -1,7 +1,7 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{ - to_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, StdResult, - WasmMsg, WasmQuery, + to_json_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, + StdResult, WasmMsg, WasmQuery, }; use sg_std::CosmosMsg; @@ -18,7 +18,7 @@ impl MinterContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, @@ -32,7 +32,7 @@ impl MinterContract { msg: T, funds: Coin, ) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, diff --git a/contracts/minters/open-edition-minter/src/contract.rs b/contracts/minters/open-edition-minter/src/contract.rs index 92a7fa98e..8c5d645df 100644 --- a/contracts/minters/open-edition-minter/src/contract.rs +++ b/contracts/minters/open-edition-minter/src/contract.rs @@ -11,8 +11,8 @@ use crate::state::{ #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - coin, to_binary, Addr, BankMsg, Binary, Coin, Decimal, Deps, DepsMut, Empty, Env, Event, - MessageInfo, Order, Reply, ReplyOn, StdError, StdResult, Timestamp, WasmMsg, + coin, to_json_binary, Addr, BankMsg, Binary, Coin, Decimal, Deps, DepsMut, Empty, Env, Event, + MessageInfo, Order, Reply, ReplyOn, Response, StdError, StdResult, SubMsg, Timestamp, WasmMsg, }; use cw2::set_contract_version; use cw_utils::{may_pay, maybe_addr, nonpayable, parse_reply_instantiate_data}; @@ -23,12 +23,9 @@ use sg1::{checked_fair_burn, ibc_denom_fair_burn}; use sg2::query::Sg2QueryMsg; use sg4::{Status, StatusResponse, SudoMsg}; use sg721::{ExecuteMsg as Sg721ExecuteMsg, InstantiateMsg as Sg721InstantiateMsg}; -use sg_std::{StargazeMsgWrapper, NATIVE_DENOM}; +use sg_std::NATIVE_DENOM; use url::Url; -pub type Response = cosmwasm_std::Response; -pub type SubMsg = cosmwasm_std::SubMsg; - // version info for migration info const CONTRACT_NAME: &str = "crates.io:sg-open-edition-minter"; const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -141,7 +138,7 @@ pub fn instantiate( let submsg = SubMsg { msg: WasmMsg::Instantiate { code_id: msg.collection_params.code_id, - msg: to_binary(&Sg721InstantiateMsg { + msg: to_json_binary(&Sg721InstantiateMsg { name: msg.collection_params.name.clone(), symbol: msg.collection_params.symbol, minter: env.contract.address.to_string(), @@ -602,7 +599,7 @@ pub fn execute_update_start_trading_time( // execute sg721 contract let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), - msg: to_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( + msg: to_json_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( start_time, ))?, funds: vec![], @@ -746,14 +743,16 @@ pub fn update_status( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::Config {} => to_binary(&query_config(deps)?), - QueryMsg::Status {} => to_binary(&query_status(deps)?), - QueryMsg::StartTime {} => to_binary(&query_start_time(deps)?), - QueryMsg::EndTime {} => to_binary(&query_end_time(deps)?), - QueryMsg::MintPrice {} => to_binary(&query_mint_price(deps)?), - QueryMsg::MintCount { address } => to_binary(&query_mint_count_per_address(deps, address)?), - QueryMsg::TotalMintCount {} => to_binary(&query_mint_count(deps)?), - QueryMsg::MintableNumTokens {} => to_binary(&query_mintable_num_tokens(deps)?), + QueryMsg::Config {} => to_json_binary(&query_config(deps)?), + QueryMsg::Status {} => to_json_binary(&query_status(deps)?), + QueryMsg::StartTime {} => to_json_binary(&query_start_time(deps)?), + QueryMsg::EndTime {} => to_json_binary(&query_end_time(deps)?), + QueryMsg::MintPrice {} => to_json_binary(&query_mint_price(deps)?), + QueryMsg::MintCount { address } => { + to_json_binary(&query_mint_count_per_address(deps, address)?) + } + QueryMsg::TotalMintCount {} => to_json_binary(&query_mint_count(deps)?), + QueryMsg::MintableNumTokens {} => to_json_binary(&query_mintable_num_tokens(deps)?), } } diff --git a/contracts/minters/open-edition-minter/src/helpers.rs b/contracts/minters/open-edition-minter/src/helpers.rs index 53a35aee8..f8773d74a 100644 --- a/contracts/minters/open-edition-minter/src/helpers.rs +++ b/contracts/minters/open-edition-minter/src/helpers.rs @@ -1,12 +1,11 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{ - to_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Empty, Querier, QuerierWrapper, - StdError, StdResult, WasmMsg, WasmQuery, + to_json_binary, Addr, Coin, ContractInfoResponse, CosmosMsg, CustomQuery, Empty, Querier, + QuerierWrapper, StdError, StdResult, WasmMsg, WasmQuery, }; use cw721_base::Extension; use sg721::ExecuteMsg as Sg721ExecuteMsg; use sg_metadata::Metadata; -use sg_std::CosmosMsg; use crate::msg::{ConfigResponse, ExecuteMsg, QueryMsg}; @@ -21,7 +20,7 @@ impl MinterContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, @@ -35,7 +34,7 @@ impl MinterContract { msg: T, funds: Coin, ) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, @@ -74,7 +73,7 @@ pub fn mint_nft_msg( let mint_msg = if let Some(extension) = extension { CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: sg721_address.to_string(), - msg: to_binary(&Sg721ExecuteMsg::::Mint { + msg: to_json_binary(&Sg721ExecuteMsg::::Mint { token_id, owner: recipient_addr.to_string(), token_uri: None, @@ -85,7 +84,7 @@ pub fn mint_nft_msg( } else { CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: sg721_address.to_string(), - msg: to_binary(&Sg721ExecuteMsg::::Mint { + msg: to_json_binary(&Sg721ExecuteMsg::::Mint { token_id, owner: recipient_addr.to_string(), token_uri, diff --git a/contracts/minters/vending-minter-merkle-wl/src/contract.rs b/contracts/minters/vending-minter-merkle-wl/src/contract.rs index a7cc76a82..b763a1ceb 100644 --- a/contracts/minters/vending-minter-merkle-wl/src/contract.rs +++ b/contracts/minters/vending-minter-merkle-wl/src/contract.rs @@ -11,9 +11,9 @@ use crate::validation::{check_dynamic_per_address_limit, get_three_percent_of_to #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - coin, ensure, to_binary, Addr, BankMsg, Binary, Coin, CosmosMsg, Decimal, Deps, DepsMut, Empty, - Env, Event, MessageInfo, Order, Reply, ReplyOn, StdError, StdResult, Timestamp, Uint128, - WasmMsg, + coin, ensure, to_json_binary, Addr, BankMsg, Binary, Coin, CosmosMsg, Decimal, Deps, DepsMut, + Empty, Env, Event, MessageInfo, Order, Reply, ReplyOn, Response, StdError, StdResult, SubMsg, + Timestamp, Uint128, WasmMsg, }; use cw2::set_contract_version; use cw721_base::Extension; @@ -25,7 +25,7 @@ use sg1::{checked_fair_burn, ibc_denom_fair_burn}; use sg2::query::Sg2QueryMsg; use sg4::{MinterConfig, Status, StatusResponse, SudoMsg}; use sg721::{ExecuteMsg as Sg721ExecuteMsg, InstantiateMsg as Sg721InstantiateMsg}; -use sg_std::{StargazeMsgWrapper, GENESIS_MINT_START_TIME, NATIVE_DENOM}; +use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use sg_whitelist::msg::{ ConfigResponse as WhitelistConfigResponse, HasMemberResponse, QueryMsg as WhitelistQueryMsg, }; @@ -37,9 +37,6 @@ use vending_factory::msg::{ParamsResponse, VendingMinterCreateMsg}; use vending_factory::state::VendingMinterParams; use whitelist_mtree::msg::QueryMsg as WhitelistMtreeQueryMsg; -pub type Response = cosmwasm_std::Response; -pub type SubMsg = cosmwasm_std::SubMsg; - pub struct TokenPositionMapping { pub position: u32, pub token_id: u32, @@ -183,7 +180,7 @@ pub fn instantiate( let submsg = SubMsg { msg: WasmMsg::Instantiate { code_id: msg.collection_params.code_id, - msg: to_binary(&Sg721InstantiateMsg { + msg: to_json_binary(&Sg721InstantiateMsg { name: msg.collection_params.name.clone(), symbol: msg.collection_params.symbol, minter: env.contract.address.to_string(), @@ -717,7 +714,7 @@ fn _execute_mint( }; let msg = CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: sg721_address.to_string(), - msg: to_binary(&mint_msg)?, + msg: to_json_binary(&mint_msg)?, funds: vec![], }); res = res.add_message(msg); @@ -950,7 +947,7 @@ pub fn execute_update_start_trading_time( // execute sg721 contract let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), - msg: to_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( + msg: to_json_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( start_time, ))?, funds: vec![], @@ -1140,12 +1137,12 @@ pub fn update_status( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::Config {} => to_binary(&query_config(deps)?), - QueryMsg::Status {} => to_binary(&query_status(deps)?), - QueryMsg::StartTime {} => to_binary(&query_start_time(deps)?), - QueryMsg::MintableNumTokens {} => to_binary(&query_mintable_num_tokens(deps)?), - QueryMsg::MintPrice {} => to_binary(&query_mint_price(deps)?), - QueryMsg::MintCount { address } => to_binary(&query_mint_count(deps, address)?), + QueryMsg::Config {} => to_json_binary(&query_config(deps)?), + QueryMsg::Status {} => to_json_binary(&query_status(deps)?), + QueryMsg::StartTime {} => to_json_binary(&query_start_time(deps)?), + QueryMsg::MintableNumTokens {} => to_json_binary(&query_mintable_num_tokens(deps)?), + QueryMsg::MintPrice {} => to_json_binary(&query_mint_price(deps)?), + QueryMsg::MintCount { address } => to_json_binary(&query_mint_count(deps, address)?), } } diff --git a/contracts/minters/vending-minter-merkle-wl/src/helpers.rs b/contracts/minters/vending-minter-merkle-wl/src/helpers.rs index 173587cb6..78c7ea196 100644 --- a/contracts/minters/vending-minter-merkle-wl/src/helpers.rs +++ b/contracts/minters/vending-minter-merkle-wl/src/helpers.rs @@ -1,7 +1,7 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{ - to_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, StdResult, - WasmMsg, WasmQuery, + to_json_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, + StdResult, WasmMsg, WasmQuery, }; use sg_std::CosmosMsg; @@ -18,7 +18,7 @@ impl MinterContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, @@ -32,7 +32,7 @@ impl MinterContract { msg: T, funds: Coin, ) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, diff --git a/contracts/minters/vending-minter-wl-flex/src/contract.rs b/contracts/minters/vending-minter-wl-flex/src/contract.rs index 71b799771..f6201ae51 100644 --- a/contracts/minters/vending-minter-wl-flex/src/contract.rs +++ b/contracts/minters/vending-minter-wl-flex/src/contract.rs @@ -10,9 +10,9 @@ use crate::state::{ #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - coin, ensure, to_binary, Addr, BankMsg, Binary, Coin, CosmosMsg, Decimal, Deps, DepsMut, Empty, - Env, Event, MessageInfo, Order, Reply, ReplyOn, StdError, StdResult, Timestamp, Uint128, - WasmMsg, + coin, ensure, to_json_binary, Addr, BankMsg, Binary, Coin, CosmosMsg, Decimal, Deps, DepsMut, + Empty, Env, Event, MessageInfo, Order, Reply, ReplyOn, Response, StdError, StdResult, SubMsg, + Timestamp, Uint128, WasmMsg, }; use cw2::set_contract_version; use cw721_base::Extension; @@ -24,7 +24,7 @@ use sg1::{checked_fair_burn, ibc_denom_fair_burn}; use sg2::query::Sg2QueryMsg; use sg4::{MinterConfig, Status, StatusResponse, SudoMsg}; use sg721::{ExecuteMsg as Sg721ExecuteMsg, InstantiateMsg as Sg721InstantiateMsg}; -use sg_std::{StargazeMsgWrapper, GENESIS_MINT_START_TIME, NATIVE_DENOM}; +use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use sg_whitelist_flex::msg::{ ConfigResponse as WhitelistConfigResponse, HasMemberResponse, Member, QueryMsg as WhitelistQueryMsg, @@ -37,9 +37,6 @@ use url::Url; use vending_factory::msg::{ParamsResponse, VendingMinterCreateMsg}; use vending_factory::state::VendingMinterParams; -pub type Response = cosmwasm_std::Response; -pub type SubMsg = cosmwasm_std::SubMsg; - pub struct TokenPositionMapping { pub position: u32, pub token_id: u32, @@ -168,7 +165,7 @@ pub fn instantiate( let submsg = SubMsg { msg: WasmMsg::Instantiate { code_id: msg.collection_params.code_id, - msg: to_binary(&Sg721InstantiateMsg { + msg: to_json_binary(&Sg721InstantiateMsg { name: msg.collection_params.name.clone(), symbol: msg.collection_params.symbol, minter: env.contract.address.to_string(), @@ -687,7 +684,7 @@ fn _execute_mint( }; let msg = CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: sg721_address.to_string(), - msg: to_binary(&mint_msg)?, + msg: to_json_binary(&mint_msg)?, funds: vec![], }); res = res.add_message(msg); @@ -926,7 +923,7 @@ pub fn execute_update_start_trading_time( // execute sg721 contract let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), - msg: to_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( + msg: to_json_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( start_time, ))?, funds: vec![], @@ -1102,12 +1099,12 @@ pub fn update_status( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::Config {} => to_binary(&query_config(deps)?), - QueryMsg::Status {} => to_binary(&query_status(deps)?), - QueryMsg::StartTime {} => to_binary(&query_start_time(deps)?), - QueryMsg::MintableNumTokens {} => to_binary(&query_mintable_num_tokens(deps)?), - QueryMsg::MintPrice {} => to_binary(&query_mint_price(deps)?), - QueryMsg::MintCount { address } => to_binary(&query_mint_count(deps, address)?), + QueryMsg::Config {} => to_json_binary(&query_config(deps)?), + QueryMsg::Status {} => to_json_binary(&query_status(deps)?), + QueryMsg::StartTime {} => to_json_binary(&query_start_time(deps)?), + QueryMsg::MintableNumTokens {} => to_json_binary(&query_mintable_num_tokens(deps)?), + QueryMsg::MintPrice {} => to_json_binary(&query_mint_price(deps)?), + QueryMsg::MintCount { address } => to_json_binary(&query_mint_count(deps, address)?), } } diff --git a/contracts/minters/vending-minter-wl-flex/src/helpers.rs b/contracts/minters/vending-minter-wl-flex/src/helpers.rs index 173587cb6..78c7ea196 100644 --- a/contracts/minters/vending-minter-wl-flex/src/helpers.rs +++ b/contracts/minters/vending-minter-wl-flex/src/helpers.rs @@ -1,7 +1,7 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{ - to_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, StdResult, - WasmMsg, WasmQuery, + to_json_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, + StdResult, WasmMsg, WasmQuery, }; use sg_std::CosmosMsg; @@ -18,7 +18,7 @@ impl MinterContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, @@ -32,7 +32,7 @@ impl MinterContract { msg: T, funds: Coin, ) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, diff --git a/contracts/minters/vending-minter/Cargo.toml b/contracts/minters/vending-minter/Cargo.toml index f6058766a..9270df030 100644 --- a/contracts/minters/vending-minter/Cargo.toml +++ b/contracts/minters/vending-minter/Cargo.toml @@ -30,7 +30,7 @@ library = [] [dependencies] cosmwasm-schema = { workspace = true } -cosmwasm-std = { workspace = true } +cosmwasm-std = { workspace = true, features = ["cosmwasm_1_4"] } cw2 = { workspace = true } cw721 = { workspace = true } cw721-base = { workspace = true, features = ["library"] } @@ -51,4 +51,4 @@ sg-whitelist = { workspace = true, features = ["library"] } thiserror = { workspace = true } url = { workspace = true } vending-factory = { workspace = true, features = ["library"] } -semver = {workspace = true } +semver = { workspace = true } diff --git a/contracts/minters/vending-minter/src/contract.rs b/contracts/minters/vending-minter/src/contract.rs index c6fdb4fbf..09dd34006 100644 --- a/contracts/minters/vending-minter/src/contract.rs +++ b/contracts/minters/vending-minter/src/contract.rs @@ -11,9 +11,9 @@ use crate::validation::{check_dynamic_per_address_limit, get_three_percent_of_to #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - coin, ensure, to_binary, Addr, BankMsg, Binary, Coin, CosmosMsg, Decimal, Deps, DepsMut, Empty, - Env, Event, MessageInfo, Order, Reply, ReplyOn, StdError, StdResult, Timestamp, Uint128, - WasmMsg, + coin, ensure, to_json_binary, Addr, BankMsg, Binary, Coin, CosmosMsg, Decimal, Deps, DepsMut, + Empty, Env, Event, MessageInfo, Order, Reply, ReplyOn, Response, StdError, StdResult, SubMsg, + Timestamp, Uint128, WasmMsg, }; use cw2::set_contract_version; use cw721_base::Extension; @@ -25,7 +25,7 @@ use sg1::{checked_fair_burn, ibc_denom_fair_burn}; use sg2::query::Sg2QueryMsg; use sg4::{MinterConfig, Status, StatusResponse, SudoMsg}; use sg721::{ExecuteMsg as Sg721ExecuteMsg, InstantiateMsg as Sg721InstantiateMsg}; -use sg_std::{StargazeMsgWrapper, GENESIS_MINT_START_TIME, NATIVE_DENOM}; +use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use sg_whitelist::msg::{ ConfigResponse as WhitelistConfigResponse, HasMemberResponse, QueryMsg as WhitelistQueryMsg, }; @@ -36,9 +36,6 @@ use url::Url; use vending_factory::msg::{ParamsResponse, VendingMinterCreateMsg}; use vending_factory::state::VendingMinterParams; -pub type Response = cosmwasm_std::Response; -pub type SubMsg = cosmwasm_std::SubMsg; - pub struct TokenPositionMapping { pub position: u32, pub token_id: u32, @@ -182,7 +179,7 @@ pub fn instantiate( let submsg = SubMsg { msg: WasmMsg::Instantiate { code_id: msg.collection_params.code_id, - msg: to_binary(&Sg721InstantiateMsg { + msg: to_json_binary(&Sg721InstantiateMsg { name: msg.collection_params.name.clone(), symbol: msg.collection_params.symbol, minter: env.contract.address.to_string(), @@ -694,7 +691,7 @@ fn _execute_mint( }; let msg = CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: sg721_address.to_string(), - msg: to_binary(&mint_msg)?, + msg: to_json_binary(&mint_msg)?, funds: vec![], }); res = res.add_message(msg); @@ -927,7 +924,7 @@ pub fn execute_update_start_trading_time( // execute sg721 contract let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), - msg: to_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( + msg: to_json_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( start_time, ))?, funds: vec![], @@ -1117,12 +1114,12 @@ pub fn update_status( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::Config {} => to_binary(&query_config(deps)?), - QueryMsg::Status {} => to_binary(&query_status(deps)?), - QueryMsg::StartTime {} => to_binary(&query_start_time(deps)?), - QueryMsg::MintableNumTokens {} => to_binary(&query_mintable_num_tokens(deps)?), - QueryMsg::MintPrice {} => to_binary(&query_mint_price(deps)?), - QueryMsg::MintCount { address } => to_binary(&query_mint_count(deps, address)?), + QueryMsg::Config {} => to_json_binary(&query_config(deps)?), + QueryMsg::Status {} => to_json_binary(&query_status(deps)?), + QueryMsg::StartTime {} => to_json_binary(&query_start_time(deps)?), + QueryMsg::MintableNumTokens {} => to_json_binary(&query_mintable_num_tokens(deps)?), + QueryMsg::MintPrice {} => to_json_binary(&query_mint_price(deps)?), + QueryMsg::MintCount { address } => to_json_binary(&query_mint_count(deps, address)?), } } diff --git a/contracts/minters/vending-minter/src/helpers.rs b/contracts/minters/vending-minter/src/helpers.rs index 173587cb6..78c7ea196 100644 --- a/contracts/minters/vending-minter/src/helpers.rs +++ b/contracts/minters/vending-minter/src/helpers.rs @@ -1,7 +1,7 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{ - to_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, StdResult, - WasmMsg, WasmQuery, + to_json_binary, Addr, Coin, ContractInfoResponse, CustomQuery, Querier, QuerierWrapper, + StdResult, WasmMsg, WasmQuery, }; use sg_std::CosmosMsg; @@ -18,7 +18,7 @@ impl MinterContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, @@ -32,7 +32,7 @@ impl MinterContract { msg: T, funds: Coin, ) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, diff --git a/contracts/sg-eth-airdrop/src/claim_airdrop.rs b/contracts/sg-eth-airdrop/src/claim_airdrop.rs index 7ac8d199a..f48e6938a 100644 --- a/contracts/sg-eth-airdrop/src/claim_airdrop.rs +++ b/contracts/sg-eth-airdrop/src/claim_airdrop.rs @@ -3,10 +3,9 @@ use crate::state::ADDRS_TO_MINT_COUNT; use crate::{state::CONFIG, ContractError}; use build_messages::claim_and_whitelist_add; use cosmwasm_std::DepsMut; -use cosmwasm_std::{coins, Addr, BankMsg, StdResult}; +use cosmwasm_std::{coins, Addr, BankMsg, CosmosMsg, Response, StdResult, SubMsg}; use cosmwasm_std::{Env, MessageInfo}; -use sg_std::Response; -use sg_std::{CosmosMsg, SubMsg}; + use sg_whitelist::msg::ExecuteMsg as CollectionWhitelistExecuteMsg; use sg_whitelist::{helpers::interface::CollectionWhitelistContract, msg::AddMembersMsg}; use validation::validate_claim; diff --git a/contracts/sg-eth-airdrop/src/contract.rs b/contracts/sg-eth-airdrop/src/contract.rs index 9e78689ed..c23b6c57c 100644 --- a/contracts/sg-eth-airdrop/src/contract.rs +++ b/contracts/sg-eth-airdrop/src/contract.rs @@ -5,10 +5,9 @@ use crate::msg::{ExecuteMsg, InstantiateMsg}; use crate::state::CONFIG; use cosmwasm_std::entry_point; -use cosmwasm_std::{DepsMut, Env, MessageInfo}; +use cosmwasm_std::{DepsMut, Env, MessageInfo, Response}; use cw2::set_contract_version; use sg1::fair_burn; -use sg_std::Response; use build_message::{state_config, whitelist_instantiate}; use validation::validate_instantiation_params; @@ -27,7 +26,12 @@ pub fn instantiate( set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; validate_instantiation_params(info.clone(), msg.clone())?; let mut res = Response::new(); - fair_burn(INSTANTIATION_FEE, None, &mut res); + fair_burn( + env.contract.address.to_string(), + INSTANTIATION_FEE, + None, + &mut res, + ); let cfg = state_config(deps.as_ref(), info.clone(), msg.clone())?; CONFIG.save(deps.storage, &cfg)?; Ok(res @@ -56,18 +60,15 @@ pub fn execute( mod build_message { use super::*; use crate::state::Config; - use cosmwasm_std::{to_binary, Deps, WasmMsg}; - use sg_std::{StargazeMsgWrapper, SubMsg}; + use cosmwasm_std::{to_json_binary, Deps, SubMsg, WasmMsg}; + use validation::validate_airdrop_amount; use whitelist_immutable::msg::InstantiateMsg as WGInstantiateMsg; pub const GENERIC_WHITELIST_LABEL: &str = "Generic Whitelist for Airdrop"; pub const INIT_WHITELIST_REPLY_ID: u64 = 1; - pub fn whitelist_instantiate( - env: Env, - msg: InstantiateMsg, - ) -> Result, ContractError> { + pub fn whitelist_instantiate(env: Env, msg: InstantiateMsg) -> Result { let whitelist_instantiate_msg = WGInstantiateMsg { addresses: msg.addresses, mint_discount_bps: Some(0), @@ -78,7 +79,7 @@ mod build_message { admin: Some(env.contract.address.to_string()), funds: vec![], label: GENERIC_WHITELIST_LABEL.to_string(), - msg: to_binary(&whitelist_instantiate_msg)?, + msg: to_json_binary(&whitelist_instantiate_msg)?, }; Ok(SubMsg::reply_on_success(wasm_msg, INIT_WHITELIST_REPLY_ID)) } diff --git a/contracts/sg-eth-airdrop/src/query.rs b/contracts/sg-eth-airdrop/src/query.rs index c3b50fcd1..d36a1aced 100644 --- a/contracts/sg-eth-airdrop/src/query.rs +++ b/contracts/sg-eth-airdrop/src/query.rs @@ -1,5 +1,5 @@ use crate::{msg::QueryMsg, state::CONFIG, ContractError}; -use cosmwasm_std::{entry_point, to_binary, Binary}; +use cosmwasm_std::{entry_point, to_json_binary, Binary}; use cosmwasm_std::{Addr, Env}; use cosmwasm_std::{Deps, DepsMut, StdResult}; use vending_minter::helpers::MinterContract; @@ -9,9 +9,9 @@ use whitelist_immutable::helpers::WhitelistImmutableContract; pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { QueryMsg::AirdropEligible { eth_address } => { - to_binary(&query_airdrop_is_eligible(deps, eth_address)?) + to_json_binary(&query_airdrop_is_eligible(deps, eth_address)?) } - QueryMsg::GetMinter {} => to_binary(&query_minter(deps)?), + QueryMsg::GetMinter {} => to_json_binary(&query_minter(deps)?), } } diff --git a/contracts/sg-eth-airdrop/src/reply.rs b/contracts/sg-eth-airdrop/src/reply.rs index 90f98d77b..30d7f5d64 100644 --- a/contracts/sg-eth-airdrop/src/reply.rs +++ b/contracts/sg-eth-airdrop/src/reply.rs @@ -2,9 +2,8 @@ use crate::error::ContractError; use crate::state::CONFIG; use cosmwasm_std::entry_point; -use cosmwasm_std::{DepsMut, Env, Reply}; +use cosmwasm_std::{DepsMut, Env, Reply, Response}; use cw_utils::{parse_reply_instantiate_data, MsgInstantiateContractResponse, ParseReplyError}; -use sg_std::Response; const INIT_WHITELIST_REPLY_ID: u64 = 1; diff --git a/contracts/splits/src/contract.rs b/contracts/splits/src/contract.rs index 01f57dd83..f95a23c31 100644 --- a/contracts/splits/src/contract.rs +++ b/contracts/splits/src/contract.rs @@ -1,7 +1,7 @@ #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - coins, to_binary, Addr, BankMsg, Binary, Deps, DepsMut, Env, MessageInfo, Reply, Response, + coins, to_json_binary, Addr, BankMsg, Binary, Deps, DepsMut, Env, MessageInfo, Reply, Response, StdResult, SubMsg, Uint128, }; use cw2::set_contract_version; @@ -160,12 +160,12 @@ fn can_distribute(deps: Deps, info: MessageInfo) -> StdResult { #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::Admin {} => to_binary(&ADMIN.query_admin(deps)?), - QueryMsg::Group {} => to_binary(&query_group(deps)?), + QueryMsg::Admin {} => to_json_binary(&ADMIN.query_admin(deps)?), + QueryMsg::Group {} => to_json_binary(&query_group(deps)?), QueryMsg::ListMembers { start_after, limit } => { - to_binary(&list_members(deps, start_after, limit)?) + to_json_binary(&list_members(deps, start_after, limit)?) } - QueryMsg::Member { address } => to_binary(&query_member(deps, address)?), + QueryMsg::Member { address } => to_json_binary(&query_member(deps, address)?), } } diff --git a/contracts/splits/src/helpers.rs b/contracts/splits/src/helpers.rs index b2f31bb66..e5c55e997 100644 --- a/contracts/splits/src/helpers.rs +++ b/contracts/splits/src/helpers.rs @@ -2,7 +2,8 @@ use cosmwasm_schema::cw_serde; use cw4::MemberListResponse; use cosmwasm_std::{ - to_binary, Addr, CosmosMsg, CustomQuery, Querier, QuerierWrapper, StdResult, WasmMsg, WasmQuery, + to_json_binary, Addr, CosmosMsg, CustomQuery, Querier, QuerierWrapper, StdResult, WasmMsg, + WasmQuery, }; use crate::msg::{ExecuteMsg, QueryMsg}; @@ -18,7 +19,7 @@ impl SplitsContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, @@ -39,7 +40,7 @@ impl SplitsContract { }; let query = WasmQuery::Smart { contract_addr: self.addr().into(), - msg: to_binary(&msg)?, + msg: to_json_binary(&msg)?, } .into(); let res: MemberListResponse = QuerierWrapper::::new(querier).query(&query)?; diff --git a/contracts/whitelists/whitelist-flex/schema/sg-whitelist-flex.json b/contracts/whitelists/whitelist-flex/schema/sg-whitelist-flex.json index 57aa6d7e2..0a715ef6b 100644 --- a/contracts/whitelists/whitelist-flex/schema/sg-whitelist-flex.json +++ b/contracts/whitelists/whitelist-flex/schema/sg-whitelist-flex.json @@ -543,6 +543,43 @@ }, "additionalProperties": false }, + { + "description": "A Stargate message encoded the same way as a protobuf [Any](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). This is the same structure as messages in `TxBody` from [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-020-protobuf-transaction-encoding.md)", + "type": "object", + "required": [ + "stargate" + ], + "properties": { + "stargate": { + "type": "object", + "required": [ + "type_url", + "value" + ], + "properties": { + "type_url": { + "type": "string" + }, + "value": { + "$ref": "#/definitions/Binary" + } + } + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "ibc" + ], + "properties": { + "ibc": { + "$ref": "#/definitions/IbcMsg" + } + }, + "additionalProperties": false + }, { "type": "object", "required": [ @@ -554,6 +591,18 @@ } }, "additionalProperties": false + }, + { + "type": "object", + "required": [ + "gov" + ], + "properties": { + "gov": { + "$ref": "#/definitions/GovMsg" + } + }, + "additionalProperties": false } ] }, @@ -561,10 +610,221 @@ "description": "An empty struct that serves as a placeholder in different places, such as contracts that don't set a custom message.\n\nIt is designed to be expressable in correct JSON and JSON Schema but contains no meaningful data. Previously we used enums without cases, but those cannot represented as valid JSON Schema (https://github.com/CosmWasm/cosmwasm/issues/451)", "type": "object" }, + "GovMsg": { + "description": "This message type allows the contract interact with the [x/gov] module in order to cast votes.\n\n[x/gov]: https://github.com/cosmos/cosmos-sdk/tree/v0.45.12/x/gov\n\n## Examples\n\nCast a simple vote:\n\n``` # use cosmwasm_std::{ # HexBinary, # Storage, Api, Querier, DepsMut, Deps, entry_point, Env, StdError, MessageInfo, # Response, QueryResponse, # }; # type ExecuteMsg = (); use cosmwasm_std::{GovMsg, VoteOption};\n\n#[entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // ... Ok(Response::new().add_message(GovMsg::Vote { proposal_id: 4, vote: VoteOption::Yes, })) } ```\n\nCast a weighted vote:\n\n``` # use cosmwasm_std::{ # HexBinary, # Storage, Api, Querier, DepsMut, Deps, entry_point, Env, StdError, MessageInfo, # Response, QueryResponse, # }; # type ExecuteMsg = (); # #[cfg(feature = \"cosmwasm_1_2\")] use cosmwasm_std::{Decimal, GovMsg, VoteOption, WeightedVoteOption};\n\n# #[cfg(feature = \"cosmwasm_1_2\")] #[entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // ... Ok(Response::new().add_message(GovMsg::VoteWeighted { proposal_id: 4, options: vec![ WeightedVoteOption { option: VoteOption::Yes, weight: Decimal::percent(65), }, WeightedVoteOption { option: VoteOption::Abstain, weight: Decimal::percent(35), }, ], })) } ```", + "oneOf": [ + { + "description": "This maps directly to [MsgVote](https://github.com/cosmos/cosmos-sdk/blob/v0.42.5/proto/cosmos/gov/v1beta1/tx.proto#L46-L56) in the Cosmos SDK with voter set to the contract address.", + "type": "object", + "required": [ + "vote" + ], + "properties": { + "vote": { + "type": "object", + "required": [ + "proposal_id", + "vote" + ], + "properties": { + "proposal_id": { + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "vote": { + "description": "The vote option.\n\nThis should be called \"option\" for consistency with Cosmos SDK. Sorry for that. See .", + "allOf": [ + { + "$ref": "#/definitions/VoteOption" + } + ] + } + } + } + }, + "additionalProperties": false + } + ] + }, + "IbcMsg": { + "description": "These are messages in the IBC lifecycle. Only usable by IBC-enabled contracts (contracts that directly speak the IBC protocol via 6 entry points)", + "oneOf": [ + { + "description": "Sends bank tokens owned by the contract to the given address on another chain. The channel must already be established between the ibctransfer module on this chain and a matching module on the remote chain. We cannot select the port_id, this is whatever the local chain has bound the ibctransfer module to.", + "type": "object", + "required": [ + "transfer" + ], + "properties": { + "transfer": { + "type": "object", + "required": [ + "amount", + "channel_id", + "timeout", + "to_address" + ], + "properties": { + "amount": { + "description": "packet data only supports one coin https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/proto/ibc/applications/transfer/v1/transfer.proto#L11-L20", + "allOf": [ + { + "$ref": "#/definitions/Coin" + } + ] + }, + "channel_id": { + "description": "existing channel to send the tokens over", + "type": "string" + }, + "timeout": { + "description": "when packet times out, measured on remote chain", + "allOf": [ + { + "$ref": "#/definitions/IbcTimeout" + } + ] + }, + "to_address": { + "description": "address on the remote chain to receive these tokens", + "type": "string" + } + } + } + }, + "additionalProperties": false + }, + { + "description": "Sends an IBC packet with given data over the existing channel. Data should be encoded in a format defined by the channel version, and the module on the other side should know how to parse this.", + "type": "object", + "required": [ + "send_packet" + ], + "properties": { + "send_packet": { + "type": "object", + "required": [ + "channel_id", + "data", + "timeout" + ], + "properties": { + "channel_id": { + "type": "string" + }, + "data": { + "$ref": "#/definitions/Binary" + }, + "timeout": { + "description": "when packet times out, measured on remote chain", + "allOf": [ + { + "$ref": "#/definitions/IbcTimeout" + } + ] + } + } + } + }, + "additionalProperties": false + }, + { + "description": "This will close an existing channel that is owned by this contract. Port is auto-assigned to the contract's IBC port", + "type": "object", + "required": [ + "close_channel" + ], + "properties": { + "close_channel": { + "type": "object", + "required": [ + "channel_id" + ], + "properties": { + "channel_id": { + "type": "string" + } + } + } + }, + "additionalProperties": false + } + ] + }, + "IbcTimeout": { + "description": "In IBC each package must set at least one type of timeout: the timestamp or the block height. Using this rather complex enum instead of two timeout fields we ensure that at least one timeout is set.", + "type": "object", + "properties": { + "block": { + "anyOf": [ + { + "$ref": "#/definitions/IbcTimeoutBlock" + }, + { + "type": "null" + } + ] + }, + "timestamp": { + "anyOf": [ + { + "$ref": "#/definitions/Timestamp" + }, + { + "type": "null" + } + ] + } + } + }, + "IbcTimeoutBlock": { + "description": "IBCTimeoutHeight Height is a monotonically increasing data type that can be compared against another Height for the purposes of updating and freezing clients. Ordering is (revision_number, timeout_height)", + "type": "object", + "required": [ + "height", + "revision" + ], + "properties": { + "height": { + "description": "block height after which the packet times out. the height within the given revision", + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "revision": { + "description": "the version that the client is currently on (e.g. after resetting the chain this could increment 1 as height drops to 0)", + "type": "integer", + "format": "uint64", + "minimum": 0.0 + } + } + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, "Uint128": { "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", "type": "string" }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + }, + "VoteOption": { + "type": "string", + "enum": [ + "yes", + "no", + "abstain", + "no_with_veto" + ] + }, "WasmMsg": { "description": "The message types of the wasm module.\n\nSee https://github.com/CosmWasm/wasmd/blob/v0.14.0/x/wasm/internal/types/tx.proto", "oneOf": [ diff --git a/contracts/whitelists/whitelist-flex/src/admin.rs b/contracts/whitelists/whitelist-flex/src/admin.rs index f4c065b9f..885b8f83c 100644 --- a/contracts/whitelists/whitelist-flex/src/admin.rs +++ b/contracts/whitelists/whitelist-flex/src/admin.rs @@ -1,5 +1,4 @@ -use cosmwasm_std::{Addr, Deps, DepsMut, Env, MessageInfo, StdResult}; -use sg_std::Response; +use cosmwasm_std::{Addr, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; use crate::{ helpers::validators::map_validate, diff --git a/contracts/whitelists/whitelist-flex/src/contract.rs b/contracts/whitelists/whitelist-flex/src/contract.rs index e1fb7a0da..0c356ceb5 100644 --- a/contracts/whitelists/whitelist-flex/src/contract.rs +++ b/contracts/whitelists/whitelist-flex/src/contract.rs @@ -11,7 +11,9 @@ use crate::msg::{ use crate::state::{AdminList, Config, ADMIN_LIST, CONFIG, WHITELIST}; #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; -use cosmwasm_std::{ensure, to_binary, Binary, Deps, DepsMut, Env, MessageInfo, StdResult}; +use cosmwasm_std::{ + ensure, to_json_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult, +}; use cosmwasm_std::{Order, Timestamp}; use cw2::set_contract_version; use cw_storage_plus::Bound; @@ -19,7 +21,7 @@ use cw_utils::{may_pay, maybe_addr, must_pay}; use rust_decimal::prelude::ToPrimitive; use rust_decimal::Decimal; use sg1::checked_fair_burn; -use sg_std::{Response, GENESIS_MINT_START_TIME, NATIVE_DENOM}; +use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; // version info for migration info const CONTRACT_NAME: &str = "crates.io:sg-whitelist-flex"; @@ -323,17 +325,17 @@ pub fn execute_increase_member_limit( pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { match msg { QueryMsg::Members { start_after, limit } => { - to_binary(&query_members(deps, start_after, limit)?) + to_json_binary(&query_members(deps, start_after, limit)?) } - QueryMsg::HasStarted {} => to_binary(&query_has_started(deps, env)?), - QueryMsg::HasEnded {} => to_binary(&query_has_ended(deps, env)?), - QueryMsg::IsActive {} => to_binary(&query_is_active(deps, env)?), - QueryMsg::HasMember { member } => to_binary(&query_has_member(deps, member)?), - QueryMsg::Member { member } => to_binary(&query_member(deps, member)?), - QueryMsg::Config {} => to_binary(&query_config(deps, env)?), - QueryMsg::AdminList {} => to_binary(&query_admin_list(deps)?), - QueryMsg::CanExecute { sender, .. } => to_binary(&query_can_execute(deps, &sender)?), + QueryMsg::HasStarted {} => to_json_binary(&query_has_started(deps, env)?), + QueryMsg::HasEnded {} => to_json_binary(&query_has_ended(deps, env)?), + QueryMsg::IsActive {} => to_json_binary(&query_is_active(deps, env)?), + QueryMsg::HasMember { member } => to_json_binary(&query_has_member(deps, member)?), + QueryMsg::Member { member } => to_json_binary(&query_member(deps, member)?), + QueryMsg::Config {} => to_json_binary(&query_config(deps, env)?), + QueryMsg::AdminList {} => to_json_binary(&query_admin_list(deps)?), + QueryMsg::CanExecute { sender, .. } => to_json_binary(&query_can_execute(deps, &sender)?), } } diff --git a/contracts/whitelists/whitelist-flex/src/helpers/interface.rs b/contracts/whitelists/whitelist-flex/src/helpers/interface.rs index 86893f849..c63ddcbd6 100644 --- a/contracts/whitelists/whitelist-flex/src/helpers/interface.rs +++ b/contracts/whitelists/whitelist-flex/src/helpers/interface.rs @@ -1,7 +1,7 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use cosmwasm_std::{to_binary, Addr, StdResult, WasmMsg}; +use cosmwasm_std::{to_json_binary, Addr, StdResult, WasmMsg}; use sg_std::CosmosMsg; use crate::msg::ExecuteMsg; @@ -17,7 +17,7 @@ impl CollectionWhitelistContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, diff --git a/contracts/whitelists/whitelist-immutable/src/contract.rs b/contracts/whitelists/whitelist-immutable/src/contract.rs index e5587c36f..e5c6c17e7 100644 --- a/contracts/whitelists/whitelist-immutable/src/contract.rs +++ b/contracts/whitelists/whitelist-immutable/src/contract.rs @@ -1,13 +1,12 @@ use crate::state::{Config, CONFIG, TOTAL_ADDRESS_COUNT, WHITELIST}; #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; -use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, StdResult}; +use cosmwasm_std::{to_json_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; use cw2::set_contract_version; use crate::error::ContractError; use crate::msg::{ConfigResponse, ExecuteMsg, InstantiateMsg, QueryMsg}; use cw_utils::nonpayable; -use sg_std::Response; // version info for migration info const CONTRACT_NAME: &str = "crates.io:whitelist-immutable"; @@ -70,11 +69,13 @@ pub fn execute( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::Config {} => to_binary(&query_config(deps)?), - QueryMsg::IncludesAddress { address } => to_binary(&query_includes_address(deps, address)?), - QueryMsg::Admin {} => to_binary(&query_admin(deps)?), - QueryMsg::AddressCount {} => to_binary(&query_address_count(deps)?), - QueryMsg::PerAddressLimit {} => to_binary(&query_per_address_limit(deps)?), + QueryMsg::Config {} => to_json_binary(&query_config(deps)?), + QueryMsg::IncludesAddress { address } => { + to_json_binary(&query_includes_address(deps, address)?) + } + QueryMsg::Admin {} => to_json_binary(&query_admin(deps)?), + QueryMsg::AddressCount {} => to_json_binary(&query_address_count(deps)?), + QueryMsg::PerAddressLimit {} => to_json_binary(&query_per_address_limit(deps)?), } } diff --git a/contracts/whitelists/whitelist-immutable/src/helpers.rs b/contracts/whitelists/whitelist-immutable/src/helpers.rs index 3265c11f4..2589625c7 100644 --- a/contracts/whitelists/whitelist-immutable/src/helpers.rs +++ b/contracts/whitelists/whitelist-immutable/src/helpers.rs @@ -1,7 +1,7 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use cosmwasm_std::{to_binary, Addr, QuerierWrapper, QueryRequest, StdResult, WasmQuery}; +use cosmwasm_std::{to_json_binary, Addr, QuerierWrapper, QueryRequest, StdResult, WasmQuery}; use crate::{ msg::{ConfigResponse, QueryMsg}, @@ -21,7 +21,7 @@ impl WhitelistImmutableContract { pub fn includes(&self, querier: &QuerierWrapper, address: String) -> StdResult { let includes: bool = querier.query(&QueryRequest::Wasm(WasmQuery::Smart { contract_addr: self.addr().into(), - msg: to_binary(&QueryMsg::IncludesAddress { address })?, + msg: to_json_binary(&QueryMsg::IncludesAddress { address })?, }))?; Ok(includes) } @@ -29,7 +29,7 @@ impl WhitelistImmutableContract { pub fn address_count(&self, querier: &QuerierWrapper) -> StdResult { let address_count: u64 = querier.query(&QueryRequest::Wasm(WasmQuery::Smart { contract_addr: self.addr().into(), - msg: to_binary(&QueryMsg::AddressCount {})?, + msg: to_json_binary(&QueryMsg::AddressCount {})?, }))?; Ok(address_count) } @@ -37,7 +37,7 @@ impl WhitelistImmutableContract { pub fn per_address_limit(&self, querier: &QuerierWrapper) -> StdResult { let per_address_limit: u32 = querier.query(&QueryRequest::Wasm(WasmQuery::Smart { contract_addr: self.addr().into(), - msg: to_binary(&QueryMsg::PerAddressLimit {})?, + msg: to_json_binary(&QueryMsg::PerAddressLimit {})?, }))?; Ok(per_address_limit) } @@ -45,7 +45,7 @@ impl WhitelistImmutableContract { pub fn config(&self, querier: &QuerierWrapper) -> StdResult { let res: ConfigResponse = querier.query(&QueryRequest::Wasm(WasmQuery::Smart { contract_addr: self.addr().into(), - msg: to_binary(&QueryMsg::Config {})?, + msg: to_json_binary(&QueryMsg::Config {})?, }))?; Ok(res.config) diff --git a/contracts/whitelists/whitelist-merkletree/schema/whitelist-mtree.json b/contracts/whitelists/whitelist-merkletree/schema/whitelist-mtree.json index 3adc017ce..71e5d9463 100644 --- a/contracts/whitelists/whitelist-merkletree/schema/whitelist-mtree.json +++ b/contracts/whitelists/whitelist-merkletree/schema/whitelist-mtree.json @@ -417,6 +417,43 @@ }, "additionalProperties": false }, + { + "description": "A Stargate message encoded the same way as a protobuf [Any](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). This is the same structure as messages in `TxBody` from [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-020-protobuf-transaction-encoding.md)", + "type": "object", + "required": [ + "stargate" + ], + "properties": { + "stargate": { + "type": "object", + "required": [ + "type_url", + "value" + ], + "properties": { + "type_url": { + "type": "string" + }, + "value": { + "$ref": "#/definitions/Binary" + } + } + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "ibc" + ], + "properties": { + "ibc": { + "$ref": "#/definitions/IbcMsg" + } + }, + "additionalProperties": false + }, { "type": "object", "required": [ @@ -428,6 +465,18 @@ } }, "additionalProperties": false + }, + { + "type": "object", + "required": [ + "gov" + ], + "properties": { + "gov": { + "$ref": "#/definitions/GovMsg" + } + }, + "additionalProperties": false } ] }, @@ -435,10 +484,221 @@ "description": "An empty struct that serves as a placeholder in different places, such as contracts that don't set a custom message.\n\nIt is designed to be expressable in correct JSON and JSON Schema but contains no meaningful data. Previously we used enums without cases, but those cannot represented as valid JSON Schema (https://github.com/CosmWasm/cosmwasm/issues/451)", "type": "object" }, + "GovMsg": { + "description": "This message type allows the contract interact with the [x/gov] module in order to cast votes.\n\n[x/gov]: https://github.com/cosmos/cosmos-sdk/tree/v0.45.12/x/gov\n\n## Examples\n\nCast a simple vote:\n\n``` # use cosmwasm_std::{ # HexBinary, # Storage, Api, Querier, DepsMut, Deps, entry_point, Env, StdError, MessageInfo, # Response, QueryResponse, # }; # type ExecuteMsg = (); use cosmwasm_std::{GovMsg, VoteOption};\n\n#[entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // ... Ok(Response::new().add_message(GovMsg::Vote { proposal_id: 4, vote: VoteOption::Yes, })) } ```\n\nCast a weighted vote:\n\n``` # use cosmwasm_std::{ # HexBinary, # Storage, Api, Querier, DepsMut, Deps, entry_point, Env, StdError, MessageInfo, # Response, QueryResponse, # }; # type ExecuteMsg = (); # #[cfg(feature = \"cosmwasm_1_2\")] use cosmwasm_std::{Decimal, GovMsg, VoteOption, WeightedVoteOption};\n\n# #[cfg(feature = \"cosmwasm_1_2\")] #[entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // ... Ok(Response::new().add_message(GovMsg::VoteWeighted { proposal_id: 4, options: vec![ WeightedVoteOption { option: VoteOption::Yes, weight: Decimal::percent(65), }, WeightedVoteOption { option: VoteOption::Abstain, weight: Decimal::percent(35), }, ], })) } ```", + "oneOf": [ + { + "description": "This maps directly to [MsgVote](https://github.com/cosmos/cosmos-sdk/blob/v0.42.5/proto/cosmos/gov/v1beta1/tx.proto#L46-L56) in the Cosmos SDK with voter set to the contract address.", + "type": "object", + "required": [ + "vote" + ], + "properties": { + "vote": { + "type": "object", + "required": [ + "proposal_id", + "vote" + ], + "properties": { + "proposal_id": { + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "vote": { + "description": "The vote option.\n\nThis should be called \"option\" for consistency with Cosmos SDK. Sorry for that. See .", + "allOf": [ + { + "$ref": "#/definitions/VoteOption" + } + ] + } + } + } + }, + "additionalProperties": false + } + ] + }, + "IbcMsg": { + "description": "These are messages in the IBC lifecycle. Only usable by IBC-enabled contracts (contracts that directly speak the IBC protocol via 6 entry points)", + "oneOf": [ + { + "description": "Sends bank tokens owned by the contract to the given address on another chain. The channel must already be established between the ibctransfer module on this chain and a matching module on the remote chain. We cannot select the port_id, this is whatever the local chain has bound the ibctransfer module to.", + "type": "object", + "required": [ + "transfer" + ], + "properties": { + "transfer": { + "type": "object", + "required": [ + "amount", + "channel_id", + "timeout", + "to_address" + ], + "properties": { + "amount": { + "description": "packet data only supports one coin https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/proto/ibc/applications/transfer/v1/transfer.proto#L11-L20", + "allOf": [ + { + "$ref": "#/definitions/Coin" + } + ] + }, + "channel_id": { + "description": "existing channel to send the tokens over", + "type": "string" + }, + "timeout": { + "description": "when packet times out, measured on remote chain", + "allOf": [ + { + "$ref": "#/definitions/IbcTimeout" + } + ] + }, + "to_address": { + "description": "address on the remote chain to receive these tokens", + "type": "string" + } + } + } + }, + "additionalProperties": false + }, + { + "description": "Sends an IBC packet with given data over the existing channel. Data should be encoded in a format defined by the channel version, and the module on the other side should know how to parse this.", + "type": "object", + "required": [ + "send_packet" + ], + "properties": { + "send_packet": { + "type": "object", + "required": [ + "channel_id", + "data", + "timeout" + ], + "properties": { + "channel_id": { + "type": "string" + }, + "data": { + "$ref": "#/definitions/Binary" + }, + "timeout": { + "description": "when packet times out, measured on remote chain", + "allOf": [ + { + "$ref": "#/definitions/IbcTimeout" + } + ] + } + } + } + }, + "additionalProperties": false + }, + { + "description": "This will close an existing channel that is owned by this contract. Port is auto-assigned to the contract's IBC port", + "type": "object", + "required": [ + "close_channel" + ], + "properties": { + "close_channel": { + "type": "object", + "required": [ + "channel_id" + ], + "properties": { + "channel_id": { + "type": "string" + } + } + } + }, + "additionalProperties": false + } + ] + }, + "IbcTimeout": { + "description": "In IBC each package must set at least one type of timeout: the timestamp or the block height. Using this rather complex enum instead of two timeout fields we ensure that at least one timeout is set.", + "type": "object", + "properties": { + "block": { + "anyOf": [ + { + "$ref": "#/definitions/IbcTimeoutBlock" + }, + { + "type": "null" + } + ] + }, + "timestamp": { + "anyOf": [ + { + "$ref": "#/definitions/Timestamp" + }, + { + "type": "null" + } + ] + } + } + }, + "IbcTimeoutBlock": { + "description": "IBCTimeoutHeight Height is a monotonically increasing data type that can be compared against another Height for the purposes of updating and freezing clients. Ordering is (revision_number, timeout_height)", + "type": "object", + "required": [ + "height", + "revision" + ], + "properties": { + "height": { + "description": "block height after which the packet times out. the height within the given revision", + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "revision": { + "description": "the version that the client is currently on (e.g. after resetting the chain this could increment 1 as height drops to 0)", + "type": "integer", + "format": "uint64", + "minimum": 0.0 + } + } + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, "Uint128": { "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", "type": "string" }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + }, + "VoteOption": { + "type": "string", + "enum": [ + "yes", + "no", + "abstain", + "no_with_veto" + ] + }, "WasmMsg": { "description": "The message types of the wasm module.\n\nSee https://github.com/CosmWasm/wasmd/blob/v0.14.0/x/wasm/internal/types/tx.proto", "oneOf": [ diff --git a/contracts/whitelists/whitelist-merkletree/src/admin.rs b/contracts/whitelists/whitelist-merkletree/src/admin.rs index f4c065b9f..885b8f83c 100644 --- a/contracts/whitelists/whitelist-merkletree/src/admin.rs +++ b/contracts/whitelists/whitelist-merkletree/src/admin.rs @@ -1,5 +1,4 @@ -use cosmwasm_std::{Addr, Deps, DepsMut, Env, MessageInfo, StdResult}; -use sg_std::Response; +use cosmwasm_std::{Addr, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; use crate::{ helpers::validators::map_validate, diff --git a/contracts/whitelists/whitelist-merkletree/src/contract.rs b/contracts/whitelists/whitelist-merkletree/src/contract.rs index ce8d76944..961ba5153 100644 --- a/contracts/whitelists/whitelist-merkletree/src/contract.rs +++ b/contracts/whitelists/whitelist-merkletree/src/contract.rs @@ -13,11 +13,12 @@ use crate::state::{AdminList, Config, ADMIN_LIST, CONFIG, MERKLE_ROOT, MERKLE_TR #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - to_binary, Binary, Deps, DepsMut, Env, MessageInfo, StdError, StdResult, Timestamp, + to_json_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdError, StdResult, + Timestamp, }; use cw2::set_contract_version; use cw_utils::nonpayable; -use sg_std::{Response, GENESIS_MINT_START_TIME, NATIVE_DENOM}; +use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use rs_merkle::{algorithms::Sha256, Hasher}; @@ -205,18 +206,18 @@ pub fn execute_update_end_time( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::HasStarted {} => to_binary(&query_has_started(deps, env)?), - QueryMsg::HasEnded {} => to_binary(&query_has_ended(deps, env)?), - QueryMsg::IsActive {} => to_binary(&query_is_active(deps, env)?), + QueryMsg::HasStarted {} => to_json_binary(&query_has_started(deps, env)?), + QueryMsg::HasEnded {} => to_json_binary(&query_has_ended(deps, env)?), + QueryMsg::IsActive {} => to_json_binary(&query_is_active(deps, env)?), QueryMsg::HasMember { member, proof_hashes, - } => to_binary(&query_has_member(deps, member, proof_hashes)?), - QueryMsg::Config {} => to_binary(&query_config(deps, env)?), - QueryMsg::AdminList {} => to_binary(&query_admin_list(deps)?), - QueryMsg::CanExecute { sender, .. } => to_binary(&query_can_execute(deps, &sender)?), - QueryMsg::MerkleRoot {} => to_binary(&query_merkle_root(deps)?), - QueryMsg::MerkleTreeURI {} => to_binary(&query_merkle_tree_uri(deps)?), + } => to_json_binary(&query_has_member(deps, member, proof_hashes)?), + QueryMsg::Config {} => to_json_binary(&query_config(deps, env)?), + QueryMsg::AdminList {} => to_json_binary(&query_admin_list(deps)?), + QueryMsg::CanExecute { sender, .. } => to_json_binary(&query_can_execute(deps, &sender)?), + QueryMsg::MerkleRoot {} => to_json_binary(&query_merkle_root(deps)?), + QueryMsg::MerkleTreeURI {} => to_json_binary(&query_merkle_tree_uri(deps)?), } } diff --git a/contracts/whitelists/whitelist-merkletree/src/helpers/interface.rs b/contracts/whitelists/whitelist-merkletree/src/helpers/interface.rs index 786a956a8..6f09e831a 100644 --- a/contracts/whitelists/whitelist-merkletree/src/helpers/interface.rs +++ b/contracts/whitelists/whitelist-merkletree/src/helpers/interface.rs @@ -1,5 +1,5 @@ use cosmwasm_schema::cw_serde; -use cosmwasm_std::{to_binary, Addr, StdResult, WasmMsg}; +use cosmwasm_std::{to_json_binary, Addr, StdResult, WasmMsg}; use sg_std::CosmosMsg; use crate::msg::ExecuteMsg; @@ -15,7 +15,7 @@ impl CollectionWhitelistContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, diff --git a/contracts/whitelists/whitelist/schema/query_msg.json b/contracts/whitelists/whitelist/schema/query_msg.json index ac7c487f4..246cfbf55 100644 --- a/contracts/whitelists/whitelist/schema/query_msg.json +++ b/contracts/whitelists/whitelist/schema/query_msg.json @@ -246,6 +246,43 @@ }, "additionalProperties": false }, + { + "description": "A Stargate message encoded the same way as a protobuf [Any](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). This is the same structure as messages in `TxBody` from [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-020-protobuf-transaction-encoding.md)", + "type": "object", + "required": [ + "stargate" + ], + "properties": { + "stargate": { + "type": "object", + "required": [ + "type_url", + "value" + ], + "properties": { + "type_url": { + "type": "string" + }, + "value": { + "$ref": "#/definitions/Binary" + } + } + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "ibc" + ], + "properties": { + "ibc": { + "$ref": "#/definitions/IbcMsg" + } + }, + "additionalProperties": false + }, { "type": "object", "required": [ @@ -257,6 +294,18 @@ } }, "additionalProperties": false + }, + { + "type": "object", + "required": [ + "gov" + ], + "properties": { + "gov": { + "$ref": "#/definitions/GovMsg" + } + }, + "additionalProperties": false } ] }, @@ -264,10 +313,221 @@ "description": "An empty struct that serves as a placeholder in different places, such as contracts that don't set a custom message.\n\nIt is designed to be expressable in correct JSON and JSON Schema but contains no meaningful data. Previously we used enums without cases, but those cannot represented as valid JSON Schema (https://github.com/CosmWasm/cosmwasm/issues/451)", "type": "object" }, + "GovMsg": { + "description": "This message type allows the contract interact with the [x/gov] module in order to cast votes.\n\n[x/gov]: https://github.com/cosmos/cosmos-sdk/tree/v0.45.12/x/gov\n\n## Examples\n\nCast a simple vote:\n\n``` # use cosmwasm_std::{ # HexBinary, # Storage, Api, Querier, DepsMut, Deps, entry_point, Env, StdError, MessageInfo, # Response, QueryResponse, # }; # type ExecuteMsg = (); use cosmwasm_std::{GovMsg, VoteOption};\n\n#[entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // ... Ok(Response::new().add_message(GovMsg::Vote { proposal_id: 4, vote: VoteOption::Yes, })) } ```\n\nCast a weighted vote:\n\n``` # use cosmwasm_std::{ # HexBinary, # Storage, Api, Querier, DepsMut, Deps, entry_point, Env, StdError, MessageInfo, # Response, QueryResponse, # }; # type ExecuteMsg = (); # #[cfg(feature = \"cosmwasm_1_2\")] use cosmwasm_std::{Decimal, GovMsg, VoteOption, WeightedVoteOption};\n\n# #[cfg(feature = \"cosmwasm_1_2\")] #[entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // ... Ok(Response::new().add_message(GovMsg::VoteWeighted { proposal_id: 4, options: vec![ WeightedVoteOption { option: VoteOption::Yes, weight: Decimal::percent(65), }, WeightedVoteOption { option: VoteOption::Abstain, weight: Decimal::percent(35), }, ], })) } ```", + "oneOf": [ + { + "description": "This maps directly to [MsgVote](https://github.com/cosmos/cosmos-sdk/blob/v0.42.5/proto/cosmos/gov/v1beta1/tx.proto#L46-L56) in the Cosmos SDK with voter set to the contract address.", + "type": "object", + "required": [ + "vote" + ], + "properties": { + "vote": { + "type": "object", + "required": [ + "proposal_id", + "vote" + ], + "properties": { + "proposal_id": { + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "vote": { + "description": "The vote option.\n\nThis should be called \"option\" for consistency with Cosmos SDK. Sorry for that. See .", + "allOf": [ + { + "$ref": "#/definitions/VoteOption" + } + ] + } + } + } + }, + "additionalProperties": false + } + ] + }, + "IbcMsg": { + "description": "These are messages in the IBC lifecycle. Only usable by IBC-enabled contracts (contracts that directly speak the IBC protocol via 6 entry points)", + "oneOf": [ + { + "description": "Sends bank tokens owned by the contract to the given address on another chain. The channel must already be established between the ibctransfer module on this chain and a matching module on the remote chain. We cannot select the port_id, this is whatever the local chain has bound the ibctransfer module to.", + "type": "object", + "required": [ + "transfer" + ], + "properties": { + "transfer": { + "type": "object", + "required": [ + "amount", + "channel_id", + "timeout", + "to_address" + ], + "properties": { + "amount": { + "description": "packet data only supports one coin https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/proto/ibc/applications/transfer/v1/transfer.proto#L11-L20", + "allOf": [ + { + "$ref": "#/definitions/Coin" + } + ] + }, + "channel_id": { + "description": "existing channel to send the tokens over", + "type": "string" + }, + "timeout": { + "description": "when packet times out, measured on remote chain", + "allOf": [ + { + "$ref": "#/definitions/IbcTimeout" + } + ] + }, + "to_address": { + "description": "address on the remote chain to receive these tokens", + "type": "string" + } + } + } + }, + "additionalProperties": false + }, + { + "description": "Sends an IBC packet with given data over the existing channel. Data should be encoded in a format defined by the channel version, and the module on the other side should know how to parse this.", + "type": "object", + "required": [ + "send_packet" + ], + "properties": { + "send_packet": { + "type": "object", + "required": [ + "channel_id", + "data", + "timeout" + ], + "properties": { + "channel_id": { + "type": "string" + }, + "data": { + "$ref": "#/definitions/Binary" + }, + "timeout": { + "description": "when packet times out, measured on remote chain", + "allOf": [ + { + "$ref": "#/definitions/IbcTimeout" + } + ] + } + } + } + }, + "additionalProperties": false + }, + { + "description": "This will close an existing channel that is owned by this contract. Port is auto-assigned to the contract's IBC port", + "type": "object", + "required": [ + "close_channel" + ], + "properties": { + "close_channel": { + "type": "object", + "required": [ + "channel_id" + ], + "properties": { + "channel_id": { + "type": "string" + } + } + } + }, + "additionalProperties": false + } + ] + }, + "IbcTimeout": { + "description": "In IBC each package must set at least one type of timeout: the timestamp or the block height. Using this rather complex enum instead of two timeout fields we ensure that at least one timeout is set.", + "type": "object", + "properties": { + "block": { + "anyOf": [ + { + "$ref": "#/definitions/IbcTimeoutBlock" + }, + { + "type": "null" + } + ] + }, + "timestamp": { + "anyOf": [ + { + "$ref": "#/definitions/Timestamp" + }, + { + "type": "null" + } + ] + } + } + }, + "IbcTimeoutBlock": { + "description": "IBCTimeoutHeight Height is a monotonically increasing data type that can be compared against another Height for the purposes of updating and freezing clients. Ordering is (revision_number, timeout_height)", + "type": "object", + "required": [ + "height", + "revision" + ], + "properties": { + "height": { + "description": "block height after which the packet times out. the height within the given revision", + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "revision": { + "description": "the version that the client is currently on (e.g. after resetting the chain this could increment 1 as height drops to 0)", + "type": "integer", + "format": "uint64", + "minimum": 0.0 + } + } + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, "Uint128": { "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", "type": "string" }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + }, + "VoteOption": { + "type": "string", + "enum": [ + "yes", + "no", + "abstain", + "no_with_veto" + ] + }, "WasmMsg": { "description": "The message types of the wasm module.\n\nSee https://github.com/CosmWasm/wasmd/blob/v0.14.0/x/wasm/internal/types/tx.proto", "oneOf": [ diff --git a/contracts/whitelists/whitelist/src/admin.rs b/contracts/whitelists/whitelist/src/admin.rs index f4c065b9f..885b8f83c 100644 --- a/contracts/whitelists/whitelist/src/admin.rs +++ b/contracts/whitelists/whitelist/src/admin.rs @@ -1,5 +1,4 @@ -use cosmwasm_std::{Addr, Deps, DepsMut, Env, MessageInfo, StdResult}; -use sg_std::Response; +use cosmwasm_std::{Addr, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; use crate::{ helpers::validators::map_validate, diff --git a/contracts/whitelists/whitelist/src/contract.rs b/contracts/whitelists/whitelist/src/contract.rs index c00007195..5ce916d41 100644 --- a/contracts/whitelists/whitelist/src/contract.rs +++ b/contracts/whitelists/whitelist/src/contract.rs @@ -11,7 +11,7 @@ use crate::msg::{ use crate::state::{AdminList, Config, ADMIN_LIST, CONFIG, WHITELIST}; #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; -use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, StdResult}; +use cosmwasm_std::{to_json_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; use cosmwasm_std::{Order, Timestamp}; use cw2::set_contract_version; use cw_storage_plus::Bound; @@ -19,7 +19,7 @@ use cw_utils::{may_pay, maybe_addr, must_pay}; use rust_decimal::prelude::ToPrimitive; use rust_decimal::Decimal; use sg1::checked_fair_burn; -use sg_std::{Response, GENESIS_MINT_START_TIME, NATIVE_DENOM}; +use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; // version info for migration info const CONTRACT_NAME: &str = "crates.io:sg-whitelist"; @@ -362,16 +362,16 @@ pub fn execute_increase_member_limit( pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { match msg { QueryMsg::Members { start_after, limit } => { - to_binary(&query_members(deps, start_after, limit)?) + to_json_binary(&query_members(deps, start_after, limit)?) } - QueryMsg::HasStarted {} => to_binary(&query_has_started(deps, env)?), - QueryMsg::HasEnded {} => to_binary(&query_has_ended(deps, env)?), - QueryMsg::IsActive {} => to_binary(&query_is_active(deps, env)?), - QueryMsg::HasMember { member } => to_binary(&query_has_member(deps, member)?), - QueryMsg::Config {} => to_binary(&query_config(deps, env)?), - QueryMsg::AdminList {} => to_binary(&query_admin_list(deps)?), - QueryMsg::CanExecute { sender, .. } => to_binary(&query_can_execute(deps, &sender)?), + QueryMsg::HasStarted {} => to_json_binary(&query_has_started(deps, env)?), + QueryMsg::HasEnded {} => to_json_binary(&query_has_ended(deps, env)?), + QueryMsg::IsActive {} => to_json_binary(&query_is_active(deps, env)?), + QueryMsg::HasMember { member } => to_json_binary(&query_has_member(deps, member)?), + QueryMsg::Config {} => to_json_binary(&query_config(deps, env)?), + QueryMsg::AdminList {} => to_json_binary(&query_admin_list(deps)?), + QueryMsg::CanExecute { sender, .. } => to_json_binary(&query_can_execute(deps, &sender)?), } } diff --git a/contracts/whitelists/whitelist/src/helpers/interface.rs b/contracts/whitelists/whitelist/src/helpers/interface.rs index 86893f849..fc5a342fd 100644 --- a/contracts/whitelists/whitelist/src/helpers/interface.rs +++ b/contracts/whitelists/whitelist/src/helpers/interface.rs @@ -1,8 +1,7 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use cosmwasm_std::{to_binary, Addr, StdResult, WasmMsg}; -use sg_std::CosmosMsg; +use cosmwasm_std::{to_json_binary, Addr, CosmosMsg, StdResult, WasmMsg}; use crate::msg::ExecuteMsg; @@ -17,7 +16,7 @@ impl CollectionWhitelistContract { } pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; + let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, diff --git a/packages/ethereum-verify/Cargo.toml b/packages/ethereum-verify/Cargo.toml index 4e30550c9..4933a7447 100644 --- a/packages/ethereum-verify/Cargo.toml +++ b/packages/ethereum-verify/Cargo.toml @@ -1,12 +1,12 @@ [package] -name = "ethereum-verify" -authors = ["Michael Scotto "] +name = "ethereum-verify" +authors = ["Michael Scotto "] description = "Ethereum Cryptographic verification utility functions" -version = { workspace = true } -edition = { workspace = true } -homepage = { workspace = true } -repository = { workspace = true } -license = { workspace = true } +version = { workspace = true } +edition = { workspace = true } +homepage = { workspace = true } +repository = { workspace = true } +license = { workspace = true } exclude = [ # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. @@ -20,8 +20,8 @@ exclude = [ crate-type = ["cdylib", "rlib"] [dependencies] -sha2 = { workspace = true } -sha3 = "0.10" -hex = "0.4" +sha2 = { workspace = true } +sha3 = "0.10" +hex = "0.4" cosmwasm-schema = { workspace = true } -cosmwasm-std = { workspace = true, features = ["staking"] } +cosmwasm-std = { workspace = true, features = ["staking", "cosmwasm_1_4"] } diff --git a/packages/mint-hooks/src/lib.rs b/packages/mint-hooks/src/lib.rs index 6b39262e4..17ebeda9c 100644 --- a/packages/mint-hooks/src/lib.rs +++ b/packages/mint-hooks/src/lib.rs @@ -37,7 +37,7 @@ pub fn handle_reply(reply_id: u64) -> Result<(), MintHookError> { pub mod pre { use cosmwasm_schema::cw_serde; - use cosmwasm_std::{to_binary, Addr, Binary, Deps, DepsMut, StdResult, WasmMsg}; + use cosmwasm_std::{to_json_binary, Addr, Binary, Deps, DepsMut, StdResult, WasmMsg}; use sg_std::{Response, SubMsg}; use crate::{MintHookError, PREMINT_HOOKS, PREMINT_HOOK_REPLY_ID}; @@ -59,9 +59,9 @@ pub mod pre { } /// serializes the message - pub fn into_binary(self) -> StdResult { + pub fn into_json_binary(self) -> StdResult { let msg = PreMintExecuteHookMsg::PreMintHook(self); - to_binary(&msg) + to_json_binary(&msg) } } @@ -81,7 +81,7 @@ pub mod pre { } pub fn query_premint_hooks(deps: Deps) -> StdResult { - to_binary(&PREMINT_HOOKS.query_hooks(deps)?) + to_json_binary(&PREMINT_HOOKS.query_hooks(deps)?) } pub fn prepare_premint_hooks( @@ -98,7 +98,7 @@ pub mod pre { }; let execute = WasmMsg::Execute { contract_addr: h.to_string(), - msg: msg.into_binary()?, + msg: msg.into_json_binary()?, funds: vec![], }; Ok(SubMsg::reply_on_error(execute, PREMINT_HOOK_REPLY_ID)) @@ -110,7 +110,7 @@ pub mod pre { pub mod post { use cosmwasm_schema::cw_serde; - use cosmwasm_std::{to_binary, Addr, Binary, Deps, DepsMut, StdResult, WasmMsg}; + use cosmwasm_std::{to_json_binary, Addr, Binary, Deps, DepsMut, StdResult, WasmMsg}; use sg_std::{Response, SubMsg}; use crate::{MintHookError, POSTMINT_HOOKS, POSTMINT_HOOK_REPLY_ID}; @@ -132,9 +132,9 @@ pub mod post { } /// serializes the message - pub fn into_binary(self) -> StdResult { + pub fn into_json_binary(self) -> StdResult { let msg = PostMintExecuteHookMsg::PostMintHook(self); - to_binary(&msg) + to_json_binary(&msg) } } @@ -154,7 +154,7 @@ pub mod post { } pub fn query_postmint_hooks(deps: Deps) -> StdResult { - to_binary(&POSTMINT_HOOKS.query_hooks(deps)?) + to_json_binary(&POSTMINT_HOOKS.query_hooks(deps)?) } pub fn prepare_postmint_hooks( @@ -171,7 +171,7 @@ pub mod post { }; let execute = WasmMsg::Execute { contract_addr: h.to_string(), - msg: msg.into_binary()?, + msg: msg.into_json_binary()?, funds: vec![], }; Ok(SubMsg::reply_on_error(execute, POSTMINT_HOOK_REPLY_ID)) diff --git a/packages/sg1/Cargo.toml b/packages/sg1/Cargo.toml index fb648803f..aa071f00c 100644 --- a/packages/sg1/Cargo.toml +++ b/packages/sg1/Cargo.toml @@ -9,8 +9,9 @@ repository = { workspace = true } license = { workspace = true } [dependencies] -cosmwasm-std = { workspace = true } -cw-utils = { workspace = true } -serde = { workspace = true } -sg-std = { workspace = true } -thiserror = { workspace = true } +cosmwasm-std = { workspace = true, features = ["stargate"] } +cw-utils = { workspace = true } +serde = { workspace = true } +sg-std = { workspace = true } +thiserror = { workspace = true } +anybuf = { workspace = true } diff --git a/packages/sg1/src/lib.rs b/packages/sg1/src/lib.rs index a4b28745c..753c07c60 100644 --- a/packages/sg1/src/lib.rs +++ b/packages/sg1/src/lib.rs @@ -1,8 +1,11 @@ -use cosmwasm_std::{coin, coins, Addr, BankMsg, Coin, Decimal, Event, MessageInfo, Uint128}; +use anybuf::Anybuf; +use cosmwasm_std::{ + coin, coins, Addr, BankMsg, Coin, CosmosMsg, Decimal, Event, MessageInfo, Response, SubMsg, + Uint128, +}; use cw_utils::{may_pay, PaymentError}; -use sg_std::{create_fund_fairburn_pool_msg, Response, SubMsg, NATIVE_DENOM}; +use sg_std::NATIVE_DENOM; use thiserror::Error; - // governance parameters const FEE_BURN_PERCENT: u64 = 50; const FOUNDATION: &str = "stars1xqz6xujjyz0r9uzn7srasle5uynmpa0zkjr5l8"; @@ -21,7 +24,7 @@ pub fn checked_fair_burn( }; if payment.u128() != 0u128 { - fair_burn(fee, developer, res); + fair_burn(info.sender.to_string(), fee, developer, res); } Ok(()) @@ -71,7 +74,7 @@ pub fn ibc_denom_fair_burn( } /// Burn and distribute fees, assuming the right fee is passed in -pub fn fair_burn(fee: u128, developer: Option, res: &mut Response) { +pub fn fair_burn(sender: String, fee: u128, developer: Option, res: &mut Response) { let mut event = Event::new("fair-burn"); // calculate the fair burn fee @@ -92,17 +95,35 @@ pub fn fair_burn(fee: u128, developer: Option, res: &mut Response) { event = event.add_attribute("dev", dev.to_string()); event = event.add_attribute("dev_amount", Uint128::from(remainder).to_string()); } else { - res.messages - .push(SubMsg::new(create_fund_fairburn_pool_msg(coins( - remainder, - NATIVE_DENOM, - )))); + res.messages.push(SubMsg::new(create_fund_fairburn_pool_msg( + sender, + &coin(remainder, NATIVE_DENOM), + ))); event = event.add_attribute("dist_amount", Uint128::from(remainder).to_string()); } res.events.push(event); } +fn create_fund_fairburn_pool_msg(sender: String, amount: &Coin) -> CosmosMsg { + CosmosMsg::Stargate { + type_url: "/publicawesome.stargaze.alloc.v1beta1.MsgFundFairburnPool".to_string(), + value: encode_msg_fund_fairburn_pool(sender, amount).into(), + } +} +/// Encode the message to fund the fairburn pool +/// following the protobuf spec in +/// https://github.com/public-awesome/stargaze/blob/efdb9212e037e05fc429c0cfbcf425ad11855e15/proto/publicawesome/stargaze/alloc/v1beta1/tx.proto#L49 +fn encode_msg_fund_fairburn_pool(sender: String, amount: &Coin) -> Vec { + let coin = Anybuf::new() + .append_string(1, &amount.denom) + .append_string(2, amount.amount.to_string()); + Anybuf::new() + .append_string(1, sender) + .append_message(2, &coin) + .into_vec() +} + #[derive(Error, Debug, PartialEq, Eq)] pub enum FeeError { #[error("Insufficient fee: expected {0}, got {1}")] @@ -114,8 +135,9 @@ pub enum FeeError { #[cfg(test)] mod tests { - use cosmwasm_std::{coins, Addr, BankMsg}; - use sg_std::{create_fund_fairburn_pool_msg, Response, NATIVE_DENOM}; + use crate::create_fund_fairburn_pool_msg; + use cosmwasm_std::{coin, coins, Addr, BankMsg, Response}; + use sg_std::NATIVE_DENOM; use crate::{fair_burn, SubMsg}; @@ -123,11 +145,14 @@ mod tests { fn check_fair_burn_no_dev_rewards() { let mut res = Response::new(); - fair_burn(9u128, None, &mut res); + fair_burn(Addr::unchecked("sender").to_string(), 9u128, None, &mut res); let burn_msg = SubMsg::new(BankMsg::Burn { amount: coins(4, "ustars".to_string()), }); - let dist_msg = SubMsg::new(create_fund_fairburn_pool_msg(coins(5, NATIVE_DENOM))); + let dist_msg = SubMsg::new(create_fund_fairburn_pool_msg( + Addr::unchecked("sender").to_string(), + &coin(5, NATIVE_DENOM), + )); assert_eq!(res.messages.len(), 2); assert_eq!(res.messages[0], burn_msg); assert_eq!(res.messages[1], dist_msg); @@ -137,7 +162,12 @@ mod tests { fn check_fair_burn_with_dev_rewards() { let mut res = Response::new(); - fair_burn(9u128, Some(Addr::unchecked("geordi")), &mut res); + fair_burn( + Addr::unchecked("sender").to_string(), + 9u128, + Some(Addr::unchecked("geordi")), + &mut res, + ); let bank_msg = SubMsg::new(BankMsg::Send { to_address: "geordi".to_string(), amount: coins(5, NATIVE_DENOM), @@ -154,7 +184,12 @@ mod tests { fn check_fair_burn_with_dev_rewards_different_amount() { let mut res = Response::new(); - fair_burn(1420u128, Some(Addr::unchecked("geordi")), &mut res); + fair_burn( + Addr::unchecked("sender").to_string(), + 1420u128, + Some(Addr::unchecked("geordi")), + &mut res, + ); let bank_msg = SubMsg::new(BankMsg::Send { to_address: "geordi".to_string(), amount: coins(710, NATIVE_DENOM), diff --git a/test-suite/Cargo.toml b/test-suite/Cargo.toml index 867d077f1..76e42728b 100644 --- a/test-suite/Cargo.toml +++ b/test-suite/Cargo.toml @@ -9,9 +9,9 @@ repository = { workspace = true } license = { workspace = true } exclude = [ - # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. - "contract.wasm", - "hash.txt", + # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. + "contract.wasm", + "hash.txt", ] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -33,34 +33,36 @@ optimize = """docker run --rm -v "$(pwd)":/code \ """ [dependencies] -cosmwasm-schema = { workspace = true } -sg-std = { workspace = true } -cosmwasm-std = { workspace = true } -cw4 = { workspace = true } -cw-multi-test = { workspace = true } -sg-multi-test = { workspace = true } -sg721-base = { workspace = true } -sg721-updatable = { workspace = true } -cw4-group = { workspace = true } -sg-splits = { workspace = true } -anyhow = "1.0.57" -sg-eth-airdrop = { workspace = true } -whitelist-immutable = { workspace = true, features = ["library"] } -cw721 = { workspace = true } -cw721-base = { workspace = true, features = ["library"] } -sg2 = { workspace = true } -sg721 = { workspace = true } -sg-metadata = { workspace = true } -open-edition-factory = { workspace = true, features = ["library"] } -open-edition-minter = { workspace = true, features = ["library"] } -sg-whitelist = { workspace = true, features = ["library"] } -vending-factory = { workspace = true, features = ["library"] } -vending-minter = { workspace = true, features = ["library"] } -base-factory = { workspace = true } -base-minter = { workspace = true } -sg721-nt = { workspace = true } -sg-controllers = { workspace = true } -cw-ownable = "0.5.1" +cosmwasm-schema = { workspace = true } +sg-std = { workspace = true } +cosmwasm-std = { workspace = true } +cw4 = { workspace = true } +cw-multi-test = { workspace = true } +sg-multi-test = { workspace = true } +sg721-base = { workspace = true } +sg721-updatable = { workspace = true } +cw4-group = { workspace = true } +sg-splits = { workspace = true } +anyhow = "1.0.57" +sg-eth-airdrop = { workspace = true } +whitelist-immutable = { workspace = true, features = ["library"] } +cw721 = { workspace = true } +cw721-base = { workspace = true, features = ["library"] } +sg2 = { workspace = true } +sg721 = { workspace = true } +sg-metadata = { workspace = true } +open-edition-factory = { workspace = true, features = ["library"] } +open-edition-minter = { workspace = true, features = ["library"] } +sg-whitelist = { workspace = true, features = ["library"] } +vending-factory = { workspace = true, features = ["library"] } +vending-minter = { workspace = true, features = ["library"] } +base-factory = { workspace = true } +base-minter = { workspace = true } +sg721-nt = { workspace = true } +sg-controllers = { workspace = true } +cw-ownable = "0.5.1" +serde = { workspace = true } +anybuf = { workspace = true } vending-minter-merkle-wl = { workspace = true, features = ["library"] } whitelist-mtree = { workspace = true, features = ["library"] } diff --git a/test-suite/src/base_factory/tests/integration_tests.rs b/test-suite/src/base_factory/tests/integration_tests.rs index 1047e1cbd..5b44eb004 100644 --- a/test-suite/src/base_factory/tests/integration_tests.rs +++ b/test-suite/src/base_factory/tests/integration_tests.rs @@ -1,16 +1,15 @@ #[cfg(test)] mod tests { - use crate::common_setup::contract_boxes::{contract_base_factory, custom_mock_app}; + use crate::common_setup::contract_boxes::{contract_base_factory, custom_mock_app, App}; use crate::common_setup::setup_minter::base_minter::mock_params::mock_params; use base_factory::helpers::FactoryContract; use base_factory::msg::InstantiateMsg; use cosmwasm_std::Addr; use cw_multi_test::Executor; - use sg_multi_test::StargazeApp; const GOVERNANCE: &str = "governance"; - fn proper_instantiate() -> (StargazeApp, FactoryContract) { + fn proper_instantiate() -> (App, FactoryContract) { let mut app = custom_mock_app(); let factory_id = app.store_code(contract_base_factory()); let minter_id = 2; diff --git a/test-suite/src/base_minter/tests/integration_tests.rs b/test-suite/src/base_minter/tests/integration_tests.rs index 675c9e877..77837ba70 100644 --- a/test-suite/src/base_minter/tests/integration_tests.rs +++ b/test-suite/src/base_minter/tests/integration_tests.rs @@ -136,7 +136,6 @@ fn check_mint() { &[coin(MIN_MINT_PRICE, NATIVE_DENOM)], ); - println!("res is {res:?}"); assert!(res.is_ok()); let creator_balances = router.wrap().query_all_balances(creator.clone()).unwrap(); @@ -215,7 +214,7 @@ fn update_start_trading_time() { &ExecuteMsg::UpdateStartTradingTime(Some(default_start_trading_time)), &[], ); - println!("res is {res:?}"); + assert!(res.is_ok()); // confirm trading start time diff --git a/test-suite/src/common_setup.rs b/test-suite/src/common_setup.rs index cc10d8105..5e2dc9abf 100644 --- a/test-suite/src/common_setup.rs +++ b/test-suite/src/common_setup.rs @@ -1,6 +1,7 @@ pub mod contract_boxes; pub mod contract_boxes_empty; pub mod helpers; +pub mod keeper; pub mod msg; pub mod setup_accounts_and_block; pub mod setup_collection_whitelist; diff --git a/test-suite/src/common_setup/contract_boxes.rs b/test-suite/src/common_setup/contract_boxes.rs index 65a9fd3d0..617a6d591 100644 --- a/test-suite/src/common_setup/contract_boxes.rs +++ b/test-suite/src/common_setup/contract_boxes.rs @@ -1,12 +1,31 @@ -use cw_multi_test::{Contract, ContractWrapper}; -use sg_multi_test::StargazeApp; -use sg_std::StargazeMsgWrapper; - -pub fn custom_mock_app() -> StargazeApp { - StargazeApp::default() -} - -pub fn contract_vending_factory() -> Box> { +use cosmwasm_std::testing::{MockApi, MockStorage}; +use cosmwasm_std::Empty; +use cw_multi_test::{ + no_init, AppBuilder, BankKeeper, Contract, ContractWrapper, DistributionKeeper, FailingModule, + GovFailingModule, IbcFailingModule, StakeKeeper, WasmKeeper, +}; + +use crate::common_setup::keeper::StargazeKeeper; +pub type App = cw_multi_test::App< + BankKeeper, + MockApi, + MockStorage, + FailingModule, + WasmKeeper, + StakeKeeper, + DistributionKeeper, + IbcFailingModule, + GovFailingModule, + StargazeKeeper, +>; + +pub fn custom_mock_app() -> App { + AppBuilder::new() + .with_stargate(StargazeKeeper) + .build(no_init) +} + +pub fn contract_vending_factory() -> Box> { let contract = ContractWrapper::new( vending_factory::contract::execute, vending_factory::contract::instantiate, @@ -16,7 +35,7 @@ pub fn contract_vending_factory() -> Box> { Box::new(contract) } -pub fn contract_open_edition_factory() -> Box> { +pub fn contract_open_edition_factory() -> Box> { let contract = ContractWrapper::new( open_edition_factory::contract::execute, open_edition_factory::contract::instantiate, @@ -26,7 +45,7 @@ pub fn contract_open_edition_factory() -> Box> Box::new(contract) } -pub fn contract_base_factory() -> Box> { +pub fn contract_base_factory() -> Box> { let contract = ContractWrapper::new( base_factory::contract::execute, base_factory::contract::instantiate, @@ -36,7 +55,7 @@ pub fn contract_base_factory() -> Box> { Box::new(contract) } -pub fn contract_base_minter() -> Box> { +pub fn contract_base_minter() -> Box> { let contract = ContractWrapper::new( base_minter::contract::execute, base_minter::contract::instantiate, @@ -46,7 +65,7 @@ pub fn contract_base_minter() -> Box> { Box::new(contract) } -pub fn contract_nt_collection() -> Box> { +pub fn contract_nt_collection() -> Box> { let contract = ContractWrapper::new( sg721_nt::entry::execute, sg721_nt::entry::instantiate, @@ -55,7 +74,7 @@ pub fn contract_nt_collection() -> Box> { Box::new(contract) } -pub fn contract_collection_whitelist() -> Box> { +pub fn contract_collection_whitelist() -> Box> { let contract = ContractWrapper::new( sg_whitelist::contract::execute, sg_whitelist::contract::instantiate, @@ -64,7 +83,7 @@ pub fn contract_collection_whitelist() -> Box> Box::new(contract) } -pub fn contract_open_edition_minter() -> Box> { +pub fn contract_open_edition_minter() -> Box> { let contract = ContractWrapper::new( open_edition_minter::contract::execute, open_edition_minter::contract::instantiate, @@ -74,7 +93,7 @@ pub fn contract_open_edition_minter() -> Box> { Box::new(contract) } -pub fn contract_vending_minter() -> Box> { +pub fn contract_vending_minter() -> Box> { let contract = ContractWrapper::new( vending_minter::contract::execute, vending_minter::contract::instantiate, @@ -84,7 +103,7 @@ pub fn contract_vending_minter() -> Box> { Box::new(contract) } -pub fn contract_sg721_base() -> Box> { +pub fn contract_sg721_base() -> Box> { let contract = ContractWrapper::new( sg721_base::entry::execute, sg721_base::entry::instantiate, @@ -93,7 +112,7 @@ pub fn contract_sg721_base() -> Box> { Box::new(contract) } -pub fn contract_sg721_updatable() -> Box> { +pub fn contract_sg721_updatable() -> Box> { let contract = ContractWrapper::new( sg721_updatable::entry::execute, sg721_updatable::entry::instantiate, @@ -103,7 +122,7 @@ pub fn contract_sg721_updatable() -> Box> { Box::new(contract) } -pub fn contract_splits() -> Box> { +pub fn contract_splits() -> Box> { let contract = ContractWrapper::new_with_empty( sg_splits::contract::execute, sg_splits::contract::instantiate, @@ -112,7 +131,7 @@ pub fn contract_splits() -> Box> { Box::new(contract) } -pub fn contract_group() -> Box> { +pub fn contract_group() -> Box> { let contract = ContractWrapper::new_with_empty( cw4_group::contract::execute, cw4_group::contract::instantiate, @@ -121,7 +140,7 @@ pub fn contract_group() -> Box> { Box::new(contract) } -pub fn contract_eth_airdrop() -> Box> { +pub fn contract_eth_airdrop() -> Box> { let contract = ContractWrapper::new( sg_eth_airdrop::contract::execute, sg_eth_airdrop::contract::instantiate, @@ -131,7 +150,7 @@ pub fn contract_eth_airdrop() -> Box> { Box::new(contract) } -pub fn contract_whitelist_immutable() -> Box> { +pub fn contract_whitelist_immutable() -> Box> { let contract = ContractWrapper::new( whitelist_immutable::contract::execute, whitelist_immutable::contract::instantiate, @@ -140,7 +159,7 @@ pub fn contract_whitelist_immutable() -> Box> { Box::new(contract) } -pub fn contract_whitelist_merkletree() -> Box> { +pub fn contract_whitelist_merkletree() -> Box> { let contract = ContractWrapper::new( whitelist_mtree::contract::execute, whitelist_mtree::contract::instantiate, diff --git a/test-suite/src/common_setup/keeper.rs b/test-suite/src/common_setup/keeper.rs new file mode 100644 index 000000000..8b3e43b21 --- /dev/null +++ b/test-suite/src/common_setup/keeper.rs @@ -0,0 +1,74 @@ +use anybuf::Bufany; +use anyhow::bail; +use cosmwasm_std::{coins, Addr, Api, BankMsg, Binary, BlockInfo, CustomQuery, Querier, Storage}; +use cw_multi_test::error::AnyResult; +use cw_multi_test::{AppResponse, CosmosRouter, Stargate}; +use serde::de::DeserializeOwned; + +use sg_std::NATIVE_DENOM; + +pub struct StargazeKeeper; + +impl Stargate for StargazeKeeper { + /// Custom processing of stargate messages. + fn execute( + &self, + api: &dyn Api, + storage: &mut dyn Storage, + router: &dyn CosmosRouter, + block: &BlockInfo, + sender: Addr, + type_url: String, + value: Binary, + ) -> AnyResult + where + ExecC: Clone + PartialEq + DeserializeOwned + 'static, + QueryC: CustomQuery + DeserializeOwned + 'static, + { + match type_url.as_str() { + "/publicawesome.stargaze.alloc.v1beta1.MsgFundFairburnPool" => { + let decoded = Bufany::deserialize(&value).unwrap(); + let amount_bytes = decoded.bytes(2).unwrap(); + + let decoded_amount = Bufany::deserialize(&amount_bytes).unwrap(); + + // field 1 is the denom + // field 2 is the amount + let denom = decoded_amount.string(1).unwrap(); + assert_eq!(NATIVE_DENOM, denom); + let amount = decoded_amount.string(2).unwrap(); + let msg = BankMsg::Send { + to_address: "fairburn_pool".to_owned(), + amount: coins(amount.parse::()?, denom), + } + .into(); + let resp = router.execute(api, storage, block, sender, msg); + match resp { + Ok(_) => Ok(AppResponse::default()), + Err(e) => bail!("Error executing fairburn pool funding: {}", e), + } + } + _ => { + bail!( + "Unexpected stargate message: (type_url = {}, value = {:?}) from {:?}", + type_url, + value, + sender + ) + } + } + } + + /// Custom stargate queries. + fn query( + &self, + _api: &dyn Api, + _storage: &dyn Storage, + _querier: &dyn Querier, + _block: &BlockInfo, + _path: String, + _data: Binary, + ) -> AnyResult { + bail!("not implemented"); + } +} diff --git a/test-suite/src/common_setup/msg.rs b/test-suite/src/common_setup/msg.rs index d27e61661..04daf3794 100644 --- a/test-suite/src/common_setup/msg.rs +++ b/test-suite/src/common_setup/msg.rs @@ -1,14 +1,14 @@ use anyhow::Error; use cosmwasm_std::{Addr, Timestamp}; +use contract_boxes::App; use cosmwasm_std::Uint128; use open_edition_factory::state::{OpenEditionMinterParams, ParamsExtension}; use sg2::msg::CollectionParams; -use sg_multi_test::StargazeApp; use vending_factory::msg::VendingMinterInitMsgExtension; pub struct MinterSetupParams<'a> { - pub router: &'a mut StargazeApp, + pub router: &'a mut App, pub minter_admin: Addr, pub num_tokens: u32, pub collection_params: CollectionParams, @@ -37,6 +37,8 @@ use cosmwasm_schema::cw_serde; use open_edition_factory::msg::OpenEditionMinterInitMsgExtension; use open_edition_factory::types::NftData; +use super::contract_boxes; + #[cw_serde] pub struct CodeIds { pub minter_code_id: u64, @@ -46,13 +48,13 @@ pub struct CodeIds { pub struct MinterTemplateResponse { pub collection_response_vec: Vec, - pub router: StargazeApp, + pub router: App, pub accts: T, } pub struct MinterTemplateResponseCodeIds { pub collection_response_vec: Vec, - pub router: StargazeApp, + pub router: App, pub accts: T, pub code_ids: CodeIds, } @@ -63,7 +65,7 @@ pub struct Accounts { } pub struct OpenEditionMinterSetupParams<'a> { - pub router: &'a mut StargazeApp, + pub router: &'a mut App, pub minter_admin: Addr, pub collection_params: CollectionParams, pub start_time: Option, diff --git a/test-suite/src/common_setup/setup_accounts_and_block.rs b/test-suite/src/common_setup/setup_accounts_and_block.rs index 51a0dbdbc..86fcbbd91 100644 --- a/test-suite/src/common_setup/setup_accounts_and_block.rs +++ b/test-suite/src/common_setup/setup_accounts_and_block.rs @@ -1,10 +1,9 @@ use cosmwasm_std::{coins, Addr, Coin, Timestamp, Uint128}; use cw4::Member; use cw_multi_test::{BankSudo, Executor, SudoMsg}; -use sg_multi_test::StargazeApp; use sg_std::NATIVE_DENOM; -use crate::common_setup::contract_boxes::contract_group; +use crate::common_setup::contract_boxes::{contract_group, App}; use crate::common_setup::setup_minter::common::constants::DEV_ADDRESS; const OWNER: &str = "admin0001"; @@ -13,7 +12,7 @@ pub const CREATION_FEE: u128 = 5_000_000_000; pub const INITIAL_BALANCE: u128 = 2_000_000_000; // uploads code and returns address of group contract -pub fn instantiate_group(app: &mut StargazeApp, members: Vec) -> Addr { +pub fn instantiate_group(app: &mut App, members: Vec) -> Addr { let group_id = app.store_code(contract_group()); println!("group_id: {group_id}"); let msg = cw4_group::msg::InstantiateMsg { @@ -25,7 +24,7 @@ pub fn instantiate_group(app: &mut StargazeApp, members: Vec) -> Addr { } // Add a creator account with initial balances -pub fn setup_accounts(router: &mut StargazeApp) -> (Addr, Addr) { +pub fn setup_accounts(router: &mut App) -> (Addr, Addr) { let buyer = Addr::unchecked("buyer"); let creator = Addr::unchecked("creator"); let dev = Addr::unchecked(DEV_ADDRESS); @@ -81,7 +80,7 @@ pub fn setup_accounts(router: &mut StargazeApp) -> (Addr, Addr) { } // Set blockchain time to after mint by default -pub fn setup_block_time(router: &mut StargazeApp, nanos: u64, height: Option) { +pub fn setup_block_time(router: &mut App, nanos: u64, height: Option) { let mut block = router.block_info(); block.time = Timestamp::from_nanos(nanos); if let Some(h) = height { diff --git a/test-suite/src/common_setup/setup_collection_whitelist.rs b/test-suite/src/common_setup/setup_collection_whitelist.rs index 5e53b9fdb..61a2697a9 100644 --- a/test-suite/src/common_setup/setup_collection_whitelist.rs +++ b/test-suite/src/common_setup/setup_collection_whitelist.rs @@ -1,11 +1,11 @@ use cosmwasm_std::{coin, Addr, Timestamp}; use cw_multi_test::Executor; -use sg_multi_test::StargazeApp; use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use sg_whitelist::msg::InstantiateMsg as WhitelistInstantiateMsg; use crate::common_setup::{ - contract_boxes::contract_collection_whitelist, setup_accounts_and_block::setup_block_time, + contract_boxes::{contract_collection_whitelist, App}, + setup_accounts_and_block::setup_block_time, }; pub const WHITELIST_AMOUNT: u128 = 66_000_000; @@ -13,7 +13,7 @@ const ZERO_FEE_WHITELIST: u128 = 0; const WL_PER_ADDRESS_LIMIT: u32 = 1; pub fn setup_whitelist_contract( - router: &mut StargazeApp, + router: &mut App, creator: &Addr, whitelist_code_id: Option, denom: Option<&str>, @@ -50,7 +50,7 @@ pub fn setup_whitelist_contract( } pub fn setup_zero_fee_whitelist_contract( - router: &mut StargazeApp, + router: &mut App, creator: &Addr, whitelist_code_id: Option, ) -> Addr { @@ -69,10 +69,11 @@ pub fn setup_zero_fee_whitelist_contract( admins: vec![creator.to_string()], admins_mutable: true, }; + router .instantiate_contract( whitelist_code_id, - creator.clone(), + creator.to_owned(), &msg, &[coin(100_000_000, NATIVE_DENOM)], "whitelist", @@ -82,7 +83,7 @@ pub fn setup_zero_fee_whitelist_contract( } pub fn configure_collection_whitelist( - router: &mut StargazeApp, + router: &mut App, creator: Addr, buyer: Addr, minter_addr: Addr, diff --git a/test-suite/src/common_setup/setup_minter/base_minter/setup.rs b/test-suite/src/common_setup/setup_minter/base_minter/setup.rs index 8c121fe8f..cb3424d1e 100644 --- a/test-suite/src/common_setup/setup_minter/base_minter/setup.rs +++ b/test-suite/src/common_setup/setup_minter/base_minter/setup.rs @@ -1,20 +1,19 @@ -use crate::common_setup::contract_boxes::contract_base_factory; use crate::common_setup::contract_boxes::contract_base_minter; use crate::common_setup::contract_boxes::contract_nt_collection; use crate::common_setup::contract_boxes::contract_sg721_base; +use crate::common_setup::contract_boxes::{contract_base_factory, App}; use crate::common_setup::msg::MinterCollectionResponse; use crate::common_setup::msg::MinterSetupParams; use crate::common_setup::setup_minter::common::constants::MIN_MINT_PRICE; use crate::common_setup::setup_minter::common::parse_response::build_collection_response; use cosmwasm_std::coin; -use cosmwasm_std::to_binary; +use cosmwasm_std::to_json_binary; use cosmwasm_std::Coin; use cosmwasm_std::Empty; use cosmwasm_std::{coins, Addr}; use cw_multi_test::AppResponse; use cw_multi_test::Executor; use sg2::msg::{CollectionParams, Sg2ExecuteMsg}; -use sg_multi_test::StargazeApp; use sg_std::NATIVE_DENOM; use crate::common_setup::msg::{CodeIds, MinterInstantiateParams}; @@ -23,7 +22,7 @@ use crate::common_setup::setup_minter::base_minter::mock_params::{ }; use crate::common_setup::setup_minter::common::constants::CREATION_FEE; -pub fn base_minter_sg721_nt_code_ids(router: &mut StargazeApp) -> CodeIds { +pub fn base_minter_sg721_nt_code_ids(router: &mut App) -> CodeIds { let minter_code_id = router.store_code(contract_base_minter()); println!("base_minter_code_id: {minter_code_id}"); @@ -39,7 +38,7 @@ pub fn base_minter_sg721_nt_code_ids(router: &mut StargazeApp) -> CodeIds { } } -pub fn base_minter_sg721_collection_code_ids(router: &mut StargazeApp) -> CodeIds { +pub fn base_minter_sg721_collection_code_ids(router: &mut App) -> CodeIds { let minter_code_id = router.store_code(contract_base_minter()); println!("base_minter_code_id: {minter_code_id}"); @@ -89,7 +88,7 @@ pub fn setup_minter_contract(setup_params: MinterSetupParams) -> MinterCollectio } pub fn sudo_update_params( - app: &mut StargazeApp, + app: &mut App, collection_responses: &Vec, code_ids: CodeIds, update_msg: Option>, @@ -117,7 +116,7 @@ pub fn sudo_update_params( let sudo_res = app.sudo(cw_multi_test::SudoMsg::Wasm(cw_multi_test::WasmSudo { contract_addr: collection_response.factory.clone().unwrap(), - msg: to_binary(&sudo_update_msg).unwrap(), + msg: to_json_binary(&sudo_update_msg).unwrap(), })); sudo_responses.push(sudo_res); } @@ -125,7 +124,7 @@ pub fn sudo_update_params( } pub fn configure_base_minter( - app: &mut StargazeApp, + app: &mut App, minter_admin: Addr, collection_params_vec: Vec, minter_instantiate_params_vec: Vec, diff --git a/test-suite/src/common_setup/setup_minter/common/parse_response.rs b/test-suite/src/common_setup/setup_minter/common/parse_response.rs index 1c83bfbdb..758f4dd87 100644 --- a/test-suite/src/common_setup/setup_minter/common/parse_response.rs +++ b/test-suite/src/common_setup/setup_minter/common/parse_response.rs @@ -14,7 +14,7 @@ pub fn parse_factory_response(res: &AppResponse) -> (Addr, Addr) { for vector in vector_of_attribute_vectors { let contract_addr = vector .iter() - .filter(|a| a.key == "_contract_addr") + .filter(|a| a.key == "_contract_address") .map(|e| e.value.clone()) .collect::>(); contract_addrs = [contract_addrs.clone(), contract_addr].concat(); diff --git a/test-suite/src/common_setup/setup_minter/open_edition_minter/setup.rs b/test-suite/src/common_setup/setup_minter/open_edition_minter/setup.rs index e14aab4f4..488d13e49 100644 --- a/test-suite/src/common_setup/setup_minter/open_edition_minter/setup.rs +++ b/test-suite/src/common_setup/setup_minter/open_edition_minter/setup.rs @@ -1,5 +1,5 @@ use crate::common_setup::contract_boxes::{ - contract_open_edition_factory, contract_open_edition_minter, contract_sg721_base, + contract_open_edition_factory, contract_open_edition_minter, contract_sg721_base, App, }; use crate::common_setup::msg::{ MinterCollectionResponse, OpenEditionMinterInstantiateParams, OpenEditionMinterSetupParams, @@ -7,14 +7,14 @@ use crate::common_setup::msg::{ use crate::common_setup::setup_minter::base_minter::mock_params::MIN_MINT_PRICE; use crate::common_setup::setup_minter::common::parse_response::build_collection_response; use anyhow::Error; -use cosmwasm_std::{coin, coins, to_binary, Addr, Coin, Timestamp}; +use cosmwasm_std::{coin, coins, to_json_binary, Addr, Coin, Timestamp}; use cw_multi_test::{AppResponse, Executor}; use open_edition_factory::msg::{ OpenEditionMinterInitMsgExtension, OpenEditionUpdateParamsExtension, OpenEditionUpdateParamsMsg, }; use open_edition_factory::types::NftData; use sg2::msg::{CollectionParams, Sg2ExecuteMsg}; -use sg_multi_test::StargazeApp; + use sg_std::NATIVE_DENOM; use crate::common_setup::msg::CodeIds; @@ -123,7 +123,7 @@ pub fn setup_open_edition_minter_contract( } } -pub fn open_edition_minter_code_ids(router: &mut StargazeApp) -> CodeIds { +pub fn open_edition_minter_code_ids(router: &mut App) -> CodeIds { let minter_code_id = router.store_code(contract_open_edition_minter()); let factory_code_id = router.store_code(contract_open_edition_factory()); @@ -138,7 +138,7 @@ pub fn open_edition_minter_code_ids(router: &mut StargazeApp) -> CodeIds { } pub fn sudo_update_params( - app: &mut StargazeApp, + app: &mut App, collection_responses: &Vec, code_ids: CodeIds, update_msg: Option, @@ -174,7 +174,7 @@ pub fn sudo_update_params( let sudo_res = app.sudo(cw_multi_test::SudoMsg::Wasm(cw_multi_test::WasmSudo { contract_addr: collection_response.factory.clone().unwrap(), - msg: to_binary(&sudo_update_msg).unwrap(), + msg: to_json_binary(&sudo_update_msg).unwrap(), })); sudo_responses.push(sudo_res); } @@ -182,7 +182,7 @@ pub fn sudo_update_params( } pub fn configure_open_edition_minter( - app: &mut StargazeApp, + app: &mut App, minter_admin: Addr, collection_params_vec: Vec, minter_instantiate_params_vec: Vec, diff --git a/test-suite/src/common_setup/setup_minter/vending_minter/setup.rs b/test-suite/src/common_setup/setup_minter/vending_minter/setup.rs index d9d16f3b8..a4884b789 100644 --- a/test-suite/src/common_setup/setup_minter/vending_minter/setup.rs +++ b/test-suite/src/common_setup/setup_minter/vending_minter/setup.rs @@ -1,16 +1,15 @@ use crate::common_setup::contract_boxes::{ contract_sg721_base, contract_sg721_updatable, contract_vending_factory, - contract_vending_minter, + contract_vending_minter, App, }; use crate::common_setup::msg::MinterCollectionResponse; use crate::common_setup::msg::MinterSetupParams; use crate::common_setup::setup_minter::base_minter::mock_params::MIN_MINT_PRICE; use crate::common_setup::setup_minter::common::parse_response::build_collection_response; -use cosmwasm_std::{coin, coins, to_binary, Addr}; +use cosmwasm_std::{coin, coins, to_json_binary, Addr}; use cw_multi_test::{AppResponse, Executor}; use sg2::msg::CreateMinterMsg; use sg2::msg::{CollectionParams, Sg2ExecuteMsg}; -use sg_multi_test::StargazeApp; use sg_std::NATIVE_DENOM; use vending_factory::msg::{VendingMinterInitMsgExtension, VendingUpdateParamsExtension}; @@ -77,7 +76,7 @@ pub fn setup_minter_contract(setup_params: MinterSetupParams) -> MinterCollectio build_collection_response(res, factory_addr) } -pub fn vending_minter_code_ids(router: &mut StargazeApp) -> CodeIds { +pub fn vending_minter_code_ids(router: &mut App) -> CodeIds { let minter_code_id = router.store_code(contract_vending_minter()); println!("minter_code_id: {minter_code_id}"); @@ -93,7 +92,7 @@ pub fn vending_minter_code_ids(router: &mut StargazeApp) -> CodeIds { } } -pub fn vending_minter_updatable_code_ids(router: &mut StargazeApp) -> CodeIds { +pub fn vending_minter_updatable_code_ids(router: &mut App) -> CodeIds { let minter_code_id = router.store_code(contract_vending_minter()); println!("minter_code_id: {minter_code_id}"); @@ -110,7 +109,7 @@ pub fn vending_minter_updatable_code_ids(router: &mut StargazeApp) -> CodeIds { } pub fn configure_minter( - app: &mut StargazeApp, + app: &mut App, minter_admin: Addr, collection_params_vec: Vec, minter_instantiate_params_vec: Vec, @@ -137,7 +136,7 @@ pub fn configure_minter( } pub fn sudo_update_params( - app: &mut StargazeApp, + app: &mut App, collection_responses: &Vec, code_ids: CodeIds, update_msg: Option>, @@ -168,7 +167,7 @@ pub fn sudo_update_params( let sudo_res = app.sudo(cw_multi_test::SudoMsg::Wasm(cw_multi_test::WasmSudo { contract_addr: collection_response.factory.clone().unwrap(), - msg: to_binary(&sudo_update_msg).unwrap(), + msg: to_json_binary(&sudo_update_msg).unwrap(), })); sudo_responses.push(sudo_res); } diff --git a/test-suite/src/common_setup/setup_whitelist_merkletree.rs b/test-suite/src/common_setup/setup_whitelist_merkletree.rs index 1b1ed4766..a6a675010 100644 --- a/test-suite/src/common_setup/setup_whitelist_merkletree.rs +++ b/test-suite/src/common_setup/setup_whitelist_merkletree.rs @@ -1,16 +1,16 @@ use cosmwasm_std::{coin, Addr, Timestamp}; use cw_multi_test::Executor; -use sg_multi_test::StargazeApp; + use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use whitelist_mtree::msg::InstantiateMsg as WhitelistInstantiateMsg; -use crate::common_setup::contract_boxes::contract_whitelist_merkletree; +use crate::common_setup::contract_boxes::{contract_whitelist_merkletree, App}; pub const WHITELIST_AMOUNT: u128 = 66_000_000; const WL_PER_ADDRESS_LIMIT: u32 = 1; pub fn setup_whitelist_mtree_contract( - router: &mut StargazeApp, + router: &mut App, creator: &Addr, whitelist_code_id: Option, denom: Option<&str>, diff --git a/test-suite/src/common_setup/templates.rs b/test-suite/src/common_setup/templates.rs index 13016a33c..28517c77b 100644 --- a/test-suite/src/common_setup/templates.rs +++ b/test-suite/src/common_setup/templates.rs @@ -1,4 +1,4 @@ -use crate::common_setup::contract_boxes::custom_mock_app; +use crate::common_setup::contract_boxes::{custom_mock_app, App}; use crate::common_setup::msg::MinterTemplateResponse; use crate::common_setup::{ msg::MinterCollectionResponse, @@ -24,7 +24,7 @@ use open_edition_factory::msg::OpenEditionMinterInitMsgExtension; use open_edition_factory::state::{OpenEditionMinterParams, ParamsExtension}; use open_edition_factory::types::NftData; use sg2::tests::{mock_collection_params_1, mock_collection_two}; -use sg_multi_test::StargazeApp; + use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; pub fn vending_minter_template(num_tokens: u32) -> MinterTemplateResponse { @@ -140,10 +140,7 @@ pub fn vending_minter_with_start_time( } } -pub fn vending_minter_with_app( - num_tokens: u32, - mut app: StargazeApp, -) -> MinterTemplateResponse { +pub fn vending_minter_with_app(num_tokens: u32, mut app: App) -> MinterTemplateResponse { let start_time = Timestamp::from_nanos(GENESIS_MINT_START_TIME); let (creator, buyer) = setup_accounts(&mut app); let collection_params = mock_collection_params_1(Some(start_time)); @@ -211,7 +208,7 @@ pub fn vending_minter_with_sg721_updatable(num_tokens: u32) -> MinterTemplateRes pub fn vending_minter_updatable_with_app( num_tokens: u32, - mut app: StargazeApp, + mut app: App, ) -> MinterTemplateResponse { let start_time = Timestamp::from_nanos(GENESIS_MINT_START_TIME); let (creator, buyer) = setup_accounts(&mut app); @@ -420,7 +417,7 @@ pub fn open_edition_minter_start_and_end_time( } pub fn open_edition_minter_custom_code_ids( - app: StargazeApp, + app: App, params_extension: ParamsExtension, init_msg: OpenEditionMinterInitMsgExtension, code_ids: CodeIds, diff --git a/test-suite/src/open_edition_factory/tests/common.rs b/test-suite/src/open_edition_factory/tests/common.rs index 0b98d8df3..6f6c122a1 100644 --- a/test-suite/src/open_edition_factory/tests/common.rs +++ b/test-suite/src/open_edition_factory/tests/common.rs @@ -1,14 +1,13 @@ -use crate::common_setup::contract_boxes::{contract_open_edition_factory, custom_mock_app}; +use crate::common_setup::contract_boxes::{contract_open_edition_factory, custom_mock_app, App}; use crate::common_setup::setup_minter::open_edition_minter::mock_params::mock_params_proper; use cosmwasm_std::Addr; use cw_multi_test::Executor; use open_edition_factory::helpers::FactoryContract; use open_edition_factory::msg::InstantiateMsg; -use sg_multi_test::StargazeApp; const GOVERNANCE: &str = "governance"; -pub fn proper_instantiate() -> (StargazeApp, FactoryContract) { +pub fn proper_instantiate() -> (App, FactoryContract) { let mut app = custom_mock_app(); let factory_id = app.store_code(contract_open_edition_factory()); let minter_id = 2; diff --git a/test-suite/src/open_edition_factory/tests/queries.rs b/test-suite/src/open_edition_factory/tests/queries.rs index 32e927f0d..3d5c32733 100644 --- a/test-suite/src/open_edition_factory/tests/queries.rs +++ b/test-suite/src/open_edition_factory/tests/queries.rs @@ -6,14 +6,15 @@ mod tests { use open_edition_factory::helpers::FactoryContract; use open_edition_factory::msg::InstantiateMsg; use open_edition_factory::state::OpenEditionMinterParams; - use sg_multi_test::StargazeApp; - use crate::common_setup::contract_boxes::{contract_open_edition_factory, custom_mock_app}; + use crate::common_setup::contract_boxes::{ + contract_open_edition_factory, custom_mock_app, App, + }; use crate::common_setup::setup_minter::open_edition_minter::mock_params::mock_params_proper; const GOVERNANCE: &str = "governance"; - fn proper_instantiate() -> (StargazeApp, FactoryContract, OpenEditionMinterParams) { + fn proper_instantiate() -> (App, FactoryContract, OpenEditionMinterParams) { let mut app = custom_mock_app(); let factory_id = app.store_code(contract_open_edition_factory()); let minter_id = 2; diff --git a/test-suite/src/sg721_base/tests/integration_tests.rs b/test-suite/src/sg721_base/tests/integration_tests.rs index 454b24e0b..e266bc0c3 100644 --- a/test-suite/src/sg721_base/tests/integration_tests.rs +++ b/test-suite/src/sg721_base/tests/integration_tests.rs @@ -1,5 +1,6 @@ #[cfg(test)] mod tests { + use crate::common_setup::contract_boxes::App; use anyhow::Error; use cosmwasm_std::{coin, Addr}; use cw721::NumTokensResponse; @@ -8,7 +9,7 @@ mod tests { use sg2::tests::mock_collection_params; use sg721::ExecuteMsg as Sg721ExecuteMsg; use sg721::{CollectionInfo, InstantiateMsg}; - use sg_multi_test::StargazeApp; + use vending_factory::helpers::FactoryContract; use vending_factory::msg::{ ExecuteMsg, InstantiateMsg as FactoryInstantiateMsg, VendingMinterInitMsgExtension, @@ -33,7 +34,7 @@ mod tests { assert_eq!(res.unwrap_err().source().unwrap().to_string(), expected); } - fn proper_instantiate_factory() -> (StargazeApp, FactoryContract) { + fn proper_instantiate_factory() -> (App, FactoryContract) { let mut app = custom_mock_app(); let factory_id = app.store_code(contract_vending_factory()); let minter_id = app.store_code(contract_vending_minter()); @@ -58,7 +59,7 @@ mod tests { (app, factory_contract) } - fn proper_instantiate() -> (StargazeApp, Addr) { + fn proper_instantiate() -> (App, Addr) { let (mut app, factory_contract) = proper_instantiate_factory(); let sg721_id = app.store_code(contract_sg721_base()); @@ -89,7 +90,7 @@ mod tests { fn custom_proper_instantiate( custom_create_minter_msg: CreateMinterMsg, - ) -> (StargazeApp, Addr) { + ) -> (App, Addr) { let (mut app, factory_contract) = proper_instantiate_factory(); let sg721_id = app.store_code(contract_sg721_base()); @@ -803,12 +804,13 @@ mod tests { } mod sg721_mutable { + use crate::common_setup::contract_boxes::App; use cosmwasm_std::{coin, Addr}; use cw721::NumTokensResponse; use cw_multi_test::{BankSudo, Executor, SudoMsg}; use sg2::tests::mock_collection_params; use sg721_updatable::msg::QueryMsg; - use sg_multi_test::StargazeApp; + use sg_std::NATIVE_DENOM; const ADMIN: &str = "admin"; @@ -822,7 +824,7 @@ mod tests { }; use vending_factory::msg::ExecuteMsg; - fn proper_instantiate() -> (StargazeApp, Addr) { + fn proper_instantiate() -> (App, Addr) { let (mut app, factory_contract) = proper_instantiate_factory(); let sg721_id = app.store_code(contract_sg721_updatable()); diff --git a/test-suite/src/sg_eth_airdrop/setup/collection_whitelist_helpers.rs b/test-suite/src/sg_eth_airdrop/setup/collection_whitelist_helpers.rs index 7f6674cf8..29b20391c 100644 --- a/test-suite/src/sg_eth_airdrop/setup/collection_whitelist_helpers.rs +++ b/test-suite/src/sg_eth_airdrop/setup/collection_whitelist_helpers.rs @@ -1,15 +1,15 @@ use crate::sg_eth_airdrop::constants::claim_constants::{NATIVE_DENOM, STARGAZE_WALLET_01}; use crate::sg_eth_airdrop::constants::collection_constants::{MINT_PRICE, WHITELIST_AMOUNT}; +use crate::common_setup::contract_boxes::App; use crate::sg_eth_airdrop::setup::execute_msg::execute_contract_with_msg; use cosmwasm_std::{coins, Addr}; use cw_multi_test::{BankSudo, Executor, SudoMsg}; -use sg_multi_test::StargazeApp; extern crate whitelist_immutable; pub fn update_admin_for_whitelist( - app: &mut StargazeApp, + app: &mut App, sender: Addr, target_admin: Addr, target_contract: Addr, @@ -18,10 +18,11 @@ pub fn update_admin_for_whitelist( let update_admin_message = sg_whitelist::msg::ExecuteMsg::UpdateAdmins { admins: vec![target_admin.to_string()], }; + let _ = app.execute_contract(sender, target_contract, &update_admin_message, &[]); } -pub fn send_funds_to_address(app: &mut StargazeApp, target_address_str: &str, amount: u128) { +pub fn send_funds_to_address(app: &mut App, target_address_str: &str, amount: u128) { app.sudo(SudoMsg::Bank({ BankSudo::Mint { to_address: target_address_str.to_string(), @@ -32,7 +33,7 @@ pub fn send_funds_to_address(app: &mut StargazeApp, target_address_str: &str, am .ok(); } -pub fn execute_mint_fail_not_on_whitelist(app: &mut StargazeApp, minter_addr: Addr) { +pub fn execute_mint_fail_not_on_whitelist(app: &mut App, minter_addr: Addr) { //before mintlist add, fail let stargaze_wallet_01 = Addr::unchecked(STARGAZE_WALLET_01); let mint_msg = vending_minter::msg::ExecuteMsg::Mint {}; @@ -48,7 +49,7 @@ pub fn execute_mint_fail_not_on_whitelist(app: &mut StargazeApp, minter_addr: Ad } pub fn execute_airdrop_claim( - app: &mut StargazeApp, + app: &mut App, eth_addr_str: String, eth_sig_str: String, target_wallet: Addr, @@ -61,7 +62,7 @@ pub fn execute_airdrop_claim( let _ = execute_contract_with_msg(claim_message, app, target_wallet, airdrop_contract).unwrap(); } -pub fn execute_mint_success(app: &mut StargazeApp, sender: Addr, minter_addr: Addr) { +pub fn execute_mint_success(app: &mut App, sender: Addr, minter_addr: Addr) { //execute the mint let mint_msg = vending_minter::msg::ExecuteMsg::Mint {}; let res = app.execute_contract( diff --git a/test-suite/src/sg_eth_airdrop/setup/configure_mock_minter.rs b/test-suite/src/sg_eth_airdrop/setup/configure_mock_minter.rs index 516c9913f..c96e0e240 100644 --- a/test-suite/src/sg_eth_airdrop/setup/configure_mock_minter.rs +++ b/test-suite/src/sg_eth_airdrop/setup/configure_mock_minter.rs @@ -1,7 +1,7 @@ use crate::common_setup::setup_accounts_and_block::setup_accounts; use crate::common_setup::setup_collection_whitelist::setup_whitelist_contract; -use crate::common_setup::contract_boxes::contract_vending_factory; +use crate::common_setup::contract_boxes::{contract_vending_factory, App}; use crate::common_setup::setup_minter::vending_minter::mock_params::{ mock_create_minter, mock_params, }; @@ -11,12 +11,12 @@ use cosmwasm_std::{coins, Addr, Timestamp}; use cw_multi_test::Executor; use sg2::msg::Sg2ExecuteMsg; use sg2::tests::mock_collection_params_1; -use sg_multi_test::StargazeApp; + use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use crate::sg_eth_airdrop::setup::mock_whitelist_contract::mock_whitelist; -fn configure_mock_minter(app: &mut StargazeApp, creator: Addr) { +fn configure_mock_minter(app: &mut App, creator: Addr) { let minter_code_id = app.store_code(mock_minter()); println!("minter_code_id: {minter_code_id}"); @@ -45,7 +45,7 @@ fn configure_mock_minter(app: &mut StargazeApp, creator: Addr) { let res = app.execute_contract(creator, factory_addr, &msg, &creation_fee); assert!(res.is_ok()); } -pub fn configure_mock_minter_with_mock_whitelist(app: &mut StargazeApp) { +pub fn configure_mock_minter_with_mock_whitelist(app: &mut App) { let (creator, _) = setup_accounts(app); configure_mock_minter(app, creator.clone()); let whitelist_code_id = app.store_code(mock_whitelist()); diff --git a/test-suite/src/sg_eth_airdrop/setup/execute_msg.rs b/test-suite/src/sg_eth_airdrop/setup/execute_msg.rs index 5a1a105eb..e539e6d20 100644 --- a/test-suite/src/sg_eth_airdrop/setup/execute_msg.rs +++ b/test-suite/src/sg_eth_airdrop/setup/execute_msg.rs @@ -1,7 +1,7 @@ use crate::sg_eth_airdrop::constants::claim_constants::OWNER; use crate::sg_eth_airdrop::constants::collection_constants::WHITELIST_AMOUNT; use crate::{ - common_setup::contract_boxes::{contract_eth_airdrop, contract_whitelist_immutable}, + common_setup::contract_boxes::{contract_eth_airdrop, contract_whitelist_immutable, App}, sg_eth_airdrop::setup::test_msgs::InstantiateParams, }; use anyhow::Error as anyhow_error; @@ -10,7 +10,7 @@ use cw_multi_test::error::Error; use cw_multi_test::{AppResponse, BankSudo, Executor, SudoMsg}; use eyre::Result; use sg_eth_airdrop::msg::{ExecuteMsg, InstantiateMsg}; -use sg_multi_test::StargazeApp; + use sg_std::NATIVE_DENOM; pub fn instantiate_contract(params: InstantiateParams) -> Result { @@ -56,17 +56,17 @@ pub fn instantiate_contract(params: InstantiateParams) -> Result Result { +) -> Result> { let result = app.execute_contract(user, target_address, &msg, &[]); Ok(result.unwrap()) } pub fn execute_contract_error_with_msg( msg: ExecuteMsg, - app: &mut StargazeApp, + app: &mut App, user: Addr, target_address: Addr, ) -> String { diff --git a/test-suite/src/sg_eth_airdrop/setup/mock_minter_contract.rs b/test-suite/src/sg_eth_airdrop/setup/mock_minter_contract.rs index 07a84c060..86e9cfbe7 100644 --- a/test-suite/src/sg_eth_airdrop/setup/mock_minter_contract.rs +++ b/test-suite/src/sg_eth_airdrop/setup/mock_minter_contract.rs @@ -1,10 +1,11 @@ use cosmwasm_std::entry_point; use cosmwasm_std::{ - to_binary, Binary, Coin, Deps, DepsMut, Env, MessageInfo, StdResult, Timestamp, + to_json_binary, Binary, Coin, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult, + Timestamp, }; use cw_multi_test::{Contract, ContractWrapper}; use sg_eth_airdrop::error::ContractError; -use sg_std::{Response, StargazeMsgWrapper}; + use vending_factory::msg::VendingMinterCreateMsg; use vending_minter::msg::{ExecuteMsg, QueryMsg}; @@ -46,8 +47,8 @@ pub fn execute( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::Config {} => to_binary(&query_config()), - _ => to_binary("invalid"), + QueryMsg::Config {} => to_json_binary(&query_config()), + _ => to_json_binary("invalid"), } } @@ -66,7 +67,7 @@ fn query_config() -> ConfigResponse { } } -pub fn mock_minter() -> Box> { +pub fn mock_minter() -> Box> { let contract = ContractWrapper::new(execute, instantiate, query); Box::new(contract) } diff --git a/test-suite/src/sg_eth_airdrop/setup/mock_whitelist_contract.rs b/test-suite/src/sg_eth_airdrop/setup/mock_whitelist_contract.rs index 28581e8a0..62a7f2b28 100644 --- a/test-suite/src/sg_eth_airdrop/setup/mock_whitelist_contract.rs +++ b/test-suite/src/sg_eth_airdrop/setup/mock_whitelist_contract.rs @@ -1,8 +1,10 @@ use cosmwasm_std::entry_point; -use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, StdResult}; +use cosmwasm_std::{ + to_json_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult, +}; use cw_multi_test::{Contract, ContractWrapper}; use sg_eth_airdrop::error::ContractError; -use sg_std::{Response, StargazeMsgWrapper}; + use sg_whitelist::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; #[cfg_attr(not(feature = "library"), entry_point)] @@ -31,7 +33,7 @@ pub fn execute( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(_deps: Deps, _env: Env, _msg: QueryMsg) -> StdResult { - to_binary("mock") + to_json_binary("mock") } fn execute_add_members() -> Result { @@ -39,7 +41,7 @@ fn execute_add_members() -> Result { Ok(res) } -pub fn mock_whitelist() -> Box> { +pub fn mock_whitelist() -> Box> { let contract = ContractWrapper::new(execute, instantiate, query); Box::new(contract) } diff --git a/test-suite/src/sg_eth_airdrop/setup/test_msgs.rs b/test-suite/src/sg_eth_airdrop/setup/test_msgs.rs index 87e621357..e4f066743 100644 --- a/test-suite/src/sg_eth_airdrop/setup/test_msgs.rs +++ b/test-suite/src/sg_eth_airdrop/setup/test_msgs.rs @@ -1,5 +1,6 @@ use cosmwasm_std::Addr; -use sg_multi_test::StargazeApp; + +use crate::common_setup::contract_boxes; pub struct InstantiateParams<'a> { pub addresses: Vec, @@ -7,7 +8,7 @@ pub struct InstantiateParams<'a> { pub expected_airdrop_contract_id: u64, pub minter_address: Addr, pub admin_account: Addr, - pub app: &'a mut StargazeApp, + pub app: &'a mut contract_boxes::App, pub per_address_limit: u32, pub claim_msg_plaintext: String, } diff --git a/test-suite/src/sg_eth_airdrop/tests/test_claim.rs b/test-suite/src/sg_eth_airdrop/tests/test_claim.rs index 4c93c5432..04f62ae07 100644 --- a/test-suite/src/sg_eth_airdrop/tests/test_claim.rs +++ b/test-suite/src/sg_eth_airdrop/tests/test_claim.rs @@ -1,4 +1,4 @@ -use crate::common_setup::contract_boxes::custom_mock_app; +use crate::common_setup::contract_boxes::{custom_mock_app, App}; use crate::sg_eth_airdrop::constants::collection_constants::WHITELIST_AMOUNT; use crate::sg_eth_airdrop::setup::configure_mock_minter::configure_mock_minter_with_mock_whitelist; use crate::sg_eth_airdrop::setup::setup_signatures::{ @@ -11,7 +11,6 @@ use sg_eth_airdrop::msg::{ExecuteMsg, QueryMsg}; use ethers_core::rand::thread_rng; use ethers_signers::{LocalWallet, Signer}; -use sg_multi_test::StargazeApp; use crate::sg_eth_airdrop::constants::claim_constants::{ CONFIG_PLAINTEXT, MOCK_AIRDROP_ADDR_STR, MOCK_MINTER_ADDR_STR, NATIVE_DENOM, OWNER, @@ -24,7 +23,7 @@ use crate::sg_eth_airdrop::setup::execute_msg::{ use sg_eth_airdrop::contract::INSTANTIATION_FEE; -fn query_minter_as_expected(app: &mut StargazeApp, airdrop_contract: Addr, minter_addr: Addr) { +fn query_minter_as_expected(app: &mut App, airdrop_contract: Addr, minter_addr: Addr) { let query_msg = QueryMsg::GetMinter {}; let result: Addr = app .wrap() @@ -176,7 +175,7 @@ fn test_valid_eth_sig_claim() { .unwrap(); let expected_attributes = [ Attribute { - key: "_contract_addr".to_string(), + key: "_contract_address".to_string(), value: airdrop_contract.to_string(), }, Attribute { @@ -261,7 +260,7 @@ fn test_can_not_claim_twice() { let expected_attributes = [ Attribute { - key: "_contract_addr".to_string(), + key: "_contract_address".to_string(), value: airdrop_contract.to_string(), }, Attribute { @@ -491,7 +490,7 @@ fn test_one_eth_claim_two_stargaze_addresses_invalid() { let expected_attributes = [ Attribute { - key: "_contract_addr".to_string(), + key: "_contract_address".to_string(), value: airdrop_contract.to_string(), }, Attribute { diff --git a/test-suite/src/sg_eth_airdrop/tests/test_immutable_whitelist.rs b/test-suite/src/sg_eth_airdrop/tests/test_immutable_whitelist.rs index 4d64e992e..89ee195f9 100644 --- a/test-suite/src/sg_eth_airdrop/tests/test_immutable_whitelist.rs +++ b/test-suite/src/sg_eth_airdrop/tests/test_immutable_whitelist.rs @@ -20,7 +20,7 @@ fn test_instantiate_with_addresses() { "addr3".to_string(), ]; - let mut app = custom_mock_app(); + let mut app = { custom_mock_app }(); configure_mock_minter_with_mock_whitelist(&mut app); let minter_addr = Addr::unchecked(MOCK_MINTER_ADDR_STR); let airdrop_contract = Addr::unchecked(MOCK_AIRDROP_ADDR_STR); diff --git a/test-suite/src/splits/tests/integration_tests.rs b/test-suite/src/splits/tests/integration_tests.rs index 1b7673799..72a44a19b 100644 --- a/test-suite/src/splits/tests/integration_tests.rs +++ b/test-suite/src/splits/tests/integration_tests.rs @@ -4,7 +4,7 @@ mod tests { use crate::common_setup::{ contract_boxes_empty::contract_splits, helpers::mock_app_builder_init_funds, }; - use cosmwasm_std::{to_binary, Addr, Coin}; + use cosmwasm_std::{to_json_binary, Addr, Coin}; use cw2::{query_contract_info, ContractVersion}; use cw4::{Cw4ExecuteMsg, Member, MemberListResponse}; use cw4_group::msg::ExecuteMsg as Cw4GroupExecuteMsg; @@ -60,7 +60,7 @@ mod tests { let msg = sg_splits::msg::InstantiateMsg { group: Group::Cw4Instantiate(ContractInstantiateMsg { code_id: app.store_code(contract_group()), - msg: to_binary(&group_msg).unwrap(), + msg: to_json_binary(&group_msg).unwrap(), admin: None, label: "cw4-group".to_string(), }), @@ -87,7 +87,7 @@ mod tests { let msg = sg_splits::msg::InstantiateMsg { group: Group::Cw4Instantiate(ContractInstantiateMsg { code_id: app.store_code(contract_group()), - msg: to_binary(&group_msg).unwrap(), + msg: to_json_binary(&group_msg).unwrap(), admin: None, label: "cw4-group".to_string(), }), diff --git a/test-suite/src/vending_factory/tests/integration_tests.rs b/test-suite/src/vending_factory/tests/integration_tests.rs index 41f1e5f70..2ebdf4cc4 100644 --- a/test-suite/src/vending_factory/tests/integration_tests.rs +++ b/test-suite/src/vending_factory/tests/integration_tests.rs @@ -2,16 +2,16 @@ mod tests { use cosmwasm_std::Addr; use cw_multi_test::Executor; - use sg_multi_test::StargazeApp; + use vending_factory::helpers::FactoryContract; use vending_factory::msg::InstantiateMsg; - use crate::common_setup::contract_boxes::{contract_vending_factory, custom_mock_app}; + use crate::common_setup::contract_boxes::{contract_vending_factory, custom_mock_app, App}; use crate::common_setup::setup_minter::vending_minter::mock_params::mock_params; const GOVERNANCE: &str = "governance"; - fn proper_instantiate() -> (StargazeApp, FactoryContract) { + fn proper_instantiate() -> (App, FactoryContract) { let mut app = custom_mock_app(); let factory_id = app.store_code(contract_vending_factory()); let minter_id = 2; diff --git a/test-suite/src/vending_minter/tests/splits.rs b/test-suite/src/vending_minter/tests/splits.rs index 23326b97a..d97e8a5a6 100644 --- a/test-suite/src/vending_minter/tests/splits.rs +++ b/test-suite/src/vending_minter/tests/splits.rs @@ -1,5 +1,5 @@ use crate::common_setup::{ - contract_boxes::{contract_splits, custom_mock_app}, + contract_boxes::{contract_splits, custom_mock_app, App}, msg::MinterCollectionResponse, setup_accounts_and_block::{instantiate_group, setup_accounts, setup_block_time}, setup_minter::{ @@ -11,7 +11,7 @@ use cosmwasm_std::{coins, Addr, Coin, Timestamp}; use cw4::Member; use cw_multi_test::{next_block, Executor}; use sg2::tests::mock_collection_params_1; -use sg_multi_test::StargazeApp; + use sg_splits::msg::{ExecuteMsg as SplitsExecuteMsg, Group}; use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; @@ -30,7 +30,7 @@ pub fn member>(addr: T, weight: u64) -> Member { } #[track_caller] -fn instantiate_splits(app: &mut StargazeApp, group_addr: Addr) -> Addr { +fn instantiate_splits(app: &mut App, group_addr: Addr) -> Addr { let splits_id = app.store_code(contract_splits()); println!("splits_id: {splits_id}"); let msg = sg_splits::msg::InstantiateMsg { @@ -42,7 +42,7 @@ fn instantiate_splits(app: &mut StargazeApp, group_addr: Addr) -> Addr { } #[track_caller] -fn setup_splits_test_case(app: &mut StargazeApp, init_funds: Vec) -> (Addr, Addr) { +fn setup_splits_test_case(app: &mut App, init_funds: Vec) -> (Addr, Addr) { // 1. Instantiate group contract with members (and OWNER as admin) let members = vec![ member(OWNER, 50), diff --git a/test-suite/src/vending_minter/tests/whitelist.rs b/test-suite/src/vending_minter/tests/whitelist.rs index d79d55ac5..662ac47d6 100644 --- a/test-suite/src/vending_minter/tests/whitelist.rs +++ b/test-suite/src/vending_minter/tests/whitelist.rs @@ -62,10 +62,16 @@ fn invalid_whitelist_instantiate() { ); let err = minter_collection_response[0].error.as_ref(); - assert_eq!( - err.unwrap().source().unwrap().source().unwrap().to_string(), - "Generic error: Querier contract error: cw_multi_test::wasm::ContractData not found" - ) + assert!(err + .unwrap() + .source() + .unwrap() + .source() + .unwrap() + .to_string() + .contains( + "Generic error: Querier contract error: type: cw_multi_test::wasm::ContractData;" + )) } #[test] @@ -107,10 +113,15 @@ fn set_invalid_whitelist() { &[], ) .unwrap_err(); - assert_eq!( - err.source().unwrap().source().unwrap().to_string(), - "Generic error: Querier contract error: cw_multi_test::wasm::ContractData not found" - ); + assert!(err + .source() + .unwrap() + .source() + .unwrap() + .to_string() + .contains( + "Generic error: Querier contract error: type: cw_multi_test::wasm::ContractData;" + )); // move time to make wl start setup_block_time(&mut router, GENESIS_MINT_START_TIME + 201, Some(11)); diff --git a/test-suite/src/whitelist/tests/integration_tests.rs b/test-suite/src/whitelist/tests/integration_tests.rs index 393f2a12e..c605aacc3 100644 --- a/test-suite/src/whitelist/tests/integration_tests.rs +++ b/test-suite/src/whitelist/tests/integration_tests.rs @@ -1,6 +1,6 @@ use cosmwasm_std::{coin, coins, Addr, Timestamp}; use cw_multi_test::{BankSudo, Executor, SudoMsg as CWSudoMsg}; -use sg_multi_test::StargazeApp; + use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use sg_whitelist::{ @@ -8,7 +8,7 @@ use sg_whitelist::{ state::AdminList, }; -use crate::common_setup::contract_boxes::{contract_collection_whitelist, custom_mock_app}; +use crate::common_setup::contract_boxes::{contract_collection_whitelist, custom_mock_app, App}; const COLLECTION_WHITELIST_ADDR: &str = "contract0"; const ADMIN: &str = "admin"; @@ -18,7 +18,7 @@ const UNIT_AMOUNT: u128 = 0; const GENESIS_START_TIME: Timestamp = Timestamp::from_nanos(GENESIS_MINT_START_TIME); const END_TIME: Timestamp = Timestamp::from_nanos(GENESIS_MINT_START_TIME + 1000); -fn instantiate_contract(admin_account: &str, app: &mut StargazeApp) { +fn instantiate_contract(admin_account: &str, app: &mut App) { let admin = Addr::unchecked(admin_account); let funds_amount = 100000000; @@ -53,7 +53,7 @@ fn instantiate_contract(admin_account: &str, app: &mut StargazeApp) { ); } -fn add_members_with_specified_admin(admin: &str, members: Vec, app: &mut StargazeApp) { +fn add_members_with_specified_admin(admin: &str, members: Vec, app: &mut App) { let admin_addr = Addr::unchecked(admin); let collection_whitelist_contract = Addr::unchecked("contract0"); let initial_members = vec!["member0".to_string()]; @@ -92,7 +92,7 @@ fn add_members_with_specified_admin(admin: &str, members: Vec, app: &mut assert_eq!(query_result, expected_result); } -fn remove_members_with_specified_admin(admin: &str, members: Vec, app: &mut StargazeApp) { +fn remove_members_with_specified_admin(admin: &str, members: Vec, app: &mut App) { let admin_addr = Addr::unchecked(admin); let collection_whitelist_contract = Addr::unchecked("contract0"); let initial_members = vec![ @@ -133,7 +133,7 @@ fn remove_members_with_specified_admin(admin: &str, members: Vec, app: & assert_eq!(query_result, expected_result); } -fn add_members_blocked(admin: &str, members: Vec, app: &mut StargazeApp) { +fn add_members_blocked(admin: &str, members: Vec, app: &mut App) { let admin_addr = Addr::unchecked(admin); let collection_whitelist_contract = Addr::unchecked("contract0"); let initial_members = vec!["member0".to_string()]; diff --git a/test-suite/src/whitelist_immutable/tests/integration_tests.rs b/test-suite/src/whitelist_immutable/tests/integration_tests.rs index 306284e62..5f859cfcb 100644 --- a/test-suite/src/whitelist_immutable/tests/integration_tests.rs +++ b/test-suite/src/whitelist_immutable/tests/integration_tests.rs @@ -2,11 +2,10 @@ mod tests { use cosmwasm_std::Addr; use cw_multi_test::Executor; - use sg_multi_test::StargazeApp; use whitelist_immutable::msg::*; use whitelist_immutable::{helpers::WhitelistImmutableContract, state::Config}; - use crate::common_setup::contract_boxes::{contract_whitelist_immutable, custom_mock_app}; + use crate::common_setup::contract_boxes::{contract_whitelist_immutable, custom_mock_app, App}; const CREATOR: &str = "creator"; @@ -35,7 +34,7 @@ mod tests { } pub fn instantiate_with_addresses( - app: &mut StargazeApp, + app: &mut App, addrs: Vec, per_address_limit: u32, ) -> Addr { @@ -56,7 +55,7 @@ mod tests { .unwrap() } - pub fn query_address_count(app: &mut StargazeApp, addrs: Vec, wl_addr: Addr) { + pub fn query_address_count(app: &mut App, addrs: Vec, wl_addr: Addr) { let count: u64 = app .wrap() .query_wasm_smart(wl_addr, &QueryMsg::AddressCount {}) @@ -64,7 +63,7 @@ mod tests { assert_eq!(count, addrs.len() as u64); } - pub fn query_admin(app: &mut StargazeApp, wl_addr: Addr) { + pub fn query_admin(app: &mut App, wl_addr: Addr) { let admin: String = app .wrap() .query_wasm_smart(wl_addr, &QueryMsg::Admin {}) @@ -72,7 +71,7 @@ mod tests { assert_eq!(admin, CREATOR.to_string()); } - pub fn query_includes_address(app: &mut StargazeApp, wl_addr: Addr, addr_to_check: String) { + pub fn query_includes_address(app: &mut App, wl_addr: Addr, addr_to_check: String) { let includes: bool = app .wrap() .query_wasm_smart( @@ -85,7 +84,7 @@ mod tests { assert!(includes); } - pub fn query_per_address_limit(app: &mut StargazeApp, wl_addr: Addr, per_address_limit: u32) { + pub fn query_per_address_limit(app: &mut App, wl_addr: Addr, per_address_limit: u32) { let limit: u32 = app .wrap() .query_wasm_smart(wl_addr, &QueryMsg::PerAddressLimit {}) diff --git a/test-suite/src/whitelist_merkletree/tests/integration_tests.rs b/test-suite/src/whitelist_merkletree/tests/integration_tests.rs index 6f846f256..f6b3cd68a 100644 --- a/test-suite/src/whitelist_merkletree/tests/integration_tests.rs +++ b/test-suite/src/whitelist_merkletree/tests/integration_tests.rs @@ -3,7 +3,7 @@ mod tests { use cosmwasm_std::{coin, Addr, Timestamp}; use cw_multi_test::Executor; use rs_merkle::MerkleTree; - use sg_multi_test::StargazeApp; + use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use whitelist_mtree::{ @@ -11,7 +11,9 @@ mod tests { tests::{hasher::SortingSha256Hasher, test_helpers::hash_and_build_tree}, }; - use crate::common_setup::contract_boxes::{contract_whitelist_merkletree, custom_mock_app}; + use crate::common_setup::contract_boxes::{ + contract_whitelist_merkletree, custom_mock_app, App, + }; type Tree = MerkleTree; @@ -44,7 +46,7 @@ mod tests { } pub fn instantiate_with_root( - app: &mut StargazeApp, + app: &mut App, per_address_limit: u32, merkle_root: String, ) -> Addr { @@ -70,7 +72,7 @@ mod tests { .unwrap() } - pub fn query_admin_list(app: &mut StargazeApp, wl_addr: Addr) { + pub fn query_admin_list(app: &mut App, wl_addr: Addr) { let res: AdminListResponse = app .wrap() .query_wasm_smart(wl_addr, &QueryMsg::AdminList {}) @@ -80,7 +82,7 @@ mod tests { } pub fn query_includes_address( - app: &mut StargazeApp, + app: &mut App, wl_addr: Addr, addr_to_check: String, proof_hashes: Vec, @@ -98,7 +100,7 @@ mod tests { assert!(res.has_member); } - pub fn query_per_address_limit(app: &mut StargazeApp, wl_addr: Addr, per_address_limit: u32) { + pub fn query_per_address_limit(app: &mut App, wl_addr: Addr, per_address_limit: u32) { let config: ConfigResponse = app .wrap() .query_wasm_smart(wl_addr, &QueryMsg::Config {}) diff --git a/ts/src/WhitelistFlex.client.ts b/ts/src/WhitelistFlex.client.ts index 42245dc66..7701fd4ea 100644 --- a/ts/src/WhitelistFlex.client.ts +++ b/ts/src/WhitelistFlex.client.ts @@ -6,7 +6,7 @@ import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; import { StdFee } from "@cosmjs/amino"; -import { Timestamp, Uint64, Uint128, InstantiateMsg, Member, Coin, ExecuteMsg, AddMembersMsg, RemoveMembersMsg, QueryMsg, CosmosMsgForEmpty, BankMsg, WasmMsg, Binary, Empty, AdminListResponse, CanExecuteResponse, ConfigResponse, HasEndedResponse, HasMemberResponse, HasStartedResponse, IsActiveResponse, MemberResponse, MembersResponse } from "./WhitelistFlex.types"; +import { Timestamp, Uint64, Uint128, InstantiateMsg, Member, Coin, ExecuteMsg, AddMembersMsg, RemoveMembersMsg, QueryMsg, CosmosMsgForEmpty, BankMsg, Binary, IbcMsg, WasmMsg, GovMsg, VoteOption, Empty, IbcTimeout, IbcTimeoutBlock, AdminListResponse, CanExecuteResponse, ConfigResponse, HasEndedResponse, HasMemberResponse, HasStartedResponse, IsActiveResponse, MemberResponse, MembersResponse } from "./WhitelistFlex.types"; export interface WhitelistFlexReadOnlyInterface { contractAddress: string; hasStarted: () => Promise; diff --git a/ts/src/WhitelistFlex.message-composer.ts b/ts/src/WhitelistFlex.message-composer.ts index b2dc8c709..8d523e855 100644 --- a/ts/src/WhitelistFlex.message-composer.ts +++ b/ts/src/WhitelistFlex.message-composer.ts @@ -7,7 +7,7 @@ import { MsgExecuteContractEncodeObject } from "cosmwasm"; import { MsgExecuteContract } from "cosmjs-types/cosmwasm/wasm/v1/tx"; import { toUtf8 } from "@cosmjs/encoding"; -import { Timestamp, Uint64, Uint128, InstantiateMsg, Member, Coin, ExecuteMsg, AddMembersMsg, RemoveMembersMsg, QueryMsg, CosmosMsgForEmpty, BankMsg, WasmMsg, Binary, Empty, AdminListResponse, CanExecuteResponse, ConfigResponse, HasEndedResponse, HasMemberResponse, HasStartedResponse, IsActiveResponse, MemberResponse, MembersResponse } from "./WhitelistFlex.types"; +import { Timestamp, Uint64, Uint128, InstantiateMsg, Member, Coin, ExecuteMsg, AddMembersMsg, RemoveMembersMsg, QueryMsg, CosmosMsgForEmpty, BankMsg, Binary, IbcMsg, WasmMsg, GovMsg, VoteOption, Empty, IbcTimeout, IbcTimeoutBlock, AdminListResponse, CanExecuteResponse, ConfigResponse, HasEndedResponse, HasMemberResponse, HasStartedResponse, IsActiveResponse, MemberResponse, MembersResponse } from "./WhitelistFlex.types"; export interface WhitelistFlexMessage { contractAddress: string; sender: string; diff --git a/ts/src/WhitelistFlex.types.ts b/ts/src/WhitelistFlex.types.ts index 2f140a274..89923a8b8 100644 --- a/ts/src/WhitelistFlex.types.ts +++ b/ts/src/WhitelistFlex.types.ts @@ -82,8 +82,18 @@ export type CosmosMsgForEmpty = { bank: BankMsg; } | { custom: Empty; +} | { + stargate: { + type_url: string; + value: Binary; + [k: string]: unknown; + }; +} | { + ibc: IbcMsg; } | { wasm: WasmMsg; +} | { + gov: GovMsg; }; export type BankMsg = { send: { @@ -97,6 +107,28 @@ export type BankMsg = { [k: string]: unknown; }; }; +export type Binary = string; +export type IbcMsg = { + transfer: { + amount: Coin; + channel_id: string; + timeout: IbcTimeout; + to_address: string; + [k: string]: unknown; + }; +} | { + send_packet: { + channel_id: string; + data: Binary; + timeout: IbcTimeout; + [k: string]: unknown; + }; +} | { + close_channel: { + channel_id: string; + [k: string]: unknown; + }; +}; export type WasmMsg = { execute: { contract_addr: string; @@ -132,10 +164,27 @@ export type WasmMsg = { [k: string]: unknown; }; }; -export type Binary = string; +export type GovMsg = { + vote: { + proposal_id: number; + vote: VoteOption; + [k: string]: unknown; + }; +}; +export type VoteOption = "yes" | "no" | "abstain" | "no_with_veto"; export interface Empty { [k: string]: unknown; } +export interface IbcTimeout { + block?: IbcTimeoutBlock | null; + timestamp?: Timestamp | null; + [k: string]: unknown; +} +export interface IbcTimeoutBlock { + height: number; + revision: number; + [k: string]: unknown; +} export interface AdminListResponse { admins: string[]; mutable: boolean; From 1e5a0b157a9c2a2a44ed4a79b77bda3211ef1b93 Mon Sep 17 00:00:00 2001 From: "shane.stars" Date: Wed, 31 Jan 2024 23:34:05 -0500 Subject: [PATCH 02/24] Remove unused Instantiate msg (#654) * Remove unused Instantiate msg * Generated schema --- .../minters/vending-minter/examples/schema.rs | 5 +- .../schema/instantiate_msg.json | 298 ------------------ contracts/minters/vending-minter/src/msg.rs | 7 - ts/src/VendingMinter.client.ts | 2 +- ts/src/VendingMinter.message-composer.ts | 2 +- ts/src/VendingMinter.types.ts | 54 ---- 6 files changed, 4 insertions(+), 364 deletions(-) delete mode 100644 contracts/minters/vending-minter/schema/instantiate_msg.json diff --git a/contracts/minters/vending-minter/examples/schema.rs b/contracts/minters/vending-minter/examples/schema.rs index e7bd3ac0e..5a90b6b6a 100644 --- a/contracts/minters/vending-minter/examples/schema.rs +++ b/contracts/minters/vending-minter/examples/schema.rs @@ -5,8 +5,8 @@ use cosmwasm_schema::{export_schema, remove_schemas, schema_for}; use sg4::StatusResponse; use vending_minter::msg::{ - ConfigResponse, ExecuteMsg, InstantiateMsg, MintCountResponse, MintPriceResponse, - MintableNumTokensResponse, QueryMsg, StartTimeResponse, + ConfigResponse, ExecuteMsg, MintCountResponse, MintPriceResponse, MintableNumTokensResponse, + QueryMsg, StartTimeResponse, }; use vending_minter::state::Config; @@ -16,7 +16,6 @@ fn main() { create_dir_all(&out_dir).unwrap(); remove_schemas(&out_dir).unwrap(); - export_schema(&schema_for!(InstantiateMsg), &out_dir); export_schema(&schema_for!(ExecuteMsg), &out_dir); export_schema(&schema_for!(QueryMsg), &out_dir); export_schema(&schema_for!(Config), &out_dir); diff --git a/contracts/minters/vending-minter/schema/instantiate_msg.json b/contracts/minters/vending-minter/schema/instantiate_msg.json deleted file mode 100644 index e36b41465..000000000 --- a/contracts/minters/vending-minter/schema/instantiate_msg.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "InstantiateMsg", - "type": "object", - "required": [ - "create_msg", - "params" - ], - "properties": { - "create_msg": { - "$ref": "#/definitions/CreateMinterMsg_for_VendingMinterInitMsgExtension" - }, - "params": { - "$ref": "#/definitions/MinterParams_for_ParamsExtension" - } - }, - "additionalProperties": false, - "definitions": { - "Coin": { - "type": "object", - "required": [ - "amount", - "denom" - ], - "properties": { - "amount": { - "$ref": "#/definitions/Uint128" - }, - "denom": { - "type": "string" - } - } - }, - "CollectionInfo_for_RoyaltyInfoResponse": { - "type": "object", - "required": [ - "creator", - "description", - "image" - ], - "properties": { - "creator": { - "type": "string" - }, - "description": { - "type": "string" - }, - "explicit_content": { - "type": [ - "boolean", - "null" - ] - }, - "external_link": { - "type": [ - "string", - "null" - ] - }, - "image": { - "type": "string" - }, - "royalty_info": { - "anyOf": [ - { - "$ref": "#/definitions/RoyaltyInfoResponse" - }, - { - "type": "null" - } - ] - }, - "start_trading_time": { - "anyOf": [ - { - "$ref": "#/definitions/Timestamp" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "CollectionParams": { - "type": "object", - "required": [ - "code_id", - "info", - "name", - "symbol" - ], - "properties": { - "code_id": { - "description": "The collection code id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "info": { - "$ref": "#/definitions/CollectionInfo_for_RoyaltyInfoResponse" - }, - "name": { - "type": "string" - }, - "symbol": { - "type": "string" - } - }, - "additionalProperties": false - }, - "CreateMinterMsg_for_VendingMinterInitMsgExtension": { - "type": "object", - "required": [ - "collection_params", - "init_msg" - ], - "properties": { - "collection_params": { - "$ref": "#/definitions/CollectionParams" - }, - "init_msg": { - "$ref": "#/definitions/VendingMinterInitMsgExtension" - } - }, - "additionalProperties": false - }, - "Decimal": { - "description": "A fixed-point decimal value with 18 fractional digits, i.e. Decimal(1_000_000_000_000_000_000) == 1.0\n\nThe greatest possible value that can be represented is 340282366920938463463.374607431768211455 (which is (2^128 - 1) / 10^18)", - "type": "string" - }, - "MinterParams_for_ParamsExtension": { - "description": "Common params for all minters used for storage", - "type": "object", - "required": [ - "allowed_sg721_code_ids", - "code_id", - "creation_fee", - "extension", - "frozen", - "max_trading_offset_secs", - "min_mint_price", - "mint_fee_bps" - ], - "properties": { - "allowed_sg721_code_ids": { - "type": "array", - "items": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - }, - "code_id": { - "description": "The minter code id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "creation_fee": { - "$ref": "#/definitions/Coin" - }, - "extension": { - "$ref": "#/definitions/ParamsExtension" - }, - "frozen": { - "type": "boolean" - }, - "max_trading_offset_secs": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "min_mint_price": { - "$ref": "#/definitions/Coin" - }, - "mint_fee_bps": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - }, - "additionalProperties": false - }, - "ParamsExtension": { - "description": "Parameters common to all vending minters, as determined by governance", - "type": "object", - "required": [ - "airdrop_mint_fee_bps", - "airdrop_mint_price", - "max_per_address_limit", - "max_token_limit", - "shuffle_fee" - ], - "properties": { - "airdrop_mint_fee_bps": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "airdrop_mint_price": { - "$ref": "#/definitions/Coin" - }, - "max_per_address_limit": { - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "max_token_limit": { - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "shuffle_fee": { - "$ref": "#/definitions/Coin" - } - }, - "additionalProperties": false - }, - "RoyaltyInfoResponse": { - "type": "object", - "required": [ - "payment_address", - "share" - ], - "properties": { - "payment_address": { - "type": "string" - }, - "share": { - "$ref": "#/definitions/Decimal" - } - }, - "additionalProperties": false - }, - "Timestamp": { - "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", - "allOf": [ - { - "$ref": "#/definitions/Uint64" - } - ] - }, - "Uint128": { - "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", - "type": "string" - }, - "Uint64": { - "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", - "type": "string" - }, - "VendingMinterInitMsgExtension": { - "type": "object", - "required": [ - "base_token_uri", - "mint_price", - "num_tokens", - "per_address_limit", - "start_time" - ], - "properties": { - "base_token_uri": { - "type": "string" - }, - "mint_price": { - "$ref": "#/definitions/Coin" - }, - "num_tokens": { - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "payment_address": { - "type": [ - "string", - "null" - ] - }, - "per_address_limit": { - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "start_time": { - "$ref": "#/definitions/Timestamp" - }, - "whitelist": { - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": false - } - } -} diff --git a/contracts/minters/vending-minter/src/msg.rs b/contracts/minters/vending-minter/src/msg.rs index d4d9f0358..7f14c4fec 100644 --- a/contracts/minters/vending-minter/src/msg.rs +++ b/contracts/minters/vending-minter/src/msg.rs @@ -1,12 +1,5 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{Coin, Timestamp}; -use vending_factory::{msg::VendingMinterCreateMsg, state::VendingMinterParams}; - -#[cw_serde] -pub struct InstantiateMsg { - pub create_msg: VendingMinterCreateMsg, - pub params: VendingMinterParams, -} #[cw_serde] pub enum ExecuteMsg { diff --git a/ts/src/VendingMinter.client.ts b/ts/src/VendingMinter.client.ts index d35a6e592..38245d505 100644 --- a/ts/src/VendingMinter.client.ts +++ b/ts/src/VendingMinter.client.ts @@ -6,7 +6,7 @@ import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; import { StdFee } from "@cosmjs/amino"; -import { Uint128, Timestamp, Uint64, ConfigResponse, Coin, ExecuteMsg, Decimal, InstantiateMsg, CreateMinterMsgForVendingMinterInitMsgExtension, CollectionParams, CollectionInfoForRoyaltyInfoResponse, RoyaltyInfoResponse, VendingMinterInitMsgExtension, MinterParamsForParamsExtension, ParamsExtension, MintCountResponse, MintPriceResponse, MintableNumTokensResponse, Addr, MinterConfigForConfigExtension, ConfigExtension, QueryMsg, StartTimeResponse, StatusResponse, Status } from "./VendingMinter.types"; +import { Uint128, Timestamp, Uint64, ConfigResponse, Coin, ExecuteMsg, MintCountResponse, MintPriceResponse, MintableNumTokensResponse, Addr, MinterConfigForConfigExtension, ConfigExtension, QueryMsg, StartTimeResponse, StatusResponse, Status } from "./VendingMinter.types"; export interface VendingMinterReadOnlyInterface { contractAddress: string; config: () => Promise; diff --git a/ts/src/VendingMinter.message-composer.ts b/ts/src/VendingMinter.message-composer.ts index aa02002ba..fee6f9cc9 100644 --- a/ts/src/VendingMinter.message-composer.ts +++ b/ts/src/VendingMinter.message-composer.ts @@ -7,7 +7,7 @@ import { MsgExecuteContractEncodeObject } from "cosmwasm"; import { MsgExecuteContract } from "cosmjs-types/cosmwasm/wasm/v1/tx"; import { toUtf8 } from "@cosmjs/encoding"; -import { Uint128, Timestamp, Uint64, ConfigResponse, Coin, ExecuteMsg, Decimal, InstantiateMsg, CreateMinterMsgForVendingMinterInitMsgExtension, CollectionParams, CollectionInfoForRoyaltyInfoResponse, RoyaltyInfoResponse, VendingMinterInitMsgExtension, MinterParamsForParamsExtension, ParamsExtension, MintCountResponse, MintPriceResponse, MintableNumTokensResponse, Addr, MinterConfigForConfigExtension, ConfigExtension, QueryMsg, StartTimeResponse, StatusResponse, Status } from "./VendingMinter.types"; +import { Uint128, Timestamp, Uint64, ConfigResponse, Coin, ExecuteMsg, MintCountResponse, MintPriceResponse, MintableNumTokensResponse, Addr, MinterConfigForConfigExtension, ConfigExtension, QueryMsg, StartTimeResponse, StatusResponse, Status } from "./VendingMinter.types"; export interface VendingMinterMessage { contractAddress: string; sender: string; diff --git a/ts/src/VendingMinter.types.ts b/ts/src/VendingMinter.types.ts index 37accbb0f..eb12795fb 100644 --- a/ts/src/VendingMinter.types.ts +++ b/ts/src/VendingMinter.types.ts @@ -65,60 +65,6 @@ export type ExecuteMsg = { } | { remove_discount_price: {}; }; -export type Decimal = string; -export interface InstantiateMsg { - create_msg: CreateMinterMsgForVendingMinterInitMsgExtension; - params: MinterParamsForParamsExtension; -} -export interface CreateMinterMsgForVendingMinterInitMsgExtension { - collection_params: CollectionParams; - init_msg: VendingMinterInitMsgExtension; -} -export interface CollectionParams { - code_id: number; - info: CollectionInfoForRoyaltyInfoResponse; - name: string; - symbol: string; -} -export interface CollectionInfoForRoyaltyInfoResponse { - creator: string; - description: string; - explicit_content?: boolean | null; - external_link?: string | null; - image: string; - royalty_info?: RoyaltyInfoResponse | null; - start_trading_time?: Timestamp | null; -} -export interface RoyaltyInfoResponse { - payment_address: string; - share: Decimal; -} -export interface VendingMinterInitMsgExtension { - base_token_uri: string; - mint_price: Coin; - num_tokens: number; - payment_address?: string | null; - per_address_limit: number; - start_time: Timestamp; - whitelist?: string | null; -} -export interface MinterParamsForParamsExtension { - allowed_sg721_code_ids: number[]; - code_id: number; - creation_fee: Coin; - extension: ParamsExtension; - frozen: boolean; - max_trading_offset_secs: number; - min_mint_price: Coin; - mint_fee_bps: number; -} -export interface ParamsExtension { - airdrop_mint_fee_bps: number; - airdrop_mint_price: Coin; - max_per_address_limit: number; - max_token_limit: number; - shuffle_fee: Coin; -} export interface MintCountResponse { address: string; count: number; From e306eb53eefd2fcf3e73ba0e4a3442f21bf3b282 Mon Sep 17 00:00:00 2001 From: jhernadnezb Date: Wed, 31 Jan 2024 22:37:08 -0600 Subject: [PATCH 03/24] bump serde --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7b63bb6d6..07acbaaf0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3358,9 +3358,9 @@ dependencies = [ [[package]] name = "serde-json-wasm" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15bee9b04dd165c3f4e142628982ddde884c2022a89e8ddf99c4829bf2c3a58" +checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7" dependencies = [ "serde", ] From 1b0db790945ff163a6fc63c0b6d3b9214fa5b062 Mon Sep 17 00:00:00 2001 From: Kayanski <44806566+Kayanski@users.noreply.github.com> Date: Sat, 16 Mar 2024 17:29:24 +0100 Subject: [PATCH 04/24] Update msg.rs --- contracts/collections/sg721-base/src/msg.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/collections/sg721-base/src/msg.rs b/contracts/collections/sg721-base/src/msg.rs index 38aca3032..2c88a7d27 100644 --- a/contracts/collections/sg721-base/src/msg.rs +++ b/contracts/collections/sg721-base/src/msg.rs @@ -117,7 +117,7 @@ pub enum QueryMsg { }, #[returns(MinterResponse)] Minter {}, - #[returns(MinterResponse)] + #[returns(CollectionInfoResponse)] CollectionInfo {}, } From 17cafde7b9141f34663caf4fceb029c3f8196e09 Mon Sep 17 00:00:00 2001 From: mr-t Date: Sun, 17 Mar 2024 22:38:13 +0100 Subject: [PATCH 05/24] migrate using royalty info from new cw721-base --- Cargo.lock | 114 ++---- Cargo.toml | 8 +- .../collections/sg721-base/examples/schema.rs | 28 +- .../collections/sg721-base/src/contract.rs | 380 +++++++----------- contracts/collections/sg721-base/src/error.rs | 2 +- contracts/collections/sg721-base/src/lib.rs | 55 ++- contracts/collections/sg721-base/src/msg.rs | 192 +++++---- contracts/collections/sg721-base/src/state.rs | 109 ++++- .../sg721-base/src/upgrades/v3_0_0.rs | 38 +- .../sg721-base/src/upgrades/v3_1_0.rs | 42 +- .../sg721-metadata-onchain/.cargo/config | 4 - .../sg721-metadata-onchain/Cargo.toml | 45 --- .../sg721-metadata-onchain/examples/schema.rs | 48 --- .../schema/all_nft_info_response.json | 252 ------------ .../schema/all_operators_response.json | 100 ----- .../schema/all_tokens_response.json | 18 - .../schema/approval_response.json | 97 ----- .../schema/approvals_response.json | 100 ----- .../schema/collection_info_response.json | 88 ---- .../schema/contract_info_response.json | 18 - .../schema/instantiate_msg.json | 112 ------ .../schema/minter_response.json | 15 - .../schema/nft_info_response.json | 124 ------ .../schema/num_tokens_response.json | 16 - .../schema/operators_response.json | 100 ----- .../schema/owner_of_response.json | 106 ----- .../schema/query_msg.json | 310 -------------- .../schema/tokens_response.json | 18 - .../sg721-metadata-onchain/src/lib.rs | 207 ---------- .../collections/sg721-nt/examples/schema.rs | 21 +- contracts/collections/sg721-nt/src/lib.rs | 54 ++- .../sg721-updatable/examples/schema.rs | 15 +- .../sg721-updatable/src/contract.rs | 26 +- .../collections/sg721-updatable/src/lib.rs | 13 +- .../collections/sg721-updatable/src/msg.rs | 28 +- contracts/minters/base-minter/src/contract.rs | 8 +- packages/sg721/Cargo.toml | 2 +- packages/sg721/src/lib.rs | 241 +++++++++-- test-suite/Cargo.toml | 2 +- .../base_minter/tests/integration_tests.rs | 21 +- .../complete_mint_all_outcomes_validation.rs | 13 +- .../src/sg721_base/tests/integration_tests.rs | 141 +++++-- .../src/vending_minter/tests/address_limit.rs | 10 +- .../src/vending_minter/tests/happy_unhappy.rs | 10 +- .../src/vending_minter/tests/trading_time.rs | 3 +- .../tests/trading_time_updatable.rs | 3 +- .../src/vending_minter/tests/updatable.rs | 7 +- .../src/vending_minter/tests/whitelist.rs | 10 +- .../vending_minter/tests/zero_mint_price.rs | 6 +- 49 files changed, 1047 insertions(+), 2333 deletions(-) delete mode 100644 contracts/collections/sg721-metadata-onchain/.cargo/config delete mode 100644 contracts/collections/sg721-metadata-onchain/Cargo.toml delete mode 100644 contracts/collections/sg721-metadata-onchain/examples/schema.rs delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/all_nft_info_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/all_operators_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/all_tokens_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/approval_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/approvals_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/collection_info_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/contract_info_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/instantiate_msg.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/minter_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/nft_info_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/num_tokens_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/operators_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/owner_of_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/query_msg.json delete mode 100644 contracts/collections/sg721-metadata-onchain/schema/tokens_response.json delete mode 100644 contracts/collections/sg721-metadata-onchain/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 07acbaaf0..ade1b2f55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -309,8 +309,8 @@ dependencies = [ "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", - "cw721 0.18.0", - "cw721-base 0.18.0", + "cw721 0.19.0", + "cw721-base", "schemars", "serde", "sg-std", @@ -1002,8 +1002,7 @@ dependencies = [ [[package]] name = "cw-address-like" version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451a4691083a88a3c0630a8a88799e9d4cd6679b7ce8ff22b8da2873ff31d380" +source = "git+https://github.com/public-awesome/cw-plus-plus.git?branch=multiple_ownership#d40ce97bc1cc0e4870591ba8bf4a6160b1ae8b00" dependencies = [ "cosmwasm-std", ] @@ -1079,9 +1078,8 @@ dependencies = [ [[package]] name = "cw-ownable" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093dfb4520c48b5848274dd88ea99e280a04bc08729603341c7fb0d758c74321" +version = "0.6.0" +source = "git+https://github.com/public-awesome/cw-plus-plus.git?branch=multiple_ownership#d40ce97bc1cc0e4870591ba8bf4a6160b1ae8b00" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1094,9 +1092,8 @@ dependencies = [ [[package]] name = "cw-ownable-derive" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d3bf2e0f341bb6cc100d7d441d31cf713fbd3ce0c511f91e79f14b40a889af" +version = "0.6.0" +source = "git+https://github.com/public-awesome/cw-plus-plus.git?branch=multiple_ownership#d40ce97bc1cc0e4870591ba8bf4a6160b1ae8b00" dependencies = [ "proc-macro2", "quote", @@ -1217,8 +1214,7 @@ dependencies = [ [[package]] name = "cw721" version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a1ea6e6277bdd6dfc043a9b1380697fe29d6e24b072597439523658d21d791" +source = "git+https://github.com/CosmWasm/cw-nfts?tag=v0.16.0#2cad1d3e15e0a34d466a0b51e02c58b82ebe5ecd" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1241,39 +1237,33 @@ dependencies = [ ] [[package]] -name = "cw721-base" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77518e27431d43214cff4cdfbd788a7508f68d9b1f32389e6fce513e7eaccbef" +name = "cw721" +version = "0.19.0" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#a358c4c207894fb6fc73ff29c0723690eabadab4" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 0.16.0", - "cw-utils 0.16.0", - "cw2 0.16.0", + "cw-ownable", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", "cw721 0.16.0", "schemars", "serde", "thiserror", + "url", ] [[package]] name = "cw721-base" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da518d9f68bfda7d972cbaca2e8fcf04651d0edc3de72b04ae2bcd9289c81614" +version = "0.19.0" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#a358c4c207894fb6fc73ff29c0723690eabadab4" dependencies = [ - "cosmwasm-schema", "cosmwasm-std", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", "cw2 1.1.2", - "cw721 0.18.0", - "cw721-base 0.16.0", - "schemars", + "cw721 0.19.0", "serde", - "thiserror", ] [[package]] @@ -1722,9 +1712,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -2128,9 +2118,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2465,7 +2455,7 @@ dependencies = [ "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", - "cw721-base 0.18.0", + "cw721-base", "open-edition-factory", "semver", "serde", @@ -2616,9 +2606,9 @@ checksum = "c719dcf55f09a3a7e764c6649ab594c18a177e3599c467983cdf644bfc0a4088" [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" @@ -3628,7 +3618,7 @@ dependencies = [ "cw-multi-test 0.20.0", "cw-ownable", "cw-utils 1.0.3", - "cw721-base 0.18.0", + "cw721-base", "serde", "thiserror", ] @@ -3643,8 +3633,8 @@ dependencies = [ "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", - "cw721 0.18.0", - "cw721-base 0.18.0", + "cw721 0.19.0", + "cw721-base", "serde", "sg-std", "sg721", @@ -3652,24 +3642,6 @@ dependencies = [ "url", ] -[[package]] -name = "sg721-metadata-onchain" -version = "3.5.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-ownable", - "cw2 1.1.2", - "cw721 0.18.0", - "cw721-base 0.18.0", - "schemars", - "serde", - "sg-metadata", - "sg-std", - "sg721", - "sg721-base", -] - [[package]] name = "sg721-nt" version = "3.5.0" @@ -3678,8 +3650,8 @@ dependencies = [ "cosmwasm-std", "cw-utils 1.0.3", "cw2 1.1.2", - "cw721 0.18.0", - "cw721-base 0.18.0", + "cw721 0.19.0", + "cw721-base", "schemars", "serde", "sg-std", @@ -3697,8 +3669,8 @@ dependencies = [ "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", - "cw721 0.18.0", - "cw721-base 0.18.0", + "cw721 0.19.0", + "cw721-base", "schemars", "semver", "serde", @@ -4080,8 +4052,8 @@ dependencies = [ "cw2 1.1.2", "cw4", "cw4-group", - "cw721 0.18.0", - "cw721-base 0.18.0", + "cw721 0.19.0", + "cw721-base", "ethers-core", "ethers-signers", "eyre", @@ -4466,9 +4438,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -4523,8 +4495,8 @@ dependencies = [ "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", - "cw721 0.18.0", - "cw721-base 0.18.0", + "cw721 0.19.0", + "cw721-base", "rand_core 0.6.4", "rand_xoshiro", "schemars", @@ -4552,8 +4524,8 @@ dependencies = [ "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", - "cw721 0.18.0", - "cw721-base 0.18.0", + "cw721 0.19.0", + "cw721-base", "rand_core 0.6.4", "rand_xoshiro", "schemars", @@ -4582,8 +4554,8 @@ dependencies = [ "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", - "cw721 0.18.0", - "cw721-base 0.18.0", + "cw721 0.19.0", + "cw721-base", "rand_core 0.6.4", "rand_xoshiro", "schemars", diff --git a/Cargo.toml b/Cargo.toml index 41445c084..a006f27e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,8 +27,8 @@ cw-controllers = "1.1.0" cw2 = "1.1.0" cw4 = "1.1.0" cw4-group = "1.1.0" -cw721 = "0.18.0" -cw721-base = "0.18.0" +cw721 = { git = "https://github.com/arkprotocol/cw-nfts.git", branch = "collection-info"} # TODO: switch to official repo once merged +cw721-base = { git = "https://github.com/arkprotocol/cw-nfts.git", branch = "collection-info"} # TODO: switch to official repo once merged cw-multi-test = "0.20.0" cw-storage-plus = "1.2.0" cw-utils = "1.0.1" @@ -50,7 +50,7 @@ sg-splits = { version = "3.5.0", path = "contracts/splits" } sg-std = { version = "3.2.0" } sg-whitelist = { version = "3.5.0", path = "contracts/whitelists/whitelist" } thiserror = "1.0.31" -url = "2.2.2" +url = "^2.5" sha2 = { version = "0.10.2", default-features = false } whitelist-mtree = { version = "3.5.0", path = "contracts/whitelists/whitelist-merkletree" } @@ -66,7 +66,7 @@ sg-eth-airdrop = { version = "3.5.0", path = "contracts/sg-eth-airdrop test-suite = { version = "3.5.0", path = "test-suite" } semver = "1" -cw-ownable = "0.5.1" +cw-ownable = { git = "https://github.com/public-awesome/cw-plus-plus.git", branch = "multiple_ownership"} # TODO: switch to official https://github.com/larry0x/cw-plus-plus once merged anybuf = "0.3.0" [profile.release.package.sg721] diff --git a/contracts/collections/sg721-base/examples/schema.rs b/contracts/collections/sg721-base/examples/schema.rs index 4f2f18f68..41e155f83 100644 --- a/contracts/collections/sg721-base/examples/schema.rs +++ b/contracts/collections/sg721-base/examples/schema.rs @@ -5,12 +5,17 @@ use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, s use cosmwasm_std::Empty; -use cw721::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, ContractInfoResponse, NftInfoResponse, - NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, +use cw721_base::{ + msg::{ + AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, MinterResponse, NftInfoResponse, + NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, + }, + state::CollectionMetadata, + CollectionMetadataExtension, DefaultOptionCollectionMetadataExtension, + DefaultOptionNftMetadataExtension, RoyaltyInfo, }; -use cw721_base::MinterResponse; use sg721::InstantiateMsg; +#[allow(deprecated)] use sg721_base::msg::{CollectionInfoResponse, QueryMsg}; fn main() { @@ -20,8 +25,16 @@ fn main() { remove_schemas(&out_dir).unwrap(); export_schema(&schema_for!(InstantiateMsg), &out_dir); - export_schema(&schema_for!(QueryMsg), &out_dir); + export_schema( + &schema_for!(QueryMsg), + &out_dir, + ); + #[allow(deprecated)] export_schema(&schema_for!(CollectionInfoResponse), &out_dir); + export_schema( + &schema_for!(CollectionMetadata>), + &out_dir, + ); export_schema_with_title( &schema_for!(AllNftInfoResponse), &out_dir, @@ -37,7 +50,10 @@ fn main() { export_schema(&schema_for!(ApprovalResponse), &out_dir); export_schema(&schema_for!(ApprovalsResponse), &out_dir); export_schema(&schema_for!(OperatorsResponse), &out_dir); - export_schema(&schema_for!(ContractInfoResponse), &out_dir); + export_schema( + &schema_for!(CollectionMetadata), + &out_dir, + ); export_schema_with_title( &schema_for!(NftInfoResponse), &out_dir, diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index 91dc05663..950b7b44f 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -1,46 +1,65 @@ -use cw721_base::state::TokenInfo; +use std::fmt::Debug; + +use cw721::msg::CollectionMetadataMsg; +use cw721::state::{MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_ROYALTY_SHARE_PCT}; +use cw721::traits::{Cw721CustomMsg, Cw721State}; +use cw721_base::msg::{CollectionMetadataExtensionMsg, Cw721InstantiateMsg, RoyaltyInfoResponse}; +use cw721_base::state::NftInfo; +use cw721_base::{ + traits::StateFactory, DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, +}; use url::Url; use cosmwasm_std::{ - to_json_binary, Addr, Binary, ContractInfoResponse, Decimal, Deps, DepsMut, Empty, Env, Event, - MessageInfo, Response, StdError, StdResult, Storage, Timestamp, WasmQuery, + to_json_binary, Addr, Binary, ContractInfoResponse, CustomMsg, Decimal, Deps, DepsMut, Empty, + Env, Event, MessageInfo, Response, StdError, StdResult, Storage, Timestamp, WasmQuery, }; -use cw721::{ContractInfoResponse as CW721ContractInfoResponse, Cw721Execute}; +use cw721_base::{execute::Cw721Execute, query::Cw721Query, state::CollectionMetadata}; use cw_utils::nonpayable; use serde::{de::DeserializeOwned, Serialize}; -use sg721::{ - CollectionInfo, ExecuteMsg, InstantiateMsg, RoyaltyInfo, RoyaltyInfoResponse, - UpdateCollectionInfoMsg, -}; +use sg721::{CollectionInfo, ExecuteMsg, InstantiateMsg, RoyaltyInfo, UpdateCollectionInfoMsg}; use crate::msg::{CollectionInfoResponse, NftParams, QueryMsg}; use crate::{ContractError, Sg721Contract}; use crate::entry::{CONTRACT_NAME, CONTRACT_VERSION}; -const MAX_DESCRIPTION_LENGTH: u32 = 512; -const MAX_SHARE_DELTA_PCT: u64 = 2; -const MAX_ROYALTY_SHARE_PCT: u64 = 10; - -impl<'a, T> Sg721Contract<'a, T> +impl<'a, TNftMetadataExtension, TNftMetadataExtensionMsg, TCustomResponseMsg> + Sg721Contract< + 'a, + // Metadata defined in NftInfo (used for mint). + TNftMetadataExtension, + // Message passed for updating metadata. + TNftMetadataExtensionMsg, + // Extension defined in CollectionMetadata. + DefaultOptionCollectionMetadataExtension, + // Message passed for updating collection info extension. + DefaultOptionCollectionMetadataExtensionMsg, + // Defines for `CosmosMsg::Custom` in response. Barely used, so `Empty` can be used. + TCustomResponseMsg, + > where - T: Serialize + DeserializeOwned + Clone, + TNftMetadataExtension: Cw721State, + TNftMetadataExtensionMsg: Cw721CustomMsg + StateFactory, + TCustomResponseMsg: CustomMsg, { + #[allow(deprecated)] pub fn instantiate( &self, deps: DepsMut, env: Env, info: MessageInfo, msg: InstantiateMsg, - ) -> Result { + ) -> Result, ContractError> { // no funds should be sent to this contract nonpayable(&info)?; // check sender is a contract let req = WasmQuery::ContractInfo { - contract_addr: info.sender.into(), + contract_addr: info.sender.to_string(), } .into(); let _res: ContractInfoResponse = deps @@ -48,59 +67,33 @@ where .query(&req) .map_err(|_| ContractError::Unauthorized {})?; - // cw721 instantiation - let info = CW721ContractInfoResponse { - name: msg.name, - symbol: msg.symbol, - }; - self.parent.contract_info.save(deps.storage, &info)?; - cw_ownable::initialize_owner(deps.storage, deps.api, Some(&msg.minter))?; - - // sg721 instantiation - if msg.collection_info.description.len() > MAX_DESCRIPTION_LENGTH as usize { - return Err(ContractError::DescriptionTooLong {}); - } - - let image = Url::parse(&msg.collection_info.image)?; - - if let Some(ref external_link) = msg.collection_info.external_link { - Url::parse(external_link)?; - } - - let royalty_info: Option = match msg.collection_info.royalty_info { - Some(royalty_info) => Some(RoyaltyInfo { - payment_address: deps.api.addr_validate(&royalty_info.payment_address)?, - share: share_validate(royalty_info.share)?, - }), - None => None, - }; - - deps.api.addr_validate(&msg.collection_info.creator)?; - - let collection_info = CollectionInfo { - creator: msg.collection_info.creator, - description: msg.collection_info.description, - image: msg.collection_info.image, - external_link: msg.collection_info.external_link, - explicit_content: msg.collection_info.explicit_content, - start_trading_time: msg.collection_info.start_trading_time, - royalty_info, - }; - - self.collection_info.save(deps.storage, &collection_info)?; + self.royalty_updated_at + .save(deps.storage, &env.block.time)?; self.frozen_collection_info.save(deps.storage, &false)?; - self.royalty_updated_at - .save(deps.storage, &env.block.time)?; + self.parent.instantiate( + deps, + &env, + &info, + msg.clone().into(), + CONTRACT_NAME, + CONTRACT_VERSION, + )?; + + if let Some(royalty_info) = msg.collection_info.royalty_info { + if royalty_info.share > Decimal::percent(MAX_ROYALTY_SHARE_PCT) { + share_validate(royalty_info.share)?; + } + } Ok(Response::new() .add_attribute("action", "instantiate") - .add_attribute("collection_name", info.name) - .add_attribute("collection_symbol", info.symbol) - .add_attribute("collection_creator", collection_info.creator) + .add_attribute("collection_name", msg.name) + .add_attribute("collection_symbol", msg.symbol) + .add_attribute("collection_creator", msg.collection_info.creator) .add_attribute("minter", msg.minter) - .add_attribute("image", image.to_string())) + .add_attribute("image", msg.collection_info.image.to_string())) } pub fn execute( @@ -108,48 +101,11 @@ where deps: DepsMut, env: Env, info: MessageInfo, - msg: ExecuteMsg, - ) -> Result { + msg: ExecuteMsg, + ) -> Result, ContractError> { match msg { - ExecuteMsg::TransferNft { - recipient, - token_id, - } => self - .parent - .transfer_nft(deps, env, info, recipient, token_id) - .map_err(|e| e.into()), - ExecuteMsg::SendNft { - contract, - token_id, - msg, - } => self - .parent - .send_nft(deps, env, info, contract, token_id, msg) - .map_err(|e| e.into()), - ExecuteMsg::Approve { - spender, - token_id, - expires, - } => self - .parent - .approve(deps, env, info, spender, token_id, expires) - .map_err(|e| e.into()), - ExecuteMsg::Revoke { spender, token_id } => self - .parent - .revoke(deps, env, info, spender, token_id) - .map_err(|e| e.into()), - ExecuteMsg::ApproveAll { operator, expires } => self - .parent - .approve_all(deps, env, info, operator, expires) - .map_err(|e| e.into()), - ExecuteMsg::RevokeAll { operator } => self - .parent - .revoke_all(deps, env, info, operator) - .map_err(|e| e.into()), - ExecuteMsg::Burn { token_id } => self - .parent - .burn(deps, env, info, token_id) - .map_err(|e| e.into()), + // ---- sg721 specific msgs ---- + #[allow(deprecated)] ExecuteMsg::UpdateCollectionInfo { collection_info } => { self.update_collection_info(deps, env, info, collection_info) } @@ -157,82 +113,48 @@ where self.update_start_trading_time(deps, env, info, start_time) } ExecuteMsg::FreezeCollectionInfo {} => self.freeze_collection_info(deps, env, info), - ExecuteMsg::Mint { - token_id, - token_uri, - owner, - extension, - } => self.mint( - deps, - env, - info, - NftParams::NftData { - token_id, - owner, - token_uri, - extension, - }, - ), - ExecuteMsg::Extension { msg: _ } => todo!(), - sg721::ExecuteMsg::UpdateOwnership(msg) => self + // ---- cw721_base msgs ---- + msg => self .parent - .execute( - deps, - env, - info, - cw721_base::ExecuteMsg::UpdateOwnership(msg), - ) - .map_err(|e| ContractError::OwnershipUpdateError { - error: e.to_string(), - }), + .execute(deps, &env, &info, msg.into()) + .map_err(|e| e.into()), } } + #[allow(deprecated)] pub fn update_collection_info( &self, deps: DepsMut, env: Env, info: MessageInfo, collection_msg: UpdateCollectionInfoMsg, - ) -> Result { - let mut collection = self.collection_info.load(deps.storage)?; + ) -> Result, ContractError> { + let collection_info = self.parent.config.collection_metadata.load(deps.storage)?; if self.frozen_collection_info.load(deps.storage)? { return Err(ContractError::CollectionInfoFrozen {}); } // only creator can update collection info - if collection.creator != info.sender { + let creator = self.get_creator(deps.as_ref().storage)?; + if creator.is_none() || creator.unwrap() != info.sender { return Err(ContractError::Unauthorized {}); } - if let Some(new_creator) = collection_msg.creator { - deps.api.addr_validate(&new_creator)?; - collection.creator = new_creator; + if let Some(new_creator) = collection_msg.creator.clone() { + // TODO: for keeping logic as-is, creator is set right away, but it should use cw-ownable's Action::TransferOwnership + self.parent + .initialize_creator(deps.storage, deps.api, Some(new_creator.as_str()))?; } - collection.description = collection_msg - .description - .unwrap_or_else(|| collection.description.to_string()); - if collection.description.len() > MAX_DESCRIPTION_LENGTH as usize { - return Err(ContractError::DescriptionTooLong {}); - } - - collection.image = collection_msg - .image - .unwrap_or_else(|| collection.image.to_string()); - Url::parse(&collection.image)?; + // in this contract, extension is always present, so unwrap is safe + let collection_extension = collection_info.extension.unwrap(); - collection.external_link = collection_msg - .external_link - .unwrap_or_else(|| collection.external_link.as_ref().map(|s| s.to_string())); - if collection.external_link.as_ref().is_some() { - Url::parse(collection.external_link.as_ref().unwrap())?; + if collection_extension.description.len() > MAX_COLLECTION_DESCRIPTION_LENGTH as usize { + return Err(ContractError::DescriptionTooLong {}); } - collection.explicit_content = collection_msg.explicit_content; - - if let Some(Some(new_royalty_info_response)) = collection_msg.royalty_info { + if let Some(Some(_)) = collection_msg.royalty_info { let last_royalty_update = self.royalty_updated_at.load(deps.storage)?; if last_royalty_update.plus_seconds(24 * 60 * 60) > env.block.time { return Err(ContractError::InvalidRoyalties( @@ -240,36 +162,19 @@ where )); } - let new_royalty_info = RoyaltyInfo { - payment_address: deps - .api - .addr_validate(&new_royalty_info_response.payment_address)?, - share: share_validate(new_royalty_info_response.share)?, - }; - - if let Some(old_royalty_info) = collection.royalty_info { - if old_royalty_info.share < new_royalty_info.share { - let share_delta = new_royalty_info.share.abs_diff(old_royalty_info.share); - - if share_delta > Decimal::percent(MAX_SHARE_DELTA_PCT) { - return Err(ContractError::InvalidRoyalties(format!( - "Share increase cannot be greater than {MAX_SHARE_DELTA_PCT}%" - ))); - } - if new_royalty_info.share > Decimal::percent(MAX_ROYALTY_SHARE_PCT) { - return Err(ContractError::InvalidRoyalties(format!( - "Share cannot be greater than {MAX_ROYALTY_SHARE_PCT}%" - ))); - } - } - } - - collection.royalty_info = Some(new_royalty_info); self.royalty_updated_at .save(deps.storage, &env.block.time)?; } - self.collection_info.save(deps.storage, &collection)?; + let collection_extension: CollectionMetadataExtensionMsg = + collection_msg.into(); + let msg = CollectionMetadataMsg { + name: None, + symbol: None, + extension: Some(collection_extension), + }; + self.parent + .update_collection_metadata(deps, &info, &env, msg)?; let event = Event::new("update_collection_info").add_attribute("sender", info.sender); Ok(Response::new().add_event(event)) @@ -280,15 +185,27 @@ where pub fn update_start_trading_time( &self, deps: DepsMut, - _env: Env, + env: Env, info: MessageInfo, start_time: Option, - ) -> Result { + ) -> Result, ContractError> { assert_minter_owner(deps.storage, &info.sender)?; - let mut collection_info = self.collection_info.load(deps.storage)?; - collection_info.start_trading_time = start_time; - self.collection_info.save(deps.storage, &collection_info)?; + let collection_info = self.parent.config.collection_metadata.load(deps.storage)?; + let msg = CollectionMetadataMsg { + name: None, + symbol: None, + extension: Some(CollectionMetadataExtensionMsg { + description: None, + image: None, + external_link: None, + explicit_content: None, + start_trading_time: start_time, + royalty_info: None, + }), + }; + self.parent + .update_collection_metadata(deps, &info, &env, msg)?; let event = Event::new("update_start_trading_time").add_attribute("sender", info.sender); Ok(Response::new().add_event(event)) @@ -299,7 +216,7 @@ where deps: DepsMut, _env: Env, info: MessageInfo, - ) -> Result { + ) -> Result, ContractError> { let collection = self.query_collection_info(deps.as_ref())?; if collection.creator != info.sender { return Err(ContractError::Unauthorized {}); @@ -314,10 +231,10 @@ where pub fn mint( &self, deps: DepsMut, - _env: Env, + env: Env, info: MessageInfo, - nft_data: NftParams, - ) -> Result { + nft_data: NftParams, + ) -> Result, ContractError> { assert_minter_owner(deps.storage, &info.sender)?; let (token_id, owner, token_uri, extension) = match nft_data { NftParams::NftData { @@ -328,60 +245,51 @@ where } => (token_id, owner, token_uri, extension), }; - // create the token - let token = TokenInfo { - owner: deps.api.addr_validate(&owner)?, - approvals: vec![], - token_uri: token_uri.clone(), - extension, - }; - self.parent - .tokens - .update(deps.storage, &token_id, |old| match old { - Some(_) => Err(ContractError::Claimed {}), - None => Ok(token), - })?; - - self.parent.increment_tokens(deps.storage)?; - - let mut res = Response::new() - .add_attribute("action", "mint") - .add_attribute("minter", info.sender) - .add_attribute("owner", owner) - .add_attribute("token_id", token_id); - if let Some(token_uri) = token_uri { - res = res.add_attribute("token_uri", token_uri); - } - Ok(res) + Ok(self + .parent + .mint(deps, &env, &info, token_id, owner, token_uri, extension)?) } - pub fn query(&self, deps: Deps, env: Env, msg: QueryMsg) -> StdResult { + pub fn get_creator(&self, storage: &dyn Storage) -> Result, ContractError> { + // only creator can update collection info + let creator = self.parent.query_creator_ownership(storage)?.owner; + Ok(creator) + } + + pub fn query( + &self, + deps: Deps, + env: Env, + msg: QueryMsg, + ) -> Result { match msg { - QueryMsg::CollectionInfo {} => to_json_binary(&self.query_collection_info(deps)?), - _ => self.parent.query(deps, env, msg.into()), + QueryMsg::CollectionInfo {} => Ok(to_json_binary(&self.query_collection_info(deps)?)?), + _ => Ok(self.parent.query(deps, &env, msg.into())?), } } - pub fn query_collection_info(&self, deps: Deps) -> StdResult { - let info = self.collection_info.load(deps.storage)?; - - let royalty_info_res: Option = match info.royalty_info { - Some(royalty_info) => Some(RoyaltyInfoResponse { - payment_address: royalty_info.payment_address.to_string(), - share: royalty_info.share, - }), - None => None, + #[allow(deprecated)] + pub fn query_collection_info( + &self, + deps: Deps, + ) -> Result { + let collection_info = self.parent.config.collection_metadata.load(deps.storage)?; + + let creator = self.get_creator(deps.storage)?.map_or("none".to_string(), |c| c.to_string()); + // in this contract, extension is always present, so unwrap is safe + let collection_extension = collection_info.extension.unwrap(); + + let collection_info = CollectionInfoResponse { + creator, + description: collection_extension.description, + image: collection_extension.image, + external_link: collection_extension.external_link, + explicit_content: collection_extension.explicit_content, + start_trading_time: collection_extension.start_trading_time, + royalty_info: collection_extension.royalty_info.map(|r| r.into()), }; - Ok(CollectionInfoResponse { - creator: info.creator, - description: info.description, - image: info.image, - external_link: info.external_link, - explicit_content: info.explicit_content, - start_trading_time: info.start_trading_time, - royalty_info: royalty_info_res, - }) + Ok(collection_info) } pub fn migrate(mut deps: DepsMut, env: Env, _msg: Empty) -> Result { diff --git a/contracts/collections/sg721-base/src/error.rs b/contracts/collections/sg721-base/src/error.rs index 222f4ae5b..bc6b188e8 100644 --- a/contracts/collections/sg721-base/src/error.rs +++ b/contracts/collections/sg721-base/src/error.rs @@ -15,7 +15,7 @@ pub enum ContractError { Parse(#[from] ParseError), #[error("{0}")] - Base(#[from] cw721_base::ContractError), + Base(#[from] cw721_base::error::ContractError), #[error("Unauthorized")] Unauthorized {}, diff --git a/contracts/collections/sg721-base/src/lib.rs b/contracts/collections/sg721-base/src/lib.rs index 56e63d706..8086ce9f2 100644 --- a/contracts/collections/sg721-base/src/lib.rs +++ b/contracts/collections/sg721-base/src/lib.rs @@ -6,11 +6,22 @@ pub mod upgrades; pub use crate::error::ContractError; pub use crate::state::Sg721Contract; -use cosmwasm_std::Empty; -use cw721_base::Extension; +use cw721::{ + DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg, RoyaltyInfo, +}; +use cw721_base::msg::CollectionMetadataExtensionMsg; +use cw721_base::{ + DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, NftMetadataMsg, +}; -pub type ExecuteMsg = sg721::ExecuteMsg; -pub type QueryMsg = cw721_base::QueryMsg; +pub type ExecuteMsg = sg721::ExecuteMsg< + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtensionMsg, +>; +pub type QueryMsg = cw721_base::msg::QueryMsg< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, +>; pub mod entry { use super::*; @@ -18,9 +29,8 @@ pub mod entry { #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; - use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; + use cosmwasm_std::{Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult}; use cw2::set_contract_version; - use cw721_base::Extension; use sg721::InstantiateMsg; // version info for migration info @@ -36,7 +46,14 @@ pub mod entry { ) -> Result { set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; - let res = Sg721Contract::::default().instantiate(deps, env, info, msg)?; + let res = Sg721Contract::< + DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, + >::default() + .instantiate(deps, env, info, msg)?; Ok(res .add_attribute("contract_name", CONTRACT_NAME) @@ -50,11 +67,29 @@ pub mod entry { info: MessageInfo, msg: ExecuteMsg, ) -> Result { - Sg721Contract::::default().execute(deps, env, info, msg) + Sg721Contract::< + DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, + >::default() + .execute(deps, env, info, msg) } #[cfg_attr(not(feature = "library"), entry_point)] - pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { - Sg721Contract::::default().query(deps, env, msg) + pub fn query( + deps: Deps, + env: Env, + msg: QueryMsg, + ) -> Result { + Sg721Contract::< + DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, + >::default() + .query(deps, env, msg) } } diff --git a/contracts/collections/sg721-base/src/msg.rs b/contracts/collections/sg721-base/src/msg.rs index 2c88a7d27..e03964b8d 100644 --- a/contracts/collections/sg721-base/src/msg.rs +++ b/contracts/collections/sg721-base/src/msg.rs @@ -1,86 +1,54 @@ +use cw721::msg::RoyaltyInfoResponse; +use cw721::traits::Cw721State; +use cw721::CollectionMetadataExtension; +use cw721::DefaultOptionCollectionMetadataExtensionMsg; +use cw721::RoyaltyInfo; +use serde::de::DeserializeOwned; +use serde::Serialize; +use std::fmt::Debug; + use cosmwasm_schema::cw_serde; use cosmwasm_schema::QueryResponses; -use cosmwasm_std::{ - coin, Addr, BankMsg, Binary, Empty, Event, StdError, StdResult, Timestamp, Uint128, -}; -use cw721::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, ContractInfoResponse, NftInfoResponse, - NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, +use cosmwasm_std::{coin, Addr, BankMsg, Empty, Event, StdError, StdResult, Timestamp, Uint128}; +use cw721_base::{ + msg::{ + AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, Cw721ExecuteMsg, MinterResponse, + NftInfoResponse, NumTokensResponse, OperatorsResponse, OwnerOfResponse, + QueryMsg as Cw721QueryMsg, TokensResponse, + }, + state::CollectionMetadata, }; -use cw721_base::msg::MinterResponse; -use cw721_base::msg::QueryMsg as Cw721QueryMsg; -use cw_ownable::cw_ownable_execute; -use cw_ownable::cw_ownable_query; -use cw_utils::Expiration; -use sg721::RoyaltyInfoResponse; +use cw_ownable::Ownership; use sg_std::{Response, SubMsg, NATIVE_DENOM}; -#[cw_ownable_execute] -#[cw_serde] -pub enum ExecuteMsg { - /// Transfer is a base message to move a token to another account without triggering actions - TransferNft { recipient: String, token_id: String }, - /// Send is a base message to transfer a token to a contract and trigger an action - /// on the receiving contract. - SendNft { - contract: String, - token_id: String, - msg: Binary, - }, - /// Allows operator to transfer / send the token from the owner's account. - /// If expiration is set, then this allowance has a time/height limit - Approve { - spender: String, - token_id: String, - expires: Option, - }, - /// Remove previously granted Approval - Revoke { spender: String, token_id: String }, - /// Allows operator to transfer / send any token from the owner's account. - /// If expiration is set, then this allowance has a time/height limit - ApproveAll { - operator: String, - expires: Option, - }, - /// Remove previously granted ApproveAll permission - RevokeAll { operator: String }, - - /// Mint a new NFT, can only be called by the contract minter - Mint { - /// Unique ID of the NFT - token_id: String, - /// The owner of the newly minter NFT - owner: String, - /// Universal resource identifier for this NFT - /// Should point to a JSON file that conforms to the ERC721 - /// Metadata JSON Schema - token_uri: Option, - /// Any custom extension used by this contract - extension: T, - }, - - /// Burn an NFT the sender has access to - Burn { token_id: String }, - - /// Extension msg - Extension { msg: E }, -} - -#[cw_ownable_query] #[derive(QueryResponses)] #[cw_serde] -pub enum QueryMsg { +pub enum QueryMsg< + // Return type of NFT metadata defined in `NftInfo` and `AllNftInfo`. + TNftMetadataExtension, + // Return type of collection metadata extension defined in `GetCollectionMetadata`. + TCollectionMetadataExtension, +> { + #[returns(CollectionInfoResponse)] + #[deprecated = "Please use GetCollectionMetadata instead"] + CollectionInfo {}, + + // ---- cw721 v0.19.0 msgs ---- + /// Return the owner of the given token, error if token does not exist #[returns(OwnerOfResponse)] OwnerOf { token_id: String, + /// unset or false will filter out expired approvals, you must set to true to see them include_expired: Option, }, + /// Return operator that can access all of the owner's tokens. #[returns(ApprovalResponse)] Approval { token_id: String, spender: String, include_expired: Option, }, + /// Return approvals that a token has #[returns(ApprovalsResponse)] Approvals { token_id: String, @@ -89,40 +57,108 @@ pub enum QueryMsg { #[returns(OperatorsResponse)] AllOperators { owner: String, + /// unset or false will filter out expired items, you must set to true to see them include_expired: Option, start_after: Option, limit: Option, }, + /// Total number of tokens issued #[returns(NumTokensResponse)] NumTokens {}, - #[returns(ContractInfoResponse)] + + #[deprecated(since = "0.19.0", note = "Please use GetCollectionMetadata instead")] + #[returns(CollectionMetadata)] + /// Deprecated: use GetCollectionMetadata instead! Will be removed in next release! ContractInfo {}, - #[returns(NftInfoResponse)] + + /// With MetaData Extension. + /// Returns top-level metadata about the contract + #[returns(CollectionMetadata)] + GetCollectionMetadata {}, + + #[deprecated(since = "0.19.0", note = "Please use GetMinterOwnership instead")] + #[returns(Ownership)] + /// Deprecated: use GetMinterOwnership instead! Will be removed in next release! + Ownership {}, + + /// Return the minter + #[deprecated(since = "0.19.0", note = "Please use GetMinterOwnership instead")] + #[returns(MinterResponse)] + /// Deprecated: use GetMinterOwnership instead! Will be removed in next release! + Minter {}, + + #[returns(Ownership)] + GetMinterOwnership {}, + + #[returns(Ownership)] + GetCreatorOwnership {}, + + /// With MetaData Extension. + /// Returns metadata about one particular token, based on *ERC721 Metadata JSON Schema* + /// but directly from the contract + #[returns(NftInfoResponse)] NftInfo { token_id: String }, - #[returns(AllNftInfoResponse)] + /// With MetaData Extension. + /// Returns the result of both `NftInfo` and `OwnerOf` as one query as an optimization + /// for clients + #[returns(AllNftInfoResponse)] AllNftInfo { token_id: String, + /// unset or false will filter out expired approvals, you must set to true to see them include_expired: Option, }, + + /// With Enumerable extension. + /// Returns all tokens owned by the given address, [] if unset. #[returns(TokensResponse)] Tokens { owner: String, start_after: Option, limit: Option, }, + /// With Enumerable extension. + /// Requires pagination. Lists all token_ids controlled by the contract. #[returns(TokensResponse)] AllTokens { start_after: Option, limit: Option, }, - #[returns(MinterResponse)] - Minter {}, - #[returns(CollectionInfoResponse)] - CollectionInfo {}, + + #[returns(Option)] + GetWithdrawAddress {}, + + // -- below queries, Extension and GetCollectionMetadataExtension, are just dummies, since type annotations are required for + // -- TNftMetadataExtension and TCollectionMetadataExtension, Error: + // -- "type annotations needed: cannot infer type for type parameter `TNftMetadataExtension` declared on the enum `Cw721QueryMsg`" + /// Use NftInfo instead. + /// No-op / NFT metadata query returning empty binary, needed for inferring type parameter during compile. + /// + /// Note: it may be extended in case there are use cases e.g. for specific NFT metadata query. + #[returns(())] + #[deprecated(since = "0.19.0", note = "Please use GetNftMetadata instead")] + Extension { msg: TNftMetadataExtension }, + + #[returns(())] + GetNftMetadata { msg: TNftMetadataExtension }, + + /// Use GetCollectionMetadata instead. + /// No-op / collection metadata extension query returning empty binary, needed for inferring type parameter during compile + /// + /// Note: it may be extended in case there are use cases e.g. for specific collection metadata query. + #[returns(())] + GetCollectionMetadataExtension { msg: TCollectionMetadataExtension }, } -impl From for Cw721QueryMsg { - fn from(msg: QueryMsg) -> Cw721QueryMsg { +impl + From> + for Cw721QueryMsg +where + TNftMetadataExtension: Cw721State, + TCollectionMetadataExtension: Cw721State, +{ + fn from( + msg: QueryMsg, + ) -> Cw721QueryMsg { match msg { QueryMsg::OwnerOf { token_id, @@ -160,6 +196,11 @@ impl From for Cw721QueryMsg { }, QueryMsg::NumTokens {} => Cw721QueryMsg::NumTokens {}, QueryMsg::ContractInfo {} => Cw721QueryMsg::ContractInfo {}, + QueryMsg::GetCollectionMetadata {} => Cw721QueryMsg::GetCollectionMetadata {}, + QueryMsg::Ownership {} => Cw721QueryMsg::Ownership {}, + QueryMsg::Minter {} => Cw721QueryMsg::Minter {}, + QueryMsg::GetMinterOwnership {} => Cw721QueryMsg::GetMinterOwnership {}, + QueryMsg::GetCreatorOwnership {} => Cw721QueryMsg::GetCreatorOwnership {}, QueryMsg::NftInfo { token_id } => Cw721QueryMsg::NftInfo { token_id }, QueryMsg::AllNftInfo { token_id, @@ -180,14 +221,13 @@ impl From for Cw721QueryMsg { QueryMsg::AllTokens { start_after, limit } => { Cw721QueryMsg::AllTokens { start_after, limit } } - QueryMsg::Minter {} => Cw721QueryMsg::Minter {}, - QueryMsg::Ownership {} => Cw721QueryMsg::Ownership {}, _ => unreachable!("cannot convert {:?} to Cw721QueryMsg", msg), } } } #[cw_serde] +#[deprecated = "Please use CollectionMetadata> instead"] pub struct CollectionInfoResponse { pub creator: String, pub description: String, diff --git a/contracts/collections/sg721-base/src/state.rs b/contracts/collections/sg721-base/src/state.rs index a3f5eed6c..56fe680fd 100644 --- a/contracts/collections/sg721-base/src/state.rs +++ b/contracts/collections/sg721-base/src/state.rs @@ -1,42 +1,121 @@ -use cosmwasm_std::{Empty, Timestamp}; +use cosmwasm_std::Timestamp; +use cw721::traits::{Cw721CustomMsg, Cw721State}; use cw_storage_plus::Item; use serde::{de::DeserializeOwned, Serialize}; -use sg721::{CollectionInfo, RoyaltyInfo}; use std::ops::Deref; -type Parent<'a, T> = cw721_base::Cw721Contract<'a, T, Empty, Empty, Empty>; -pub struct Sg721Contract<'a, T> -where - T: Serialize + DeserializeOwned + Clone, -{ - pub parent: Parent<'a, T>, - pub collection_info: Item<'a, CollectionInfo>, +type Parent< + 'a, + // Metadata defined in NftInfo (used for mint). + TNftMetadataExtension, + // Message passed for updating metadata. + TNftMetadataExtensionMsg, + // Extension defined in CollectionMetadata. + TCollectionMetadataExtension, + TCollectionMetadataExtensionMsg, + // Defines for `CosmosMsg::Custom` in response. Barely used, so `Empty` can be used. + TCustomResponseMsg, +> = cw721_base::Cw721Contract< + 'a, + TNftMetadataExtension, + TNftMetadataExtensionMsg, + TCollectionMetadataExtension, + TCollectionMetadataExtensionMsg, + TCustomResponseMsg, +>; +pub struct Sg721Contract< + 'a, + // Metadata defined in NftInfo (used for mint). + TNftMetadataExtension, + // Message passed for updating metadata. + TNftMetadataExtensionMsg, + // Extension defined in CollectionMetadata. + TCollectionMetadataExtension, + TCollectionMetadataExtensionMsg, + // Defines for `CosmosMsg::Custom` in response. Barely used, so `Empty` can be used. + TCustomResponseMsg, +> where + TNftMetadataExtension: Cw721State, + TNftMetadataExtensionMsg: Cw721CustomMsg, + TCollectionMetadataExtension: Cw721State, + TCollectionMetadataExtensionMsg: Cw721CustomMsg, +{ + pub parent: Parent< + 'a, + TNftMetadataExtension, + TNftMetadataExtensionMsg, + TCollectionMetadataExtension, + TCollectionMetadataExtensionMsg, + TCustomResponseMsg, + >, /// Instantiate set to false by the minter, then true by creator to freeze collection info pub frozen_collection_info: Item<'a, bool>, pub royalty_updated_at: Item<'a, Timestamp>, } -impl<'a, T> Default for Sg721Contract<'a, T> +impl< + 'a, + TNftMetadataExtension, + TNftMetadataExtensionMsg, + TCollectionMetadataExtension, + TCollectionMetadataExtensionMsg, + TCustomResponseMsg, + > Default + for Sg721Contract< + 'a, + TNftMetadataExtension, + TNftMetadataExtensionMsg, + TCollectionMetadataExtension, + TCollectionMetadataExtensionMsg, + TCustomResponseMsg, + > where - T: Serialize + DeserializeOwned + Clone, + TNftMetadataExtension: Cw721State, + TNftMetadataExtensionMsg: Cw721CustomMsg, + TCollectionMetadataExtension: Cw721State, + TCollectionMetadataExtensionMsg: Cw721CustomMsg, { fn default() -> Self { Sg721Contract { parent: cw721_base::Cw721Contract::default(), - collection_info: Item::new("collection_info"), frozen_collection_info: Item::new("frozen_collection_info"), royalty_updated_at: Item::new("royalty_updated_at"), } } } -impl<'a, T> Deref for Sg721Contract<'a, T> +impl< + 'a, + TNftMetadataExtension, + TNftMetadataExtensionMsg, + TCollectionMetadataExtension, + TCollectionMetadataExtensionMsg, + TCustomResponseMsg, + > Deref + for Sg721Contract< + 'a, + TNftMetadataExtension, + TNftMetadataExtensionMsg, + TCollectionMetadataExtension, + TCollectionMetadataExtensionMsg, + TCustomResponseMsg, + > where - T: Serialize + DeserializeOwned + Clone, + TNftMetadataExtension: Cw721State, + TNftMetadataExtensionMsg: Cw721CustomMsg, + TCollectionMetadataExtension: Cw721State, + TCollectionMetadataExtensionMsg: Cw721CustomMsg, { - type Target = Parent<'a, T>; + type Target = Parent< + 'a, + TNftMetadataExtension, + TNftMetadataExtensionMsg, + TCollectionMetadataExtension, + TCollectionMetadataExtensionMsg, + TCustomResponseMsg, + >; fn deref(&self) -> &Self::Target { &self.parent diff --git a/contracts/collections/sg721-base/src/upgrades/v3_0_0.rs b/contracts/collections/sg721-base/src/upgrades/v3_0_0.rs index f84165d50..c43e06815 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_0_0.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_0_0.rs @@ -1,14 +1,42 @@ -use crate::ContractError; +use crate::{ + entry::{CONTRACT_NAME, CONTRACT_VERSION}, + ContractError, Sg721Contract, +}; use cosmwasm_std::{DepsMut, Empty, Env, Event, Response}; -use cw721_base::Extension; +use cw721::{ + msg::Cw721MigrateMsg, DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, +}; +use cw721_base::execute::Cw721Execute; -pub fn upgrade(deps: DepsMut, _env: &Env, response: Response) -> Result { - let cw17_res = cw721_base::upgrades::v0_17::migrate::(deps) +pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result { + let contract = Sg721Contract::< + DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, + >::default(); + let migrate_msg = Cw721MigrateMsg::WithUpdate { + minter: None, + creator: None, + }; + // cw721 migration allows all versions: 0.18. 0.17, 0.16 and older + let cw721_res = contract + .parent + .migrate( + deps, + env.clone(), + migrate_msg, + CONTRACT_NAME, + CONTRACT_VERSION, + ) .map_err(|e| ContractError::MigrationError(e.to_string()))?; let mut event = Event::new("migrate-3.0.0"); - event = event.add_attributes(cw17_res.attributes); + event = event.add_attributes(cw721_res.attributes); Ok(response.add_event(event)) } diff --git a/contracts/collections/sg721-base/src/upgrades/v3_1_0.rs b/contracts/collections/sg721-base/src/upgrades/v3_1_0.rs index 563ee3f23..77c65cbb9 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_1_0.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_1_0.rs @@ -1,19 +1,49 @@ -use crate::{ContractError, Sg721Contract}; +use crate::{ + entry::{CONTRACT_NAME, CONTRACT_VERSION}, + ContractError, Sg721Contract, +}; +use cw721_base::execute::Cw721Execute; -use cosmwasm_std::{DepsMut, Env, Event, Response}; -use cw721_base::Extension; +use cosmwasm_std::{DepsMut, Empty, Env, Event, Response}; +use cw721::{ + msg::Cw721MigrateMsg, DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, +}; pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result { - let contract = Sg721Contract::::default(); - + let contract = Sg721Contract::< + DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, + >::default(); let royalty_updated_at = env.block.time.minus_seconds(60 * 60 * 24); // 24 hours ago contract .royalty_updated_at .save(deps.storage, &royalty_updated_at)?; - let event = Event::new("migrate-3.1.0") + let migrate_msg = Cw721MigrateMsg::WithUpdate { + minter: None, + creator: None, + }; + // cw721 migration allows all versions: 0.18. 0.17, 0.16 and older + let cw721_res = contract + .parent + .migrate( + deps, + env.clone(), + migrate_msg, + CONTRACT_NAME, + CONTRACT_VERSION, + ) + .map_err(|e| ContractError::MigrationError(e.to_string()))?; + + let mut event = Event::new("migrate-3.1.0") .add_attribute("royalty-updated", royalty_updated_at.to_string()); + event = event.add_attributes(cw721_res.attributes); Ok(response.add_event(event)) } diff --git a/contracts/collections/sg721-metadata-onchain/.cargo/config b/contracts/collections/sg721-metadata-onchain/.cargo/config deleted file mode 100644 index ab407a024..000000000 --- a/contracts/collections/sg721-metadata-onchain/.cargo/config +++ /dev/null @@ -1,4 +0,0 @@ -[alias] -wasm = "build --release --lib --target wasm32-unknown-unknown" -unit-test = "test --lib" -schema = "run --example schema" diff --git a/contracts/collections/sg721-metadata-onchain/Cargo.toml b/contracts/collections/sg721-metadata-onchain/Cargo.toml deleted file mode 100644 index 6a1f51856..000000000 --- a/contracts/collections/sg721-metadata-onchain/Cargo.toml +++ /dev/null @@ -1,45 +0,0 @@ -[package] -name = "sg721-metadata-onchain" -authors = [ - "Shane Vitarana ", - "Larry Engineer ", -] -description = "Example extending SG721 NFT to store metadata on chain" -version = { workspace = true } -edition = { workspace = true } -homepage = { workspace = true } -repository = { workspace = true } -license = { workspace = true } - -exclude = [ - # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. - "contract.wasm", - "hash.txt", -] - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[lib] -crate-type = ["cdylib", "rlib"] - -[features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] -# use library feature to disable all instantiate/execute/query exports -library = [] - -[dependencies] -cosmwasm-schema = { workspace = true } -cosmwasm-std = { workspace = true } -cw2 = { workspace = true } -schemars = { workspace = true } -serde = { workspace = true } -sg721 = { workspace = true } -sg721-base = { workspace = true, features = ["library"] } -sg-metadata = { workspace = true } -sg-std = { workspace = true } -cw-ownable = { workspace = true } -cw721-base = { workspace = true, features = ["library"] } - -[dev-dependencies] -cw721 = { workspace = true } diff --git a/contracts/collections/sg721-metadata-onchain/examples/schema.rs b/contracts/collections/sg721-metadata-onchain/examples/schema.rs deleted file mode 100644 index 320136a0f..000000000 --- a/contracts/collections/sg721-metadata-onchain/examples/schema.rs +++ /dev/null @@ -1,48 +0,0 @@ -use std::env::current_dir; -use std::fs::create_dir_all; - -use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; - -use cw721::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, ContractInfoResponse, NftInfoResponse, - NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, -}; -use cw721_base::MinterResponse; -use sg721_base::msg::CollectionInfoResponse; -use sg721_metadata_onchain::{InstantiateMsg, QueryMsg}; -use sg_metadata::Metadata; - -fn main() { - let mut out_dir = current_dir().unwrap(); - out_dir.push("schema"); - create_dir_all(&out_dir).unwrap(); - remove_schemas(&out_dir).unwrap(); - - export_schema(&schema_for!(InstantiateMsg), &out_dir); - export_schema(&schema_for!(QueryMsg), &out_dir); - export_schema_with_title( - &schema_for!(AllNftInfoResponse), - &out_dir, - "AllNftInfoResponse", - ); - export_schema(&schema_for!(ApprovalResponse), &out_dir); - export_schema(&schema_for!(ApprovalsResponse), &out_dir); - export_schema(&schema_for!(OperatorsResponse), &out_dir); - export_schema(&schema_for!(ContractInfoResponse), &out_dir); - export_schema(&schema_for!(MinterResponse), &out_dir); - export_schema_with_title( - &schema_for!(NftInfoResponse), - &out_dir, - "NftInfoResponse", - ); - export_schema(&schema_for!(NumTokensResponse), &out_dir); - export_schema(&schema_for!(OwnerOfResponse), &out_dir); - export_schema(&schema_for!(TokensResponse), &out_dir); - export_schema_with_title( - &schema_for!(OperatorsResponse), - &out_dir, - "AllOperatorsResponse", - ); - export_schema_with_title(&schema_for!(TokensResponse), &out_dir, "AllTokensResponse"); - export_schema(&schema_for!(CollectionInfoResponse), &out_dir); -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/all_nft_info_response.json b/contracts/collections/sg721-metadata-onchain/schema/all_nft_info_response.json deleted file mode 100644 index ea3074aa5..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/all_nft_info_response.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AllNftInfoResponse", - "type": "object", - "required": [ - "access", - "info" - ], - "properties": { - "access": { - "description": "Who can transfer the token", - "allOf": [ - { - "$ref": "#/definitions/OwnerOfResponse" - } - ] - }, - "info": { - "description": "Data on the token itself,", - "allOf": [ - { - "$ref": "#/definitions/NftInfoResponse_for_Metadata" - } - ] - } - }, - "additionalProperties": false, - "definitions": { - "Approval": { - "type": "object", - "required": [ - "expires", - "spender" - ], - "properties": { - "expires": { - "description": "When the Approval expires (maybe Expiration::never)", - "allOf": [ - { - "$ref": "#/definitions/Expiration" - } - ] - }, - "spender": { - "description": "Account that can transfer/send the token", - "type": "string" - } - }, - "additionalProperties": false - }, - "Expiration": { - "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)", - "oneOf": [ - { - "description": "AtHeight will expire when `env.block.height` >= height", - "type": "object", - "required": [ - "at_height" - ], - "properties": { - "at_height": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - }, - "additionalProperties": false - }, - { - "description": "AtTime will expire when `env.block.time` >= time", - "type": "object", - "required": [ - "at_time" - ], - "properties": { - "at_time": { - "$ref": "#/definitions/Timestamp" - } - }, - "additionalProperties": false - }, - { - "description": "Never will never expire. Used to express the empty variant", - "type": "object", - "required": [ - "never" - ], - "properties": { - "never": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - } - ] - }, - "Metadata": { - "description": "OpenSea metadata standard, used by Stargaze marketplace. See [this link](https://docs.opensea.io/docs/metadata-standards) for details.", - "type": "object", - "properties": { - "animation_url": { - "description": "A URL to a multi-media attachment for the item. The file extensions GLTF, GLB, WEBM, MP4, M4V, OGV, and OGG are supported, along with the audio-only extensions MP3, WAV, and OGA.\n\nAnimation_url also supports HTML pages, allowing you to build rich experiences and interactive NFTs using JavaScript canvas, WebGL, and more. Scripts and relative paths within the HTML page are now supported. However, access to browser extensions is not supported.", - "type": [ - "string", - "null" - ] - }, - "attributes": { - "description": "These are the attributes for the item, which will show up on the OpenSea page for the item.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Trait" - } - }, - "background_color": { - "description": "Background color of the item on OpenSea. Must be a six-character hexadecimal without a pre-pended #.", - "type": [ - "string", - "null" - ] - }, - "description": { - "description": "A human readable description of the item. Markdown is supported.", - "type": [ - "string", - "null" - ] - }, - "external_url": { - "description": "This is the URL that will appear below the asset's image on OpenSea and will allow users to leave OpenSea and view the item on your site.", - "type": [ - "string", - "null" - ] - }, - "image": { - "description": "This is the URL to the image of the item. Can be just about any type of image (including SVGs, which will be cached into PNGs by OpenSea), and can be [IPFS](https://github.com/ipfs/is-ipfs) URLs or paths. We recommend using a 350 x 350 image.", - "type": [ - "string", - "null" - ] - }, - "image_data": { - "description": "Raw SVG image data, if you want to generate images on the fly (not recommended). Only use this if you're not including the `image` parameter.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "Name of the item.", - "type": [ - "string", - "null" - ] - }, - "youtube_url": { - "description": "A URL to a YouTube video.", - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": false - }, - "NftInfoResponse_for_Metadata": { - "type": "object", - "required": [ - "extension" - ], - "properties": { - "extension": { - "description": "You can add any custom metadata here when you extend cw721-base", - "allOf": [ - { - "$ref": "#/definitions/Metadata" - } - ] - }, - "token_uri": { - "description": "Universal resource identifier for this NFT Should point to a JSON file that conforms to the ERC721 Metadata JSON Schema", - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": false - }, - "OwnerOfResponse": { - "type": "object", - "required": [ - "approvals", - "owner" - ], - "properties": { - "approvals": { - "description": "If set this address is approved to transfer/send the token as well", - "type": "array", - "items": { - "$ref": "#/definitions/Approval" - } - }, - "owner": { - "description": "Owner of the token", - "type": "string" - } - }, - "additionalProperties": false - }, - "Timestamp": { - "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", - "allOf": [ - { - "$ref": "#/definitions/Uint64" - } - ] - }, - "Trait": { - "description": "An attribute of the token as defined by the [OpenSea metadata standard](https://docs.opensea.io/docs/metadata-standards#attributes).", - "type": "object", - "required": [ - "trait_type", - "value" - ], - "properties": { - "display_type": { - "type": [ - "string", - "null" - ] - }, - "trait_type": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "additionalProperties": false - }, - "Uint64": { - "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", - "type": "string" - } - } -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/all_operators_response.json b/contracts/collections/sg721-metadata-onchain/schema/all_operators_response.json deleted file mode 100644 index 5c88cf9c1..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/all_operators_response.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AllOperatorsResponse", - "type": "object", - "required": [ - "operators" - ], - "properties": { - "operators": { - "type": "array", - "items": { - "$ref": "#/definitions/Approval" - } - } - }, - "additionalProperties": false, - "definitions": { - "Approval": { - "type": "object", - "required": [ - "expires", - "spender" - ], - "properties": { - "expires": { - "description": "When the Approval expires (maybe Expiration::never)", - "allOf": [ - { - "$ref": "#/definitions/Expiration" - } - ] - }, - "spender": { - "description": "Account that can transfer/send the token", - "type": "string" - } - }, - "additionalProperties": false - }, - "Expiration": { - "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)", - "oneOf": [ - { - "description": "AtHeight will expire when `env.block.height` >= height", - "type": "object", - "required": [ - "at_height" - ], - "properties": { - "at_height": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - }, - "additionalProperties": false - }, - { - "description": "AtTime will expire when `env.block.time` >= time", - "type": "object", - "required": [ - "at_time" - ], - "properties": { - "at_time": { - "$ref": "#/definitions/Timestamp" - } - }, - "additionalProperties": false - }, - { - "description": "Never will never expire. Used to express the empty variant", - "type": "object", - "required": [ - "never" - ], - "properties": { - "never": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - } - ] - }, - "Timestamp": { - "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", - "allOf": [ - { - "$ref": "#/definitions/Uint64" - } - ] - }, - "Uint64": { - "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", - "type": "string" - } - } -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/all_tokens_response.json b/contracts/collections/sg721-metadata-onchain/schema/all_tokens_response.json deleted file mode 100644 index 3925af750..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/all_tokens_response.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AllTokensResponse", - "type": "object", - "required": [ - "tokens" - ], - "properties": { - "tokens": { - "description": "Contains all token_ids in lexicographical ordering If there are more than `limit`, use `start_after` in future queries to achieve pagination.", - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/approval_response.json b/contracts/collections/sg721-metadata-onchain/schema/approval_response.json deleted file mode 100644 index b29eab59e..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/approval_response.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ApprovalResponse", - "type": "object", - "required": [ - "approval" - ], - "properties": { - "approval": { - "$ref": "#/definitions/Approval" - } - }, - "additionalProperties": false, - "definitions": { - "Approval": { - "type": "object", - "required": [ - "expires", - "spender" - ], - "properties": { - "expires": { - "description": "When the Approval expires (maybe Expiration::never)", - "allOf": [ - { - "$ref": "#/definitions/Expiration" - } - ] - }, - "spender": { - "description": "Account that can transfer/send the token", - "type": "string" - } - }, - "additionalProperties": false - }, - "Expiration": { - "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)", - "oneOf": [ - { - "description": "AtHeight will expire when `env.block.height` >= height", - "type": "object", - "required": [ - "at_height" - ], - "properties": { - "at_height": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - }, - "additionalProperties": false - }, - { - "description": "AtTime will expire when `env.block.time` >= time", - "type": "object", - "required": [ - "at_time" - ], - "properties": { - "at_time": { - "$ref": "#/definitions/Timestamp" - } - }, - "additionalProperties": false - }, - { - "description": "Never will never expire. Used to express the empty variant", - "type": "object", - "required": [ - "never" - ], - "properties": { - "never": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - } - ] - }, - "Timestamp": { - "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", - "allOf": [ - { - "$ref": "#/definitions/Uint64" - } - ] - }, - "Uint64": { - "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", - "type": "string" - } - } -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/approvals_response.json b/contracts/collections/sg721-metadata-onchain/schema/approvals_response.json deleted file mode 100644 index 7cdac0015..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/approvals_response.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ApprovalsResponse", - "type": "object", - "required": [ - "approvals" - ], - "properties": { - "approvals": { - "type": "array", - "items": { - "$ref": "#/definitions/Approval" - } - } - }, - "additionalProperties": false, - "definitions": { - "Approval": { - "type": "object", - "required": [ - "expires", - "spender" - ], - "properties": { - "expires": { - "description": "When the Approval expires (maybe Expiration::never)", - "allOf": [ - { - "$ref": "#/definitions/Expiration" - } - ] - }, - "spender": { - "description": "Account that can transfer/send the token", - "type": "string" - } - }, - "additionalProperties": false - }, - "Expiration": { - "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)", - "oneOf": [ - { - "description": "AtHeight will expire when `env.block.height` >= height", - "type": "object", - "required": [ - "at_height" - ], - "properties": { - "at_height": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - }, - "additionalProperties": false - }, - { - "description": "AtTime will expire when `env.block.time` >= time", - "type": "object", - "required": [ - "at_time" - ], - "properties": { - "at_time": { - "$ref": "#/definitions/Timestamp" - } - }, - "additionalProperties": false - }, - { - "description": "Never will never expire. Used to express the empty variant", - "type": "object", - "required": [ - "never" - ], - "properties": { - "never": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - } - ] - }, - "Timestamp": { - "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", - "allOf": [ - { - "$ref": "#/definitions/Uint64" - } - ] - }, - "Uint64": { - "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", - "type": "string" - } - } -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/collection_info_response.json b/contracts/collections/sg721-metadata-onchain/schema/collection_info_response.json deleted file mode 100644 index 0e4e9c2d3..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/collection_info_response.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "CollectionInfoResponse", - "type": "object", - "required": [ - "creator", - "description", - "image" - ], - "properties": { - "creator": { - "type": "string" - }, - "description": { - "type": "string" - }, - "explicit_content": { - "type": [ - "boolean", - "null" - ] - }, - "external_link": { - "type": [ - "string", - "null" - ] - }, - "image": { - "type": "string" - }, - "royalty_info": { - "anyOf": [ - { - "$ref": "#/definitions/RoyaltyInfoResponse" - }, - { - "type": "null" - } - ] - }, - "start_trading_time": { - "anyOf": [ - { - "$ref": "#/definitions/Timestamp" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "definitions": { - "Decimal": { - "description": "A fixed-point decimal value with 18 fractional digits, i.e. Decimal(1_000_000_000_000_000_000) == 1.0\n\nThe greatest possible value that can be represented is 340282366920938463463.374607431768211455 (which is (2^128 - 1) / 10^18)", - "type": "string" - }, - "RoyaltyInfoResponse": { - "type": "object", - "required": [ - "payment_address", - "share" - ], - "properties": { - "payment_address": { - "type": "string" - }, - "share": { - "$ref": "#/definitions/Decimal" - } - }, - "additionalProperties": false - }, - "Timestamp": { - "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", - "allOf": [ - { - "$ref": "#/definitions/Uint64" - } - ] - }, - "Uint64": { - "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", - "type": "string" - } - } -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/contract_info_response.json b/contracts/collections/sg721-metadata-onchain/schema/contract_info_response.json deleted file mode 100644 index 4a805a825..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/contract_info_response.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ContractInfoResponse", - "type": "object", - "required": [ - "name", - "symbol" - ], - "properties": { - "name": { - "type": "string" - }, - "symbol": { - "type": "string" - } - }, - "additionalProperties": false -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/instantiate_msg.json b/contracts/collections/sg721-metadata-onchain/schema/instantiate_msg.json deleted file mode 100644 index 734b45e87..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/instantiate_msg.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "InstantiateMsg", - "type": "object", - "required": [ - "collection_info", - "minter", - "name", - "symbol" - ], - "properties": { - "collection_info": { - "$ref": "#/definitions/CollectionInfo_for_RoyaltyInfoResponse" - }, - "minter": { - "type": "string" - }, - "name": { - "type": "string" - }, - "symbol": { - "type": "string" - } - }, - "additionalProperties": false, - "definitions": { - "CollectionInfo_for_RoyaltyInfoResponse": { - "type": "object", - "required": [ - "creator", - "description", - "image" - ], - "properties": { - "creator": { - "type": "string" - }, - "description": { - "type": "string" - }, - "explicit_content": { - "type": [ - "boolean", - "null" - ] - }, - "external_link": { - "type": [ - "string", - "null" - ] - }, - "image": { - "type": "string" - }, - "royalty_info": { - "anyOf": [ - { - "$ref": "#/definitions/RoyaltyInfoResponse" - }, - { - "type": "null" - } - ] - }, - "start_trading_time": { - "anyOf": [ - { - "$ref": "#/definitions/Timestamp" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "Decimal": { - "description": "A fixed-point decimal value with 18 fractional digits, i.e. Decimal(1_000_000_000_000_000_000) == 1.0\n\nThe greatest possible value that can be represented is 340282366920938463463.374607431768211455 (which is (2^128 - 1) / 10^18)", - "type": "string" - }, - "RoyaltyInfoResponse": { - "type": "object", - "required": [ - "payment_address", - "share" - ], - "properties": { - "payment_address": { - "type": "string" - }, - "share": { - "$ref": "#/definitions/Decimal" - } - }, - "additionalProperties": false - }, - "Timestamp": { - "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", - "allOf": [ - { - "$ref": "#/definitions/Uint64" - } - ] - }, - "Uint64": { - "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", - "type": "string" - } - } -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/minter_response.json b/contracts/collections/sg721-metadata-onchain/schema/minter_response.json deleted file mode 100644 index e79df37e8..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/minter_response.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MinterResponse", - "description": "Shows who can mint these tokens", - "type": "object", - "properties": { - "minter": { - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": false -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/nft_info_response.json b/contracts/collections/sg721-metadata-onchain/schema/nft_info_response.json deleted file mode 100644 index 8d5e6fda2..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/nft_info_response.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "NftInfoResponse", - "type": "object", - "required": [ - "extension" - ], - "properties": { - "extension": { - "description": "You can add any custom metadata here when you extend cw721-base", - "allOf": [ - { - "$ref": "#/definitions/Metadata" - } - ] - }, - "token_uri": { - "description": "Universal resource identifier for this NFT Should point to a JSON file that conforms to the ERC721 Metadata JSON Schema", - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": false, - "definitions": { - "Metadata": { - "description": "OpenSea metadata standard, used by Stargaze marketplace. See [this link](https://docs.opensea.io/docs/metadata-standards) for details.", - "type": "object", - "properties": { - "animation_url": { - "description": "A URL to a multi-media attachment for the item. The file extensions GLTF, GLB, WEBM, MP4, M4V, OGV, and OGG are supported, along with the audio-only extensions MP3, WAV, and OGA.\n\nAnimation_url also supports HTML pages, allowing you to build rich experiences and interactive NFTs using JavaScript canvas, WebGL, and more. Scripts and relative paths within the HTML page are now supported. However, access to browser extensions is not supported.", - "type": [ - "string", - "null" - ] - }, - "attributes": { - "description": "These are the attributes for the item, which will show up on the OpenSea page for the item.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Trait" - } - }, - "background_color": { - "description": "Background color of the item on OpenSea. Must be a six-character hexadecimal without a pre-pended #.", - "type": [ - "string", - "null" - ] - }, - "description": { - "description": "A human readable description of the item. Markdown is supported.", - "type": [ - "string", - "null" - ] - }, - "external_url": { - "description": "This is the URL that will appear below the asset's image on OpenSea and will allow users to leave OpenSea and view the item on your site.", - "type": [ - "string", - "null" - ] - }, - "image": { - "description": "This is the URL to the image of the item. Can be just about any type of image (including SVGs, which will be cached into PNGs by OpenSea), and can be [IPFS](https://github.com/ipfs/is-ipfs) URLs or paths. We recommend using a 350 x 350 image.", - "type": [ - "string", - "null" - ] - }, - "image_data": { - "description": "Raw SVG image data, if you want to generate images on the fly (not recommended). Only use this if you're not including the `image` parameter.", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "Name of the item.", - "type": [ - "string", - "null" - ] - }, - "youtube_url": { - "description": "A URL to a YouTube video.", - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": false - }, - "Trait": { - "description": "An attribute of the token as defined by the [OpenSea metadata standard](https://docs.opensea.io/docs/metadata-standards#attributes).", - "type": "object", - "required": [ - "trait_type", - "value" - ], - "properties": { - "display_type": { - "type": [ - "string", - "null" - ] - }, - "trait_type": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "additionalProperties": false - } - } -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/num_tokens_response.json b/contracts/collections/sg721-metadata-onchain/schema/num_tokens_response.json deleted file mode 100644 index aff5850c8..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/num_tokens_response.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "NumTokensResponse", - "type": "object", - "required": [ - "count" - ], - "properties": { - "count": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - }, - "additionalProperties": false -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/operators_response.json b/contracts/collections/sg721-metadata-onchain/schema/operators_response.json deleted file mode 100644 index 533a096dd..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/operators_response.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "OperatorsResponse", - "type": "object", - "required": [ - "operators" - ], - "properties": { - "operators": { - "type": "array", - "items": { - "$ref": "#/definitions/Approval" - } - } - }, - "additionalProperties": false, - "definitions": { - "Approval": { - "type": "object", - "required": [ - "expires", - "spender" - ], - "properties": { - "expires": { - "description": "When the Approval expires (maybe Expiration::never)", - "allOf": [ - { - "$ref": "#/definitions/Expiration" - } - ] - }, - "spender": { - "description": "Account that can transfer/send the token", - "type": "string" - } - }, - "additionalProperties": false - }, - "Expiration": { - "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)", - "oneOf": [ - { - "description": "AtHeight will expire when `env.block.height` >= height", - "type": "object", - "required": [ - "at_height" - ], - "properties": { - "at_height": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - }, - "additionalProperties": false - }, - { - "description": "AtTime will expire when `env.block.time` >= time", - "type": "object", - "required": [ - "at_time" - ], - "properties": { - "at_time": { - "$ref": "#/definitions/Timestamp" - } - }, - "additionalProperties": false - }, - { - "description": "Never will never expire. Used to express the empty variant", - "type": "object", - "required": [ - "never" - ], - "properties": { - "never": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - } - ] - }, - "Timestamp": { - "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", - "allOf": [ - { - "$ref": "#/definitions/Uint64" - } - ] - }, - "Uint64": { - "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", - "type": "string" - } - } -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/owner_of_response.json b/contracts/collections/sg721-metadata-onchain/schema/owner_of_response.json deleted file mode 100644 index abb9006d8..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/owner_of_response.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "OwnerOfResponse", - "type": "object", - "required": [ - "approvals", - "owner" - ], - "properties": { - "approvals": { - "description": "If set this address is approved to transfer/send the token as well", - "type": "array", - "items": { - "$ref": "#/definitions/Approval" - } - }, - "owner": { - "description": "Owner of the token", - "type": "string" - } - }, - "additionalProperties": false, - "definitions": { - "Approval": { - "type": "object", - "required": [ - "expires", - "spender" - ], - "properties": { - "expires": { - "description": "When the Approval expires (maybe Expiration::never)", - "allOf": [ - { - "$ref": "#/definitions/Expiration" - } - ] - }, - "spender": { - "description": "Account that can transfer/send the token", - "type": "string" - } - }, - "additionalProperties": false - }, - "Expiration": { - "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)", - "oneOf": [ - { - "description": "AtHeight will expire when `env.block.height` >= height", - "type": "object", - "required": [ - "at_height" - ], - "properties": { - "at_height": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - }, - "additionalProperties": false - }, - { - "description": "AtTime will expire when `env.block.time` >= time", - "type": "object", - "required": [ - "at_time" - ], - "properties": { - "at_time": { - "$ref": "#/definitions/Timestamp" - } - }, - "additionalProperties": false - }, - { - "description": "Never will never expire. Used to express the empty variant", - "type": "object", - "required": [ - "never" - ], - "properties": { - "never": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - } - ] - }, - "Timestamp": { - "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", - "allOf": [ - { - "$ref": "#/definitions/Uint64" - } - ] - }, - "Uint64": { - "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", - "type": "string" - } - } -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/query_msg.json b/contracts/collections/sg721-metadata-onchain/schema/query_msg.json deleted file mode 100644 index 52c8dff4f..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/query_msg.json +++ /dev/null @@ -1,310 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "QueryMsg", - "oneOf": [ - { - "type": "object", - "required": [ - "owner_of" - ], - "properties": { - "owner_of": { - "type": "object", - "required": [ - "token_id" - ], - "properties": { - "include_expired": { - "type": [ - "boolean", - "null" - ] - }, - "token_id": { - "type": "string" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "approval" - ], - "properties": { - "approval": { - "type": "object", - "required": [ - "spender", - "token_id" - ], - "properties": { - "include_expired": { - "type": [ - "boolean", - "null" - ] - }, - "spender": { - "type": "string" - }, - "token_id": { - "type": "string" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "approvals" - ], - "properties": { - "approvals": { - "type": "object", - "required": [ - "token_id" - ], - "properties": { - "include_expired": { - "type": [ - "boolean", - "null" - ] - }, - "token_id": { - "type": "string" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "all_operators" - ], - "properties": { - "all_operators": { - "type": "object", - "required": [ - "owner" - ], - "properties": { - "include_expired": { - "type": [ - "boolean", - "null" - ] - }, - "limit": { - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0.0 - }, - "owner": { - "type": "string" - }, - "start_after": { - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "num_tokens" - ], - "properties": { - "num_tokens": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "contract_info" - ], - "properties": { - "contract_info": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "nft_info" - ], - "properties": { - "nft_info": { - "type": "object", - "required": [ - "token_id" - ], - "properties": { - "token_id": { - "type": "string" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "all_nft_info" - ], - "properties": { - "all_nft_info": { - "type": "object", - "required": [ - "token_id" - ], - "properties": { - "include_expired": { - "type": [ - "boolean", - "null" - ] - }, - "token_id": { - "type": "string" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "tokens" - ], - "properties": { - "tokens": { - "type": "object", - "required": [ - "owner" - ], - "properties": { - "limit": { - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0.0 - }, - "owner": { - "type": "string" - }, - "start_after": { - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "all_tokens" - ], - "properties": { - "all_tokens": { - "type": "object", - "properties": { - "limit": { - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0.0 - }, - "start_after": { - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "minter" - ], - "properties": { - "minter": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "collection_info" - ], - "properties": { - "collection_info": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "description": "Query the contract's ownership information", - "type": "object", - "required": [ - "ownership" - ], - "properties": { - "ownership": { - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false - } - ] -} diff --git a/contracts/collections/sg721-metadata-onchain/schema/tokens_response.json b/contracts/collections/sg721-metadata-onchain/schema/tokens_response.json deleted file mode 100644 index 4728d37e2..000000000 --- a/contracts/collections/sg721-metadata-onchain/schema/tokens_response.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "TokensResponse", - "type": "object", - "required": [ - "tokens" - ], - "properties": { - "tokens": { - "description": "Contains all token_ids in lexicographical ordering If there are more than `limit`, use `start_after` in future queries to achieve pagination.", - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false -} diff --git a/contracts/collections/sg721-metadata-onchain/src/lib.rs b/contracts/collections/sg721-metadata-onchain/src/lib.rs deleted file mode 100644 index 33adf3417..000000000 --- a/contracts/collections/sg721-metadata-onchain/src/lib.rs +++ /dev/null @@ -1,207 +0,0 @@ -use cosmwasm_std::Empty; - -pub use sg721_base::ContractError; -use sg_metadata::Metadata; - -pub type Sg721MetadataContract<'a> = sg721_base::Sg721Contract<'a, Metadata>; -pub type InstantiateMsg = sg721::InstantiateMsg; -pub type ExecuteMsg = sg721::ExecuteMsg; -pub type QueryMsg = sg721_base::msg::QueryMsg; - -// version info for migration info -const CONTRACT_NAME: &str = "crates.io:sg721-metadata-onchain"; -const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); -pub const EARLIEST_VERSION: &str = "0.16.0"; -pub const TO_VERSION: &str = "3.0.0"; - -pub type Extension = Option; - -#[cfg(not(feature = "library"))] -pub mod entry { - use super::*; - - use cosmwasm_std::{ - entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdError, StdResult, - }; - - use sg721_base::{msg::QueryMsg, ContractError}; - - #[entry_point] - pub fn instantiate( - deps: DepsMut, - env: Env, - info: MessageInfo, - msg: InstantiateMsg, - ) -> Result { - cw2::set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; - - let res = Sg721MetadataContract::default().instantiate(deps, env, info, msg)?; - - Ok(res - .add_attribute("contract_name", CONTRACT_NAME) - .add_attribute("contract_version", CONTRACT_VERSION)) - } - - #[entry_point] - pub fn execute( - deps: DepsMut, - env: Env, - info: MessageInfo, - msg: ExecuteMsg, - ) -> Result { - Sg721MetadataContract::default().execute(deps, env, info, msg) - } - - #[entry_point] - pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { - Sg721MetadataContract::default().query(deps, env, msg) - } - - #[entry_point] - pub fn migrate(deps: DepsMut, _env: Env, _msg: Empty) -> Result { - // make sure the correct contract is being upgraded, and it's being - // upgraded from the correct version. - if CONTRACT_VERSION < EARLIEST_VERSION { - return Err( - StdError::generic_err("Cannot upgrade to a previous contract version").into(), - ); - } - if CONTRACT_VERSION > TO_VERSION { - return Err( - StdError::generic_err("Cannot upgrade to a previous contract version").into(), - ); - } - // if same version return - if CONTRACT_VERSION == TO_VERSION { - return Ok(Response::new()); - } - - // update contract version - cw2::set_contract_version(deps.storage, CONTRACT_NAME, TO_VERSION)?; - - // perform the upgrade - let cw17_res = cw721_base::upgrades::v0_17::migrate::(deps) - .map_err(|e| sg721_base::ContractError::MigrationError(e.to_string()))?; - let mut sgz_res = Response::new(); - sgz_res.attributes = cw17_res.attributes; - Ok(sgz_res) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - use cosmwasm_std::testing::{mock_env, mock_info, MockApi, MockQuerier, MockStorage}; - use cosmwasm_std::{ - from_json, to_json_binary, ContractInfoResponse, ContractResult, Empty, OwnedDeps, Querier, - QuerierResult, QueryRequest, SystemError, SystemResult, WasmQuery, - }; - use cw721::Cw721Query; - use sg721::{CollectionInfo, ExecuteMsg, InstantiateMsg}; - use std::marker::PhantomData; - - const CREATOR: &str = "creator"; - - pub fn mock_deps() -> OwnedDeps { - OwnedDeps { - storage: MockStorage::default(), - api: MockApi::default(), - querier: CustomMockQuerier::new(MockQuerier::new(&[])), - custom_query_type: PhantomData, - } - } - - pub struct CustomMockQuerier { - base: MockQuerier, - } - - impl Querier for CustomMockQuerier { - fn raw_query(&self, bin_request: &[u8]) -> QuerierResult { - let request: QueryRequest = match from_json(bin_request) { - Ok(v) => v, - Err(e) => { - return SystemResult::Err(SystemError::InvalidRequest { - error: format!("Parsing query request: {e}"), - request: bin_request.into(), - }) - } - }; - - self.handle_query(&request) - } - } - - impl CustomMockQuerier { - pub fn handle_query(&self, request: &QueryRequest) -> QuerierResult { - match &request { - QueryRequest::Wasm(WasmQuery::ContractInfo { contract_addr: _ }) => { - let mut response = ContractInfoResponse::default(); - response.code_id = 1; - response.creator = CREATOR.to_string(); - SystemResult::Ok(ContractResult::Ok(to_json_binary(&response).unwrap())) - } - _ => self.base.handle_query(request), - } - } - - pub fn new(base: MockQuerier) -> Self { - CustomMockQuerier { base } - } - } - - #[test] - fn use_metadata_extension() { - let mut deps = mock_deps(); - let contract = Sg721MetadataContract::default(); - - // instantiate contract - let info = mock_info(CREATOR, &[]); - let init_msg = InstantiateMsg { - name: "SpaceShips".to_string(), - symbol: "SPACE".to_string(), - minter: CREATOR.to_string(), - collection_info: CollectionInfo { - creator: CREATOR.to_string(), - description: "this is a test".to_string(), - image: "https://larry.engineer".to_string(), - external_link: None, - explicit_content: Some(false), - start_trading_time: None, - royalty_info: None, - }, - }; - contract - .instantiate(deps.as_mut(), mock_env(), info.clone(), init_msg) - .unwrap(); - - // mint token - let token_id = "Enterprise"; - let extension = Metadata { - description: Some("Spaceship with Warp Drive".into()), - name: Some("Starship USS Enterprise".to_string()), - ..Metadata::default() - }; - let mint_msg = ExecuteMsg::Mint { - token_id: token_id.to_string(), - owner: "john".to_string(), - token_uri: Some("https://starships.example.com/Starship/Enterprise.json".into()), - extension: extension.clone(), - }; - - contract - .execute(deps.as_mut(), mock_env(), info, mint_msg) - .unwrap(); - - // check token contains correct metadata - let res = contract - .parent - .nft_info(deps.as_ref(), token_id.into()) - .unwrap(); - assert_eq!( - res.token_uri, - Some("https://starships.example.com/Starship/Enterprise.json".into()) - ); - assert_eq!(res.extension, extension); - } -} diff --git a/contracts/collections/sg721-nt/examples/schema.rs b/contracts/collections/sg721-nt/examples/schema.rs index 28be4a0db..04bc938eb 100644 --- a/contracts/collections/sg721-nt/examples/schema.rs +++ b/contracts/collections/sg721-nt/examples/schema.rs @@ -5,11 +5,14 @@ use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, s use cosmwasm_std::Empty; -use cw721::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, ContractInfoResponse, Cw721QueryMsg, - NftInfoResponse, NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721_base::{ + msg::{ + AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, Cw721QueryMsg, MinterResponse, + NftInfoResponse, NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, + }, + ContractInfoResponse, }; -use cw721_base::MinterResponse; use sg721::InstantiateMsg; fn main() { @@ -19,7 +22,15 @@ fn main() { remove_schemas(&out_dir).unwrap(); export_schema(&schema_for!(InstantiateMsg), &out_dir); - export_schema(&schema_for!(Cw721QueryMsg), &out_dir); + export_schema( + &schema_for!( + Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + > + ), + &out_dir, + ); export_schema_with_title( &schema_for!(AllNftInfoResponse), &out_dir, diff --git a/contracts/collections/sg721-nt/src/lib.rs b/contracts/collections/sg721-nt/src/lib.rs index 38228800e..b444bfdd3 100644 --- a/contracts/collections/sg721-nt/src/lib.rs +++ b/contracts/collections/sg721-nt/src/lib.rs @@ -2,11 +2,26 @@ use cosmwasm_std::entry_point; pub mod msg; +use cosmwasm_std::Empty; +use cw721::{ + DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, +}; use cw721_base::Extension; use sg721::InstantiateMsg; use sg721_base::Sg721Contract; -pub type QueryMsg = sg721_base::msg::QueryMsg; -pub type Sg721NonTransferableContract<'a> = Sg721Contract<'a, Extension>; +pub type QueryMsg = sg721_base::msg::QueryMsg< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, +>; +pub type Sg721NonTransferableContract<'a> = Sg721Contract< + 'a, + DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, +>; use sg721_base::msg::NftParams; // version info for migration info @@ -24,7 +39,8 @@ pub mod entry { use cosmwasm_std::{ Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdError, StdResult, }; - use cw721::Cw721Execute; + use cw721::msg::Cw721MigrateMsg; + use cw721_base::execute::Cw721Execute; use sg721_base::ContractError; #[entry_point] @@ -53,7 +69,7 @@ pub mod entry { match msg { ExecuteMsg::Burn { token_id } => Sg721NonTransferableContract::default() .parent - .burn(deps, env, info, token_id) + .burn_nft(deps, &env, &info, token_id) .map_err(|e| e.into()), ExecuteMsg::Mint { token_id, @@ -86,12 +102,12 @@ pub mod entry { } #[entry_point] - pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { + pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> Result { Sg721NonTransferableContract::default().query(deps, env, msg) } #[entry_point] - pub fn migrate(deps: DepsMut, _env: Env, _msg: Empty) -> Result { + pub fn migrate(deps: DepsMut, env: Env, _msg: Empty) -> Result { // make sure the correct contract is being upgraded, and it's being // upgraded from the correct version. if CONTRACT_VERSION < EARLIEST_VERSION { @@ -113,10 +129,30 @@ pub mod entry { cw2::set_contract_version(deps.storage, CONTRACT_NAME, TO_VERSION)?; // perform the upgrade - let cw17_res = cw721_base::upgrades::v0_17::migrate::(deps) - .map_err(|e| sg721_base::ContractError::MigrationError(e.to_string()))?; + // cw721 migration allows all versions: 0.18. 0.17, 0.16 and older + let contract = Sg721Contract::< + DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, + >::default(); + let migrate_msg = Cw721MigrateMsg::WithUpdate { + minter: None, + creator: None, + }; + let cw721_res = contract + .parent + .migrate( + deps, + env.clone(), + migrate_msg, + CONTRACT_NAME, + CONTRACT_VERSION, + ) + .map_err(|e| ContractError::MigrationError(e.to_string()))?; let mut sgz_res = Response::new(); - sgz_res.attributes = cw17_res.attributes; + sgz_res.attributes = cw721_res.attributes; Ok(sgz_res) } } diff --git a/contracts/collections/sg721-updatable/examples/schema.rs b/contracts/collections/sg721-updatable/examples/schema.rs index 44d07d85a..c13cc631f 100644 --- a/contracts/collections/sg721-updatable/examples/schema.rs +++ b/contracts/collections/sg721-updatable/examples/schema.rs @@ -4,12 +4,12 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; use cosmwasm_std::Empty; -pub use cw721::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, ContractInfoResponse, NftInfoResponse, - NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, -}; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +pub use cw721_base::{ContractInfoResponse,msg::{ + AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, NftInfoResponse, + NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, MinterResponse +}}; use cw721_base::Extension; -pub use cw721_base::MinterResponse; use sg721::InstantiateMsg; pub use sg721_base::msg::CollectionInfoResponse; use sg721_base::msg::QueryMsg; @@ -23,7 +23,10 @@ fn main() { export_schema(&schema_for!(InstantiateMsg), &out_dir); export_schema(&schema_for!(ExecuteMsg), &out_dir); - export_schema(&schema_for!(QueryMsg), &out_dir); + export_schema(&schema_for!(QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >), &out_dir); export_schema(&schema_for!(CollectionInfoResponse), &out_dir); export_schema_with_title( &schema_for!(AllNftInfoResponse), diff --git a/contracts/collections/sg721-updatable/src/contract.rs b/contracts/collections/sg721-updatable/src/contract.rs index e48cb2e24..728a9363c 100644 --- a/contracts/collections/sg721-updatable/src/contract.rs +++ b/contracts/collections/sg721-updatable/src/contract.rs @@ -7,6 +7,10 @@ use cosmwasm_std::{Deps, StdResult}; #[cfg(not(feature = "library"))] use cosmwasm_std::{DepsMut, Env, Event, MessageInfo}; use cw2::set_contract_version; +use cw721::{ + DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, +}; use semver::Version; use sg721::InstantiateMsg; use sg721_base::msg::CollectionInfoResponse; @@ -19,7 +23,14 @@ use cw_utils::nonpayable; use sg1::checked_fair_burn; use sg721_base::ContractError::Unauthorized; use sg721_base::Sg721Contract; -pub type Sg721UpdatableContract<'a> = Sg721Contract<'a, Extension>; +pub type Sg721UpdatableContract<'a> = Sg721Contract< + 'a, + DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, +>; const CONTRACT_NAME: &str = "crates.io:sg721-updatable"; const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -125,7 +136,7 @@ pub fn execute_update_token_metadata( } // Update token metadata - Sg721UpdatableContract::default().tokens.update( + Sg721UpdatableContract::default().config.nft_info.update( deps.storage, &token_id, |token| match token { @@ -237,7 +248,7 @@ mod tests { from_json, to_json_binary, ContractInfoResponse, ContractResult, Empty, OwnedDeps, Querier, QuerierResult, QueryRequest, SystemError, SystemResult, WasmQuery, }; - use cw721::Cw721Query; + use cw721_base::query::Cw721Query; use sg721::{CollectionInfo, InstantiateMsg}; use std::marker::PhantomData; @@ -349,24 +360,25 @@ mod tests { ); // Update token metadata - execute(deps.as_mut(), mock_env(), info.clone(), update_msg).unwrap(); + let env = mock_env(); + execute(deps.as_mut(), env.clone(), info.clone(), update_msg).unwrap(); // Check token contains updated metadata let res = contract .parent - .nft_info(deps.as_ref(), token_id.into()) + .query_nft_info(deps.as_ref(), &env, token_id.into()) .unwrap(); assert_eq!(res.token_uri, updated_token_uri); // Update token metadata with None token_uri - let update_msg = ExecuteMsg::::UpdateTokenMetadata { + let update_msg = ExecuteMsg::::UpdateTokenMetadata { token_id: token_id.to_string(), token_uri: None, }; execute(deps.as_mut(), mock_env(), info.clone(), update_msg).unwrap(); let res = contract .parent - .nft_info(deps.as_ref(), token_id.into()) + .query_nft_info(deps.as_ref(), &env, token_id.into()) .unwrap(); assert_eq!(res.token_uri, None); diff --git a/contracts/collections/sg721-updatable/src/lib.rs b/contracts/collections/sg721-updatable/src/lib.rs index 7d2f9c214..78cface3a 100644 --- a/contracts/collections/sg721-updatable/src/lib.rs +++ b/contracts/collections/sg721-updatable/src/lib.rs @@ -20,6 +20,7 @@ pub mod entry { }; use cosmwasm_std::{entry_point, to_json_binary, Empty}; use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; + use cw721::{DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg}; use cw721_base::Extension; #[entry_point] @@ -37,7 +38,7 @@ pub mod entry { deps: DepsMut, env: Env, info: MessageInfo, - msg: ExecuteMsg, + msg: ExecuteMsg, ) -> Result { match msg { ExecuteMsg::FreezeTokenMetadata {} => execute_freeze_token_metadata(deps, env, info), @@ -53,12 +54,12 @@ pub mod entry { } #[entry_point] - pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { + pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> Result { match msg { - QueryMsg::EnableUpdatable {} => to_json_binary(&query_enable_updatable(deps)?), - QueryMsg::EnableUpdatableFee {} => to_json_binary(&query_enable_updatable_fee()?), - QueryMsg::FreezeTokenMetadata {} => to_json_binary(&query_frozen_token_metadata(deps)?), - _ => Sg721UpdatableContract::default().query(deps, env, msg.into()), + QueryMsg::EnableUpdatable {} => Ok(to_json_binary(&query_enable_updatable(deps)?)?), + QueryMsg::EnableUpdatableFee {} => Ok(to_json_binary(&query_enable_updatable_fee()?)?), + QueryMsg::FreezeTokenMetadata {} => Ok(to_json_binary(&query_frozen_token_metadata(deps)?)?), + _ => Ok(Sg721UpdatableContract::default().query(deps, env, msg.into())?), } } diff --git a/contracts/collections/sg721-updatable/src/msg.rs b/contracts/collections/sg721-updatable/src/msg.rs index 47f6980f3..29b7d1051 100644 --- a/contracts/collections/sg721-updatable/src/msg.rs +++ b/contracts/collections/sg721-updatable/src/msg.rs @@ -1,13 +1,16 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::Binary; use cosmwasm_std::Timestamp; +use cw721::DefaultOptionCollectionMetadataExtension; +use cw721::DefaultOptionNftMetadataExtension; +use cw721::DefaultOptionNftMetadataExtensionMsg; use cw_utils::Expiration; use sg721::{RoyaltyInfoResponse, UpdateCollectionInfoMsg}; use sg721_base::msg::QueryMsg as Sg721QueryMsg; use sg721_base::ExecuteMsg as Sg721ExecuteMsg; #[cw_serde] -pub enum ExecuteMsg { +pub enum ExecuteMsg { /// Freeze token metadata so creator can no longer update token uris FreezeTokenMetadata {}, /// Creator calls can update token uris @@ -61,19 +64,21 @@ pub enum ExecuteMsg { /// Metadata JSON Schema token_uri: Option, /// Any custom extension used by this contract - extension: T, + extension: TNftMetadataExtensionMsg, }, Extension { - msg: E, + msg: TCollectionMetadataExtensionMsg, }, } -impl From> for Sg721ExecuteMsg +impl + From> for Sg721ExecuteMsg where - T: Clone + PartialEq + Into>, - Option: From, + TNftMetadataExtensionMsg: Clone + PartialEq + Into, { - fn from(msg: ExecuteMsg) -> Sg721ExecuteMsg { + fn from( + msg: ExecuteMsg, + ) -> Sg721ExecuteMsg { match msg { ExecuteMsg::TransferNft { recipient, @@ -177,8 +182,13 @@ pub enum QueryMsg { CollectionInfo {}, } -impl From for Sg721QueryMsg { - fn from(msg: QueryMsg) -> Sg721QueryMsg { +impl From + for Sg721QueryMsg +{ + fn from( + msg: QueryMsg, + ) -> Sg721QueryMsg + { match msg { QueryMsg::OwnerOf { token_id, diff --git a/contracts/minters/base-minter/src/contract.rs b/contracts/minters/base-minter/src/contract.rs index 195761eed..3b12ac339 100644 --- a/contracts/minters/base-minter/src/contract.rs +++ b/contracts/minters/base-minter/src/contract.rs @@ -10,6 +10,7 @@ use cosmwasm_std::{ Reply, Response, StdResult, SubMsg, Timestamp, WasmMsg, }; use cw2::set_contract_version; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use cw_utils::{must_pay, nonpayable, parse_reply_instantiate_data}; use sg1::checked_fair_burn; use sg2::query::Sg2QueryMsg; @@ -121,7 +122,10 @@ pub fn execute_mint_sender( // Should mint and then list on the marketplace for secondary sales let collection_info: CollectionInfoResponse = deps.querier.query_wasm_smart( collection_address.clone(), - &Sg721QueryMsg::CollectionInfo {}, + &Sg721QueryMsg::CollectionInfo::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + > {}, )?; // allow only sg721 creator address to mint if collection_info.creator != info.sender { @@ -183,7 +187,7 @@ pub fn execute_update_start_trading_time( let collection_info: CollectionInfoResponse = deps.querier.query_wasm_smart( sg721_contract_addr.clone(), - &Sg721QueryMsg::CollectionInfo {}, + &Sg721QueryMsg::::CollectionInfo {}, )?; if info.sender != collection_info.creator { return Err(ContractError::Unauthorized( diff --git a/packages/sg721/Cargo.toml b/packages/sg721/Cargo.toml index 3e160be49..fd55a8469 100644 --- a/packages/sg721/Cargo.toml +++ b/packages/sg721/Cargo.toml @@ -32,7 +32,7 @@ cw721-base = { workspace = true, features = ["library"] } cw-utils = { workspace = true } serde = { workspace = true } thiserror = { workspace = true } -cw-ownable = "0.5.0" +cw-ownable = { workspace = true } [dev-dependencies] cw-multi-test = { workspace = true } diff --git a/packages/sg721/src/lib.rs b/packages/sg721/src/lib.rs index d7008c68f..acf738e96 100644 --- a/packages/sg721/src/lib.rs +++ b/packages/sg721/src/lib.rs @@ -1,11 +1,49 @@ use cosmwasm_schema::cw_serde; -use cosmwasm_std::{Addr, Binary, Decimal, Timestamp}; -use cw_ownable::cw_ownable_execute; +use cosmwasm_std::{Addr, Binary, Coin, Decimal, Timestamp}; +use cw721_base::{ + msg::{ + CollectionMetadataExtensionMsg, CollectionMetadataMsg, ExecuteMsg as Cw721ExecuteMsg, InstantiateMsg as Cw721InstantiateMsg + }, + state::{ + CollectionMetadata, CollectionMetadataExtension, + }, + DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, +}; +use cw_ownable::Action; use cw_utils::Expiration; -#[cw_ownable_execute] +pub type RoyaltyInfoResponse = cw721_base::msg::RoyaltyInfoResponse; +pub use cw721_base::state::RoyaltyInfo; + #[cw_serde] -pub enum ExecuteMsg { +pub enum ExecuteMsg< + // Message passed for updating metadata. + TNftMetadataExtensionMsg, + // Message passed for updating collection info extension. + TCollectionMetadataExtensionMsg, +> { + // ---- sg721 specific msgs ---- + /// Update specific collection info fields + #[deprecated = "Please use UpdateCollectionInfo instead"] + UpdateCollectionInfo { + collection_info: UpdateCollectionInfoMsg, + }, + /// Called by the minter to update trading start time + UpdateStartTradingTime(Option), + // Freeze collection info from further updates + FreezeCollectionInfo, + + // ---- cw721 v0.19.0 msgs ---- + #[deprecated(since = "0.19.0", note = "Please use UpdateMinterOwnership instead")] + /// Deprecated: use UpdateMinterOwnership instead! Will be removed in next release! + UpdateOwnership(Action), + UpdateMinterOwnership(Action), + UpdateCreatorOwnership(Action), + + /// The creator is the only one eligible to update `CollectionMetadata`. + UpdateCollectionMetadata { + collection_metadata: CollectionMetadataMsg, + }, /// Transfer is a base message to move a token to another account without triggering actions TransferNft { recipient: String, @@ -40,6 +78,7 @@ pub enum ExecuteMsg { RevokeAll { operator: String, }, + /// Mint a new NFT, can only be called by the contract minter Mint { /// Unique ID of the NFT @@ -51,27 +90,144 @@ pub enum ExecuteMsg { /// Metadata JSON Schema token_uri: Option, /// Any custom extension used by this contract - extension: T, + extension: TNftMetadataExtensionMsg, }, + /// Burn an NFT the sender has access to Burn { token_id: String, }, - /// Extension msg + + /// Metadata msg + #[deprecated(since = "0.19.0", note = "Please use UpdateNftMetadata instead")] + /// Deprecated: use UpdateNftMetadata instead! In previous release it was a no-op for customization in other contracts. Will be removed in next release! Extension { - msg: E, + msg: TNftMetadataExtensionMsg, }, - /// Update specific collection info fields - UpdateCollectionInfo { - collection_info: UpdateCollectionInfoMsg, + /// The creator is the only one eligible to update NFT's token uri and onchain metadata (`NftInfo.extension`). + /// NOTE: approvals and owner are not affected by this call, since they belong to the NFT owner. + UpdateNftInfo { + token_id: String, + token_uri: Option, + extension: TNftMetadataExtensionMsg, + }, + + /// Sets address to send withdrawn fees to. Only owner can call this. + SetWithdrawAddress { + address: String, + }, + /// Removes the withdraw address, so fees are sent to the contract. Only owner can call this. + RemoveWithdrawAddress {}, + /// Withdraw from the contract to the given address. Anyone can call this, + /// which is okay since withdraw address has been set by owner. + WithdrawFunds { + amount: Coin, }, - /// Called by the minter to update trading start time - UpdateStartTradingTime(Option), - // Freeze collection info from further updates - FreezeCollectionInfo, +} + +impl + From< + ExecuteMsg< + TNftMetadataExtensionMsg, + TCollectionMetadataExtensionMsg, + >, + > + for Cw721ExecuteMsg< + TNftMetadataExtensionMsg, + TCollectionMetadataExtensionMsg, + > +{ + fn from( + msg: ExecuteMsg< + TNftMetadataExtensionMsg, + TCollectionMetadataExtensionMsg, + >, + ) -> Self { + match msg { + // ---- sg721 msgs ---- + ExecuteMsg::UpdateCollectionInfo { collection_info } => { + panic!("not a cw721 msg") + } + ExecuteMsg::UpdateStartTradingTime(_) => panic!("not a cw721 msg"), + ExecuteMsg::FreezeCollectionInfo => panic!("not a cw721 msg"), + // ---- cw721 msgs ---- + ExecuteMsg::UpdateOwnership(action) => Cw721ExecuteMsg::UpdateOwnership(action), + ExecuteMsg::UpdateMinterOwnership(action) => { + Cw721ExecuteMsg::UpdateMinterOwnership(action) + } + ExecuteMsg::UpdateCreatorOwnership(action) => { + Cw721ExecuteMsg::UpdateCreatorOwnership(action) + } + ExecuteMsg::UpdateCollectionMetadata { + collection_metadata, + } => Cw721ExecuteMsg::UpdateCollectionMetadata { + collection_metadata, + }, + ExecuteMsg::TransferNft { + recipient, + token_id, + } => Cw721ExecuteMsg::TransferNft { + recipient, + token_id, + }, + ExecuteMsg::SendNft { + contract, + token_id, + msg, + } => Cw721ExecuteMsg::SendNft { + contract, + token_id, + msg, + }, + ExecuteMsg::Approve { + spender, + token_id, + expires, + } => Cw721ExecuteMsg::Approve { + spender, + token_id, + expires, + }, + ExecuteMsg::Revoke { spender, token_id } => { + Cw721ExecuteMsg::Revoke { spender, token_id } + } + ExecuteMsg::ApproveAll { operator, expires } => { + Cw721ExecuteMsg::ApproveAll { operator, expires } + } + ExecuteMsg::RevokeAll { operator } => Cw721ExecuteMsg::RevokeAll { operator }, + ExecuteMsg::Mint { + token_id, + owner, + token_uri, + extension, + } => Cw721ExecuteMsg::Mint { + token_id, + owner, + token_uri, + extension, + }, + ExecuteMsg::Burn { token_id } => Cw721ExecuteMsg::Burn { token_id }, + ExecuteMsg::Extension { msg } => Cw721ExecuteMsg::Extension { msg }, + ExecuteMsg::UpdateNftInfo { + token_id, + token_uri, + extension, + } => Cw721ExecuteMsg::UpdateNftInfo { + token_id, + token_uri, + extension, + }, + ExecuteMsg::SetWithdrawAddress { address } => { + Cw721ExecuteMsg::SetWithdrawAddress { address } + } + ExecuteMsg::RemoveWithdrawAddress {} => Cw721ExecuteMsg::RemoveWithdrawAddress {}, + ExecuteMsg::WithdrawFunds { amount } => Cw721ExecuteMsg::WithdrawFunds { amount }, + } + } } #[cw_serde] +#[deprecated = "Please use CollectionMetadata instead"] pub struct CollectionInfo { pub creator: String, pub description: String, @@ -82,7 +238,22 @@ pub struct CollectionInfo { pub royalty_info: Option, } +#[allow(deprecated)] +impl From> for DefaultOptionCollectionMetadataExtensionMsg { + fn from(info: CollectionInfo) -> Self { + Some(CollectionMetadataExtensionMsg { + description: Some(info.description), + image: Some(info.image), + external_link: info.external_link, + explicit_content: info.explicit_content, + start_trading_time: info.start_trading_time, + royalty_info: info.royalty_info, + }) + } +} + #[cw_serde] +#[deprecated = "Please use `UpdateCollectionMetadata` instead"] pub struct UpdateCollectionInfoMsg { pub description: Option, pub image: Option, @@ -92,32 +263,38 @@ pub struct UpdateCollectionInfoMsg { pub creator: Option, } -#[cw_serde] -pub struct RoyaltyInfo { - pub payment_address: Addr, - pub share: Decimal, -} - -// allows easy conversion from RoyaltyInfo to RoyaltyInfoResponse -impl RoyaltyInfo { - pub fn to_response(&self) -> RoyaltyInfoResponse { - RoyaltyInfoResponse { - payment_address: self.payment_address.to_string(), - share: self.share, +#[allow(deprecated)] +impl From> for CollectionMetadataExtensionMsg { + fn from(msg: UpdateCollectionInfoMsg) -> Self { + CollectionMetadataExtensionMsg { + description: msg.description, + image: msg.image, + external_link: msg.external_link.unwrap_or_default(), + explicit_content: msg.explicit_content, + royalty_info: msg.royalty_info.unwrap_or_default(), + start_trading_time: None, } } } -#[cw_serde] -pub struct RoyaltyInfoResponse { - pub payment_address: String, - pub share: Decimal, -} - #[cw_serde] pub struct InstantiateMsg { pub name: String, pub symbol: String, pub minter: String, + #[allow(deprecated)] pub collection_info: CollectionInfo, } + +impl From for Cw721InstantiateMsg { + fn from(msg: InstantiateMsg) -> Self { + Cw721InstantiateMsg { + name: msg.name, + symbol: msg.symbol, + minter: Some(msg.minter), + creator: None, // in case of none, sender is creator + collection_metadata_extension: msg.collection_info.into(), + withdraw_address: None, + } + } +} diff --git a/test-suite/Cargo.toml b/test-suite/Cargo.toml index 76e42728b..0de8ba3e5 100644 --- a/test-suite/Cargo.toml +++ b/test-suite/Cargo.toml @@ -60,7 +60,7 @@ base-factory = { workspace = true } base-minter = { workspace = true } sg721-nt = { workspace = true } sg-controllers = { workspace = true } -cw-ownable = "0.5.1" +cw-ownable = { workspace = true } serde = { workspace = true } anybuf = { workspace = true } diff --git a/test-suite/src/base_minter/tests/integration_tests.rs b/test-suite/src/base_minter/tests/integration_tests.rs index 77837ba70..3f4d3386d 100644 --- a/test-suite/src/base_minter/tests/integration_tests.rs +++ b/test-suite/src/base_minter/tests/integration_tests.rs @@ -9,7 +9,8 @@ use base_factory::msg::{BaseMinterCreateMsg, BaseUpdateParamsMsg, SudoMsg}; use base_minter::msg::{ConfigResponse, ExecuteMsg}; use cosmwasm_std::{coin, coins, Addr, Timestamp}; -use cw721::{Cw721ExecuteMsg, Cw721QueryMsg, OwnerOfResponse}; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721_base::msg::{Cw721ExecuteMsg, Cw721QueryMsg, OwnerOfResponse}; use cw_multi_test::Executor; use sg2::msg::Sg2ExecuteMsg; use sg2::query::{AllowedCollectionCodeIdsResponse, Sg2QueryMsg}; @@ -154,7 +155,10 @@ fn check_mint() { assert_eq!(res.collection_address, "contract2".to_string()); assert_eq!(res.config.mint_price.amount.u128(), MIN_MINT_PRICE); - let query_owner_msg = Cw721QueryMsg::OwnerOf { + let query_owner_msg = Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::OwnerOf { token_id: String::from("1"), include_expired: None, }; @@ -165,7 +169,10 @@ fn check_mint() { assert_eq!(res.owner, creator.to_string()); // make sure sg721-nt cannot be transferred - let transfer_msg = Cw721ExecuteMsg::TransferNft { + let transfer_msg = Cw721ExecuteMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::TransferNft { recipient: "adsf".to_string(), token_id: "1".to_string(), }; @@ -220,7 +227,13 @@ fn update_start_trading_time() { // confirm trading start time let res: CollectionInfoResponse = router .wrap() - .query_wasm_smart(collection_addr, &Sg721QueryMsg::CollectionInfo {}) + .query_wasm_smart( + collection_addr, + &Sg721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, + ) .unwrap(); assert_eq!(res.start_trading_time, Some(default_start_trading_time)); } diff --git a/test-suite/src/open_edition_minter/tests/complete_mint_all_outcomes_validation.rs b/test-suite/src/open_edition_minter/tests/complete_mint_all_outcomes_validation.rs index 90204b742..29c8976cd 100644 --- a/test-suite/src/open_edition_minter/tests/complete_mint_all_outcomes_validation.rs +++ b/test-suite/src/open_edition_minter/tests/complete_mint_all_outcomes_validation.rs @@ -1,5 +1,6 @@ use cosmwasm_std::{coins, Coin, Timestamp, Uint128}; -use cw721::{Cw721QueryMsg, NumTokensResponse, OwnerOfResponse}; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721_base::msg::{Cw721QueryMsg, NumTokensResponse, OwnerOfResponse}; use cw_multi_test::{BankSudo, Executor, SudoMsg}; use open_edition_factory::state::ParamsExtension; use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; @@ -209,7 +210,10 @@ fn check_mint_revenues_distribution(num_tokens: Option, end_minter_time: Op ); // Should be owner of the token -> 2 - let query_owner_msg = Cw721QueryMsg::OwnerOf { + let query_owner_msg = Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::OwnerOf { token_id: String::from("2"), include_expired: None, }; @@ -221,7 +225,10 @@ fn check_mint_revenues_distribution(num_tokens: Option, end_minter_time: Op assert_eq!(res.owner, buyer.to_string()); // Check mint count - let num_tokens_msg = Cw721QueryMsg::NumTokens {}; + let num_tokens_msg = Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::NumTokens {}; let res: NumTokensResponse = router .wrap() .query_wasm_smart(collection_addr, &num_tokens_msg) diff --git a/test-suite/src/sg721_base/tests/integration_tests.rs b/test-suite/src/sg721_base/tests/integration_tests.rs index e266bc0c3..0698b989c 100644 --- a/test-suite/src/sg721_base/tests/integration_tests.rs +++ b/test-suite/src/sg721_base/tests/integration_tests.rs @@ -3,7 +3,7 @@ mod tests { use crate::common_setup::contract_boxes::App; use anyhow::Error; use cosmwasm_std::{coin, Addr}; - use cw721::NumTokensResponse; + use cw721_base::msg::NumTokensResponse; use cw_multi_test::{AppResponse, BankSudo, Executor, SudoMsg}; use sg2::msg::CreateMinterMsg; use sg2::tests::mock_collection_params; @@ -113,13 +113,15 @@ mod tests { let cosmos_msg = factory_contract.call_with_funds(msg, creation_fee).unwrap(); let res = app.execute(Addr::unchecked(ADMIN), cosmos_msg); + println!(">>>>> {:?}", res); assert!(res.is_ok()); (app, Addr::unchecked("contract2")) } mod init { - use cw721_base::MinterResponse; + use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; + use cw721_base::msg::MinterResponse; use crate::common_setup::setup_minter::vending_minter::mock_params::mock_create_minter_init_msg; @@ -133,7 +135,13 @@ mod tests { let res: NumTokensResponse = app .wrap() - .query_wasm_smart(contract, &QueryMsg::NumTokens {}) + .query_wasm_smart( + contract, + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::NumTokens {}, + ) .unwrap(); assert_eq!(res.count, 0); } @@ -187,7 +195,13 @@ mod tests { // query minter config to confirm base_token_uri got trimmed let res: MinterResponse = app .wrap() - .query_wasm_smart(contract, &QueryMsg::Minter {}) + .query_wasm_smart( + contract, + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Minter {}, + ) .unwrap(); let minter = res.minter; let minter = minter.unwrap(); @@ -214,7 +228,13 @@ mod tests { // query minter config to confirm base_token_uri got trimmed and starts with ipfs let res: MinterResponse = app .wrap() - .query_wasm_smart(contract, &QueryMsg::Minter {}) + .query_wasm_smart( + contract, + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Minter {}, + ) .unwrap(); let minter = res.minter.unwrap(); let res: ConfigResponse = app @@ -235,7 +255,13 @@ mod tests { let (app, contract) = custom_proper_instantiate(custom_create_minter_msg); let res: MinterResponse = app .wrap() - .query_wasm_smart(contract, &QueryMsg::Minter {}) + .query_wasm_smart( + contract, + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Minter {}, + ) .unwrap(); let minter = res.minter.unwrap(); let res: ConfigResponse = app @@ -248,6 +274,7 @@ mod tests { mod start_trading_time { use cosmwasm_std::{Decimal, Empty}; + use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use sg721::{RoyaltyInfoResponse, UpdateCollectionInfoMsg}; use crate::common_setup::{ @@ -305,7 +332,13 @@ mod tests { // default trading start time is start time + default trading start time offset let res: CollectionInfoResponse = app .wrap() - .query_wasm_smart(contract, &QueryMsg::CollectionInfo {}) + .query_wasm_smart( + contract, + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, + ) .unwrap(); let default_start_time = mock_init_extension(None, None) .start_time @@ -450,7 +483,13 @@ mod tests { let res: CollectionInfoResponse = app .wrap() - .query_wasm_smart(contract.clone(), &QueryMsg::CollectionInfo {}) + .query_wasm_smart( + contract.clone(), + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, + ) .unwrap(); assert_eq!(res.royalty_info.unwrap(), royalty_info); @@ -474,7 +513,13 @@ mod tests { let res: CollectionInfoResponse = app .wrap() - .query_wasm_smart(contract.clone(), &QueryMsg::CollectionInfo {}) + .query_wasm_smart( + contract.clone(), + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, + ) .unwrap(); // check explicit content changed to true assert!(res.explicit_content.unwrap()); @@ -521,6 +566,7 @@ mod tests { use crate::common_setup::setup_minter::vending_minter::mock_params::mock_create_minter_init_msg; use cosmwasm_std::{Decimal, Response, Uint128}; + use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use sg2::msg::CollectionParams; use sg721::RoyaltyInfoResponse; use sg721_base::msg::{CollectionInfoResponse, QueryMsg}; @@ -531,7 +577,13 @@ mod tests { let res: CollectionInfoResponse = app .wrap() - .query_wasm_smart(contract.clone(), &QueryMsg::CollectionInfo {}) + .query_wasm_smart( + contract.clone(), + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, + ) .unwrap(); // payout 100stars, royalty share 10%, royalty payout 10stars @@ -573,7 +625,13 @@ mod tests { let res: CollectionInfoResponse = app .wrap() - .query_wasm_smart(contract.clone(), &QueryMsg::CollectionInfo {}) + .query_wasm_smart( + contract.clone(), + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, + ) .unwrap(); // payout 100stars, royalty share 0%, royalty payout 0stars @@ -614,7 +672,13 @@ mod tests { let res: CollectionInfoResponse = app .wrap() - .query_wasm_smart(contract.clone(), &QueryMsg::CollectionInfo {}) + .query_wasm_smart( + contract.clone(), + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, + ) .unwrap(); // payout 100stars, royalty share 91%, royalty payout fails @@ -655,7 +719,13 @@ mod tests { let res: CollectionInfoResponse = app .wrap() - .query_wasm_smart(contract.clone(), &QueryMsg::CollectionInfo {}) + .query_wasm_smart( + contract.clone(), + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, + ) .unwrap(); // payout 100stars, royalty share 1%, royalty payout 10stars @@ -694,7 +764,13 @@ mod tests { let res: CollectionInfoResponse = app .wrap() - .query_wasm_smart(contract.clone(), &QueryMsg::CollectionInfo {}) + .query_wasm_smart( + contract.clone(), + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, + ) .unwrap(); // payout 100stars, royalty share none, royalty payout 0stars @@ -714,7 +790,8 @@ mod tests { mod ownership { use cosmwasm_std::Attribute; - use cw721_base::MinterResponse; + use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; + use cw721_base::msg::MinterResponse; use crate::common_setup::setup_minter::vending_minter::mock_params::mock_create_minter_init_msg; @@ -736,7 +813,13 @@ mod tests { // query minter config to confirm base_token_uri got trimmed let res: MinterResponse = app .wrap() - .query_wasm_smart(contract, &QueryMsg::Minter {}) + .query_wasm_smart( + contract, + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Minter {}, + ) .unwrap(); let minter = res.minter; let minter = minter.unwrap(); @@ -747,7 +830,7 @@ mod tests { let sg721_address = res.sg721_address; let update_ownership_msg: cw721ExecuteMsg = - cw721ExecuteMsg::UpdateOwnership(cw_ownable::Action::TransferOwnership { + cw721ExecuteMsg::UpdateMinterOwnership(cw_ownable::Action::TransferOwnership { new_owner: "new_owner".to_string(), expiry: None, }); @@ -757,17 +840,21 @@ mod tests { &update_ownership_msg, &[], ); - let attribute_owner_response = res.unwrap().events[1].clone().attributes[2].clone(); + // get attribute with key "pending_owner" + let attribute_minter_owner_response = res.unwrap().events[1].clone().attributes.iter().find(|x| x.key == "pending_owner").expect("pending_owner not found").clone(); let expected_attribute = Attribute { key: "pending_owner".to_string(), value: "new_owner".to_string(), }; - assert_eq!(attribute_owner_response, expected_attribute); + assert_eq!(attribute_minter_owner_response, expected_attribute); let res: cw_ownable::Ownership = app .wrap() .query_wasm_smart( sg721_address.clone(), - &sg721_base::msg::QueryMsg::Ownership {}, + &sg721_base::msg::QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::GetMinterOwnership {}, ) .unwrap(); let pending_owner = res.pending_owner; @@ -782,16 +869,22 @@ mod tests { &accept_ownership_msg, &[], ); - let pending_owner_response = res.unwrap().events[1].clone().attributes[2].clone(); + let attribute_minter_owner_response = res.unwrap().events[1].clone().attributes.iter().find(|x| x.key == "pending_owner").expect("pending_owner not found").clone(); let expected_pending_owner_response = Attribute { key: "pending_owner".to_string(), value: "none".to_string(), }; - assert_eq!(pending_owner_response, expected_pending_owner_response); + assert_eq!(attribute_minter_owner_response, expected_pending_owner_response); let res: cw_ownable::Ownership = app .wrap() - .query_wasm_smart(sg721_address, &sg721_base::msg::QueryMsg::Ownership {}) + .query_wasm_smart( + sg721_address, + &sg721_base::msg::QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::GetMinterOwnership {}, + ) .unwrap(); let expected_onwership_response = Ownership { @@ -806,7 +899,7 @@ mod tests { mod sg721_mutable { use crate::common_setup::contract_boxes::App; use cosmwasm_std::{coin, Addr}; - use cw721::NumTokensResponse; + use cw721::msg::NumTokensResponse; use cw_multi_test::{BankSudo, Executor, SudoMsg}; use sg2::tests::mock_collection_params; use sg721_updatable::msg::QueryMsg; diff --git a/test-suite/src/vending_minter/tests/address_limit.rs b/test-suite/src/vending_minter/tests/address_limit.rs index 8472edf0b..9d4deb795 100644 --- a/test-suite/src/vending_minter/tests/address_limit.rs +++ b/test-suite/src/vending_minter/tests/address_limit.rs @@ -11,7 +11,8 @@ use crate::common_setup::{ templates::vending_minter_template, }; use cosmwasm_std::{coin, coins, Coin, Timestamp, Uint128}; -use cw721::{Cw721QueryMsg, OwnerOfResponse, TokensResponse}; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721_base::msg::{Cw721QueryMsg, OwnerOfResponse, TokensResponse}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; @@ -348,7 +349,10 @@ fn mint_for_token_id_addr() { assert!(res.is_ok()); // get random mint token_id - let tokens_msg = Cw721QueryMsg::Tokens { + let tokens_msg = Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Tokens { owner: buyer.to_string(), start_after: None, limit: None, @@ -460,7 +464,7 @@ fn mint_for_token_id_addr() { .wrap() .query_wasm_smart( collection_addr, - &Cw721QueryMsg::OwnerOf { + &Cw721QueryMsg::::OwnerOf { token_id: 2.to_string(), include_expired: None, }, diff --git a/test-suite/src/vending_minter/tests/happy_unhappy.rs b/test-suite/src/vending_minter/tests/happy_unhappy.rs index 1585ce4e0..2dc368ae6 100644 --- a/test-suite/src/vending_minter/tests/happy_unhappy.rs +++ b/test-suite/src/vending_minter/tests/happy_unhappy.rs @@ -8,7 +8,8 @@ use cosmwasm_std::{ testing::{mock_dependencies_with_balance, mock_env, mock_info}, Api, Coin, Timestamp, Uint128, }; -use cw721::{Cw721QueryMsg, OwnerOfResponse}; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721_base::msg::{Cw721QueryMsg, OwnerOfResponse}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; @@ -149,7 +150,10 @@ fn happy_path() { // Check NFT owned by buyer // Random mint token_id 1 - let query_owner_msg = Cw721QueryMsg::OwnerOf { + let query_owner_msg = Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::OwnerOf { token_id: String::from("2"), include_expired: None, }; @@ -208,7 +212,7 @@ fn happy_path() { assert_eq!(0, minter_balance.len()); // Check that NFT is transferred - let query_owner_msg = Cw721QueryMsg::OwnerOf { + let query_owner_msg = Cw721QueryMsg::::OwnerOf { token_id: String::from("1"), include_expired: None, }; diff --git a/test-suite/src/vending_minter/tests/trading_time.rs b/test-suite/src/vending_minter/tests/trading_time.rs index 8d0436c3d..57cca5325 100644 --- a/test-suite/src/vending_minter/tests/trading_time.rs +++ b/test-suite/src/vending_minter/tests/trading_time.rs @@ -6,6 +6,7 @@ use crate::common_setup::setup_minter::vending_minter::setup::{ }; use crate::common_setup::templates::{vending_minter_with_app, vending_minter_with_start_time}; use cosmwasm_std::{coins, Addr, Timestamp}; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; use sg721_base::msg::{CollectionInfoResponse, QueryMsg as Sg721QueryMsg}; @@ -281,7 +282,7 @@ fn update_start_trading_time() { .wrap() .query_wasm_smart( collection_addr.to_string(), - &Sg721QueryMsg::CollectionInfo {}, + &Sg721QueryMsg::::CollectionInfo {}, ) .unwrap(); diff --git a/test-suite/src/vending_minter/tests/trading_time_updatable.rs b/test-suite/src/vending_minter/tests/trading_time_updatable.rs index ac3680c31..ac9dadf66 100644 --- a/test-suite/src/vending_minter/tests/trading_time_updatable.rs +++ b/test-suite/src/vending_minter/tests/trading_time_updatable.rs @@ -8,6 +8,7 @@ use crate::common_setup::templates::{ vending_minter_updatable_with_app, vending_minter_with_updatable_and_start_time, }; use cosmwasm_std::{coins, Addr, Timestamp}; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; use sg721_base::msg::{CollectionInfoResponse, QueryMsg as Sg721QueryMsg}; @@ -287,7 +288,7 @@ fn update_start_trading_time() { .wrap() .query_wasm_smart( collection_addr.to_string(), - &Sg721QueryMsg::CollectionInfo {}, + &Sg721QueryMsg::::CollectionInfo {}, ) .unwrap(); diff --git a/test-suite/src/vending_minter/tests/updatable.rs b/test-suite/src/vending_minter/tests/updatable.rs index af3d9be20..4a14ea2dc 100644 --- a/test-suite/src/vending_minter/tests/updatable.rs +++ b/test-suite/src/vending_minter/tests/updatable.rs @@ -1,5 +1,6 @@ use cosmwasm_std::{coins, Empty}; -use cw721::{Cw721QueryMsg, NftInfoResponse, TokensResponse}; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721_base::msg::{Cw721QueryMsg, NftInfoResponse, TokensResponse}; use cw721_base::Extension; use cw_multi_test::Executor; use sg721_updatable::msg::ExecuteMsg as Sg721UpdatableExecMsg; @@ -33,7 +34,7 @@ fn update_token_metadata() { assert!(res.is_ok()); // query buyer token_id - let query_tokens_msg = Cw721QueryMsg::Tokens { + let query_tokens_msg = Cw721QueryMsg::::Tokens { owner: buyer.to_string(), start_after: None, limit: None, @@ -59,7 +60,7 @@ fn update_token_metadata() { .query_wasm_smart(collection_addr.clone(), &query_tokens_msg) .unwrap(); assert_eq!(res.tokens[0], token_id); - let query_token_msg = Cw721QueryMsg::NftInfo { token_id }; + let query_token_msg = Cw721QueryMsg::::NftInfo { token_id }; let res: NftInfoResponse = router .wrap() .query_wasm_smart(collection_addr, &query_token_msg) diff --git a/test-suite/src/vending_minter/tests/whitelist.rs b/test-suite/src/vending_minter/tests/whitelist.rs index 662ac47d6..a81e97b89 100644 --- a/test-suite/src/vending_minter/tests/whitelist.rs +++ b/test-suite/src/vending_minter/tests/whitelist.rs @@ -1,6 +1,7 @@ use cosmwasm_std::{coin, coins, Addr, Empty, Timestamp}; -use cw721::{Cw721QueryMsg, TokensResponse}; -use cw721_base::ExecuteMsg as Cw721ExecuteMsg; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721_base::msg::ExecuteMsg as Cw721ExecuteMsg; +use cw721_base::msg::{Cw721QueryMsg, TokensResponse}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; @@ -277,7 +278,10 @@ fn whitelist_mint_count_query() { assert_eq!(res.address, buyer.to_string()); // get random mint token_id - let tokens_msg = Cw721QueryMsg::Tokens { + let tokens_msg = Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Tokens { owner: buyer.to_string(), start_after: None, limit: None, diff --git a/test-suite/src/vending_minter/tests/zero_mint_price.rs b/test-suite/src/vending_minter/tests/zero_mint_price.rs index 824976503..c1cd3f66d 100644 --- a/test-suite/src/vending_minter/tests/zero_mint_price.rs +++ b/test-suite/src/vending_minter/tests/zero_mint_price.rs @@ -10,7 +10,9 @@ use crate::common_setup::setup_minter::vending_minter::mock_params::{ }; use crate::common_setup::setup_minter::vending_minter::setup::vending_minter_code_ids; use cosmwasm_std::{coin, coins, Addr, Timestamp}; -use cw721::TokensResponse; +use cw721::DefaultOptionCollectionMetadataExtension; +use cw721::DefaultOptionNftMetadataExtension; +use cw721_base::msg::TokensResponse; use cw_multi_test::Executor; use sg2::msg::Sg2ExecuteMsg; use sg2::tests::{mock_collection_params, mock_collection_params_1}; @@ -100,7 +102,7 @@ fn zero_mint_price() { .wrap() .query_wasm_smart( sg721, - &sg721_base::msg::QueryMsg::Tokens { + &sg721_base::msg::QueryMsg::::Tokens { owner: buyer.to_string(), start_after: None, limit: None, From 67635de4724497d2b335d11399596ce95e150ba2 Mon Sep 17 00:00:00 2001 From: mr-t Date: Mon, 18 Mar 2024 18:44:23 +0100 Subject: [PATCH 06/24] fix tests --- Cargo.lock | 1496 ++++++++++------- Cargo.toml | 2 +- .../collections/sg721-base/src/contract.rs | 40 +- packages/sg2/src/tests.rs | 1 + packages/sg721/src/lib.rs | 3 +- .../base_minter/tests/integration_tests.rs | 1 + .../src/sg721_base/tests/integration_tests.rs | 42 +- 7 files changed, 964 insertions(+), 621 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ade1b2f55..570128309 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,43 +3,47 @@ version = 3 [[package]] -name = "aes" -version = "0.8.2" +name = "addr2line" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", + "gimli", ] [[package]] -name = "ahash" -version = "0.7.6" +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aes" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ - "getrandom", - "once_cell", - "version_check", + "cfg-if", + "cipher", + "cpufeatures", ] [[package]] name = "ahash" -version = "0.8.3" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "cfg-if", + "getrandom", "once_cell", "version_check", ] [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -52,15 +56,15 @@ checksum = "9a03eb4d55fa21466cac727930be07f82581223ee04bcaf61f934e98b7ecb859" [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "assert_matches" @@ -70,71 +74,114 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "async-channel" -version = "1.8.0" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener 5.2.0", + "event-listener-strategy 0.5.0", "futures-core", + "pin-project-lite", ] [[package]] name = "async-executor" -version = "1.5.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" dependencies = [ - "async-lock", + "async-lock 3.3.0", "async-task", "concurrent-queue", - "fastrand", - "futures-lite", + "fastrand 2.0.1", + "futures-lite 2.3.0", "slab", ] [[package]] name = "async-global-executor" -version = "2.3.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel", + "async-channel 2.2.0", "async-executor", - "async-io", - "async-lock", + "async-io 2.3.2", + "async-lock 3.3.0", "blocking", - "futures-lite", + "futures-lite 2.3.0", "once_cell", ] [[package]] name = "async-io" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-lock", + "async-lock 2.8.0", "autocfg", + "cfg-if", "concurrent-queue", - "futures-lite", - "libc", + "futures-lite 1.13.0", "log", "parking", - "polling", + "polling 2.8.0", + "rustix 0.37.27", "slab", - "socket2", + "socket2 0.4.10", "waker-fn", - "windows-sys 0.42.0", +] + +[[package]] +name = "async-io" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +dependencies = [ + "async-lock 3.3.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.5.0", + "rustix 0.38.31", + "slab", + "tracing", + "windows-sys 0.52.0", ] [[package]] name = "async-lock" -version = "2.7.0" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" dependencies = [ - "event-listener", + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite", ] [[package]] @@ -143,15 +190,15 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" dependencies = [ - "async-channel", + "async-channel 1.9.0", "async-global-executor", - "async-io", - "async-lock", + "async-io 1.13.0", + "async-lock 2.8.0", "crossbeam-utils", "futures-channel", "futures-core", "futures-io", - "futures-lite", + "futures-lite 1.13.0", "gloo-timers", "kv-log-macro", "log", @@ -165,9 +212,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" dependencies = [ "async-stream-impl", "futures-core", @@ -176,37 +223,37 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] name = "async-task" -version = "4.3.0" +version = "4.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" +checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "461abc97219de0eaaf81fe3ef974a540158f3d079c2ab200f891f1a2ef201e85" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] name = "atomic-waker" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "atty" @@ -221,14 +268,13 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.0.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8c1df849285fbacd587de7818cc7d13be6cd2cbcd47a04fb1801b0e2706e33" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ - "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] @@ -239,13 +285,13 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "axum" -version = "0.6.11" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d8068b6ccb8b34db9de397c7043f91db8b4c66414952c6db944f238c4d3db3" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ "async-trait", "axum-core", - "bitflags", + "bitflags 1.3.2", "bytes", "futures-util", "http", @@ -267,9 +313,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f958c80c248b34b9a877a643811be8dbca03ca5ba827f2b63baf3a81e5fc4e" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" dependencies = [ "async-trait", "bytes", @@ -282,6 +328,21 @@ dependencies = [ "tower-service", ] +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base-factory" version = "3.5.0" @@ -365,9 +426,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.4" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" @@ -420,6 +481,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + [[package]] name = "bitvec" version = "0.17.4" @@ -469,7 +536,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -478,7 +545,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -492,67 +559,48 @@ dependencies = [ [[package]] name = "blocking" -version = "1.3.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" dependencies = [ - "async-channel", - "async-lock", + "async-channel 2.2.0", + "async-lock 3.3.0", "async-task", - "atomic-waker", - "fastrand", - "futures-lite", + "fastrand 2.0.1", + "futures-io", + "futures-lite 2.3.0", + "piper", + "tracing", ] [[package]] name = "bnum" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128a44527fc0d6abf05f9eda748b9027536e12dff93f5acc8449f51583309350" +checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" [[package]] name = "borsh" -version = "0.10.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40f9ca3698b2e4cb7c15571db0abc5551dca417a21ae8140460b50309bb2cc62" +checksum = "26d4d6dafc1a3bb54687538972158f07b2c948bc57d5890df22c0739098b3028" dependencies = [ "borsh-derive", - "hashbrown 0.13.2", + "cfg_aliases", ] [[package]] name = "borsh-derive" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598b3eacc6db9c3ee57b22707ad8f6a8d2f6d442bfe24ffeb8cbb70ca59e6a35" -dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", - "proc-macro-crate 0.1.5", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "borsh-derive-internal" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186b734fa1c9f6743e90c95d7233c9faab6360d1a96d4ffa19d9cfd1e9350f8a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "borsh-schema-derive-internal" -version = "0.10.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b7ff1008316626f485991b960ade129253d4034014616b94f309a15366cc49" +checksum = "bf4918709cc4dd777ad2b6303ed03cb37f3ca0ccede8c1b0d28ac6db8f4710e0" dependencies = [ + "once_cell", + "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", + "syn_derive", ] [[package]] @@ -566,9 +614,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" [[package]] name = "byte-slice-cast" @@ -584,9 +632,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytecheck" -version = "0.6.10" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13fe11640a23eb24562225322cd3e452b93a3d4091d62fab69c70542fcd17d1f" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" dependencies = [ "bytecheck_derive", "ptr_meta", @@ -595,9 +643,9 @@ dependencies = [ [[package]] name = "bytecheck_derive" -version = "0.6.10" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31225543cb46f81a7e224762764f4a6a0f097b1db0b175f69e8065efaa42de5" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" dependencies = [ "proc-macro2", "quote", @@ -606,24 +654,24 @@ dependencies = [ [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" dependencies = [ "serde", ] [[package]] name = "cc" -version = "1.0.79" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" [[package]] name = "cfg-if" @@ -631,13 +679,18 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" dependencies = [ - "num-integer", "num-traits", ] @@ -698,7 +751,7 @@ dependencies = [ "bech32 0.7.3", "blake2", "digest 0.10.7", - "generic-array 0.14.6", + "generic-array 0.14.7", "hex", "ripemd", "serde", @@ -710,18 +763,18 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.1.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" dependencies = [ "crossbeam-utils", ] [[package]] name = "config" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7" +checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca" dependencies = [ "async-trait", "json5", @@ -738,9 +791,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.2" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "convert_case" @@ -753,9 +806,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -763,9 +816,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "cosm-orc" @@ -804,7 +857,7 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673d31bd830c0772d78545de20d975129b6ab2f7db4e4e9313c3b8777d319194" dependencies = [ - "prost 0.11.8", + "prost 0.11.9", "prost-types", "tendermint-proto", "tonic", @@ -833,12 +886,12 @@ dependencies = [ [[package]] name = "cosmwasm-crypto" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6aa9f904de106fa16443ad14ec2abe75e94ba003bb61c681c0e43d4c58d2a" +checksum = "9934c79e58d9676edfd592557dee765d2a6ef54c09d5aa2edb06156b00148966" dependencies = [ "digest 0.10.7", - "ecdsa 0.16.7", + "ecdsa 0.16.9", "ed25519-zebra", "k256 0.13.1", "rand_core 0.6.4", @@ -847,18 +900,18 @@ dependencies = [ [[package]] name = "cosmwasm-derive" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40abec852f3d4abec6d44ead9a58b78325021a1ead1e7229c3471414e57b2e49" +checksum = "bc5e72e330bd3bdab11c52b5ecbdeb6a8697a004c57964caeb5d876f0b088b3c" dependencies = [ "syn 1.0.109", ] [[package]] name = "cosmwasm-schema" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b166215fbfe93dc5575bae062aa57ae7bb41121cffe53bac33b033257949d2a9" +checksum = "ac3e3a2136e2a60e8b6582f5dffca5d1a683ed77bf38537d330bc1dfccd69010" dependencies = [ "cosmwasm-schema-derive", "schemars", @@ -869,9 +922,9 @@ dependencies = [ [[package]] name = "cosmwasm-schema-derive" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf12f8e20bb29d1db66b7ca590bc2f670b548d21e9be92499bc0f9022a994a8" +checksum = "f5d803bea6bd9ed61bd1ee0b4a2eb09ee20dbb539cc6e0b8795614d20952ebb1" dependencies = [ "proc-macro2", "quote", @@ -880,11 +933,11 @@ dependencies = [ [[package]] name = "cosmwasm-std" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad011ae7447188e26e4a7dbca2fcd0fc186aa21ae5c86df0503ea44c78f9e469" +checksum = "ef8666e572a3a2519010dde88c04d16e9339ae751b56b2bb35081fe3f7d6be74" dependencies = [ - "base64 0.21.4", + "base64 0.21.7", "bech32 0.9.1", "bnum", "cosmwasm-crypto", @@ -902,21 +955,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -930,7 +980,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", @@ -938,11 +988,11 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", @@ -954,7 +1004,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "typenum", ] @@ -967,16 +1017,6 @@ dependencies = [ "sct", ] -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn 1.0.109", -] - [[package]] name = "ctr" version = "0.9.2" @@ -1002,7 +1042,7 @@ dependencies = [ [[package]] name = "cw-address-like" version = "1.0.4" -source = "git+https://github.com/public-awesome/cw-plus-plus.git?branch=multiple_ownership#d40ce97bc1cc0e4870591ba8bf4a6160b1ae8b00" +source = "git+https://github.com/public-awesome/cw-plus-plus.git?branch=main#28c1a09bfc6b4f1942fefe3eb0b50faf9d3b1523" dependencies = [ "cosmwasm-std", ] @@ -1024,9 +1064,9 @@ dependencies = [ [[package]] name = "cw-controllers" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d8edce4b78785f36413f67387e4be7d0cb7d032b5d4164bcc024f9c3f3f2ea" +checksum = "57de8d3761e46be863e3ac1eba8c8a976362a48c6abf240df1e26c3e421ee9e8" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1039,9 +1079,9 @@ dependencies = [ [[package]] name = "cw-multi-test" -version = "0.16.2" +version = "0.16.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2eb84554bbfa6b66736abcd6a9bfdf237ee0ecb83910f746dff7f799093c80a" +checksum = "127c7bb95853b8e828bdab97065c81cb5ddc20f7339180b61b2300565aaa99d1" dependencies = [ "anyhow", "cosmwasm-std", @@ -1058,9 +1098,9 @@ dependencies = [ [[package]] name = "cw-multi-test" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fff029689ae89127cf6d7655809a68d712f3edbdb9686c70b018ba438b26ca" +checksum = "cc392a5cb7e778e3f90adbf7faa43c4db7f35b6623224b08886d796718edb875" dependencies = [ "anyhow", "bech32 0.9.1", @@ -1068,7 +1108,7 @@ dependencies = [ "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "derivative", - "itertools 0.12.0", + "itertools 0.12.1", "prost 0.12.3", "schemars", "serde", @@ -1079,7 +1119,7 @@ dependencies = [ [[package]] name = "cw-ownable" version = "0.6.0" -source = "git+https://github.com/public-awesome/cw-plus-plus.git?branch=multiple_ownership#d40ce97bc1cc0e4870591ba8bf4a6160b1ae8b00" +source = "git+https://github.com/public-awesome/cw-plus-plus.git?branch=main#28c1a09bfc6b4f1942fefe3eb0b50faf9d3b1523" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1093,7 +1133,7 @@ dependencies = [ [[package]] name = "cw-ownable-derive" version = "0.6.0" -source = "git+https://github.com/public-awesome/cw-plus-plus.git?branch=multiple_ownership#d40ce97bc1cc0e4870591ba8bf4a6160b1ae8b00" +source = "git+https://github.com/public-awesome/cw-plus-plus.git?branch=main#28c1a09bfc6b4f1942fefe3eb0b50faf9d3b1523" dependencies = [ "proc-macro2", "quote", @@ -1182,9 +1222,9 @@ dependencies = [ [[package]] name = "cw4" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a398696307efadaaa2d0850076f865fa706c959d493cb4203314f72be6b77a64" +checksum = "24754ff6e45f2a1c60adc409d9b2eb87666012c44021329141ffaab3388fccd2" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1195,13 +1235,13 @@ dependencies = [ [[package]] name = "cw4-group" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58db332c4039bec8ade6aaa1f5fff24b94b111f21134db172cd27fb2e7f0ceb6" +checksum = "9e24a22c3af54c52edf528673b420a67a1648be2c159b8ec778d2fbf543df24b" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-controllers 1.1.0", + "cw-controllers 1.1.2", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", @@ -1239,7 +1279,7 @@ dependencies = [ [[package]] name = "cw721" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#a358c4c207894fb6fc73ff29c0723690eabadab4" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#f461266c9aa844e80e5ddaf5ddf7ff742f430d5d" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1257,7 +1297,7 @@ dependencies = [ [[package]] name = "cw721-base" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#a358c4c207894fb6fc73ff29c0723690eabadab4" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#f461266c9aa844e80e5ddaf5ddf7ff742f430d5d" dependencies = [ "cosmwasm-std", "cw-ownable", @@ -1286,6 +1326,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "derivative" version = "2.2.0" @@ -1323,7 +1372,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -1346,9 +1395,9 @@ checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" [[package]] name = "dyn-clone" -version = "1.0.11" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "e2e" @@ -1388,16 +1437,16 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.7" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der 0.7.8", "digest 0.10.7", - "elliptic-curve 0.13.5", + "elliptic-curve 0.13.8", "rfc6979 0.4.0", - "signature 2.1.0", - "spki 0.7.2", + "signature 2.2.0", + "spki 0.7.3", ] [[package]] @@ -1438,9 +1487,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "elliptic-curve" @@ -1453,7 +1502,7 @@ dependencies = [ "der 0.6.1", "digest 0.10.7", "ff 0.12.1", - "generic-array 0.14.6", + "generic-array 0.14.7", "group 0.12.1", "pkcs8 0.9.0", "rand_core 0.6.4", @@ -1464,19 +1513,19 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.13.5" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct 0.2.0", - "crypto-bigint 0.5.3", + "crypto-bigint 0.5.5", "digest 0.10.7", "ff 0.13.0", - "generic-array 0.14.6", + "generic-array 0.14.7", "group 0.13.0", "pkcs8 0.10.2", "rand_core 0.6.4", - "sec1 0.7.1", + "sec1 0.7.3", "subtle", "zeroize", ] @@ -1494,15 +1543,31 @@ dependencies = [ "termcolor", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "erased-serde" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2b0c2380453a92ea8b6c8e5f64ecaafccddde8ceab55ff7a8ac1029f894569" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" dependencies = [ "serde", ] +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "eth-keystore" version = "0.5.0" @@ -1522,7 +1587,7 @@ dependencies = [ "sha2 0.10.8", "sha3", "thiserror", - "uuid", + "uuid 0.8.2", ] [[package]] @@ -1596,7 +1661,7 @@ dependencies = [ "convert_case", "elliptic-curve 0.12.3", "ethabi", - "generic-array 0.14.6", + "generic-array 0.14.7", "hex", "k256 0.11.6", "open-fastrlp", @@ -1637,11 +1702,53 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" +dependencies = [ + "event-listener 5.2.0", + "pin-project-lite", +] + [[package]] name = "eyre" -version = "0.6.8" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" dependencies = [ "indenter", "once_cell", @@ -1662,6 +1769,12 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + [[package]] name = "ff" version = "0.12.1" @@ -1733,9 +1846,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -1748,9 +1861,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -1758,15 +1871,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -1775,17 +1888,17 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-lite" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "fastrand", + "fastrand 1.9.0", "futures-core", "futures-io", "memchr", @@ -1794,34 +1907,47 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] name = "futures-sink" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -1846,9 +1972,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -1857,9 +1983,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "js-sys", @@ -1868,6 +1994,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + [[package]] name = "gloo-timers" version = "0.2.6" @@ -1904,9 +2036,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.16" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" +checksum = "4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb" dependencies = [ "bytes", "fnv", @@ -1914,7 +2046,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 2.2.5", "slab", "tokio", "tokio-util", @@ -1927,26 +2059,22 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.6", + "ahash", ] [[package]] name = "hashbrown" -version = "0.13.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash 0.8.3", -] +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "headers" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.13.1", - "bitflags", + "base64 0.21.7", "bytes", "headers-core", "http", @@ -1981,12 +2109,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.2.6" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hex" @@ -2005,9 +2130,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -2016,9 +2141,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -2033,9 +2158,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -2045,9 +2170,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.25" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -2060,7 +2185,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.6", "tokio", "tower-service", "tracing", @@ -2172,21 +2297,31 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", ] +[[package]] +name = "indexmap" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + [[package]] name = "inout" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -2198,6 +2333,17 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "itertools" version = "0.10.5" @@ -2218,24 +2364,24 @@ dependencies = [ [[package]] name = "itertools" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -2271,18 +2417,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" dependencies = [ "cfg-if", - "ecdsa 0.16.7", - "elliptic-curve 0.13.5", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", "once_cell", "sha2 0.10.8", - "signature 2.1.0", + "signature 2.2.0", ] [[package]] name = "keccak" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ "cpufeatures", ] @@ -2304,9 +2450,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.140" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "linked-hash-map" @@ -2314,33 +2460,44 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + [[package]] name = "log" -version = "0.4.17" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" dependencies = [ - "cfg-if", "value-bag", ] [[package]] name = "matchit" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minimal-lexical" @@ -2348,16 +2505,24 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + [[package]] name = "mio" -version = "0.8.6" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", - "log", "wasi", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -2370,6 +2535,12 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-derive" version = "0.3.3" @@ -2382,39 +2553,38 @@ dependencies = [ ] [[package]] -name = "num-integer" -version = "0.1.45" +name = "num-traits" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", - "num-traits", ] [[package]] -name = "num-traits" -version = "0.2.15" +name = "num_cpus" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "autocfg", + "hermit-abi 0.3.9", + "libc", ] [[package]] -name = "num_cpus" -version = "1.15.0" +name = "object" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ - "hermit-abi 0.2.6", - "libc", + "memchr", ] [[package]] name = "once_cell" -version = "1.17.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" @@ -2424,9 +2594,9 @@ checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open-edition-factory" @@ -2512,9 +2682,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.4.0" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ "arrayvec", "bitvec 1.0.1", @@ -2526,11 +2696,11 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.1.4" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 2.0.2", "proc-macro2", "quote", "syn 1.0.109", @@ -2538,9 +2708,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "password-hash" @@ -2555,9 +2725,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "pathdiff" @@ -2612,19 +2782,20 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.5.6" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" +checksum = "56f8023d0fb78c8e03784ea1c7f3fa36e68a723138990b8d5a47d916b651e7a8" dependencies = [ + "memchr", "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.5.6" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" +checksum = "b0d24f72393fd16ab6ac5738bc33cdb6a9aa73f8b902e8fe29cf4e67d7dd1026" dependencies = [ "pest", "pest_generator", @@ -2632,22 +2803,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.6" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" +checksum = "fdc17e2a6c7d0a492f0158d7a4bd66cc17280308bbaff78d5bef566dca35ab80" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] name = "pest_meta" -version = "2.5.6" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" +checksum = "934cd7631c050f4674352a6e835d5f6711ffbfb9345c2fc0107155ac495ae293" dependencies = [ "once_cell", "pest", @@ -2656,29 +2827,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -2686,6 +2857,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + [[package]] name = "pkcs8" version = "0.9.0" @@ -2703,25 +2885,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der 0.7.8", - "spki 0.7.2", + "spki 0.7.3", ] [[package]] name = "polling" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "concurrent-queue", "libc", "log", "pin-project-lite", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] +[[package]] +name = "polling" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.31", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -2730,9 +2932,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "primitive-types" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", @@ -2744,21 +2946,22 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "0.1.5" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ - "toml", + "once_cell", + "toml_edit 0.19.15", ] [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" dependencies = [ - "once_cell", - "toml_edit", + "toml_datetime", + "toml_edit 0.20.2", ] [[package]] @@ -2770,7 +2973,6 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", "version_check", ] @@ -2787,9 +2989,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] @@ -2806,12 +3008,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ "bytes", - "prost-derive 0.11.8", + "prost-derive 0.11.9", ] [[package]] @@ -2839,9 +3041,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools 0.10.5", @@ -2860,16 +3062,16 @@ dependencies = [ "itertools 0.11.0", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.53", ] [[package]] name = "prost-types" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" dependencies = [ - "prost 0.11.8", + "prost 0.11.9", ] [[package]] @@ -2960,9 +3162,21 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.1" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", @@ -2971,15 +3185,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "rend" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" dependencies = [ "bytecheck", ] @@ -3037,28 +3251,32 @@ checksum = "2eca4ecc81b7f313189bf73ce724400a07da2a6dac19588b03c8bd76a2dcc251" dependencies = [ "block-buffer 0.9.0", "digest 0.9.0", - "opaque-debug 0.3.0", + "opaque-debug 0.3.1", ] [[package]] name = "rkyv" -version = "0.7.40" +version = "0.7.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c30f1d45d9aa61cbc8cd1eb87705470892289bb2d01943e7803b873a57404dc3" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" dependencies = [ + "bitvec 1.0.1", "bytecheck", + "bytes", "hashbrown 0.12.3", "ptr_meta", "rend", "rkyv_derive", "seahash", + "tinyvec", + "uuid 1.7.0", ] [[package]] name = "rkyv_derive" -version = "0.7.40" +version = "0.7.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff26ed6c7c4dfc2aa9480b86a60e3c7233543a270a680e10758a507c5a4ce476" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" dependencies = [ "proc-macro2", "quote", @@ -3093,7 +3311,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" dependencies = [ "base64 0.13.1", - "bitflags", + "bitflags 1.3.2", "serde", ] @@ -3118,14 +3336,12 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.29.0" +version = "1.34.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b1b21b8760b0ef8ae5b43d40913ff711a2053cb7ff892a34facff7a6365375a" +checksum = "b39449a79f45e8da28c57c341891b69a183044b29518bb8f86dbac9df60bb7df" dependencies = [ "arrayvec", "borsh", - "bytecheck", - "byteorder", "bytes", "num-traits", "rand", @@ -3134,12 +3350,45 @@ dependencies = [ "serde_json", ] +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + [[package]] name = "rustc-hex" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", +] + [[package]] name = "rustls" version = "0.19.1" @@ -3167,15 +3416,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "salsa20" @@ -3197,9 +3446,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.3.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" +checksum = "2ef2175c2907e7c8bc0a9c3f86aeb5ec1f3b275300ad58a44d0c3ae379a5e52e" dependencies = [ "cfg-if", "derive_more", @@ -3209,9 +3458,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.3.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" +checksum = "634d9b8eb8fd61c5cdd3390d9b2132300a7e7618955b98b8416f118c1b4e144f" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", @@ -3221,11 +3470,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.52.0", ] [[package]] @@ -3288,7 +3537,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct 0.1.1", "der 0.6.1", - "generic-array 0.14.6", + "generic-array 0.14.7", "pkcs8 0.9.0", "subtle", "zeroize", @@ -3296,13 +3545,13 @@ dependencies = [ [[package]] name = "sec1" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct 0.2.0", "der 0.7.8", - "generic-array 0.14.6", + "generic-array 0.14.7", "pkcs8 0.10.2", "subtle", "zeroize", @@ -3310,11 +3559,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -3323,9 +3572,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -3333,15 +3582,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" [[package]] name = "serde" -version = "1.0.195" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] @@ -3357,22 +3606,22 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.9" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.53", ] [[package]] @@ -3388,9 +3637,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.112" +version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d1bd37ce2324cf3bf85e5a25f96eb4baf0d5aa6eba43e7ae8958870c4ec48ed" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" dependencies = [ "itoa", "ryu", @@ -3399,13 +3648,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.11" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] @@ -3430,7 +3679,7 @@ dependencies = [ "async-std", "cosmwasm-schema", "cosmwasm-std", - "cw-multi-test 0.20.0", + "cw-multi-test 0.20.1", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", @@ -3499,7 +3748,7 @@ checksum = "20744734b8049c64747bfb083bbc06a3c7204d1d34881ed3d89698e182aa9f97" dependencies = [ "anyhow", "cosmwasm-std", - "cw-multi-test 0.16.2", + "cw-multi-test 0.16.5", "schemars", "serde", "sg-std", @@ -3511,7 +3760,7 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-controllers 1.1.0", + "cw-controllers 1.1.2", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", @@ -3615,7 +3864,7 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-multi-test 0.20.0", + "cw-multi-test 0.20.1", "cw-ownable", "cw-utils 1.0.3", "cw721-base", @@ -3665,7 +3914,7 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-multi-test 0.20.0", + "cw-multi-test 0.20.1", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", @@ -3683,9 +3932,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -3714,7 +3963,7 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.0", + "opaque-debug 0.3.1", ] [[package]] @@ -3730,9 +3979,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ "digest 0.10.7", "keccak", @@ -3759,9 +4008,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -3775,23 +4024,33 @@ checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", ] +[[package]] +name = "socket2" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "spin" version = "0.5.2" @@ -3810,9 +4069,9 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der 0.7.8", @@ -3848,9 +4107,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "subtle-encoding" @@ -3874,9 +4133,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" dependencies = [ "proc-macro2", "quote", @@ -3884,23 +4143,23 @@ dependencies = [ ] [[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "synstructure" -version = "0.12.6" +name = "syn_derive" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" dependencies = [ + "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", - "unicode-xid", + "syn 2.0.53", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "tap" version = "1.0.1" @@ -3922,7 +4181,7 @@ dependencies = [ "k256 0.11.6", "num-traits", "once_cell", - "prost 0.11.8", + "prost 0.11.9", "prost-types", "ripemd160", "serde", @@ -3962,7 +4221,7 @@ dependencies = [ "flex-error", "num-derive", "num-traits", - "prost 0.11.8", + "prost 0.11.9", "prost-types", "serde", "serde_bytes", @@ -4000,24 +4259,24 @@ dependencies = [ "tokio", "tracing", "url", - "uuid", + "uuid 0.8.2", "walkdir", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "test-context" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "055831a02a4f5aa28fede67f2902014273eb8c21b958ac5ebbd59b71ef30dbc3" +checksum = "b7b6965c21232186af0092233c18030fe607cfc3960dbabb209325272458eeea" dependencies = [ "async-trait", "futures", @@ -4026,12 +4285,12 @@ dependencies = [ [[package]] name = "test-context-macros" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901a55b0a7a06ebc4a674dcca925170da8e613fa3b163a1df804ed10afb154d" +checksum = "d506c7664333e246f564949bee4ed39062aa0f11918e6f5a95f553cdad65c274" dependencies = [ "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] @@ -4045,7 +4304,7 @@ dependencies = [ "base-minter", "cosmwasm-schema", "cosmwasm-std", - "cw-multi-test 0.20.0", + "cw-multi-test 0.20.1", "cw-ownable", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", @@ -4092,30 +4351,33 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.53", ] [[package]] name = "time" -version = "0.3.20" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" dependencies = [ + "deranged", + "num-conv", + "powerfmt", "serde", "time-core", "time-macros", @@ -4123,16 +4385,17 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.8" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" dependencies = [ + "num-conv", "time-core", ] @@ -4162,20 +4425,19 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.26.0" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", - "memchr", "mio", "num_cpus", "pin-project-lite", - "socket2", + "socket2 0.5.6", "tokio-macros", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -4190,13 +4452,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.8.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] @@ -4212,9 +4474,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.12" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" dependencies = [ "futures-core", "pin-project-lite", @@ -4223,9 +4485,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.7" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -4246,17 +4508,28 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" [[package]] name = "toml_edit" -version = "0.19.7" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.5", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.2.5", "toml_datetime", "winnow", ] @@ -4281,8 +4554,8 @@ dependencies = [ "hyper-timeout", "percent-encoding", "pin-project", - "prost 0.11.8", - "prost-derive 0.11.8", + "prost 0.11.9", + "prost-derive 0.11.9", "tokio", "tokio-stream", "tokio-util", @@ -4301,7 +4574,7 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", - "indexmap", + "indexmap 1.9.3", "pin-project", "pin-project-lite", "rand", @@ -4327,11 +4600,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -4339,20 +4611,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] @@ -4369,21 +4641,21 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" [[package]] name = "uint" @@ -4399,30 +4671,30 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "unicode-xid" @@ -4457,15 +4729,17 @@ dependencies = [ "serde", ] +[[package]] +name = "uuid" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" + [[package]] name = "value-bag" -version = "1.0.0-alpha.9" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" -dependencies = [ - "ctor", - "version_check", -] +checksum = "8fec26a25bd6fca441cdd0f769fd7f891bae119f996de31f86a5eddccef54c1d" [[package]] name = "vending-factory" @@ -4582,28 +4856,26 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "waker-fn" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", - "winapi", "winapi-util", ] [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -4615,9 +4887,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -4625,24 +4897,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.34" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -4652,9 +4924,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4662,28 +4934,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", @@ -4764,9 +5036,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -4779,90 +5051,141 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows-targets 0.48.5", ] [[package]] name = "windows-sys" -version = "0.45.0" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows-targets", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" -version = "0.42.2" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" [[package]] name = "winnow" -version = "0.3.6" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] @@ -4887,21 +5210,20 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.5.7" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.3" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "synstructure", + "syn 2.0.53", ] diff --git a/Cargo.toml b/Cargo.toml index a006f27e3..e090ee284 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,7 +66,7 @@ sg-eth-airdrop = { version = "3.5.0", path = "contracts/sg-eth-airdrop test-suite = { version = "3.5.0", path = "test-suite" } semver = "1" -cw-ownable = { git = "https://github.com/public-awesome/cw-plus-plus.git", branch = "multiple_ownership"} # TODO: switch to official https://github.com/larry0x/cw-plus-plus once merged +cw-ownable = { git = "https://github.com/public-awesome/cw-plus-plus.git", branch = "main"} # TODO: switch to official https://github.com/larry0x/cw-plus-plus once merged anybuf = "0.3.0" [profile.release.package.sg721] diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index 950b7b44f..1ffeb6c0d 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -1,27 +1,24 @@ -use std::fmt::Debug; - use cw721::msg::CollectionMetadataMsg; -use cw721::state::{MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_ROYALTY_SHARE_PCT}; +use cw721::state::{MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_ROYALTY_SHARE_PCT, MINTER}; use cw721::traits::{Cw721CustomMsg, Cw721State}; -use cw721_base::msg::{CollectionMetadataExtensionMsg, Cw721InstantiateMsg, RoyaltyInfoResponse}; -use cw721_base::state::NftInfo; +use cw721_base::msg::{CollectionMetadataExtensionMsg, RoyaltyInfoResponse}; use cw721_base::{ traits::StateFactory, DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, }; -use url::Url; use cosmwasm_std::{ to_json_binary, Addr, Binary, ContractInfoResponse, CustomMsg, Decimal, Deps, DepsMut, Empty, - Env, Event, MessageInfo, Response, StdError, StdResult, Storage, Timestamp, WasmQuery, + Env, Event, MessageInfo, Response, StdError, Storage, Timestamp, WasmQuery, }; -use cw721_base::{execute::Cw721Execute, query::Cw721Query, state::CollectionMetadata}; +use cw721_base::{execute::Cw721Execute, query::Cw721Query}; use cw_utils::nonpayable; -use serde::{de::DeserializeOwned, Serialize}; -use sg721::{CollectionInfo, ExecuteMsg, InstantiateMsg, RoyaltyInfo, UpdateCollectionInfoMsg}; +#[allow(deprecated)] +use sg721::{ExecuteMsg, InstantiateMsg, UpdateCollectionInfoMsg}; +#[allow(deprecated)] use crate::msg::{CollectionInfoResponse, NftParams, QueryMsg}; use crate::{ContractError, Sg721Contract}; @@ -135,18 +132,6 @@ where return Err(ContractError::CollectionInfoFrozen {}); } - // only creator can update collection info - let creator = self.get_creator(deps.as_ref().storage)?; - if creator.is_none() || creator.unwrap() != info.sender { - return Err(ContractError::Unauthorized {}); - } - - if let Some(new_creator) = collection_msg.creator.clone() { - // TODO: for keeping logic as-is, creator is set right away, but it should use cw-ownable's Action::TransferOwnership - self.parent - .initialize_creator(deps.storage, deps.api, Some(new_creator.as_str()))?; - } - // in this contract, extension is always present, so unwrap is safe let collection_extension = collection_info.extension.unwrap(); @@ -191,7 +176,6 @@ where ) -> Result, ContractError> { assert_minter_owner(deps.storage, &info.sender)?; - let collection_info = self.parent.config.collection_metadata.load(deps.storage)?; let msg = CollectionMetadataMsg { name: None, symbol: None, @@ -218,6 +202,7 @@ where info: MessageInfo, ) -> Result, ContractError> { let collection = self.query_collection_info(deps.as_ref())?; + #[allow(deprecated)] if collection.creator != info.sender { return Err(ContractError::Unauthorized {}); } @@ -263,6 +248,7 @@ where msg: QueryMsg, ) -> Result { match msg { + #[allow(deprecated)] QueryMsg::CollectionInfo {} => Ok(to_json_binary(&self.query_collection_info(deps)?)?), _ => Ok(self.parent.query(deps, &env, msg.into())?), } @@ -275,7 +261,9 @@ where ) -> Result { let collection_info = self.parent.config.collection_metadata.load(deps.storage)?; - let creator = self.get_creator(deps.storage)?.map_or("none".to_string(), |c| c.to_string()); + let creator = self + .get_creator(deps.storage)? + .map_or("none".to_string(), |c| c.to_string()); // in this contract, extension is always present, so unwrap is safe let collection_extension = collection_info.extension.unwrap(); @@ -342,7 +330,7 @@ pub fn share_validate(share: Decimal) -> Result { } pub fn get_owner_minter(storage: &mut dyn Storage) -> Result { - let ownership = cw_ownable::get_ownership(storage)?; + let ownership = MINTER.get_ownership(storage)?; match ownership.owner { Some(owner_value) => Ok(owner_value), None => Err(ContractError::MinterNotFound {}), @@ -350,7 +338,7 @@ pub fn get_owner_minter(storage: &mut dyn Storage) -> Result Result<(), ContractError> { - let res = cw_ownable::assert_owner(storage, sender); + let res = MINTER.assert_owner(storage, sender); match res { Ok(_) => Ok(()), Err(_) => Err(ContractError::UnauthorizedOwner {}), diff --git a/packages/sg2/src/tests.rs b/packages/sg2/src/tests.rs index ef0e42d7e..843181a83 100644 --- a/packages/sg2/src/tests.rs +++ b/packages/sg2/src/tests.rs @@ -3,6 +3,7 @@ use cosmwasm_std::Decimal; use cosmwasm_std::Timestamp; use sg721::{CollectionInfo, RoyaltyInfoResponse}; +#[allow(deprecated)] pub fn mock_collection_params() -> CollectionParams { CollectionParams { code_id: 1, diff --git a/packages/sg721/src/lib.rs b/packages/sg721/src/lib.rs index acf738e96..d392ea57c 100644 --- a/packages/sg721/src/lib.rs +++ b/packages/sg721/src/lib.rs @@ -260,6 +260,7 @@ pub struct UpdateCollectionInfoMsg { pub external_link: Option>, pub explicit_content: Option, pub royalty_info: Option>, + /// creator is ignore here, use `UpdateCreatorOwnership` instead pub creator: Option, } @@ -292,7 +293,7 @@ impl From for Cw721InstantiateMsg>>>>>> res {:?}", res); assert!(res.is_ok()); let creator_balances = router.wrap().query_all_balances(creator.clone()).unwrap(); diff --git a/test-suite/src/sg721_base/tests/integration_tests.rs b/test-suite/src/sg721_base/tests/integration_tests.rs index 0698b989c..8f060dadf 100644 --- a/test-suite/src/sg721_base/tests/integration_tests.rs +++ b/test-suite/src/sg721_base/tests/integration_tests.rs @@ -1,4 +1,5 @@ #[cfg(test)] +#[allow(deprecated)] mod tests { use crate::common_setup::contract_boxes::App; use anyhow::Error; @@ -113,7 +114,6 @@ mod tests { let cosmos_msg = factory_contract.call_with_funds(msg, creation_fee).unwrap(); let res = app.execute(Addr::unchecked(ADMIN), cosmos_msg); - println!(">>>>> {:?}", res); assert!(res.is_ok()); (app, Addr::unchecked("contract2")) @@ -349,7 +349,6 @@ mod tests { let (mut app, contract) = custom_proper_instantiate(custom_create_minter_msg); let creator = Addr::unchecked("creator".to_string()); - let new_creator = Addr::unchecked("new_creator".to_string()); // succeeds let res = app.execute_contract( @@ -493,13 +492,32 @@ mod tests { .unwrap(); assert_eq!(res.royalty_info.unwrap(), royalty_info); + // other cant update + let other = Addr::unchecked("other".to_string()); + let res = app.execute_contract( + other.clone(), + contract.clone(), + &Sg721ExecuteMsg::::UpdateCollectionInfo { + collection_info: UpdateCollectionInfoMsg { + creator: None, + description: Some(params.info.description.clone()), + image: Some(params.info.image.clone()), + external_link: Some(params.info.external_link.clone()), + explicit_content: Some(true), + royalty_info: None, + }, + }, + &[], + ); + assert!(res.is_err()); + // update explicit content with new creator let res = app.execute_contract( - creator, + creator.clone(), contract.clone(), &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { - creator: Some(new_creator.to_string()), + creator: Some(other.to_string()), // other is ignored description: Some(params.info.description.clone()), image: Some(params.info.image.clone()), external_link: Some(params.info.external_link.clone()), @@ -523,6 +541,18 @@ mod tests { .unwrap(); // check explicit content changed to true assert!(res.explicit_content.unwrap()); + // check creator is unchanged + let res: Ownership = app + .wrap() + .query_wasm_smart( + contract.clone(), + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::GetCreatorOwnership { }, + ) + .unwrap(); + assert_eq!(res.owner, Some(creator.clone())); // freeze collection throw err if not creator let res = app.execute_contract( @@ -534,7 +564,7 @@ mod tests { assert!(res.is_err()); // freeze collection to prevent further updates let res = app.execute_contract( - new_creator.clone(), + creator.clone(), contract.clone(), &Sg721ExecuteMsg::::FreezeCollectionInfo {}, &[], @@ -543,7 +573,7 @@ mod tests { // trying to update collection after frozen should throw err let res = app.execute_contract( - new_creator, + creator, contract, &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { From 63d25461777c1cfc279c73ae8cd2dba76d6b6ac4 Mon Sep 17 00:00:00 2001 From: mr-t Date: Mon, 18 Mar 2024 18:47:37 +0100 Subject: [PATCH 07/24] fix tests --- contracts/minters/base-minter/src/contract.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contracts/minters/base-minter/src/contract.rs b/contracts/minters/base-minter/src/contract.rs index 3b12ac339..752f7ec8a 100644 --- a/contracts/minters/base-minter/src/contract.rs +++ b/contracts/minters/base-minter/src/contract.rs @@ -16,6 +16,7 @@ use sg1::checked_fair_burn; use sg2::query::Sg2QueryMsg; use sg4::{QueryMsg, Status, StatusResponse, SudoMsg}; use sg721::{ExecuteMsg as Sg721ExecuteMsg, InstantiateMsg as Sg721InstantiateMsg}; +#[allow(deprecated)] use sg721_base::msg::{CollectionInfoResponse, QueryMsg as Sg721QueryMsg}; use sg_std::NATIVE_DENOM; use url::Url; @@ -25,6 +26,7 @@ const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); const INSTANTIATE_SG721_REPLY_ID: u64 = 1; #[cfg_attr(not(feature = "library"), entry_point)] +#[allow(deprecated)] pub fn instantiate( deps: DepsMut, env: Env, @@ -110,6 +112,7 @@ pub fn execute( } } +#[allow(deprecated)] pub fn execute_mint_sender( deps: DepsMut, info: MessageInfo, @@ -176,6 +179,7 @@ pub fn execute_mint_sender( .add_attribute("network_fee", network_fee.to_string())) } +#[allow(deprecated)] pub fn execute_update_start_trading_time( deps: DepsMut, env: Env, From ce3448b1f10f084ad20f1fa73a90db72cd9bd577 Mon Sep 17 00:00:00 2001 From: mr-t Date: Mon, 18 Mar 2024 19:04:40 +0100 Subject: [PATCH 08/24] fix payout_too_much_royalties: fees exceed payment --- contracts/collections/sg721-base/src/contract.rs | 16 ---------------- .../src/base_minter/tests/integration_tests.rs | 1 - .../src/sg721_base/tests/integration_tests.rs | 8 ++++---- 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index 1ffeb6c0d..d38cc2557 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -78,12 +78,6 @@ where CONTRACT_VERSION, )?; - if let Some(royalty_info) = msg.collection_info.royalty_info { - if royalty_info.share > Decimal::percent(MAX_ROYALTY_SHARE_PCT) { - share_validate(royalty_info.share)?; - } - } - Ok(Response::new() .add_attribute("action", "instantiate") .add_attribute("collection_name", msg.name) @@ -319,16 +313,6 @@ where } } -pub fn share_validate(share: Decimal) -> Result { - if share > Decimal::one() { - return Err(ContractError::InvalidRoyalties( - "Share cannot be greater than 100%".to_string(), - )); - } - - Ok(share) -} - pub fn get_owner_minter(storage: &mut dyn Storage) -> Result { let ownership = MINTER.get_ownership(storage)?; match ownership.owner { diff --git a/test-suite/src/base_minter/tests/integration_tests.rs b/test-suite/src/base_minter/tests/integration_tests.rs index 29bfe52bc..3f4d3386d 100644 --- a/test-suite/src/base_minter/tests/integration_tests.rs +++ b/test-suite/src/base_minter/tests/integration_tests.rs @@ -137,7 +137,6 @@ fn check_mint() { &[coin(MIN_MINT_PRICE, NATIVE_DENOM)], ); - println!(">>>>>>> res {:?}", res); assert!(res.is_ok()); let creator_balances = router.wrap().query_all_balances(creator.clone()).unwrap(); diff --git a/test-suite/src/sg721_base/tests/integration_tests.rs b/test-suite/src/sg721_base/tests/integration_tests.rs index 8f060dadf..f14202981 100644 --- a/test-suite/src/sg721_base/tests/integration_tests.rs +++ b/test-suite/src/sg721_base/tests/integration_tests.rs @@ -596,7 +596,7 @@ mod tests { use crate::common_setup::setup_minter::vending_minter::mock_params::mock_create_minter_init_msg; use cosmwasm_std::{Decimal, Response, Uint128}; - use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; + use cw721::{state::MAX_ROYALTY_SHARE_PCT, DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use sg2::msg::CollectionParams; use sg721::RoyaltyInfoResponse; use sg721_base::msg::{CollectionInfoResponse, QueryMsg}; @@ -691,7 +691,7 @@ mod tests { explicit_content: Some(false), royalty_info: Some(RoyaltyInfoResponse { payment_address: "creator".to_string(), - share: Decimal::percent(91), + share: Decimal::percent(MAX_ROYALTY_SHARE_PCT), }), }, ..mock_collection_params() @@ -711,13 +711,13 @@ mod tests { ) .unwrap(); - // payout 100stars, royalty share 91%, royalty payout fails + // payout 100stars, royalty share 10% (MAX_ROYALTY_SHARE_PCT), royalty payout fails // fees exceed payment let payment = Uint128::from(100000000u128); let res = res.royalty_payout( contract, payment, - Uint128::from(10000000u128), + Uint128::from(91000000u128), // 91stars None, &mut Response::default(), ); From 99978306ada8c5a1ec5718f7b85ba4031d908321 Mon Sep 17 00:00:00 2001 From: mr-t Date: Mon, 18 Mar 2024 19:45:50 +0100 Subject: [PATCH 09/24] #[allow(deprecated)] --- .../collections/sg721-base/src/contract.rs | 4 ++-- contracts/collections/sg721-base/src/lib.rs | 7 +++--- contracts/collections/sg721-base/src/msg.rs | 14 +++++------- contracts/collections/sg721-base/src/state.rs | 1 - .../collections/sg721-nt/examples/schema.rs | 5 ++++- contracts/collections/sg721-nt/src/lib.rs | 22 ++++++++++--------- contracts/collections/sg721-nt/src/msg.rs | 4 ++++ .../sg721-updatable/examples/schema.rs | 11 +++++++--- .../sg721-updatable/src/contract.rs | 6 ++++- .../collections/sg721-updatable/src/lib.rs | 3 +-- .../collections/sg721-updatable/src/msg.rs | 7 ++++++ .../open-edition-minter/src/contract.rs | 1 + .../open-edition-minter/src/helpers.rs | 4 ++-- .../vending-minter-merkle-wl/src/contract.rs | 8 +++++-- .../vending-minter-wl-flex/src/contract.rs | 5 +++-- .../minters/vending-minter/src/contract.rs | 8 +++++-- e2e/src/helpers/helper.rs | 2 ++ .../helpers/open_edition_minter_helpers.rs | 2 ++ e2e/src/tests/sg721_test.rs | 2 ++ packages/sg2/src/msg.rs | 3 +++ packages/sg2/src/tests.rs | 5 +++++ packages/sg721/src/lib.rs | 12 +++++----- .../base_minter/tests/integration_tests.rs | 3 +++ .../setup_minter/base_minter/setup.rs | 1 + .../setup_minter/open_edition_minter/setup.rs | 1 + .../setup_minter/vending_minter/setup.rs | 1 + .../tests/frozen_factory.rs | 1 + .../vending_minter/tests/allowed_code_ids.rs | 1 + .../vending_minter/tests/frozen_factory.rs | 1 + .../src/vending_minter/tests/happy_unhappy.rs | 1 + .../vending_minter/tests/ibc_asset_mint.rs | 2 ++ .../src/vending_minter/tests/trading_time.rs | 2 ++ .../tests/trading_time_updatable.rs | 3 +++ .../src/vending_minter/tests/updatable.rs | 3 +-- .../vending_minter/tests/zero_mint_price.rs | 3 +++ 35 files changed, 111 insertions(+), 48 deletions(-) diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index d38cc2557..e7680da28 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -1,5 +1,5 @@ use cw721::msg::CollectionMetadataMsg; -use cw721::state::{MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_ROYALTY_SHARE_PCT, MINTER}; +use cw721::state::{MAX_COLLECTION_DESCRIPTION_LENGTH, MINTER}; use cw721::traits::{Cw721CustomMsg, Cw721State}; use cw721_base::msg::{CollectionMetadataExtensionMsg, RoyaltyInfoResponse}; use cw721_base::{ @@ -8,7 +8,7 @@ use cw721_base::{ }; use cosmwasm_std::{ - to_json_binary, Addr, Binary, ContractInfoResponse, CustomMsg, Decimal, Deps, DepsMut, Empty, + to_json_binary, Addr, Binary, ContractInfoResponse, CustomMsg, Deps, DepsMut, Empty, Env, Event, MessageInfo, Response, StdError, Storage, Timestamp, WasmQuery, }; diff --git a/contracts/collections/sg721-base/src/lib.rs b/contracts/collections/sg721-base/src/lib.rs index 8086ce9f2..8fb5e2831 100644 --- a/contracts/collections/sg721-base/src/lib.rs +++ b/contracts/collections/sg721-base/src/lib.rs @@ -7,11 +7,10 @@ pub mod upgrades; pub use crate::error::ContractError; pub use crate::state::Sg721Contract; use cw721::{ - DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg, RoyaltyInfo, + DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg, }; -use cw721_base::msg::CollectionMetadataExtensionMsg; use cw721_base::{ - DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, NftMetadataMsg, + DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, }; pub type ExecuteMsg = sg721::ExecuteMsg< @@ -29,7 +28,7 @@ pub mod entry { #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; - use cosmwasm_std::{Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult}; + use cosmwasm_std::{Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response}; use cw2::set_contract_version; use sg721::InstantiateMsg; diff --git a/contracts/collections/sg721-base/src/msg.rs b/contracts/collections/sg721-base/src/msg.rs index e03964b8d..7e4842186 100644 --- a/contracts/collections/sg721-base/src/msg.rs +++ b/contracts/collections/sg721-base/src/msg.rs @@ -1,18 +1,12 @@ use cw721::msg::RoyaltyInfoResponse; use cw721::traits::Cw721State; -use cw721::CollectionMetadataExtension; -use cw721::DefaultOptionCollectionMetadataExtensionMsg; -use cw721::RoyaltyInfo; -use serde::de::DeserializeOwned; -use serde::Serialize; -use std::fmt::Debug; use cosmwasm_schema::cw_serde; use cosmwasm_schema::QueryResponses; use cosmwasm_std::{coin, Addr, BankMsg, Empty, Event, StdError, StdResult, Timestamp, Uint128}; use cw721_base::{ msg::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, Cw721ExecuteMsg, MinterResponse, + AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, MinterResponse, NftInfoResponse, NumTokensResponse, OperatorsResponse, OwnerOfResponse, QueryMsg as Cw721QueryMsg, TokensResponse, }, @@ -23,12 +17,14 @@ use sg_std::{Response, SubMsg, NATIVE_DENOM}; #[derive(QueryResponses)] #[cw_serde] +#[allow(deprecated)] pub enum QueryMsg< // Return type of NFT metadata defined in `NftInfo` and `AllNftInfo`. TNftMetadataExtension, // Return type of collection metadata extension defined in `GetCollectionMetadata`. TCollectionMetadataExtension, > { + #[allow(deprecated)] #[returns(CollectionInfoResponse)] #[deprecated = "Please use GetCollectionMetadata instead"] CollectionInfo {}, @@ -156,6 +152,7 @@ where TNftMetadataExtension: Cw721State, TCollectionMetadataExtension: Cw721State, { + #[allow(deprecated)] fn from( msg: QueryMsg, ) -> Cw721QueryMsg { @@ -227,7 +224,7 @@ where } #[cw_serde] -#[deprecated = "Please use CollectionMetadata> instead"] +#[deprecated = "Please use `CollectionMetadata>` instead"] pub struct CollectionInfoResponse { pub creator: String, pub description: String, @@ -238,6 +235,7 @@ pub struct CollectionInfoResponse { pub royalty_info: Option, } +#[allow(deprecated)] impl CollectionInfoResponse { pub fn royalty_payout( &self, diff --git a/contracts/collections/sg721-base/src/state.rs b/contracts/collections/sg721-base/src/state.rs index 56fe680fd..34599e0af 100644 --- a/contracts/collections/sg721-base/src/state.rs +++ b/contracts/collections/sg721-base/src/state.rs @@ -1,7 +1,6 @@ use cosmwasm_std::Timestamp; use cw721::traits::{Cw721CustomMsg, Cw721State}; use cw_storage_plus::Item; -use serde::{de::DeserializeOwned, Serialize}; use std::ops::Deref; diff --git a/contracts/collections/sg721-nt/examples/schema.rs b/contracts/collections/sg721-nt/examples/schema.rs index 04bc938eb..bf80b1c31 100644 --- a/contracts/collections/sg721-nt/examples/schema.rs +++ b/contracts/collections/sg721-nt/examples/schema.rs @@ -5,7 +5,8 @@ use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, s use cosmwasm_std::Empty; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721::{state::CollectionMetadata, DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +#[allow(deprecated)] use cw721_base::{ msg::{ AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, Cw721QueryMsg, MinterResponse, @@ -46,7 +47,9 @@ fn main() { export_schema(&schema_for!(ApprovalResponse), &out_dir); export_schema(&schema_for!(ApprovalsResponse), &out_dir); export_schema(&schema_for!(OperatorsResponse), &out_dir); + #[allow(deprecated)] export_schema(&schema_for!(ContractInfoResponse), &out_dir); + export_schema(&schema_for!(CollectionMetadata), &out_dir); export_schema_with_title( &schema_for!(NftInfoResponse), &out_dir, diff --git a/contracts/collections/sg721-nt/src/lib.rs b/contracts/collections/sg721-nt/src/lib.rs index b444bfdd3..d2de4a768 100644 --- a/contracts/collections/sg721-nt/src/lib.rs +++ b/contracts/collections/sg721-nt/src/lib.rs @@ -7,7 +7,6 @@ use cw721::{ DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, }; -use cw721_base::Extension; use sg721::InstantiateMsg; use sg721_base::Sg721Contract; pub type QueryMsg = sg721_base::msg::QueryMsg< @@ -37,7 +36,7 @@ pub mod entry { use crate::msg::ExecuteMsg; use cosmwasm_std::{ - Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdError, StdResult, + Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdError, }; use cw721::msg::Cw721MigrateMsg; use cw721_base::execute::Cw721Execute; @@ -64,7 +63,7 @@ pub mod entry { deps: DepsMut, env: Env, info: MessageInfo, - msg: ExecuteMsg, + msg: ExecuteMsg, ) -> Result { match msg { ExecuteMsg::Burn { token_id } => Sg721NonTransferableContract::default() @@ -76,17 +75,20 @@ pub mod entry { token_uri, owner, extension, - } => Sg721NonTransferableContract::default().mint( - deps, - env, - info, - NftParams::NftData { + } => { + let nft_data = NftParams::NftData { token_id, owner, token_uri, extension, - }, - ), + }; + Sg721NonTransferableContract::default().mint( + deps, + env, + info, + nft_data, + ) + }, ExecuteMsg::UpdateCollectionInfo { new_collection_info, } => Sg721NonTransferableContract::default().update_collection_info( diff --git a/contracts/collections/sg721-nt/src/msg.rs b/contracts/collections/sg721-nt/src/msg.rs index e4f8d141e..cbaf4ac69 100644 --- a/contracts/collections/sg721-nt/src/msg.rs +++ b/contracts/collections/sg721-nt/src/msg.rs @@ -1,9 +1,11 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; +#[allow(deprecated)] use sg721::{RoyaltyInfoResponse, UpdateCollectionInfoMsg}; #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] #[serde(rename_all = "snake_case")] +#[allow(deprecated)] pub enum ExecuteMsg { /// Mint a new NFT, can only be called by the contract minter Mint { @@ -21,7 +23,9 @@ pub enum ExecuteMsg { /// Burn an NFT the sender has access to Burn { token_id: String }, /// Update collection info + #[allow(deprecated)] UpdateCollectionInfo { + #[allow(deprecated)] new_collection_info: UpdateCollectionInfoMsg, }, /// Freeze collection info from further updates diff --git a/contracts/collections/sg721-updatable/examples/schema.rs b/contracts/collections/sg721-updatable/examples/schema.rs index c13cc631f..e9e52254b 100644 --- a/contracts/collections/sg721-updatable/examples/schema.rs +++ b/contracts/collections/sg721-updatable/examples/schema.rs @@ -4,13 +4,14 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; use cosmwasm_std::Empty; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721::{state::CollectionMetadata, CollectionMetadataExtension, DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, RoyaltyInfo}; +#[allow(deprecated)] pub use cw721_base::{ContractInfoResponse,msg::{ AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, NftInfoResponse, NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, MinterResponse }}; -use cw721_base::Extension; use sg721::InstantiateMsg; +#[allow(deprecated)] pub use sg721_base::msg::CollectionInfoResponse; use sg721_base::msg::QueryMsg; use sg721_updatable::msg::ExecuteMsg; @@ -22,12 +23,14 @@ fn main() { remove_schemas(&out_dir).unwrap(); export_schema(&schema_for!(InstantiateMsg), &out_dir); - export_schema(&schema_for!(ExecuteMsg), &out_dir); + export_schema(&schema_for!(ExecuteMsg), &out_dir); export_schema(&schema_for!(QueryMsg::< DefaultOptionNftMetadataExtension, DefaultOptionCollectionMetadataExtension, >), &out_dir); + #[allow(deprecated)] export_schema(&schema_for!(CollectionInfoResponse), &out_dir); + export_schema(&schema_for!(CollectionMetadata>), &out_dir); export_schema_with_title( &schema_for!(AllNftInfoResponse), &out_dir, @@ -42,7 +45,9 @@ fn main() { export_schema(&schema_for!(MinterResponse), &out_dir); export_schema(&schema_for!(ApprovalResponse), &out_dir); export_schema(&schema_for!(ApprovalsResponse), &out_dir); + #[allow(deprecated)] export_schema(&schema_for!(ContractInfoResponse), &out_dir); + export_schema(&schema_for!(CollectionMetadata), &out_dir); export_schema_with_title( &schema_for!(NftInfoResponse), &out_dir, diff --git a/contracts/collections/sg721-updatable/src/contract.rs b/contracts/collections/sg721-updatable/src/contract.rs index 728a9363c..0c74a0aee 100644 --- a/contracts/collections/sg721-updatable/src/contract.rs +++ b/contracts/collections/sg721-updatable/src/contract.rs @@ -13,12 +13,12 @@ use cw721::{ }; use semver::Version; use sg721::InstantiateMsg; +#[allow(deprecated)] use sg721_base::msg::CollectionInfoResponse; use crate::msg::{EnableUpdatableResponse, FrozenTokenMetadataResponse}; use crate::state::ENABLE_UPDATABLE; -use cw721_base::Extension; use cw_utils::nonpayable; use sg1::checked_fair_burn; use sg721_base::ContractError::Unauthorized; @@ -59,6 +59,7 @@ pub fn _instantiate( Ok(res) } +#[allow(deprecated)] pub fn execute_enable_updatable( deps: DepsMut, _env: Env, @@ -87,6 +88,7 @@ pub fn execute_enable_updatable( .add_attribute("enabled", "true")) } +#[allow(deprecated)] pub fn execute_freeze_token_metadata( deps: DepsMut, _env: Env, @@ -107,6 +109,7 @@ pub fn execute_freeze_token_metadata( .add_attribute("frozen", "true")) } +#[allow(deprecated)] pub fn execute_update_token_metadata( deps: DepsMut, _env: Env, @@ -238,6 +241,7 @@ pub fn _migrate(mut deps: DepsMut, env: Env, _msg: Empty) -> Result { Burn { token_id: String, }, + #[allow(deprecated)] UpdateCollectionInfo { + #[allow(deprecated)] collection_info: UpdateCollectionInfoMsg, }, UpdateStartTradingTime(Option), @@ -114,6 +117,7 @@ where ExecuteMsg::RevokeAll { operator } => Sg721ExecuteMsg::RevokeAll { operator }, ExecuteMsg::Burn { token_id } => Sg721ExecuteMsg::Burn { token_id }, ExecuteMsg::UpdateCollectionInfo { collection_info } => { + #[allow(deprecated)] Sg721ExecuteMsg::UpdateCollectionInfo { collection_info } } ExecuteMsg::FreezeCollectionInfo {} => Sg721ExecuteMsg::FreezeCollectionInfo {}, @@ -225,6 +229,7 @@ impl From limit, }, QueryMsg::NumTokens {} => Sg721QueryMsg::NumTokens {}, + #[allow(deprecated)] QueryMsg::ContractInfo {} => Sg721QueryMsg::ContractInfo {}, QueryMsg::NftInfo { token_id } => Sg721QueryMsg::NftInfo { token_id }, QueryMsg::AllNftInfo { @@ -246,7 +251,9 @@ impl From QueryMsg::AllTokens { start_after, limit } => { Sg721QueryMsg::AllTokens { start_after, limit } } + #[allow(deprecated)] QueryMsg::Minter {} => Sg721QueryMsg::Minter {}, + #[allow(deprecated)] QueryMsg::CollectionInfo {} => Sg721QueryMsg::CollectionInfo {}, _ => unreachable!("cannot convert {:?} to Sg721QueryMsg", msg), } diff --git a/contracts/minters/open-edition-minter/src/contract.rs b/contracts/minters/open-edition-minter/src/contract.rs index 8c5d645df..cb43aaac3 100644 --- a/contracts/minters/open-edition-minter/src/contract.rs +++ b/contracts/minters/open-edition-minter/src/contract.rs @@ -33,6 +33,7 @@ const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); const INSTANTIATE_SG721_REPLY_ID: u64 = 1; #[cfg_attr(not(feature = "library"), entry_point)] +#[allow(deprecated)] pub fn instantiate( deps: DepsMut, env: Env, diff --git a/contracts/minters/open-edition-minter/src/helpers.rs b/contracts/minters/open-edition-minter/src/helpers.rs index f8773d74a..39bb54ed3 100644 --- a/contracts/minters/open-edition-minter/src/helpers.rs +++ b/contracts/minters/open-edition-minter/src/helpers.rs @@ -3,7 +3,7 @@ use cosmwasm_std::{ to_json_binary, Addr, Coin, ContractInfoResponse, CosmosMsg, CustomQuery, Empty, Querier, QuerierWrapper, StdError, StdResult, WasmMsg, WasmQuery, }; -use cw721_base::Extension; +use cw721_base::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use sg721::ExecuteMsg as Sg721ExecuteMsg; use sg_metadata::Metadata; @@ -84,7 +84,7 @@ pub fn mint_nft_msg( } else { CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: sg721_address.to_string(), - msg: to_json_binary(&Sg721ExecuteMsg::::Mint { + msg: to_json_binary(&Sg721ExecuteMsg::::Mint { token_id, owner: recipient_addr.to_string(), token_uri, diff --git a/contracts/minters/vending-minter-merkle-wl/src/contract.rs b/contracts/minters/vending-minter-merkle-wl/src/contract.rs index b763a1ceb..8758da350 100644 --- a/contracts/minters/vending-minter-merkle-wl/src/contract.rs +++ b/contracts/minters/vending-minter-merkle-wl/src/contract.rs @@ -16,7 +16,7 @@ use cosmwasm_std::{ Timestamp, Uint128, WasmMsg, }; use cw2::set_contract_version; -use cw721_base::Extension; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use cw_utils::{may_pay, maybe_addr, nonpayable, parse_reply_instantiate_data}; use rand_core::{RngCore, SeedableRng}; use rand_xoshiro::Xoshiro128PlusPlus; @@ -49,6 +49,7 @@ const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); const INSTANTIATE_SG721_REPLY_ID: u64 = 1; #[cfg_attr(not(feature = "library"), entry_point)] +#[allow(deprecated)] pub fn instantiate( deps: DepsMut, env: Env, @@ -703,7 +704,10 @@ fn _execute_mint( }; // Create mint msgs - let mint_msg = Sg721ExecuteMsg::::Mint { + let mint_msg = Sg721ExecuteMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Mint { token_id: mintable_token_mapping.token_id.to_string(), owner: recipient_addr.to_string(), token_uri: Some(format!( diff --git a/contracts/minters/vending-minter-wl-flex/src/contract.rs b/contracts/minters/vending-minter-wl-flex/src/contract.rs index f6201ae51..aead8fbf8 100644 --- a/contracts/minters/vending-minter-wl-flex/src/contract.rs +++ b/contracts/minters/vending-minter-wl-flex/src/contract.rs @@ -15,7 +15,7 @@ use cosmwasm_std::{ Timestamp, Uint128, WasmMsg, }; use cw2::set_contract_version; -use cw721_base::Extension; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use cw_utils::{may_pay, maybe_addr, nonpayable, parse_reply_instantiate_data}; use rand_core::{RngCore, SeedableRng}; use rand_xoshiro::Xoshiro128PlusPlus; @@ -49,6 +49,7 @@ const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); const INSTANTIATE_SG721_REPLY_ID: u64 = 1; #[cfg_attr(not(feature = "library"), entry_point)] +#[allow(deprecated)] pub fn instantiate( deps: DepsMut, env: Env, @@ -673,7 +674,7 @@ fn _execute_mint( }; // Create mint msgs - let mint_msg = Sg721ExecuteMsg::::Mint { + let mint_msg = Sg721ExecuteMsg::::Mint { token_id: mintable_token_mapping.token_id.to_string(), owner: recipient_addr.to_string(), token_uri: Some(format!( diff --git a/contracts/minters/vending-minter/src/contract.rs b/contracts/minters/vending-minter/src/contract.rs index 09dd34006..60c70384b 100644 --- a/contracts/minters/vending-minter/src/contract.rs +++ b/contracts/minters/vending-minter/src/contract.rs @@ -16,7 +16,7 @@ use cosmwasm_std::{ Timestamp, Uint128, WasmMsg, }; use cw2::set_contract_version; -use cw721_base::Extension; +use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use cw_utils::{may_pay, maybe_addr, nonpayable, parse_reply_instantiate_data}; use rand_core::{RngCore, SeedableRng}; use rand_xoshiro::Xoshiro128PlusPlus; @@ -48,6 +48,7 @@ const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); const INSTANTIATE_SG721_REPLY_ID: u64 = 1; #[cfg_attr(not(feature = "library"), entry_point)] +#[allow(deprecated)] pub fn instantiate( deps: DepsMut, env: Env, @@ -680,7 +681,10 @@ fn _execute_mint( }; // Create mint msgs - let mint_msg = Sg721ExecuteMsg::::Mint { + let mint_msg = Sg721ExecuteMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Mint { token_id: mintable_token_mapping.token_id.to_string(), owner: recipient_addr.to_string(), token_uri: Some(format!( diff --git a/e2e/src/helpers/helper.rs b/e2e/src/helpers/helper.rs index 299d06a14..0a1249abd 100644 --- a/e2e/src/helpers/helper.rs +++ b/e2e/src/helpers/helper.rs @@ -10,6 +10,7 @@ use sg2::{ msg::{CollectionParams, CreateMinterMsg}, MinterParams, }; +#[allow(deprecated)] use sg721::CollectionInfo; use vending_factory::{ msg::{InstantiateMsg, VendingMinterInitMsgExtension}, @@ -98,6 +99,7 @@ pub fn create_minter_msg( code_id: chain.orc.contract_map.code_id(SG721_NAME).unwrap(), name: "Collection".to_string(), symbol: "SYM".to_string(), + #[allow(deprecated)] info: CollectionInfo { creator: creator_addr, description: "Description".to_string(), diff --git a/e2e/src/helpers/open_edition_minter_helpers.rs b/e2e/src/helpers/open_edition_minter_helpers.rs index 51ae64282..d2d316423 100644 --- a/e2e/src/helpers/open_edition_minter_helpers.rs +++ b/e2e/src/helpers/open_edition_minter_helpers.rs @@ -11,6 +11,7 @@ use sg2::{ msg::{CollectionParams, CreateMinterMsg}, MinterParams, }; +#[allow(deprecated)] use sg721::CollectionInfo; // contract names used by cosm-orc to register stored code ids / instantiated addresses: @@ -104,6 +105,7 @@ pub fn create_minter_msg( code_id: code_id.unwrap_or_else(|| chain.orc.contract_map.code_id(SG721_NAME).unwrap()), name: "Collection".to_string(), symbol: "SYM".to_string(), + #[allow(deprecated)] info: CollectionInfo { creator: creator_addr, description: "Description".to_string(), diff --git a/e2e/src/tests/sg721_test.rs b/e2e/src/tests/sg721_test.rs index 51befd07e..09ef5bfa9 100644 --- a/e2e/src/tests/sg721_test.rs +++ b/e2e/src/tests/sg721_test.rs @@ -1,6 +1,7 @@ use assert_matches::assert_matches; use cosm_orc::orchestrator::error::CosmwasmError::TxError; use cosm_orc::orchestrator::error::ProcessError; +#[allow(deprecated)] use sg721::{CollectionInfo, InstantiateMsg}; use test_context::test_context; @@ -20,6 +21,7 @@ fn test_unauthorized_sg721_instantiation(chain: &mut Chain) { name: "Collection Name".to_string(), symbol: "COL".to_string(), minter: user_addr.to_string(), + #[allow(deprecated)] collection_info: CollectionInfo { creator: user_addr.to_string(), description: "Description".to_string(), diff --git a/packages/sg2/src/msg.rs b/packages/sg2/src/msg.rs index 434563b45..f5281f2cb 100644 --- a/packages/sg2/src/msg.rs +++ b/packages/sg2/src/msg.rs @@ -1,5 +1,6 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::Coin; +#[allow(deprecated)] use sg721::{CollectionInfo, RoyaltyInfoResponse}; #[cw_serde] @@ -9,11 +10,13 @@ pub struct CreateMinterMsg { } #[cw_serde] +#[allow(deprecated)] pub struct CollectionParams { /// The collection code id pub code_id: u64, pub name: String, pub symbol: String, + #[allow(deprecated)] pub info: CollectionInfo, } diff --git a/packages/sg2/src/tests.rs b/packages/sg2/src/tests.rs index 843181a83..97abcd046 100644 --- a/packages/sg2/src/tests.rs +++ b/packages/sg2/src/tests.rs @@ -1,6 +1,7 @@ use crate::msg::CollectionParams; use cosmwasm_std::Decimal; use cosmwasm_std::Timestamp; +#[allow(deprecated)] use sg721::{CollectionInfo, RoyaltyInfoResponse}; #[allow(deprecated)] @@ -29,6 +30,7 @@ pub fn mock_collection_params_1(start_trading_time: Option) -> Collec code_id: 1, name: "Collection Name".to_string(), symbol: "COL".to_string(), + #[allow(deprecated)] info: CollectionInfo { creator: "creator".to_string(), description: String::from("Stargaze Monkeys"), @@ -49,6 +51,7 @@ pub fn mock_curator_payment_address(start_trading_time: Option) -> Co code_id: 1, name: String::from("Test Coin"), symbol: String::from("TEST"), + #[allow(deprecated)] info: CollectionInfo { creator: "creator".to_string(), description: String::from("Stargaze Monkeys"), @@ -69,6 +72,7 @@ pub fn mock_collection_params_high_fee(start_trading_time: Option) -> code_id: 1, name: String::from("Test Coin"), symbol: String::from("TEST"), + #[allow(deprecated)] info: CollectionInfo { creator: "creator".to_string(), description: String::from("Stargaze Monkeys"), @@ -91,6 +95,7 @@ pub fn mock_collection_two(start_trading_time: Option) -> CollectionP code_id: 1, name: String::from("Test Collection 2"), symbol: String::from("TEST 2"), + #[allow(deprecated)] info: CollectionInfo { creator: "creator".to_string(), description: String::from("Stargaze Monkeys 2"), diff --git a/packages/sg721/src/lib.rs b/packages/sg721/src/lib.rs index d392ea57c..8e74f8014 100644 --- a/packages/sg721/src/lib.rs +++ b/packages/sg721/src/lib.rs @@ -1,13 +1,10 @@ use cosmwasm_schema::cw_serde; -use cosmwasm_std::{Addr, Binary, Coin, Decimal, Timestamp}; +use cosmwasm_std::{Binary, Coin, Timestamp}; use cw721_base::{ msg::{ CollectionMetadataExtensionMsg, CollectionMetadataMsg, ExecuteMsg as Cw721ExecuteMsg, InstantiateMsg as Cw721InstantiateMsg }, - state::{ - CollectionMetadata, CollectionMetadataExtension, - }, - DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtensionMsg, }; use cw_ownable::Action; use cw_utils::Expiration; @@ -26,6 +23,7 @@ pub enum ExecuteMsg< /// Update specific collection info fields #[deprecated = "Please use UpdateCollectionInfo instead"] UpdateCollectionInfo { + #[allow(deprecated)] collection_info: UpdateCollectionInfoMsg, }, /// Called by the minter to update trading start time @@ -137,6 +135,7 @@ impl TCollectionMetadataExtensionMsg, > { + #[allow(deprecated)] fn from( msg: ExecuteMsg< TNftMetadataExtensionMsg, @@ -145,7 +144,7 @@ impl ) -> Self { match msg { // ---- sg721 msgs ---- - ExecuteMsg::UpdateCollectionInfo { collection_info } => { + ExecuteMsg::UpdateCollectionInfo { collection_info: _ } => { panic!("not a cw721 msg") } ExecuteMsg::UpdateStartTradingTime(_) => panic!("not a cw721 msg"), @@ -287,6 +286,7 @@ pub struct InstantiateMsg { pub collection_info: CollectionInfo, } +#[allow(deprecated)] impl From for Cw721InstantiateMsg { fn from(msg: InstantiateMsg) -> Self { Cw721InstantiateMsg { diff --git a/test-suite/src/base_minter/tests/integration_tests.rs b/test-suite/src/base_minter/tests/integration_tests.rs index 3f4d3386d..1fe6e2c99 100644 --- a/test-suite/src/base_minter/tests/integration_tests.rs +++ b/test-suite/src/base_minter/tests/integration_tests.rs @@ -16,6 +16,7 @@ use sg2::msg::Sg2ExecuteMsg; use sg2::query::{AllowedCollectionCodeIdsResponse, Sg2QueryMsg}; use sg2::tests::mock_collection_params_1; use sg4::QueryMsg; +#[allow(deprecated)] use sg721_base::msg::{CollectionInfoResponse, QueryMsg as Sg721QueryMsg}; use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; @@ -27,6 +28,7 @@ fn init() { } #[test] +#[allow(deprecated)] fn update_code_id() { let sg721_code_id = 7u64; let bmt = base_minter_with_specified_sg721(1, sg721_code_id); @@ -186,6 +188,7 @@ fn check_mint() { } #[test] +#[allow(deprecated)] fn update_start_trading_time() { let bmt = base_minter_with_sg721(1); let (mut router, creator, buyer) = (bmt.router, bmt.accts.creator, bmt.accts.buyer); diff --git a/test-suite/src/common_setup/setup_minter/base_minter/setup.rs b/test-suite/src/common_setup/setup_minter/base_minter/setup.rs index cb3424d1e..35907767e 100644 --- a/test-suite/src/common_setup/setup_minter/base_minter/setup.rs +++ b/test-suite/src/common_setup/setup_minter/base_minter/setup.rs @@ -55,6 +55,7 @@ pub fn base_minter_sg721_collection_code_ids(router: &mut App) -> CodeIds { } // Upload contract code and instantiate minter contract +#[allow(deprecated)] pub fn setup_minter_contract(setup_params: MinterSetupParams) -> MinterCollectionResponse { let minter_code_id = setup_params.minter_code_id; let router = setup_params.router; diff --git a/test-suite/src/common_setup/setup_minter/open_edition_minter/setup.rs b/test-suite/src/common_setup/setup_minter/open_edition_minter/setup.rs index 488d13e49..073b63e8b 100644 --- a/test-suite/src/common_setup/setup_minter/open_edition_minter/setup.rs +++ b/test-suite/src/common_setup/setup_minter/open_edition_minter/setup.rs @@ -50,6 +50,7 @@ pub fn build_init_msg( } // Upload contract code and instantiate open edition minter contract +#[allow(deprecated)] pub fn setup_open_edition_minter_contract( setup_params: OpenEditionMinterSetupParams, ) -> MinterCollectionResponse { diff --git a/test-suite/src/common_setup/setup_minter/vending_minter/setup.rs b/test-suite/src/common_setup/setup_minter/vending_minter/setup.rs index a4884b789..9ad1d621d 100644 --- a/test-suite/src/common_setup/setup_minter/vending_minter/setup.rs +++ b/test-suite/src/common_setup/setup_minter/vending_minter/setup.rs @@ -36,6 +36,7 @@ pub fn build_init_msg( } // Upload contract code and instantiate minter contract +#[allow(deprecated)] pub fn setup_minter_contract(setup_params: MinterSetupParams) -> MinterCollectionResponse { let minter_code_id = setup_params.minter_code_id; let router = setup_params.router; diff --git a/test-suite/src/open_edition_minter/tests/frozen_factory.rs b/test-suite/src/open_edition_minter/tests/frozen_factory.rs index 8081a900a..a393b9f64 100644 --- a/test-suite/src/open_edition_minter/tests/frozen_factory.rs +++ b/test-suite/src/open_edition_minter/tests/frozen_factory.rs @@ -17,6 +17,7 @@ use crate::common_setup::setup_minter::open_edition_minter::mock_params::mock_cr use crate::common_setup::templates::open_edition_minter_custom_template; #[test] +#[allow(deprecated)] fn frozen_factory_cannot_create_new_minters() { let params_extension = ParamsExtension { max_token_limit: 10, diff --git a/test-suite/src/vending_minter/tests/allowed_code_ids.rs b/test-suite/src/vending_minter/tests/allowed_code_ids.rs index 3fa0f1389..2dd7779de 100644 --- a/test-suite/src/vending_minter/tests/allowed_code_ids.rs +++ b/test-suite/src/vending_minter/tests/allowed_code_ids.rs @@ -23,6 +23,7 @@ fn init() { } #[test] +#[allow(deprecated)] fn update_code_id() { let sg721_code_id = 7u64; diff --git a/test-suite/src/vending_minter/tests/frozen_factory.rs b/test-suite/src/vending_minter/tests/frozen_factory.rs index 9b2e6ec55..062ac6cd8 100644 --- a/test-suite/src/vending_minter/tests/frozen_factory.rs +++ b/test-suite/src/vending_minter/tests/frozen_factory.rs @@ -15,6 +15,7 @@ use vending_factory::msg::{ }; #[test] +#[allow(deprecated)] fn frozen_factory_cannot_create_new_minters() { let vt = vending_minter_template(2); let (mut router, creator, _) = (vt.router, vt.accts.creator, vt.accts.buyer); diff --git a/test-suite/src/vending_minter/tests/happy_unhappy.rs b/test-suite/src/vending_minter/tests/happy_unhappy.rs index 2dc368ae6..780bfcf7d 100644 --- a/test-suite/src/vending_minter/tests/happy_unhappy.rs +++ b/test-suite/src/vending_minter/tests/happy_unhappy.rs @@ -23,6 +23,7 @@ const ADMIN_MINT_PRICE: u128 = 0; const MAX_TOKEN_LIMIT: u32 = 10000; #[test] +#[allow(deprecated)] fn initialization() { let mut deps = mock_dependencies_with_balance(&coins(2, "token")); diff --git a/test-suite/src/vending_minter/tests/ibc_asset_mint.rs b/test-suite/src/vending_minter/tests/ibc_asset_mint.rs index 661605737..af988bc63 100644 --- a/test-suite/src/vending_minter/tests/ibc_asset_mint.rs +++ b/test-suite/src/vending_minter/tests/ibc_asset_mint.rs @@ -58,6 +58,7 @@ fn mint_with_ibc_asset() { } #[test] +#[allow(deprecated)] fn denom_mismatch_creating_minter() { // create factory w NATIVE_DENOM, then try creating a minter w different denom let denom = "ibc/asset"; @@ -133,6 +134,7 @@ fn wl_denom_mismatch() { } #[test] +#[allow(deprecated)] fn wl_denom_mint() { // create factory, minter, wl w custom denom, then try mint let denom = "ibc/asset"; diff --git a/test-suite/src/vending_minter/tests/trading_time.rs b/test-suite/src/vending_minter/tests/trading_time.rs index 57cca5325..655f163bc 100644 --- a/test-suite/src/vending_minter/tests/trading_time.rs +++ b/test-suite/src/vending_minter/tests/trading_time.rs @@ -9,6 +9,7 @@ use cosmwasm_std::{coins, Addr, Timestamp}; use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; +#[allow(deprecated)] use sg721_base::msg::{CollectionInfoResponse, QueryMsg as Sg721QueryMsg}; use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use vending_minter::msg::{ExecuteMsg, QueryMsg, StartTimeResponse}; @@ -228,6 +229,7 @@ fn invalid_trading_time_during_init() { ); } #[test] +#[allow(deprecated)] fn update_start_trading_time() { let mut router = custom_mock_app(); setup_block_time(&mut router, GENESIS_MINT_START_TIME - 1, None); diff --git a/test-suite/src/vending_minter/tests/trading_time_updatable.rs b/test-suite/src/vending_minter/tests/trading_time_updatable.rs index ac9dadf66..5f87ef8d0 100644 --- a/test-suite/src/vending_minter/tests/trading_time_updatable.rs +++ b/test-suite/src/vending_minter/tests/trading_time_updatable.rs @@ -11,6 +11,7 @@ use cosmwasm_std::{coins, Addr, Timestamp}; use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; +#[allow(deprecated)] use sg721_base::msg::{CollectionInfoResponse, QueryMsg as Sg721QueryMsg}; use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; use vending_minter::msg::{ExecuteMsg, QueryMsg, StartTimeResponse}; @@ -19,6 +20,7 @@ use vending_minter::ContractError; const MINT_PRICE: u128 = 100_000_000; #[test] +#[allow(deprecated)] fn before_start_time() { let vt: crate::common_setup::msg::MinterTemplateResponse = vending_minter_with_updatable_and_start_time( @@ -234,6 +236,7 @@ fn invalid_trading_time_during_init() { ); } #[test] +#[allow(deprecated)] fn update_start_trading_time() { let mut router = custom_mock_app(); setup_block_time(&mut router, GENESIS_MINT_START_TIME - 1, None); diff --git a/test-suite/src/vending_minter/tests/updatable.rs b/test-suite/src/vending_minter/tests/updatable.rs index 4a14ea2dc..6da98b30a 100644 --- a/test-suite/src/vending_minter/tests/updatable.rs +++ b/test-suite/src/vending_minter/tests/updatable.rs @@ -1,7 +1,6 @@ use cosmwasm_std::{coins, Empty}; use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; use cw721_base::msg::{Cw721QueryMsg, NftInfoResponse, TokensResponse}; -use cw721_base::Extension; use cw_multi_test::Executor; use sg721_updatable::msg::ExecuteMsg as Sg721UpdatableExecMsg; use sg_std::{GENESIS_MINT_START_TIME, NATIVE_DENOM}; @@ -61,7 +60,7 @@ fn update_token_metadata() { .unwrap(); assert_eq!(res.tokens[0], token_id); let query_token_msg = Cw721QueryMsg::::NftInfo { token_id }; - let res: NftInfoResponse = router + let res: NftInfoResponse = router .wrap() .query_wasm_smart(collection_addr, &query_token_msg) .unwrap(); diff --git a/test-suite/src/vending_minter/tests/zero_mint_price.rs b/test-suite/src/vending_minter/tests/zero_mint_price.rs index c1cd3f66d..db2dc954b 100644 --- a/test-suite/src/vending_minter/tests/zero_mint_price.rs +++ b/test-suite/src/vending_minter/tests/zero_mint_price.rs @@ -23,6 +23,7 @@ use vending_minter::msg::ExecuteMsg; const MINT_PRICE: u128 = 0; #[test] +#[allow(deprecated)] fn zero_mint_price() { let num_tokens = 2; let mut app = custom_mock_app(); @@ -113,6 +114,7 @@ fn zero_mint_price() { } #[test] +#[allow(deprecated)] fn zero_wl_mint_price() { let num_tokens = 2; let mut app = custom_mock_app(); @@ -209,6 +211,7 @@ fn zero_wl_mint_price() { } #[test] +#[allow(deprecated)] fn zero_wl_mint_errs_with_min_mint_factory() { let num_tokens = 2; let min_mint_price: u128 = 100_000_000; From cb9eb6aaaba1f682f2f025fada7a6cfe7ac20aa1 Mon Sep 17 00:00:00 2001 From: mr-t Date: Mon, 18 Mar 2024 19:56:54 +0100 Subject: [PATCH 10/24] cleanup --- .../collections/sg721-base/examples/schema.rs | 6 +-- .../collections/sg721-base/src/contract.rs | 4 +- contracts/collections/sg721-base/src/lib.rs | 8 +--- contracts/collections/sg721-base/src/msg.rs | 11 +++-- .../collections/sg721-nt/examples/schema.rs | 16 ++++--- contracts/collections/sg721-nt/src/lib.rs | 13 ++---- .../sg721-updatable/examples/schema.rs | 46 +++++++++++++------ .../sg721-updatable/src/contract.rs | 16 ++++--- .../collections/sg721-updatable/src/lib.rs | 13 ++++-- .../collections/sg721-updatable/src/msg.rs | 3 +- contracts/minters/base-minter/src/contract.rs | 23 +++++++--- .../open-edition-minter/src/contract.rs | 10 ++-- .../open-edition-minter/src/helpers.rs | 5 +- .../vending-minter-wl-flex/src/contract.rs | 5 +- packages/sg721/src/lib.rs | 26 ++++------- .../src/sg721_base/tests/integration_tests.rs | 28 +++++++++-- .../src/vending_minter/tests/address_limit.rs | 5 +- .../src/vending_minter/tests/happy_unhappy.rs | 5 +- .../src/vending_minter/tests/trading_time.rs | 5 +- .../tests/trading_time_updatable.rs | 5 +- .../src/vending_minter/tests/updatable.rs | 12 ++++- .../vending_minter/tests/zero_mint_price.rs | 5 +- 22 files changed, 169 insertions(+), 101 deletions(-) diff --git a/contracts/collections/sg721-base/examples/schema.rs b/contracts/collections/sg721-base/examples/schema.rs index 41e155f83..8916f2be1 100644 --- a/contracts/collections/sg721-base/examples/schema.rs +++ b/contracts/collections/sg721-base/examples/schema.rs @@ -3,8 +3,6 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; -use cosmwasm_std::Empty; - use cw721_base::{ msg::{ AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, MinterResponse, NftInfoResponse, @@ -36,7 +34,7 @@ fn main() { &out_dir, ); export_schema_with_title( - &schema_for!(AllNftInfoResponse), + &schema_for!(AllNftInfoResponse), &out_dir, "AllNftInfoResponse", ); @@ -55,7 +53,7 @@ fn main() { &out_dir, ); export_schema_with_title( - &schema_for!(NftInfoResponse), + &schema_for!(NftInfoResponse), &out_dir, "NftInfoResponse", ); diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index e7680da28..47daff3c2 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -8,8 +8,8 @@ use cw721_base::{ }; use cosmwasm_std::{ - to_json_binary, Addr, Binary, ContractInfoResponse, CustomMsg, Deps, DepsMut, Empty, - Env, Event, MessageInfo, Response, StdError, Storage, Timestamp, WasmQuery, + to_json_binary, Addr, Binary, ContractInfoResponse, CustomMsg, Deps, DepsMut, Empty, Env, + Event, MessageInfo, Response, StdError, Storage, Timestamp, WasmQuery, }; use cw721_base::{execute::Cw721Execute, query::Cw721Query}; diff --git a/contracts/collections/sg721-base/src/lib.rs b/contracts/collections/sg721-base/src/lib.rs index 8fb5e2831..492d72db4 100644 --- a/contracts/collections/sg721-base/src/lib.rs +++ b/contracts/collections/sg721-base/src/lib.rs @@ -6,12 +6,8 @@ pub mod upgrades; pub use crate::error::ContractError; pub use crate::state::Sg721Contract; -use cw721::{ - DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg, -}; -use cw721_base::{ - DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, -}; +use cw721::{DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg}; +use cw721_base::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; pub type ExecuteMsg = sg721::ExecuteMsg< DefaultOptionNftMetadataExtensionMsg, diff --git a/contracts/collections/sg721-base/src/msg.rs b/contracts/collections/sg721-base/src/msg.rs index 7e4842186..661b1f324 100644 --- a/contracts/collections/sg721-base/src/msg.rs +++ b/contracts/collections/sg721-base/src/msg.rs @@ -3,14 +3,15 @@ use cw721::traits::Cw721State; use cosmwasm_schema::cw_serde; use cosmwasm_schema::QueryResponses; -use cosmwasm_std::{coin, Addr, BankMsg, Empty, Event, StdError, StdResult, Timestamp, Uint128}; +use cosmwasm_std::{coin, Addr, BankMsg, Event, StdError, StdResult, Timestamp, Uint128}; use cw721_base::{ msg::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, MinterResponse, - NftInfoResponse, NumTokensResponse, OperatorsResponse, OwnerOfResponse, - QueryMsg as Cw721QueryMsg, TokensResponse, + AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, MinterResponse, NftInfoResponse, + NumTokensResponse, OperatorsResponse, OwnerOfResponse, QueryMsg as Cw721QueryMsg, + TokensResponse, }, state::CollectionMetadata, + DefaultOptionCollectionMetadataExtensionMsg, }; use cw_ownable::Ownership; use sg_std::{Response, SubMsg, NATIVE_DENOM}; @@ -63,7 +64,7 @@ pub enum QueryMsg< NumTokens {}, #[deprecated(since = "0.19.0", note = "Please use GetCollectionMetadata instead")] - #[returns(CollectionMetadata)] + #[returns(CollectionMetadata)] /// Deprecated: use GetCollectionMetadata instead! Will be removed in next release! ContractInfo {}, diff --git a/contracts/collections/sg721-nt/examples/schema.rs b/contracts/collections/sg721-nt/examples/schema.rs index bf80b1c31..dc3f0f21a 100644 --- a/contracts/collections/sg721-nt/examples/schema.rs +++ b/contracts/collections/sg721-nt/examples/schema.rs @@ -3,9 +3,10 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; -use cosmwasm_std::Empty; - -use cw721::{state::CollectionMetadata, DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721::{ + state::CollectionMetadata, DefaultOptionCollectionMetadataExtension, + DefaultOptionNftMetadataExtension, +}; #[allow(deprecated)] use cw721_base::{ msg::{ @@ -33,7 +34,7 @@ fn main() { &out_dir, ); export_schema_with_title( - &schema_for!(AllNftInfoResponse), + &schema_for!(AllNftInfoResponse), &out_dir, "AllNftInfoResponse", ); @@ -49,9 +50,12 @@ fn main() { export_schema(&schema_for!(OperatorsResponse), &out_dir); #[allow(deprecated)] export_schema(&schema_for!(ContractInfoResponse), &out_dir); - export_schema(&schema_for!(CollectionMetadata), &out_dir); + export_schema( + &schema_for!(CollectionMetadata), + &out_dir, + ); export_schema_with_title( - &schema_for!(NftInfoResponse), + &schema_for!(NftInfoResponse), &out_dir, "NftInfoResponse", ); diff --git a/contracts/collections/sg721-nt/src/lib.rs b/contracts/collections/sg721-nt/src/lib.rs index d2de4a768..385ec03db 100644 --- a/contracts/collections/sg721-nt/src/lib.rs +++ b/contracts/collections/sg721-nt/src/lib.rs @@ -35,9 +35,7 @@ pub mod entry { use super::*; use crate::msg::ExecuteMsg; - use cosmwasm_std::{ - Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdError, - }; + use cosmwasm_std::{Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdError}; use cw721::msg::Cw721MigrateMsg; use cw721_base::execute::Cw721Execute; use sg721_base::ContractError; @@ -82,13 +80,8 @@ pub mod entry { token_uri, extension, }; - Sg721NonTransferableContract::default().mint( - deps, - env, - info, - nft_data, - ) - }, + Sg721NonTransferableContract::default().mint(deps, env, info, nft_data) + } ExecuteMsg::UpdateCollectionInfo { new_collection_info, } => Sg721NonTransferableContract::default().update_collection_info( diff --git a/contracts/collections/sg721-updatable/examples/schema.rs b/contracts/collections/sg721-updatable/examples/schema.rs index e9e52254b..775d8d7c4 100644 --- a/contracts/collections/sg721-updatable/examples/schema.rs +++ b/contracts/collections/sg721-updatable/examples/schema.rs @@ -3,13 +3,18 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; -use cosmwasm_std::Empty; -use cw721::{state::CollectionMetadata, CollectionMetadataExtension, DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, RoyaltyInfo}; +use cw721::{ + state::CollectionMetadata, CollectionMetadataExtension, + DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, RoyaltyInfo, +}; #[allow(deprecated)] -pub use cw721_base::{ContractInfoResponse,msg::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, NftInfoResponse, - NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, MinterResponse -}}; +pub use cw721_base::{ + msg::{ + AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, MinterResponse, NftInfoResponse, + NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, + }, + ContractInfoResponse, +}; use sg721::InstantiateMsg; #[allow(deprecated)] pub use sg721_base::msg::CollectionInfoResponse; @@ -23,16 +28,24 @@ fn main() { remove_schemas(&out_dir).unwrap(); export_schema(&schema_for!(InstantiateMsg), &out_dir); - export_schema(&schema_for!(ExecuteMsg), &out_dir); - export_schema(&schema_for!(QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, - >), &out_dir); + export_schema( + &schema_for!(ExecuteMsg), + &out_dir, + ); + export_schema( + &schema_for!( + QueryMsg:: + ), + &out_dir, + ); #[allow(deprecated)] export_schema(&schema_for!(CollectionInfoResponse), &out_dir); - export_schema(&schema_for!(CollectionMetadata>), &out_dir); + export_schema( + &schema_for!(CollectionMetadata>), + &out_dir, + ); export_schema_with_title( - &schema_for!(AllNftInfoResponse), + &schema_for!(AllNftInfoResponse), &out_dir, "AllNftInfoResponse", ); @@ -47,9 +60,12 @@ fn main() { export_schema(&schema_for!(ApprovalsResponse), &out_dir); #[allow(deprecated)] export_schema(&schema_for!(ContractInfoResponse), &out_dir); - export_schema(&schema_for!(CollectionMetadata), &out_dir); + export_schema( + &schema_for!(CollectionMetadata), + &out_dir, + ); export_schema_with_title( - &schema_for!(NftInfoResponse), + &schema_for!(NftInfoResponse), &out_dir, "NftInfoResponse", ); diff --git a/contracts/collections/sg721-updatable/src/contract.rs b/contracts/collections/sg721-updatable/src/contract.rs index 0c74a0aee..8504fb48f 100644 --- a/contracts/collections/sg721-updatable/src/contract.rs +++ b/contracts/collections/sg721-updatable/src/contract.rs @@ -139,17 +139,16 @@ pub fn execute_update_token_metadata( } // Update token metadata - Sg721UpdatableContract::default().config.nft_info.update( - deps.storage, - &token_id, - |token| match token { + Sg721UpdatableContract::default() + .config + .nft_info + .update(deps.storage, &token_id, |token| match token { Some(mut token_info) => { token_info.token_uri = token_uri.clone(); Ok(token_info) } None => Err(ContractError::TokenIdNotFound {}), - }, - )?; + })?; let mut event = Event::new("update_update_token_metadata") .add_attribute("sender", info.sender) @@ -375,7 +374,10 @@ mod tests { assert_eq!(res.token_uri, updated_token_uri); // Update token metadata with None token_uri - let update_msg = ExecuteMsg::::UpdateTokenMetadata { + let update_msg = ExecuteMsg::< + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtensionMsg, + >::UpdateTokenMetadata { token_id: token_id.to_string(), token_uri: None, }; diff --git a/contracts/collections/sg721-updatable/src/lib.rs b/contracts/collections/sg721-updatable/src/lib.rs index 10d500e14..9243106fa 100644 --- a/contracts/collections/sg721-updatable/src/lib.rs +++ b/contracts/collections/sg721-updatable/src/lib.rs @@ -20,7 +20,9 @@ pub mod entry { }; use cosmwasm_std::{entry_point, to_json_binary, Empty}; use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response}; - use cw721::{DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg}; + use cw721::{ + DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg, + }; #[entry_point] pub fn instantiate( @@ -37,7 +39,10 @@ pub mod entry { deps: DepsMut, env: Env, info: MessageInfo, - msg: ExecuteMsg, + msg: ExecuteMsg< + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtensionMsg, + >, ) -> Result { match msg { ExecuteMsg::FreezeTokenMetadata {} => execute_freeze_token_metadata(deps, env, info), @@ -57,7 +62,9 @@ pub mod entry { match msg { QueryMsg::EnableUpdatable {} => Ok(to_json_binary(&query_enable_updatable(deps)?)?), QueryMsg::EnableUpdatableFee {} => Ok(to_json_binary(&query_enable_updatable_fee()?)?), - QueryMsg::FreezeTokenMetadata {} => Ok(to_json_binary(&query_frozen_token_metadata(deps)?)?), + QueryMsg::FreezeTokenMetadata {} => { + Ok(to_json_binary(&query_frozen_token_metadata(deps)?)?) + } _ => Ok(Sg721UpdatableContract::default().query(deps, env, msg.into())?), } } diff --git a/contracts/collections/sg721-updatable/src/msg.rs b/contracts/collections/sg721-updatable/src/msg.rs index aba6e2bfb..4cdd17555 100644 --- a/contracts/collections/sg721-updatable/src/msg.rs +++ b/contracts/collections/sg721-updatable/src/msg.rs @@ -116,7 +116,8 @@ where } ExecuteMsg::RevokeAll { operator } => Sg721ExecuteMsg::RevokeAll { operator }, ExecuteMsg::Burn { token_id } => Sg721ExecuteMsg::Burn { token_id }, - ExecuteMsg::UpdateCollectionInfo { collection_info } => { + ExecuteMsg::UpdateCollectionInfo { collection_info } => + { #[allow(deprecated)] Sg721ExecuteMsg::UpdateCollectionInfo { collection_info } } diff --git a/contracts/minters/base-minter/src/contract.rs b/contracts/minters/base-minter/src/contract.rs index 752f7ec8a..e50862a03 100644 --- a/contracts/minters/base-minter/src/contract.rs +++ b/contracts/minters/base-minter/src/contract.rs @@ -2,7 +2,6 @@ use crate::error::ContractError; use crate::msg::{ConfigResponse, ExecuteMsg}; use crate::state::{increment_token_index, Config, COLLECTION_ADDRESS, CONFIG, STATUS}; use base_factory::msg::{BaseMinterCreateMsg, ParamsResponse}; -use base_factory::state::Extension; #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ @@ -10,7 +9,10 @@ use cosmwasm_std::{ Reply, Response, StdResult, SubMsg, Timestamp, WasmMsg, }; use cw2::set_contract_version; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721::{ + DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, +}; use cw_utils::{must_pay, nonpayable, parse_reply_instantiate_data}; use sg1::checked_fair_burn; use sg2::query::Sg2QueryMsg; @@ -159,7 +161,10 @@ pub fn execute_mint_sender( checked_fair_burn(&info, network_fee.u128(), None, &mut res)?; // Create mint msgs - let mint_msg = Sg721ExecuteMsg::::Mint { + let mint_msg = Sg721ExecuteMsg::< + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtensionMsg, + >::Mint { token_id: increment_token_index(deps.storage)?.to_string(), owner: info.sender.to_string(), token_uri: Some(token_uri.clone()), @@ -191,7 +196,10 @@ pub fn execute_update_start_trading_time( let collection_info: CollectionInfoResponse = deps.querier.query_wasm_smart( sg721_contract_addr.clone(), - &Sg721QueryMsg::::CollectionInfo {}, + &Sg721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, )?; if info.sender != collection_info.creator { return Err(ContractError::Unauthorized( @@ -212,9 +220,10 @@ pub fn execute_update_start_trading_time( // execute sg721 contract let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), - msg: to_json_binary( - &Sg721ExecuteMsg::::UpdateStartTradingTime(start_time), - )?, + msg: to_json_binary(&Sg721ExecuteMsg::< + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtensionMsg, + >::UpdateStartTradingTime(start_time))?, funds: vec![], }; diff --git a/contracts/minters/open-edition-minter/src/contract.rs b/contracts/minters/open-edition-minter/src/contract.rs index cb43aaac3..ad54b8786 100644 --- a/contracts/minters/open-edition-minter/src/contract.rs +++ b/contracts/minters/open-edition-minter/src/contract.rs @@ -15,6 +15,9 @@ use cosmwasm_std::{ MessageInfo, Order, Reply, ReplyOn, Response, StdError, StdResult, SubMsg, Timestamp, WasmMsg, }; use cw2::set_contract_version; +use cw721_base::{ + DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg, +}; use cw_utils::{may_pay, maybe_addr, nonpayable, parse_reply_instantiate_data}; use open_edition_factory::msg::{OpenEditionMinterCreateMsg, ParamsResponse}; use open_edition_factory::types::NftMetadataType; @@ -600,9 +603,10 @@ pub fn execute_update_start_trading_time( // execute sg721 contract let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), - msg: to_json_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( - start_time, - ))?, + msg: to_json_binary(&Sg721ExecuteMsg::< + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtensionMsg, + >::UpdateStartTradingTime(start_time))?, funds: vec![], }; diff --git a/contracts/minters/open-edition-minter/src/helpers.rs b/contracts/minters/open-edition-minter/src/helpers.rs index 39bb54ed3..302bf084d 100644 --- a/contracts/minters/open-edition-minter/src/helpers.rs +++ b/contracts/minters/open-edition-minter/src/helpers.rs @@ -84,7 +84,10 @@ pub fn mint_nft_msg( } else { CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: sg721_address.to_string(), - msg: to_json_binary(&Sg721ExecuteMsg::::Mint { + msg: to_json_binary(&Sg721ExecuteMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Mint { token_id, owner: recipient_addr.to_string(), token_uri, diff --git a/contracts/minters/vending-minter-wl-flex/src/contract.rs b/contracts/minters/vending-minter-wl-flex/src/contract.rs index aead8fbf8..b6ab4cd73 100644 --- a/contracts/minters/vending-minter-wl-flex/src/contract.rs +++ b/contracts/minters/vending-minter-wl-flex/src/contract.rs @@ -674,7 +674,10 @@ fn _execute_mint( }; // Create mint msgs - let mint_msg = Sg721ExecuteMsg::::Mint { + let mint_msg = Sg721ExecuteMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Mint { token_id: mintable_token_mapping.token_id.to_string(), owner: recipient_addr.to_string(), token_uri: Some(format!( diff --git a/packages/sg721/src/lib.rs b/packages/sg721/src/lib.rs index 8e74f8014..cf47625d8 100644 --- a/packages/sg721/src/lib.rs +++ b/packages/sg721/src/lib.rs @@ -2,7 +2,8 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{Binary, Coin, Timestamp}; use cw721_base::{ msg::{ - CollectionMetadataExtensionMsg, CollectionMetadataMsg, ExecuteMsg as Cw721ExecuteMsg, InstantiateMsg as Cw721InstantiateMsg + CollectionMetadataExtensionMsg, CollectionMetadataMsg, ExecuteMsg as Cw721ExecuteMsg, + InstantiateMsg as Cw721InstantiateMsg, }, DefaultOptionCollectionMetadataExtensionMsg, }; @@ -124,24 +125,11 @@ pub enum ExecuteMsg< } impl - From< - ExecuteMsg< - TNftMetadataExtensionMsg, - TCollectionMetadataExtensionMsg, - >, - > - for Cw721ExecuteMsg< - TNftMetadataExtensionMsg, - TCollectionMetadataExtensionMsg, - > + From> + for Cw721ExecuteMsg { #[allow(deprecated)] - fn from( - msg: ExecuteMsg< - TNftMetadataExtensionMsg, - TCollectionMetadataExtensionMsg, - >, - ) -> Self { + fn from(msg: ExecuteMsg) -> Self { match msg { // ---- sg721 msgs ---- ExecuteMsg::UpdateCollectionInfo { collection_info: _ } => { @@ -264,7 +252,9 @@ pub struct UpdateCollectionInfoMsg { } #[allow(deprecated)] -impl From> for CollectionMetadataExtensionMsg { +impl From> + for CollectionMetadataExtensionMsg +{ fn from(msg: UpdateCollectionInfoMsg) -> Self { CollectionMetadataExtensionMsg { description: msg.description, diff --git a/test-suite/src/sg721_base/tests/integration_tests.rs b/test-suite/src/sg721_base/tests/integration_tests.rs index f14202981..4d4730bd5 100644 --- a/test-suite/src/sg721_base/tests/integration_tests.rs +++ b/test-suite/src/sg721_base/tests/integration_tests.rs @@ -549,7 +549,7 @@ mod tests { &QueryMsg::< DefaultOptionNftMetadataExtension, DefaultOptionCollectionMetadataExtension, - >::GetCreatorOwnership { }, + >::GetCreatorOwnership {}, ) .unwrap(); assert_eq!(res.owner, Some(creator.clone())); @@ -596,7 +596,10 @@ mod tests { use crate::common_setup::setup_minter::vending_minter::mock_params::mock_create_minter_init_msg; use cosmwasm_std::{Decimal, Response, Uint128}; - use cw721::{state::MAX_ROYALTY_SHARE_PCT, DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; + use cw721::{ + state::MAX_ROYALTY_SHARE_PCT, DefaultOptionCollectionMetadataExtension, + DefaultOptionNftMetadataExtension, + }; use sg2::msg::CollectionParams; use sg721::RoyaltyInfoResponse; use sg721_base::msg::{CollectionInfoResponse, QueryMsg}; @@ -871,7 +874,13 @@ mod tests { &[], ); // get attribute with key "pending_owner" - let attribute_minter_owner_response = res.unwrap().events[1].clone().attributes.iter().find(|x| x.key == "pending_owner").expect("pending_owner not found").clone(); + let attribute_minter_owner_response = res.unwrap().events[1] + .clone() + .attributes + .iter() + .find(|x| x.key == "pending_owner") + .expect("pending_owner not found") + .clone(); let expected_attribute = Attribute { key: "pending_owner".to_string(), value: "new_owner".to_string(), @@ -899,12 +908,21 @@ mod tests { &accept_ownership_msg, &[], ); - let attribute_minter_owner_response = res.unwrap().events[1].clone().attributes.iter().find(|x| x.key == "pending_owner").expect("pending_owner not found").clone(); + let attribute_minter_owner_response = res.unwrap().events[1] + .clone() + .attributes + .iter() + .find(|x| x.key == "pending_owner") + .expect("pending_owner not found") + .clone(); let expected_pending_owner_response = Attribute { key: "pending_owner".to_string(), value: "none".to_string(), }; - assert_eq!(attribute_minter_owner_response, expected_pending_owner_response); + assert_eq!( + attribute_minter_owner_response, + expected_pending_owner_response + ); let res: cw_ownable::Ownership = app .wrap() diff --git a/test-suite/src/vending_minter/tests/address_limit.rs b/test-suite/src/vending_minter/tests/address_limit.rs index 9d4deb795..628c90de7 100644 --- a/test-suite/src/vending_minter/tests/address_limit.rs +++ b/test-suite/src/vending_minter/tests/address_limit.rs @@ -464,7 +464,10 @@ fn mint_for_token_id_addr() { .wrap() .query_wasm_smart( collection_addr, - &Cw721QueryMsg::::OwnerOf { + &Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::OwnerOf { token_id: 2.to_string(), include_expired: None, }, diff --git a/test-suite/src/vending_minter/tests/happy_unhappy.rs b/test-suite/src/vending_minter/tests/happy_unhappy.rs index 780bfcf7d..93c373507 100644 --- a/test-suite/src/vending_minter/tests/happy_unhappy.rs +++ b/test-suite/src/vending_minter/tests/happy_unhappy.rs @@ -213,7 +213,10 @@ fn happy_path() { assert_eq!(0, minter_balance.len()); // Check that NFT is transferred - let query_owner_msg = Cw721QueryMsg::::OwnerOf { + let query_owner_msg = Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::OwnerOf { token_id: String::from("1"), include_expired: None, }; diff --git a/test-suite/src/vending_minter/tests/trading_time.rs b/test-suite/src/vending_minter/tests/trading_time.rs index 655f163bc..eda6e6707 100644 --- a/test-suite/src/vending_minter/tests/trading_time.rs +++ b/test-suite/src/vending_minter/tests/trading_time.rs @@ -284,7 +284,10 @@ fn update_start_trading_time() { .wrap() .query_wasm_smart( collection_addr.to_string(), - &Sg721QueryMsg::::CollectionInfo {}, + &Sg721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, ) .unwrap(); diff --git a/test-suite/src/vending_minter/tests/trading_time_updatable.rs b/test-suite/src/vending_minter/tests/trading_time_updatable.rs index 5f87ef8d0..3d5d3ff12 100644 --- a/test-suite/src/vending_minter/tests/trading_time_updatable.rs +++ b/test-suite/src/vending_minter/tests/trading_time_updatable.rs @@ -291,7 +291,10 @@ fn update_start_trading_time() { .wrap() .query_wasm_smart( collection_addr.to_string(), - &Sg721QueryMsg::::CollectionInfo {}, + &Sg721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::CollectionInfo {}, ) .unwrap(); diff --git a/test-suite/src/vending_minter/tests/updatable.rs b/test-suite/src/vending_minter/tests/updatable.rs index 6da98b30a..0e61f2cec 100644 --- a/test-suite/src/vending_minter/tests/updatable.rs +++ b/test-suite/src/vending_minter/tests/updatable.rs @@ -33,7 +33,10 @@ fn update_token_metadata() { assert!(res.is_ok()); // query buyer token_id - let query_tokens_msg = Cw721QueryMsg::::Tokens { + let query_tokens_msg = Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Tokens { owner: buyer.to_string(), start_after: None, limit: None, @@ -59,7 +62,12 @@ fn update_token_metadata() { .query_wasm_smart(collection_addr.clone(), &query_tokens_msg) .unwrap(); assert_eq!(res.tokens[0], token_id); - let query_token_msg = Cw721QueryMsg::::NftInfo { token_id }; + let query_token_msg = Cw721QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::NftInfo { + token_id, + }; let res: NftInfoResponse = router .wrap() .query_wasm_smart(collection_addr, &query_token_msg) diff --git a/test-suite/src/vending_minter/tests/zero_mint_price.rs b/test-suite/src/vending_minter/tests/zero_mint_price.rs index db2dc954b..eafa10caf 100644 --- a/test-suite/src/vending_minter/tests/zero_mint_price.rs +++ b/test-suite/src/vending_minter/tests/zero_mint_price.rs @@ -103,7 +103,10 @@ fn zero_mint_price() { .wrap() .query_wasm_smart( sg721, - &sg721_base::msg::QueryMsg::::Tokens { + &sg721_base::msg::QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::Tokens { owner: buyer.to_string(), start_after: None, limit: None, From c2ffe15894c3aa09cc987b01fbb601183fd3eea0 Mon Sep 17 00:00:00 2001 From: mr-t Date: Tue, 19 Mar 2024 15:26:35 +0100 Subject: [PATCH 11/24] migrating is always possible, no version check needed --- .../collections/sg721-base/src/contract.rs | 21 ++++++------- .../sg721-base/src/upgrades/mod.rs | 4 +-- .../upgrades/{v3_0_0.rs => v3_0_0_ownable.rs} | 31 +++++++++++-------- ...{v3_1_0.rs => v3_1_0_royalty_timestamp.rs} | 26 +++++----------- .../sg721-updatable/src/contract.rs | 20 ++++++------ .../collections/sg721-updatable/src/lib.rs | 7 ++++- 6 files changed, 53 insertions(+), 56 deletions(-) rename contracts/collections/sg721-base/src/upgrades/{v3_0_0.rs => v3_0_0_ownable.rs} (52%) rename contracts/collections/sg721-base/src/upgrades/{v3_1_0.rs => v3_1_0_royalty_timestamp.rs} (65%) diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index 47daff3c2..d471a851c 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -1,4 +1,4 @@ -use cw721::msg::CollectionMetadataMsg; +use cw721::msg::{CollectionMetadataMsg, Cw721MigrateMsg}; use cw721::state::{MAX_COLLECTION_DESCRIPTION_LENGTH, MINTER}; use cw721::traits::{Cw721CustomMsg, Cw721State}; use cw721_base::msg::{CollectionMetadataExtensionMsg, RoyaltyInfoResponse}; @@ -274,7 +274,11 @@ where Ok(collection_info) } - pub fn migrate(mut deps: DepsMut, env: Env, _msg: Empty) -> Result { + pub fn migrate( + mut deps: DepsMut, + env: Env, + msg: Cw721MigrateMsg, + ) -> Result { let prev_contract_version = cw2::get_contract_version(deps.storage)?; let valid_contract_names = vec![CONTRACT_NAME.to_string()]; @@ -289,15 +293,10 @@ where let mut response = Response::new(); - #[allow(clippy::cmp_owned)] - if prev_contract_version.version < "3.0.0".to_string() { - response = crate::upgrades::v3_0_0::upgrade(deps.branch(), &env, response)?; - } - - #[allow(clippy::cmp_owned)] - if prev_contract_version.version < "3.1.0".to_string() { - response = crate::upgrades::v3_1_0::upgrade(deps.branch(), &env, response)?; - } + // these upgrades can always be called. migration is only executed in case new stores are empty! It is safe calling these on any version. + response = crate::upgrades::v3_0_0_ownable::upgrade(deps.branch(), &env, response, msg)?; + response = + crate::upgrades::v3_1_0_royalty_timestamp::upgrade(deps.branch(), &env, response)?; cw2::set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; diff --git a/contracts/collections/sg721-base/src/upgrades/mod.rs b/contracts/collections/sg721-base/src/upgrades/mod.rs index 63b702401..4fdfdd640 100644 --- a/contracts/collections/sg721-base/src/upgrades/mod.rs +++ b/contracts/collections/sg721-base/src/upgrades/mod.rs @@ -1,2 +1,2 @@ -pub mod v3_0_0; -pub mod v3_1_0; +pub mod v3_0_0_ownable; +pub mod v3_1_0_royalty_timestamp; diff --git a/contracts/collections/sg721-base/src/upgrades/v3_0_0.rs b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable.rs similarity index 52% rename from contracts/collections/sg721-base/src/upgrades/v3_0_0.rs rename to contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable.rs index c43e06815..358076eda 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_0_0.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable.rs @@ -11,7 +11,22 @@ use cw721::{ }; use cw721_base::execute::Cw721Execute; -pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result { +/// Migrates cw721 states: +/// (1) legacy creator and minter migration, now using cw-ownable +/// - v0.15 and v0.16: dedicated minter store +/// - v0.17 and v0.18: minter stored using cw-ownable +/// (2) legacy contract info migration -> collection metadata +/// - before v0.19 there was only contract info +/// - now we have collection metadata with optional extension +/// (3) optional creator and minter reset (as passed in Cw721MigrateMsg::WithUpdate) +/// +/// Note: migration is only executed in case new stores are empty! It is safe calling these on any version. +pub fn upgrade( + deps: DepsMut, + env: &Env, + response: Response, + msg: Cw721MigrateMsg, +) -> Result { let contract = Sg721Contract::< DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, @@ -19,20 +34,10 @@ pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result::default(); - let migrate_msg = Cw721MigrateMsg::WithUpdate { - minter: None, - creator: None, - }; - // cw721 migration allows all versions: 0.18. 0.17, 0.16 and older + // cw721 migration covers these versions: 0.18. 0.17, 0.16 and 0.15 let cw721_res = contract .parent - .migrate( - deps, - env.clone(), - migrate_msg, - CONTRACT_NAME, - CONTRACT_VERSION, - ) + .migrate(deps, env.clone(), msg, CONTRACT_NAME, CONTRACT_VERSION) .map_err(|e| ContractError::MigrationError(e.to_string()))?; let mut event = Event::new("migrate-3.0.0"); diff --git a/contracts/collections/sg721-base/src/upgrades/v3_1_0.rs b/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs similarity index 65% rename from contracts/collections/sg721-base/src/upgrades/v3_1_0.rs rename to contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs index 77c65cbb9..faccb7eed 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_1_0.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs @@ -19,31 +19,19 @@ pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result::default(); + // check whether royalty timestamp already exists + let royalty_updated_at = contract.royalty_updated_at.may_load(deps.storage)?; + if let Some(_) = royalty_updated_at { + // already migrated + return Ok(response); + } let royalty_updated_at = env.block.time.minus_seconds(60 * 60 * 24); // 24 hours ago contract .royalty_updated_at .save(deps.storage, &royalty_updated_at)?; - let migrate_msg = Cw721MigrateMsg::WithUpdate { - minter: None, - creator: None, - }; - // cw721 migration allows all versions: 0.18. 0.17, 0.16 and older - let cw721_res = contract - .parent - .migrate( - deps, - env.clone(), - migrate_msg, - CONTRACT_NAME, - CONTRACT_VERSION, - ) - .map_err(|e| ContractError::MigrationError(e.to_string()))?; - - let mut event = Event::new("migrate-3.1.0") + let event = Event::new("migrate-3.1.0") .add_attribute("royalty-updated", royalty_updated_at.to_string()); - event = event.add_attributes(cw721_res.attributes); - Ok(response.add_event(event)) } diff --git a/contracts/collections/sg721-updatable/src/contract.rs b/contracts/collections/sg721-updatable/src/contract.rs index 8504fb48f..ba840d86c 100644 --- a/contracts/collections/sg721-updatable/src/contract.rs +++ b/contracts/collections/sg721-updatable/src/contract.rs @@ -7,6 +7,7 @@ use cosmwasm_std::{Deps, StdResult}; #[cfg(not(feature = "library"))] use cosmwasm_std::{DepsMut, Env, Event, MessageInfo}; use cw2::set_contract_version; +use cw721::msg::Cw721MigrateMsg; use cw721::{ DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, @@ -173,7 +174,11 @@ pub fn query_frozen_token_metadata(deps: Deps) -> StdResult Result { +pub fn _migrate( + mut deps: DepsMut, + env: Env, + msg: Cw721MigrateMsg, +) -> Result { let prev_contract_info = cw2::get_contract_version(deps.storage)?; let prev_contract_name: String = prev_contract_info.contract; let prev_contract_version: Version = prev_contract_info @@ -216,15 +221,10 @@ pub fn _migrate(mut deps: DepsMut, env: Env, _msg: Empty) -> Result Result { + pub fn migrate( + deps: DepsMut, + env: Env, + msg: Cw721MigrateMsg, + ) -> Result { _migrate(deps, env, msg) } } From 3d71f983db358ded82cc0a8e8b66f8f77fb8dae9 Mon Sep 17 00:00:00 2001 From: mr-t Date: Tue, 19 Mar 2024 15:46:16 +0100 Subject: [PATCH 12/24] remove redundant contract name and version migration --- contracts/collections/sg721-base/src/contract.rs | 2 -- contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable.rs | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index d471a851c..6e7e8fcb3 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -298,8 +298,6 @@ where response = crate::upgrades::v3_1_0_royalty_timestamp::upgrade(deps.branch(), &env, response)?; - cw2::set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; - response = response.add_event( Event::new("migrate") .add_attribute("from_name", prev_contract_version.contract) diff --git a/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable.rs b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable.rs index 358076eda..bb5c968de 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable.rs @@ -19,6 +19,7 @@ use cw721_base::execute::Cw721Execute; /// - before v0.19 there was only contract info /// - now we have collection metadata with optional extension /// (3) optional creator and minter reset (as passed in Cw721MigrateMsg::WithUpdate) +/// (4) contract name and version /// /// Note: migration is only executed in case new stores are empty! It is safe calling these on any version. pub fn upgrade( From abd5cf1eeea7dcd4698a19c7bd9e4d784d8899bd Mon Sep 17 00:00:00 2001 From: mr-t Date: Tue, 19 Mar 2024 15:48:33 +0100 Subject: [PATCH 13/24] rename --- contracts/collections/sg721-base/src/contract.rs | 7 ++++++- contracts/collections/sg721-base/src/upgrades/mod.rs | 2 +- ...wnable.rs => v3_0_0_ownable_and_collection_metadata.rs} | 0 contracts/collections/sg721-updatable/src/contract.rs | 7 ++++++- 4 files changed, 13 insertions(+), 3 deletions(-) rename contracts/collections/sg721-base/src/upgrades/{v3_0_0_ownable.rs => v3_0_0_ownable_and_collection_metadata.rs} (100%) diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index 6e7e8fcb3..b5947821b 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -294,7 +294,12 @@ where let mut response = Response::new(); // these upgrades can always be called. migration is only executed in case new stores are empty! It is safe calling these on any version. - response = crate::upgrades::v3_0_0_ownable::upgrade(deps.branch(), &env, response, msg)?; + response = crate::upgrades::v3_0_0_ownable_and_collection_metadata::upgrade( + deps.branch(), + &env, + response, + msg, + )?; response = crate::upgrades::v3_1_0_royalty_timestamp::upgrade(deps.branch(), &env, response)?; diff --git a/contracts/collections/sg721-base/src/upgrades/mod.rs b/contracts/collections/sg721-base/src/upgrades/mod.rs index 4fdfdd640..f94441bb9 100644 --- a/contracts/collections/sg721-base/src/upgrades/mod.rs +++ b/contracts/collections/sg721-base/src/upgrades/mod.rs @@ -1,2 +1,2 @@ -pub mod v3_0_0_ownable; +pub mod v3_0_0_ownable_and_collection_metadata; pub mod v3_1_0_royalty_timestamp; diff --git a/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable.rs b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs similarity index 100% rename from contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable.rs rename to contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs diff --git a/contracts/collections/sg721-updatable/src/contract.rs b/contracts/collections/sg721-updatable/src/contract.rs index ba840d86c..fc283b984 100644 --- a/contracts/collections/sg721-updatable/src/contract.rs +++ b/contracts/collections/sg721-updatable/src/contract.rs @@ -222,7 +222,12 @@ pub fn _migrate( let mut response = Response::new(); // these upgrades can always be called. migration is only executed in case new stores are empty! It is safe calling these on any version. - response = sg721_base::upgrades::v3_0_0_ownable::upgrade(deps.branch(), &env, response, msg)?; + response = sg721_base::upgrades::v3_0_0_ownable_and_collection_metadata::upgrade( + deps.branch(), + &env, + response, + msg, + )?; response = sg721_base::upgrades::v3_1_0_royalty_timestamp::upgrade(deps.branch(), &env, response)?; From ee316f2987942093fd825df95ab86221981a1ffe Mon Sep 17 00:00:00 2001 From: mr-t Date: Tue, 19 Mar 2024 15:55:42 +0100 Subject: [PATCH 14/24] cleanup --- .../v3_0_0_ownable_and_collection_metadata.rs | 1 + .../src/upgrades/v3_1_0_royalty_timestamp.rs | 11 +++-------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs index bb5c968de..eb4315775 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs @@ -18,6 +18,7 @@ use cw721_base::execute::Cw721Execute; /// (2) legacy contract info migration -> collection metadata /// - before v0.19 there was only contract info /// - now we have collection metadata with optional extension +/// - here it is migrated to the new format with empty extension /// (3) optional creator and minter reset (as passed in Cw721MigrateMsg::WithUpdate) /// (4) contract name and version /// diff --git a/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs b/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs index faccb7eed..878740ea7 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs @@ -1,14 +1,9 @@ -use crate::{ - entry::{CONTRACT_NAME, CONTRACT_VERSION}, - ContractError, Sg721Contract, -}; -use cw721_base::execute::Cw721Execute; +use crate::{ContractError, Sg721Contract}; use cosmwasm_std::{DepsMut, Empty, Env, Event, Response}; use cw721::{ - msg::Cw721MigrateMsg, DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, }; pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result { From d073690b5b09316a9fa1301233baf01b7cbdaa3a Mon Sep 17 00:00:00 2001 From: mr-t Date: Wed, 20 Mar 2024 22:18:06 +0100 Subject: [PATCH 15/24] migrate collection info (sg721) to collection metadata (cw721) --- Cargo.lock | 455 ++++++++++++++---- Cargo.toml | 7 + .../collections/sg721-base/src/contract.rs | 10 +- contracts/collections/sg721-base/src/lib.rs | 17 + .../sg721-base/src/upgrades/mod.rs | 1 + .../src/upgrades/v3_1_0_royalty_timestamp.rs | 2 +- .../upgrades/v3_8_0_collection_metadata.rs | 57 +++ .../collections/sg721-updatable/src/lib.rs | 2 +- packages/sg2/Cargo.toml | 22 +- packages/sg2/src/tests.rs | 22 + test-suite/Cargo.toml | 72 +-- test-suite/src/common_setup/contract_boxes.rs | 36 +- .../vending_minter/mock_params.rs | 53 ++ .../src/sg721_base/tests/integration_tests.rs | 145 +++++- 14 files changed, 743 insertions(+), 158 deletions(-) create mode 100644 contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs diff --git a/Cargo.lock b/Cargo.lock index 570128309..001c5be29 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -41,9 +41,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -158,7 +158,7 @@ dependencies = [ "futures-lite 2.3.0", "parking", "polling 3.5.0", - "rustix 0.38.31", + "rustix 0.38.32", "slab", "tracing", "windows-sys 0.52.0", @@ -355,8 +355,26 @@ dependencies = [ "schemars", "serde", "sg-std", - "sg1", - "sg2", + "sg1 3.5.0", + "sg2 3.5.0", + "thiserror", +] + +[[package]] +name = "base-factory" +version = "3.5.0" +source = "git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db#b584245bcc7ff07d9b384df1ccc4e3e2466d92db" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", + "schemars", + "serde", + "sg-std", + "sg1 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "sg2 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", "thiserror", ] @@ -364,22 +382,22 @@ dependencies = [ name = "base-minter" version = "3.5.0" dependencies = [ - "base-factory", + "base-factory 3.5.0", "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", "cw721 0.19.0", - "cw721-base", + "cw721-base 0.19.0", "schemars", "serde", "sg-std", - "sg1", - "sg2", - "sg4", - "sg721", - "sg721-base", + "sg1 3.5.0", + "sg2 3.5.0", + "sg4 3.5.0", + "sg721 3.5.0", + "sg721-base 3.5.0", "thiserror", "url", ] @@ -483,9 +501,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bitvec" @@ -1039,6 +1057,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "cw-address-like" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451a4691083a88a3c0630a8a88799e9d4cd6679b7ce8ff22b8da2873ff31d380" +dependencies = [ + "cosmwasm-std", +] + [[package]] name = "cw-address-like" version = "1.0.4" @@ -1116,6 +1143,21 @@ dependencies = [ "thiserror", ] +[[package]] +name = "cw-ownable" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093dfb4520c48b5848274dd88ea99e280a04bc08729603341c7fb0d758c74321" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-address-like 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cw-ownable-derive 0.5.1", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "thiserror", +] + [[package]] name = "cw-ownable" version = "0.6.0" @@ -1123,13 +1165,24 @@ source = "git+https://github.com/public-awesome/cw-plus-plus.git?branch=main#28c dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-address-like", - "cw-ownable-derive", + "cw-address-like 1.0.4 (git+https://github.com/public-awesome/cw-plus-plus.git?branch=main)", + "cw-ownable-derive 0.6.0", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "thiserror", ] +[[package]] +name = "cw-ownable-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d3bf2e0f341bb6cc100d7d441d31cf713fbd3ce0c511f91e79f14b40a889af" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "cw-ownable-derive" version = "0.6.0" @@ -1251,6 +1304,19 @@ dependencies = [ "thiserror", ] +[[package]] +name = "cw721" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94a1ea6e6277bdd6dfc043a9b1380697fe29d6e24b072597439523658d21d791" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils 0.16.0", + "schemars", + "serde", +] + [[package]] name = "cw721" version = "0.16.0" @@ -1279,28 +1345,64 @@ dependencies = [ [[package]] name = "cw721" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#f461266c9aa844e80e5ddaf5ddf7ff742f430d5d" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#3661bb74e649ec588095d9de9b61536870a0637b" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-ownable", + "cw-ownable 0.6.0", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", - "cw721 0.16.0", + "cw721 0.16.0 (git+https://github.com/CosmWasm/cw-nfts?tag=v0.16.0)", "schemars", "serde", "thiserror", "url", ] +[[package]] +name = "cw721-base" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77518e27431d43214cff4cdfbd788a7508f68d9b1f32389e6fce513e7eaccbef" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus 0.16.0", + "cw-utils 0.16.0", + "cw2 0.16.0", + "cw721 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "schemars", + "serde", + "thiserror", +] + +[[package]] +name = "cw721-base" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da518d9f68bfda7d972cbaca2e8fcf04651d0edc3de72b04ae2bcd9289c81614" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-ownable 0.5.1", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", + "cw721 0.18.0", + "cw721-base 0.16.0", + "schemars", + "serde", + "thiserror", +] + [[package]] name = "cw721-base" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#f461266c9aa844e80e5ddaf5ddf7ff742f430d5d" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#3661bb74e649ec588095d9de9b61536870a0637b" dependencies = [ "cosmwasm-std", - "cw-ownable", + "cw-ownable 0.6.0", "cw2 1.1.2", "cw721 0.19.0", "serde", @@ -1415,12 +1517,12 @@ dependencies = [ "serde", "serde_json", "sg-metadata", - "sg2", - "sg721", - "sg721-base", + "sg2 3.5.0", + "sg721 3.5.0", + "sg721-base 3.5.0", "test-context", - "vending-factory", - "vending-minter", + "vending-factory 3.5.0", + "vending-minter 3.5.0", ] [[package]] @@ -2602,7 +2704,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" name = "open-edition-factory" version = "3.5.0" dependencies = [ - "base-factory", + "base-factory 3.5.0", "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.2.0", @@ -2610,9 +2712,9 @@ dependencies = [ "cw2 1.1.2", "sg-metadata", "sg-std", - "sg1", - "sg2", - "sg721", + "sg1 3.5.0", + "sg2 3.5.0", + "sg721 3.5.0", "thiserror", ] @@ -2625,16 +2727,16 @@ dependencies = [ "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", - "cw721-base", + "cw721-base 0.19.0", "open-edition-factory", "semver", "serde", "sg-metadata", "sg-std", - "sg1", - "sg2", - "sg4", - "sg721", + "sg1 3.5.0", + "sg2 3.5.0", + "sg4 3.5.0", + "sg721 3.5.0", "thiserror", "url", ] @@ -2913,7 +3015,7 @@ dependencies = [ "cfg-if", "concurrent-queue", "pin-project-lite", - "rustix 0.38.31", + "rustix 0.38.32", "tracing", "windows-sys 0.52.0", ] @@ -3269,7 +3371,7 @@ dependencies = [ "rkyv_derive", "seahash", "tinyvec", - "uuid 1.7.0", + "uuid 1.8.0", ] [[package]] @@ -3378,11 +3480,11 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.31" +version = "0.38.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "errno", "libc", "linux-raw-sys 0.4.13", @@ -3694,15 +3796,15 @@ dependencies = [ "serde", "sg-multi-test", "sg-std", - "sg-whitelist", - "sg1", - "sg2", - "sg721-base", + "sg-whitelist 3.5.0", + "sg1 3.5.0", + "sg2 3.5.0", + "sg721-base 3.5.0", "sha2 0.10.8", "sha3", "thiserror", - "vending-factory", - "vending-minter", + "vending-factory 3.5.0", + "vending-minter 3.5.0", "whitelist-immutable", ] @@ -3800,7 +3902,25 @@ dependencies = [ "schemars", "serde", "sg-std", - "sg1", + "sg1 3.5.0", + "thiserror", +] + +[[package]] +name = "sg-whitelist" +version = "3.5.0" +source = "git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db#b584245bcc7ff07d9b384df1ccc4e3e2466d92db" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", + "rust_decimal", + "schemars", + "serde", + "sg-std", + "sg1 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", "thiserror", ] @@ -3817,13 +3937,26 @@ dependencies = [ "schemars", "serde", "sg-std", - "sg1", + "sg1 3.5.0", + "thiserror", +] + +[[package]] +name = "sg1" +version = "3.5.0" +dependencies = [ + "anybuf", + "cosmwasm-std", + "cw-utils 1.0.3", + "serde", + "sg-std", "thiserror", ] [[package]] name = "sg1" version = "3.5.0" +source = "git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db#b584245bcc7ff07d9b384df1ccc4e3e2466d92db" dependencies = [ "anybuf", "cosmwasm-std", @@ -3843,7 +3976,24 @@ dependencies = [ "cw-utils 1.0.3", "schemars", "serde", - "sg721", + "sg2 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "sg721 3.5.0", + "sg721 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "thiserror", +] + +[[package]] +name = "sg2" +version = "3.5.0" +source = "git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db#b584245bcc7ff07d9b384df1ccc4e3e2466d92db" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "schemars", + "serde", + "sg721 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", "thiserror", ] @@ -3858,6 +4008,18 @@ dependencies = [ "thiserror", ] +[[package]] +name = "sg4" +version = "3.5.0" +source = "git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db#b584245bcc7ff07d9b384df1ccc4e3e2466d92db" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "schemars", + "serde", + "thiserror", +] + [[package]] name = "sg721" version = "3.5.0" @@ -3865,9 +4027,23 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 0.20.1", - "cw-ownable", + "cw-ownable 0.6.0", + "cw-utils 1.0.3", + "cw721-base 0.19.0", + "serde", + "thiserror", +] + +[[package]] +name = "sg721" +version = "3.5.0" +source = "git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db#b584245bcc7ff07d9b384df1ccc4e3e2466d92db" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-ownable 0.5.1", "cw-utils 1.0.3", - "cw721-base", + "cw721-base 0.18.0", "serde", "thiserror", ] @@ -3878,15 +4054,35 @@ version = "3.5.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw-ownable", + "cw-ownable 0.6.0", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", "cw721 0.19.0", - "cw721-base", + "cw721-base 0.19.0", + "serde", + "sg-std", + "sg721 3.5.0", + "thiserror", + "url", +] + +[[package]] +name = "sg721-base" +version = "3.5.0" +source = "git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db#b584245bcc7ff07d9b384df1ccc4e3e2466d92db" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-ownable 0.5.1", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", + "cw721 0.18.0", + "cw721-base 0.18.0", "serde", "sg-std", - "sg721", + "sg721 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", "thiserror", "url", ] @@ -3900,12 +4096,12 @@ dependencies = [ "cw-utils 1.0.3", "cw2 1.1.2", "cw721 0.19.0", - "cw721-base", + "cw721-base 0.19.0", "schemars", "serde", "sg-std", - "sg721", - "sg721-base", + "sg721 3.5.0", + "sg721-base 3.5.0", ] [[package]] @@ -3919,14 +4115,14 @@ dependencies = [ "cw-utils 1.0.3", "cw2 1.1.2", "cw721 0.19.0", - "cw721-base", + "cw721-base 0.19.0", "schemars", "semver", "serde", "sg-std", - "sg1", - "sg721", - "sg721-base", + "sg1 3.5.0", + "sg721 3.5.0", + "sg721-base 3.5.0", "thiserror", ] @@ -4300,19 +4496,19 @@ dependencies = [ "anybuf", "anyhow", "async-std", - "base-factory", + "base-factory 3.5.0", "base-minter", "cosmwasm-schema", "cosmwasm-std", "cw-multi-test 0.20.1", - "cw-ownable", + "cw-ownable 0.6.0", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", "cw4", "cw4-group", "cw721 0.19.0", - "cw721-base", + "cw721-base 0.19.0", "ethers-core", "ethers-signers", "eyre", @@ -4330,20 +4526,25 @@ dependencies = [ "sg-multi-test", "sg-splits", "sg-std", - "sg-whitelist", - "sg1", - "sg2", - "sg4", - "sg721", - "sg721-base", + "sg-whitelist 3.5.0", + "sg1 3.5.0", + "sg2 3.5.0", + "sg2 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "sg4 3.5.0", + "sg721 3.5.0", + "sg721 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "sg721-base 3.5.0", + "sg721-base 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", "sg721-nt", "sg721-updatable", "sha2 0.10.8", "shuffle", "thiserror", "url", - "vending-factory", - "vending-minter", + "vending-factory 3.5.0", + "vending-factory 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "vending-minter 3.5.0", + "vending-minter 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", "vending-minter-merkle-wl", "whitelist-immutable", "whitelist-mtree", @@ -4731,21 +4932,41 @@ dependencies = [ [[package]] name = "uuid" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" [[package]] name = "value-bag" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec26a25bd6fca441cdd0f769fd7f891bae119f996de31f86a5eddccef54c1d" +checksum = "74797339c3b98616c009c7c3eb53a0ce41e85c8ec66bd3db96ed132d20cfdee8" + +[[package]] +name = "vending-factory" +version = "3.5.0" +dependencies = [ + "base-factory 3.5.0", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", + "schemars", + "serde", + "sg-std", + "sg1 3.5.0", + "sg2 3.5.0", + "sg721 3.5.0", + "thiserror", +] [[package]] name = "vending-factory" version = "3.5.0" +source = "git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db#b584245bcc7ff07d9b384df1ccc4e3e2466d92db" dependencies = [ - "base-factory", + "base-factory 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.2.0", @@ -4754,9 +4975,9 @@ dependencies = [ "schemars", "serde", "sg-std", - "sg1", - "sg2", - "sg721", + "sg1 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "sg2 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "sg721 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", "thiserror", ] @@ -4770,23 +4991,53 @@ dependencies = [ "cw-utils 1.0.3", "cw2 1.1.2", "cw721 0.19.0", - "cw721-base", + "cw721-base 0.19.0", + "rand_core 0.6.4", + "rand_xoshiro", + "schemars", + "semver", + "serde", + "sg-std", + "sg-whitelist 3.5.0", + "sg1 3.5.0", + "sg2 3.5.0", + "sg4 3.5.0", + "sg721 3.5.0", + "sha2 0.10.8", + "shuffle", + "thiserror", + "url", + "vending-factory 3.5.0", +] + +[[package]] +name = "vending-minter" +version = "3.5.0" +source = "git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db#b584245bcc7ff07d9b384df1ccc4e3e2466d92db" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", + "cw2 1.1.2", + "cw721 0.18.0", + "cw721-base 0.18.0", "rand_core 0.6.4", "rand_xoshiro", "schemars", "semver", "serde", "sg-std", - "sg-whitelist", - "sg1", - "sg2", - "sg4", - "sg721", + "sg-whitelist 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "sg1 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "sg2 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "sg4 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", + "sg721 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", "sha2 0.10.8", "shuffle", "thiserror", "url", - "vending-factory", + "vending-factory 3.5.0 (git+https://github.com/public-awesome/launchpad?rev=b584245bcc7ff07d9b384df1ccc4e3e2466d92db)", ] [[package]] @@ -4799,23 +5050,23 @@ dependencies = [ "cw-utils 1.0.3", "cw2 1.1.2", "cw721 0.19.0", - "cw721-base", + "cw721-base 0.19.0", "rand_core 0.6.4", "rand_xoshiro", "schemars", "semver", "serde", "sg-std", - "sg-whitelist", - "sg1", - "sg2", - "sg4", - "sg721", + "sg-whitelist 3.5.0", + "sg1 3.5.0", + "sg2 3.5.0", + "sg4 3.5.0", + "sg721 3.5.0", "sha2 0.10.8", "shuffle", "thiserror", "url", - "vending-factory", + "vending-factory 3.5.0", "whitelist-mtree", ] @@ -4829,7 +5080,7 @@ dependencies = [ "cw-utils 1.0.3", "cw2 1.1.2", "cw721 0.19.0", - "cw721-base", + "cw721-base 0.19.0", "rand_core 0.6.4", "rand_xoshiro", "schemars", @@ -4837,15 +5088,15 @@ dependencies = [ "serde", "sg-std", "sg-whitelist-flex", - "sg1", - "sg2", - "sg4", - "sg721", + "sg1 3.5.0", + "sg2 3.5.0", + "sg4 3.5.0", + "sg721 3.5.0", "sha2 0.10.8", "shuffle", "thiserror", "url", - "vending-factory", + "vending-factory 3.5.0", ] [[package]] @@ -4993,7 +5244,7 @@ dependencies = [ "schemars", "serde", "sg-std", - "sg-whitelist", + "sg-whitelist 3.5.0", "thiserror", ] @@ -5013,7 +5264,7 @@ dependencies = [ "serde", "serde_json", "sg-std", - "sg1", + "sg1 3.5.0", "thiserror", "url", ] diff --git a/Cargo.toml b/Cargo.toml index e090ee284..3d52edd07 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,9 +37,14 @@ serde = { version = "1.0", default-features = false, features = ["deri serde_json = "1.0" sg1 = { version = "3.5.0", path = "packages/sg1" } sg2 = { version = "3.5.0", path = "packages/sg2" } +# NOTE: `v3.8.0-prerelease` contains commit for switch to new cw721 with collection metadata +# This is needed for testing legacy migration from collection info -> collection metadata +sg2-v3-8-0-prerelease = { git = "https://github.com/public-awesome/launchpad", rev = "b584245bcc7ff07d9b384df1ccc4e3e2466d92db", package = "sg2" } # needed for testing legacy migration sg4 = { version = "3.5.0", path = "packages/sg4" } sg721 = { version = "3.5.0", path = "packages/sg721" } +sg721-v3-8-0-prerelease = { git = "https://github.com/public-awesome/launchpad", rev = "b584245bcc7ff07d9b384df1ccc4e3e2466d92db", package = "sg721" } # needed for testing legacy migration sg721-base = { version = "3.5.0", path = "contracts/collections/sg721-base" } +sg721-base-v3-8-0-prerelease = { git = "https://github.com/public-awesome/launchpad", rev = "b584245bcc7ff07d9b384df1ccc4e3e2466d92db", package = "sg721-base" } # needed for testing legacy migration sg721-nt = { version = "3.5.0", path = "contracts/collections/sg721-nt" } sg721-updatable = { version = "3.5.0", path = "contracts/collections/sg721-updatable" } sg-controllers = { version = "3.5.0", path = "packages/controllers" } @@ -56,7 +61,9 @@ sha2 = { version = "0.10.2", default-features = false } whitelist-mtree = { version = "3.5.0", path = "contracts/whitelists/whitelist-merkletree" } vending-minter-merkle-wl = { version = "3.5.0", path = "contracts/minters/vending-minter-merkle-wl" } vending-factory = { version = "3.5.0", path = "contracts/factories/vending-factory" } +vending-factory-v3-8-0-prerelease = { git = "https://github.com/public-awesome/launchpad", rev = "b584245bcc7ff07d9b384df1ccc4e3e2466d92db", package = "vending-factory" } # needed for testing legacy migration vending-minter = { version = "3.5.0", path = "contracts/minters/vending-minter" } +vending-minter-v3-8-0-prerelease = { git = "https://github.com/public-awesome/launchpad", rev = "b584245bcc7ff07d9b384df1ccc4e3e2466d92db", package = "vending-minter" } # needed for testing legacy migration open-edition-factory = { version = "3.5.0", path = "contracts/factories/open-edition-factory" } open-edition-minter = { version = "3.5.0", path = "contracts/minters/open-edition-minter" } whitelist-immutable = { version = "3.5.0", path = "contracts/whitelists/whitelist-immutable" } diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index b5947821b..c2377f91a 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -8,7 +8,7 @@ use cw721_base::{ }; use cosmwasm_std::{ - to_json_binary, Addr, Binary, ContractInfoResponse, CustomMsg, Deps, DepsMut, Empty, Env, + to_json_binary, Addr, Binary, ContractInfoResponse, CustomMsg, Deps, DepsMut, Env, Event, MessageInfo, Response, StdError, Storage, Timestamp, WasmQuery, }; @@ -286,11 +286,6 @@ where return Err(StdError::generic_err("Invalid contract name for migration").into()); } - #[allow(clippy::cmp_owned)] - if prev_contract_version.version >= CONTRACT_VERSION.to_string() { - return Err(StdError::generic_err("Must upgrade contract version").into()); - } - let mut response = Response::new(); // these upgrades can always be called. migration is only executed in case new stores are empty! It is safe calling these on any version. @@ -302,6 +297,9 @@ where )?; response = crate::upgrades::v3_1_0_royalty_timestamp::upgrade(deps.branch(), &env, response)?; + // after migration of collection metadata in cw721, we can migrate collection info to new collection metadata extension + response = + crate::upgrades::v3_8_0_collection_metadata::upgrade(deps.branch(), &env, response)?; response = response.add_event( Event::new("migrate") diff --git a/contracts/collections/sg721-base/src/lib.rs b/contracts/collections/sg721-base/src/lib.rs index 492d72db4..74c1a872b 100644 --- a/contracts/collections/sg721-base/src/lib.rs +++ b/contracts/collections/sg721-base/src/lib.rs @@ -26,6 +26,7 @@ pub mod entry { use cosmwasm_std::entry_point; use cosmwasm_std::{Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response}; use cw2::set_contract_version; + use cw721::msg::Cw721MigrateMsg; use sg721::InstantiateMsg; // version info for migration info @@ -87,4 +88,20 @@ pub mod entry { >::default() .query(deps, env, msg) } + + /// allows migration of all sg721-base versions + #[cfg_attr(not(feature = "library"), entry_point)] + pub fn migrate( + deps: DepsMut, + env: Env, + msg: Cw721MigrateMsg, + ) -> Result { + Sg721Contract::< + DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, + >::migrate(deps, env, msg) + } } diff --git a/contracts/collections/sg721-base/src/upgrades/mod.rs b/contracts/collections/sg721-base/src/upgrades/mod.rs index f94441bb9..0de018a10 100644 --- a/contracts/collections/sg721-base/src/upgrades/mod.rs +++ b/contracts/collections/sg721-base/src/upgrades/mod.rs @@ -1,2 +1,3 @@ pub mod v3_0_0_ownable_and_collection_metadata; pub mod v3_1_0_royalty_timestamp; +pub mod v3_8_0_collection_metadata; diff --git a/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs b/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs index 878740ea7..01c5b5e57 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs @@ -16,7 +16,7 @@ pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result::default(); // check whether royalty timestamp already exists let royalty_updated_at = contract.royalty_updated_at.may_load(deps.storage)?; - if let Some(_) = royalty_updated_at { + if royalty_updated_at.is_some() { // already migrated return Ok(response); } diff --git a/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs b/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs new file mode 100644 index 000000000..834e6cd5b --- /dev/null +++ b/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs @@ -0,0 +1,57 @@ +use crate::{ContractError, Sg721Contract}; + +use cosmwasm_std::{DepsMut, Empty, Env, Event, Response}; +use cw721::traits::StateFactory; +use cw721::{ + msg::CollectionMetadataExtensionMsg, query::Cw721Query, + DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, RoyaltyInfo, +}; +use cw_storage_plus::Item; +#[allow(deprecated)] +use sg721::{CollectionInfo, RoyaltyInfoResponse}; + +/// Migrates collection info (sg721) into new collection metadata extension (cw721) +#[allow(deprecated)] +pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result { + let contract = Sg721Contract::< + DefaultOptionNftMetadataExtension, + DefaultOptionNftMetadataExtensionMsg, + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, + >::default(); + let event = Event::new("migrate-3.1.0"); + // migrate only in case collection metadata is not set + let mut collection_metadata = contract + .parent + .query_collection_metadata(deps.as_ref(), env)?; + let event = match collection_metadata.extension.clone() { + Some(_) => event, + None => { + let legacy_collection_info_store: Item> = + Item::new("collection_info"); + let legacy_collection_info = legacy_collection_info_store.load(deps.storage)?; + let collection_metadata_msg = CollectionMetadataExtensionMsg:: { + description: Some(legacy_collection_info.description), + explicit_content: legacy_collection_info.explicit_content, + external_link: legacy_collection_info.external_link, + image: Some(legacy_collection_info.image), + start_trading_time: legacy_collection_info.start_trading_time, + royalty_info: legacy_collection_info.royalty_info.map(|r| r.into()), + }; + let updated_collection_metadata_extension_result = + collection_metadata_msg.create(Some(deps.as_ref()), Some(env), None, None); + let updated_collection_metadata_extension = + updated_collection_metadata_extension_result?; + collection_metadata.extension = Some(updated_collection_metadata_extension); + contract + .parent + .config + .collection_metadata + .save(deps.storage, &collection_metadata)?; + event + } + }; + Ok(response.add_event(event)) +} diff --git a/contracts/collections/sg721-updatable/src/lib.rs b/contracts/collections/sg721-updatable/src/lib.rs index ebd04ecc6..f621954a2 100644 --- a/contracts/collections/sg721-updatable/src/lib.rs +++ b/contracts/collections/sg721-updatable/src/lib.rs @@ -18,7 +18,7 @@ pub mod entry { }, msg::ExecuteMsg, }; - use cosmwasm_std::{entry_point, to_json_binary, Empty}; + use cosmwasm_std::{entry_point, to_json_binary}; use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response}; use cw721::msg::Cw721MigrateMsg; use cw721::{ diff --git a/packages/sg2/Cargo.toml b/packages/sg2/Cargo.toml index 84c86785d..86db58bc5 100644 --- a/packages/sg2/Cargo.toml +++ b/packages/sg2/Cargo.toml @@ -1,15 +1,12 @@ [package] -name = "sg2" -authors = [ - "Shane Vitarana ", - "John Y ", -] +name = "sg2" +authors = ["Shane Vitarana ", "John Y "] description = "Definition and types for the SG2 interface" -version = { workspace = true } -edition = { workspace = true } -homepage = { workspace = true } -repository = { workspace = true } -license = { workspace = true } +version = { workspace = true } +edition = { workspace = true } +homepage = { workspace = true } +repository = { workspace = true } +license = { workspace = true } [dependencies] cosmwasm-schema = { workspace = true } @@ -19,4 +16,7 @@ cw-utils = { workspace = true } schemars = { workspace = true } serde = { workspace = true } sg721 = { workspace = true } -thiserror = { workspace = true } +# `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +sg2-v3-8-0-prerelease = { workspace = true } +sg721-v3-8-0-prerelease = { workspace = true } +thiserror = { workspace = true } diff --git a/packages/sg2/src/tests.rs b/packages/sg2/src/tests.rs index 97abcd046..b730eb07b 100644 --- a/packages/sg2/src/tests.rs +++ b/packages/sg2/src/tests.rs @@ -25,6 +25,28 @@ pub fn mock_collection_params() -> CollectionParams { } } +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +#[allow(deprecated)] +pub fn mock_collection_params_v3_8_0_prerelease() -> sg2_v3_8_0_prerelease::msg::CollectionParams { + sg2_v3_8_0_prerelease::msg::CollectionParams { + code_id: 1, + name: "Collection Name".to_string(), + symbol: "COL".to_string(), + info: sg721_v3_8_0_prerelease::CollectionInfo { + creator: "creator".to_string(), + description: String::from("Stargaze Monkeys"), + image: "https://example.com/image.png".to_string(), + external_link: Some("https://example.com/external.html".to_string()), + start_trading_time: None, + explicit_content: Some(false), + royalty_info: Some(sg721_v3_8_0_prerelease::RoyaltyInfoResponse { + payment_address: "creator".to_string(), + share: Decimal::percent(10), + }), + }, + } +} + pub fn mock_collection_params_1(start_trading_time: Option) -> CollectionParams { CollectionParams { code_id: 1, diff --git a/test-suite/Cargo.toml b/test-suite/Cargo.toml index 0de8ba3e5..4f045fed3 100644 --- a/test-suite/Cargo.toml +++ b/test-suite/Cargo.toml @@ -33,40 +33,46 @@ optimize = """docker run --rm -v "$(pwd)":/code \ """ [dependencies] -cosmwasm-schema = { workspace = true } -sg-std = { workspace = true } -cosmwasm-std = { workspace = true } -cw4 = { workspace = true } -cw-multi-test = { workspace = true } -sg-multi-test = { workspace = true } -sg721-base = { workspace = true } -sg721-updatable = { workspace = true } -cw4-group = { workspace = true } -sg-splits = { workspace = true } -anyhow = "1.0.57" -sg-eth-airdrop = { workspace = true } -whitelist-immutable = { workspace = true, features = ["library"] } -cw721 = { workspace = true } -cw721-base = { workspace = true, features = ["library"] } -sg2 = { workspace = true } -sg721 = { workspace = true } -sg-metadata = { workspace = true } -open-edition-factory = { workspace = true, features = ["library"] } -open-edition-minter = { workspace = true, features = ["library"] } -sg-whitelist = { workspace = true, features = ["library"] } -vending-factory = { workspace = true, features = ["library"] } -vending-minter = { workspace = true, features = ["library"] } -base-factory = { workspace = true } -base-minter = { workspace = true } -sg721-nt = { workspace = true } -sg-controllers = { workspace = true } -cw-ownable = { workspace = true } -serde = { workspace = true } -anybuf = { workspace = true } +cosmwasm-schema = { workspace = true } +sg-std = { workspace = true } +cosmwasm-std = { workspace = true } +cw2 = { workspace = true } +cw4 = { workspace = true } +cw-multi-test = { workspace = true } +sg-multi-test = { workspace = true } +sg721-base = { workspace = true } +sg721-base-v3-8-0-prerelease = { workspace = true } +sg721-updatable = { workspace = true } +cw4-group = { workspace = true } +sg-splits = { workspace = true } +anyhow = "1.0.57" +sg-eth-airdrop = { workspace = true } +whitelist-immutable = { workspace = true, features = ["library"] } +cw721 = { workspace = true } +cw721-base = { workspace = true, features = ["library"] } +sg2 = { workspace = true } +sg2-v3-8-0-prerelease = { workspace = true } +sg721 = { workspace = true } +sg721-v3-8-0-prerelease = { workspace = true } +sg-metadata = { workspace = true } +open-edition-factory = { workspace = true, features = ["library"] } +open-edition-minter = { workspace = true, features = ["library"] } +sg-whitelist = { workspace = true, features = ["library"] } +vending-factory = { workspace = true, features = ["library"] } +vending-minter = { workspace = true, features = ["library"] } +vending-factory-v3-8-0-prerelease = { workspace = true, features = ["library"] } +vending-minter-v3-8-0-prerelease = { workspace = true, features = ["library"] } +base-factory = { workspace = true } +base-minter = { workspace = true } +sg721-nt = { workspace = true } +sg-controllers = { workspace = true } +cw-ownable = { workspace = true } +serde = { workspace = true } +anybuf = { workspace = true } -vending-minter-merkle-wl = { workspace = true, features = ["library"] } -whitelist-mtree = { workspace = true, features = ["library"] } -rs_merkle = { version = "1.4.1", default-features = false } +vending-minter-merkle-wl = { workspace = true, features = ["library"] } +whitelist-mtree = { workspace = true, features = ["library"] } +rs_merkle = { version = "1.4.1", default-features = false } [dev-dependencies] serde = { workspace = true } diff --git a/test-suite/src/common_setup/contract_boxes.rs b/test-suite/src/common_setup/contract_boxes.rs index 617a6d591..f09e4380b 100644 --- a/test-suite/src/common_setup/contract_boxes.rs +++ b/test-suite/src/common_setup/contract_boxes.rs @@ -35,6 +35,17 @@ pub fn contract_vending_factory() -> Box> { Box::new(contract) } +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +pub fn contract_vending_factory_v3_8_0_prerelease() -> Box> { + let contract = ContractWrapper::new( + vending_factory_v3_8_0_prerelease::contract::execute, + vending_factory_v3_8_0_prerelease::contract::instantiate, + vending_factory_v3_8_0_prerelease::contract::query, + ) + .with_sudo(vending_factory_v3_8_0_prerelease::contract::sudo); + Box::new(contract) +} + pub fn contract_open_edition_factory() -> Box> { let contract = ContractWrapper::new( open_edition_factory::contract::execute, @@ -103,12 +114,35 @@ pub fn contract_vending_minter() -> Box> { Box::new(contract) } +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +pub fn contract_vending_minter_v3_8_0_prerelease() -> Box> { + let contract = ContractWrapper::new( + vending_minter_v3_8_0_prerelease::contract::execute, + vending_minter_v3_8_0_prerelease::contract::instantiate, + vending_minter_v3_8_0_prerelease::contract::query, + ) + .with_reply(vending_minter_v3_8_0_prerelease::contract::reply); + Box::new(contract) +} + pub fn contract_sg721_base() -> Box> { let contract = ContractWrapper::new( sg721_base::entry::execute, sg721_base::entry::instantiate, sg721_base::entry::query, - ); + ) + .with_migrate(sg721_base::entry::migrate); + Box::new(contract) +} + +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +pub fn contract_sg721_base_v3_8_0_prerelease() -> Box> { + let contract = ContractWrapper::new( + sg721_base_v3_8_0_prerelease::entry::execute, + sg721_base_v3_8_0_prerelease::entry::instantiate, + sg721_base_v3_8_0_prerelease::entry::query, + ) + .with_migrate(sg721_base_v3_8_0_prerelease::Sg721Contract::::migrate); Box::new(contract) } diff --git a/test-suite/src/common_setup/setup_minter/vending_minter/mock_params.rs b/test-suite/src/common_setup/setup_minter/vending_minter/mock_params.rs index 3339e0248..ea650edfa 100644 --- a/test-suite/src/common_setup/setup_minter/vending_minter/mock_params.rs +++ b/test-suite/src/common_setup/setup_minter/vending_minter/mock_params.rs @@ -26,6 +26,22 @@ pub fn mock_init_extension( } } +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +pub fn mock_init_extension_v3_8_0_prerelease( + splits_addr: Option, + start_time: Option, +) -> vending_factory_v3_8_0_prerelease::msg::VendingMinterInitMsgExtension { + vending_factory_v3_8_0_prerelease::msg::VendingMinterInitMsgExtension { + base_token_uri: "ipfs://aldkfjads".to_string(), + payment_address: splits_addr, + start_time: start_time.unwrap_or(Timestamp::from_nanos(GENESIS_MINT_START_TIME)), + num_tokens: 100, + mint_price: coin(MIN_MINT_PRICE, NATIVE_DENOM), + per_address_limit: 3, + whitelist: None, + } +} + pub fn mock_create_minter( splits_addr: Option, collection_params: CollectionParams, @@ -37,6 +53,18 @@ pub fn mock_create_minter( } } +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +pub fn mock_create_minter_v3_8_0_prerelease( + splits_addr: Option, + collection_params: sg2_v3_8_0_prerelease::msg::CollectionParams, + start_time: Option, +) -> vending_factory_v3_8_0_prerelease::msg::VendingMinterCreateMsg { + vending_factory_v3_8_0_prerelease::msg::VendingMinterCreateMsg { + init_msg: mock_init_extension_v3_8_0_prerelease(splits_addr, start_time), + collection_params, + } +} + pub fn mock_create_minter_init_msg( collection_params: CollectionParams, init_msg: VendingMinterInitMsgExtension, @@ -68,3 +96,28 @@ pub fn mock_params(mint_denom: Option) -> VendingMinterParams { }, } } + +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +pub fn mock_params_v3_8_0_prerelease( + mint_denom: Option, +) -> vending_factory_v3_8_0_prerelease::state::VendingMinterParams { + vending_factory_v3_8_0_prerelease::state::VendingMinterParams { + code_id: 1, + allowed_sg721_code_ids: vec![1, 3, 5, 6], + frozen: false, + creation_fee: coin(CREATION_FEE, NATIVE_DENOM), + min_mint_price: coin( + MIN_MINT_PRICE, + mint_denom.unwrap_or_else(|| NATIVE_DENOM.to_string()), + ), + mint_fee_bps: MINT_FEE_FAIR_BURN, + max_trading_offset_secs: 60 * 60 * 24 * 7, + extension: vending_factory_v3_8_0_prerelease::state::ParamsExtension { + max_token_limit: MAX_TOKEN_LIMIT, + max_per_address_limit: MAX_PER_ADDRESS_LIMIT, + airdrop_mint_price: coin(AIRDROP_MINT_PRICE, NATIVE_DENOM), + airdrop_mint_fee_bps: AIRDROP_MINT_FEE_FAIR_BURN, + shuffle_fee: coin(SHUFFLE_FEE, NATIVE_DENOM), + }, + } +} diff --git a/test-suite/src/sg721_base/tests/integration_tests.rs b/test-suite/src/sg721_base/tests/integration_tests.rs index 4d4730bd5..0045c71d1 100644 --- a/test-suite/src/sg721_base/tests/integration_tests.rs +++ b/test-suite/src/sg721_base/tests/integration_tests.rs @@ -1,13 +1,16 @@ #[cfg(test)] #[allow(deprecated)] mod tests { - use crate::common_setup::contract_boxes::App; + use crate::common_setup::contract_boxes::{ + contract_sg721_base_v3_8_0_prerelease, contract_vending_factory_v3_8_0_prerelease, + contract_vending_minter_v3_8_0_prerelease, App, + }; use anyhow::Error; use cosmwasm_std::{coin, Addr}; use cw721_base::msg::NumTokensResponse; use cw_multi_test::{AppResponse, BankSudo, Executor, SudoMsg}; use sg2::msg::CreateMinterMsg; - use sg2::tests::mock_collection_params; + use sg2::tests::{mock_collection_params, mock_collection_params_v3_8_0_prerelease}; use sg721::ExecuteMsg as Sg721ExecuteMsg; use sg721::{CollectionInfo, InstantiateMsg}; @@ -21,7 +24,8 @@ mod tests { }; use crate::common_setup::setup_minter::common::constants::CREATION_FEE; use crate::common_setup::setup_minter::vending_minter::mock_params::{ - mock_create_minter, mock_init_extension, mock_params, + mock_create_minter, mock_create_minter_v3_8_0_prerelease, mock_init_extension, mock_params, + mock_params_v3_8_0_prerelease, }; use cosmwasm_std::Empty; use cw721_base::msg::ExecuteMsg as cw721ExecuteMsg; @@ -60,6 +64,36 @@ mod tests { (app, factory_contract) } + /// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) + fn proper_instantiate_factory_v3_8_0_prerelease() -> ( + App, + vending_factory_v3_8_0_prerelease::helpers::FactoryContract, + ) { + let mut app = custom_mock_app(); + let factory_id = app.store_code(contract_vending_factory_v3_8_0_prerelease()); + let minter_id = app.store_code(contract_vending_minter_v3_8_0_prerelease()); + + let mut params = mock_params_v3_8_0_prerelease(None); + params.code_id = minter_id; + + let msg = vending_factory_v3_8_0_prerelease::msg::InstantiateMsg { params }; + let factory_addr = app + .instantiate_contract( + factory_id, + Addr::unchecked(GOVERNANCE), + &msg, + &[], + "factory", + Some(GOVERNANCE.to_string()), + ) + .unwrap(); + + let factory_contract = + vending_factory_v3_8_0_prerelease::helpers::FactoryContract(factory_addr); + + (app, factory_contract) + } + fn proper_instantiate() -> (App, Addr) { let (mut app, factory_contract) = proper_instantiate_factory(); let sg721_id = app.store_code(contract_sg721_base()); @@ -89,6 +123,36 @@ mod tests { (app, Addr::unchecked("contract2")) } + /// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) + fn proper_instantiate_v3_8_0_prerelease() -> (App, Addr) { + let (mut app, factory_contract) = proper_instantiate_factory_v3_8_0_prerelease(); + let sg721_id = app.store_code(contract_sg721_base_v3_8_0_prerelease()); + + let collection_params = mock_collection_params_v3_8_0_prerelease(); + let mut m = mock_create_minter_v3_8_0_prerelease(None, collection_params, None); + m.collection_params.code_id = sg721_id; + let msg = vending_factory_v3_8_0_prerelease::msg::ExecuteMsg::CreateMinter(m); + + let creation_fee = coin(CREATION_FEE, NATIVE_DENOM); + + app.sudo(SudoMsg::Bank(BankSudo::Mint { + to_address: ADMIN.to_string(), + amount: vec![creation_fee.clone()], + })) + .unwrap(); + + let bal = app.wrap().query_all_balances(ADMIN).unwrap(); + assert_eq!(bal, vec![creation_fee.clone()]); + + // this should create the minter + sg721 + let cosmos_msg = factory_contract.call_with_funds(msg, creation_fee).unwrap(); + + let res = app.execute(Addr::unchecked(ADMIN), cosmos_msg); + assert!(res.is_ok()); + + (app, Addr::unchecked("contract2")) + } + fn custom_proper_instantiate( custom_create_minter_msg: CreateMinterMsg, ) -> (App, Addr) { @@ -1005,4 +1069,79 @@ mod tests { assert_eq!(res.count, 0); } } + + mod migrate { + use super::*; + use cosmwasm_std::testing::mock_env; + use cw721::{ + msg::Cw721MigrateMsg, state::CollectionMetadata, CollectionMetadataExtension, + DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, + RoyaltyInfo, + }; + use sg721_base::msg::QueryMsg; + + #[test] + fn migrate_sg721_base_collection_metadata() { + let (mut app, contract) = proper_instantiate_v3_8_0_prerelease(); + // query legacy collection info + let legacy_collection_info: sg721_base_v3_8_0_prerelease::msg::CollectionInfoResponse = + app.wrap() + .query_wasm_smart( + contract.clone(), + &sg721_base_v3_8_0_prerelease::msg::QueryMsg::CollectionInfo {}, + ) + .unwrap(); + // throws a generic error, for unknown GetCollectionMetadata query + app.wrap() + .query_wasm_smart::>( + contract.clone(), + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::GetCollectionMetadata {}, + ) + .expect_err("expecting generic error, for unknown GetCollectionMetadata query"); + + // migrate + let sg721_id = app.store_code(contract_sg721_base()); + let admin = Addr::unchecked("creator"); + let migrate_msg = Cw721MigrateMsg::WithUpdate { + minter: None, + creator: None, + }; + app.migrate_contract(admin, contract.clone(), &migrate_msg, sg721_id) + .unwrap(); + // assert collection metadata + let collection_metadata = app + .wrap() + .query_wasm_smart::>( + contract.clone(), + &QueryMsg::< + DefaultOptionNftMetadataExtension, + DefaultOptionCollectionMetadataExtension, + >::GetCollectionMetadata {}, + ) + .unwrap(); + let env = mock_env(); + assert_eq!( + collection_metadata, + CollectionMetadata:: { + name: "Collection Name".to_string(), + symbol: "COL".to_string(), + updated_at: env.block.time, + extension: Some(CollectionMetadataExtension:: { + description: legacy_collection_info.description, + image: legacy_collection_info.image, + external_link: legacy_collection_info.external_link, + start_trading_time: legacy_collection_info.start_trading_time, + explicit_content: legacy_collection_info.explicit_content, + royalty_info: legacy_collection_info.royalty_info.map(|r| RoyaltyInfo { + payment_address: Addr::unchecked(r.payment_address), + share: r.share, + }), + }) + } + ); + } + } } From ecf23f98b1acaf713844569e996fa449b066c769 Mon Sep 17 00:00:00 2001 From: mr-t Date: Wed, 20 Mar 2024 22:18:26 +0100 Subject: [PATCH 16/24] cleanup --- contracts/collections/sg721-base/src/contract.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index c2377f91a..8e96f0e98 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -8,8 +8,8 @@ use cw721_base::{ }; use cosmwasm_std::{ - to_json_binary, Addr, Binary, ContractInfoResponse, CustomMsg, Deps, DepsMut, Env, - Event, MessageInfo, Response, StdError, Storage, Timestamp, WasmQuery, + to_json_binary, Addr, Binary, ContractInfoResponse, CustomMsg, Deps, DepsMut, Env, Event, + MessageInfo, Response, StdError, Storage, Timestamp, WasmQuery, }; use cw721_base::{execute::Cw721Execute, query::Cw721Query}; From 00e916f2ee1f1e2cfa153bcd03682f4e57110907 Mon Sep 17 00:00:00 2001 From: mr-t Date: Thu, 21 Mar 2024 13:09:43 +0100 Subject: [PATCH 17/24] update cw721 --- Cargo.lock | 4 ++-- contracts/collections/sg721-base/src/contract.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 001c5be29..2c09cd42e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1345,7 +1345,7 @@ dependencies = [ [[package]] name = "cw721" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#3661bb74e649ec588095d9de9b61536870a0637b" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#025f7c0e5546ca5b86edce80788b626fe38a3528" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1399,7 +1399,7 @@ dependencies = [ [[package]] name = "cw721-base" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#3661bb74e649ec588095d9de9b61536870a0637b" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#025f7c0e5546ca5b86edce80788b626fe38a3528" dependencies = [ "cosmwasm-std", "cw-ownable 0.6.0", diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index 8e96f0e98..83d2b331b 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -69,7 +69,7 @@ where self.frozen_collection_info.save(deps.storage, &false)?; - self.parent.instantiate( + self.parent.instantiate_with_version( deps, &env, &info, From 7cbefc6d9b05996bdcd54b131a3b0f94eee70eeb Mon Sep 17 00:00:00 2001 From: mr-t Date: Sat, 23 Mar 2024 02:06:16 +0100 Subject: [PATCH 18/24] update lib --- Cargo.lock | 45 ++++++++++++++----- .../collections/sg721-base/examples/schema.rs | 9 ++-- .../collections/sg721-base/src/contract.rs | 12 ++--- contracts/collections/sg721-base/src/msg.rs | 6 +-- .../v3_0_0_ownable_and_collection_metadata.rs | 2 +- .../upgrades/v3_8_0_collection_metadata.rs | 45 ++++++++++--------- .../collections/sg721-nt/examples/schema.rs | 4 +- contracts/collections/sg721-nt/src/lib.rs | 2 +- .../sg721-updatable/examples/schema.rs | 8 ++-- .../sg721-updatable/src/contract.rs | 2 +- .../src/sg721_base/tests/integration_tests.rs | 14 +++--- 11 files changed, 91 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2c09cd42e..6e220b88f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -330,9 +330,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", "cc", @@ -678,9 +678,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" dependencies = [ "serde", ] @@ -971,6 +971,16 @@ dependencies = [ "thiserror", ] +[[package]] +name = "cosmwasm-storage" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66de2ab9db04757bcedef2b5984fbe536903ada4a8a9766717a4a71197ef34f6" +dependencies = [ + "cosmwasm-std", + "serde", +] + [[package]] name = "cpufeatures" version = "0.2.12" @@ -1193,6 +1203,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "cw-paginate-storage" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8693baa8dc275f86c5b4f6b86702994e859ac1657e19c5cbcb55d295592a5c04" +dependencies = [ + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 1.2.0", + "serde", +] + [[package]] name = "cw-storage-plus" version = "0.16.0" @@ -1345,11 +1367,12 @@ dependencies = [ [[package]] name = "cw721" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#025f7c0e5546ca5b86edce80788b626fe38a3528" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#bb0228572db9b2a371e2e014fcc8a59ae9de88df" dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cw-ownable 0.6.0", + "cw-paginate-storage", "cw-storage-plus 1.2.0", "cw-utils 1.0.3", "cw2 1.1.2", @@ -1399,7 +1422,7 @@ dependencies = [ [[package]] name = "cw721-base" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#025f7c0e5546ca5b86edce80788b626fe38a3528" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#bb0228572db9b2a371e2e014fcc8a59ae9de88df" dependencies = [ "cosmwasm-std", "cw-ownable 0.6.0", @@ -2148,7 +2171,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.5", + "indexmap 2.2.6", "slab", "tokio", "tokio-util", @@ -2409,9 +2432,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.5" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -4719,7 +4742,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.5", + "indexmap 2.2.6", "toml_datetime", "winnow", ] @@ -4730,7 +4753,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.2.5", + "indexmap 2.2.6", "toml_datetime", "winnow", ] diff --git a/contracts/collections/sg721-base/examples/schema.rs b/contracts/collections/sg721-base/examples/schema.rs index 8916f2be1..7ab574ed2 100644 --- a/contracts/collections/sg721-base/examples/schema.rs +++ b/contracts/collections/sg721-base/examples/schema.rs @@ -3,13 +3,14 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; +use cw721::CollectionMetadataAndExtension; use cw721_base::{ msg::{ AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, MinterResponse, NftInfoResponse, NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, }, state::CollectionMetadata, - CollectionMetadataExtension, DefaultOptionCollectionMetadataExtension, + CollectionMetadataExtensionWrapper, DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, RoyaltyInfo, }; use sg721::InstantiateMsg; @@ -30,7 +31,9 @@ fn main() { #[allow(deprecated)] export_schema(&schema_for!(CollectionInfoResponse), &out_dir); export_schema( - &schema_for!(CollectionMetadata>), + &schema_for!( + CollectionMetadataAndExtension> + ), &out_dir, ); export_schema_with_title( @@ -49,7 +52,7 @@ fn main() { export_schema(&schema_for!(ApprovalsResponse), &out_dir); export_schema(&schema_for!(OperatorsResponse), &out_dir); export_schema( - &schema_for!(CollectionMetadata), + &schema_for!(CollectionMetadataAndExtension), &out_dir, ); export_schema_with_title( diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index 83d2b331b..0b8d480f0 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -12,7 +12,7 @@ use cosmwasm_std::{ MessageInfo, Response, StdError, Storage, Timestamp, WasmQuery, }; -use cw721_base::{execute::Cw721Execute, query::Cw721Query}; +use cw721_base::traits::{Cw721Execute, Cw721Query}; use cw_utils::nonpayable; #[allow(deprecated)] @@ -120,7 +120,9 @@ where info: MessageInfo, collection_msg: UpdateCollectionInfoMsg, ) -> Result, ContractError> { - let collection_info = self.parent.config.collection_metadata.load(deps.storage)?; + let collection_info = self + .parent + .query_collection_metadata_and_extension(deps.as_ref())?; if self.frozen_collection_info.load(deps.storage)? { return Err(ContractError::CollectionInfoFrozen {}); @@ -153,7 +155,7 @@ where extension: Some(collection_extension), }; self.parent - .update_collection_metadata(deps, &info, &env, msg)?; + .update_collection_metadata(deps, Some(&info), Some(&env), msg)?; let event = Event::new("update_collection_info").add_attribute("sender", info.sender); Ok(Response::new().add_event(event)) @@ -183,7 +185,7 @@ where }), }; self.parent - .update_collection_metadata(deps, &info, &env, msg)?; + .update_collection_metadata(deps, Some(&info), Some(&env), msg)?; let event = Event::new("update_start_trading_time").add_attribute("sender", info.sender); Ok(Response::new().add_event(event)) @@ -253,7 +255,7 @@ where &self, deps: Deps, ) -> Result { - let collection_info = self.parent.config.collection_metadata.load(deps.storage)?; + let collection_info = self.parent.query_collection_metadata_and_extension(deps)?; let creator = self .get_creator(deps.storage)? diff --git a/contracts/collections/sg721-base/src/msg.rs b/contracts/collections/sg721-base/src/msg.rs index 661b1f324..c368805bd 100644 --- a/contracts/collections/sg721-base/src/msg.rs +++ b/contracts/collections/sg721-base/src/msg.rs @@ -10,7 +10,7 @@ use cw721_base::{ NumTokensResponse, OperatorsResponse, OwnerOfResponse, QueryMsg as Cw721QueryMsg, TokensResponse, }, - state::CollectionMetadata, + state::CollectionMetadataAndExtension, DefaultOptionCollectionMetadataExtensionMsg, }; use cw_ownable::Ownership; @@ -64,13 +64,13 @@ pub enum QueryMsg< NumTokens {}, #[deprecated(since = "0.19.0", note = "Please use GetCollectionMetadata instead")] - #[returns(CollectionMetadata)] + #[returns(CollectionMetadataAndExtension)] /// Deprecated: use GetCollectionMetadata instead! Will be removed in next release! ContractInfo {}, /// With MetaData Extension. /// Returns top-level metadata about the contract - #[returns(CollectionMetadata)] + #[returns(CollectionMetadataAndExtension)] GetCollectionMetadata {}, #[deprecated(since = "0.19.0", note = "Please use GetMinterOwnership instead")] diff --git a/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs index eb4315775..9be7ad7a4 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs @@ -9,7 +9,7 @@ use cw721::{ DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, }; -use cw721_base::execute::Cw721Execute; +use cw721_base::traits::Cw721Execute; /// Migrates cw721 states: /// (1) legacy creator and minter migration, now using cw-ownable diff --git a/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs b/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs index 834e6cd5b..244e0c89b 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs @@ -1,9 +1,10 @@ use crate::{ContractError, Sg721Contract}; use cosmwasm_std::{DepsMut, Empty, Env, Event, Response}; -use cw721::traits::StateFactory; +use cw721::execute::update_collection_metadata; +use cw721::msg::CollectionMetadataMsg; use cw721::{ - msg::CollectionMetadataExtensionMsg, query::Cw721Query, + msg::CollectionMetadataExtensionMsg, traits::Cw721Query, DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, RoyaltyInfo, }; @@ -23,33 +24,35 @@ pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result::default(); let event = Event::new("migrate-3.1.0"); // migrate only in case collection metadata is not set - let mut collection_metadata = contract + let collection_metadata = contract .parent - .query_collection_metadata(deps.as_ref(), env)?; + .query_collection_metadata_and_extension(deps.as_ref())?; let event = match collection_metadata.extension.clone() { Some(_) => event, None => { let legacy_collection_info_store: Item> = Item::new("collection_info"); let legacy_collection_info = legacy_collection_info_store.load(deps.storage)?; - let collection_metadata_msg = CollectionMetadataExtensionMsg:: { - description: Some(legacy_collection_info.description), - explicit_content: legacy_collection_info.explicit_content, - external_link: legacy_collection_info.external_link, - image: Some(legacy_collection_info.image), - start_trading_time: legacy_collection_info.start_trading_time, - royalty_info: legacy_collection_info.royalty_info.map(|r| r.into()), + let collection_metadata_extension_msg = + CollectionMetadataExtensionMsg:: { + description: Some(legacy_collection_info.description), + explicit_content: legacy_collection_info.explicit_content, + external_link: legacy_collection_info.external_link, + image: Some(legacy_collection_info.image), + start_trading_time: legacy_collection_info.start_trading_time, + royalty_info: legacy_collection_info.royalty_info.map(|r| r.into()), + }; + let collection_metadata_msg = CollectionMetadataMsg { + name: Some(collection_metadata.name), + symbol: Some(collection_metadata.symbol), + extension: Some(collection_metadata_extension_msg.clone()), }; - let updated_collection_metadata_extension_result = - collection_metadata_msg.create(Some(deps.as_ref()), Some(env), None, None); - let updated_collection_metadata_extension = - updated_collection_metadata_extension_result?; - collection_metadata.extension = Some(updated_collection_metadata_extension); - contract - .parent - .config - .collection_metadata - .save(deps.storage, &collection_metadata)?; + + update_collection_metadata::< + DefaultOptionCollectionMetadataExtension, + DefaultOptionCollectionMetadataExtensionMsg, + Empty, + >(deps, None, env.into(), collection_metadata_msg)?; event } }; diff --git a/contracts/collections/sg721-nt/examples/schema.rs b/contracts/collections/sg721-nt/examples/schema.rs index dc3f0f21a..957215b55 100644 --- a/contracts/collections/sg721-nt/examples/schema.rs +++ b/contracts/collections/sg721-nt/examples/schema.rs @@ -4,7 +4,7 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; use cw721::{ - state::CollectionMetadata, DefaultOptionCollectionMetadataExtension, + CollectionMetadataAndExtension, DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, }; #[allow(deprecated)] @@ -51,7 +51,7 @@ fn main() { #[allow(deprecated)] export_schema(&schema_for!(ContractInfoResponse), &out_dir); export_schema( - &schema_for!(CollectionMetadata), + &schema_for!(CollectionMetadataAndExtension), &out_dir, ); export_schema_with_title( diff --git a/contracts/collections/sg721-nt/src/lib.rs b/contracts/collections/sg721-nt/src/lib.rs index 385ec03db..28a136bff 100644 --- a/contracts/collections/sg721-nt/src/lib.rs +++ b/contracts/collections/sg721-nt/src/lib.rs @@ -37,7 +37,7 @@ pub mod entry { use crate::msg::ExecuteMsg; use cosmwasm_std::{Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdError}; use cw721::msg::Cw721MigrateMsg; - use cw721_base::execute::Cw721Execute; + use cw721_base::traits::Cw721Execute; use sg721_base::ContractError; #[entry_point] diff --git a/contracts/collections/sg721-updatable/examples/schema.rs b/contracts/collections/sg721-updatable/examples/schema.rs index 775d8d7c4..3608f9dad 100644 --- a/contracts/collections/sg721-updatable/examples/schema.rs +++ b/contracts/collections/sg721-updatable/examples/schema.rs @@ -4,7 +4,7 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; use cw721::{ - state::CollectionMetadata, CollectionMetadataExtension, + CollectionMetadataAndExtension, CollectionMetadataExtensionWrapper, DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, RoyaltyInfo, }; #[allow(deprecated)] @@ -41,7 +41,9 @@ fn main() { #[allow(deprecated)] export_schema(&schema_for!(CollectionInfoResponse), &out_dir); export_schema( - &schema_for!(CollectionMetadata>), + &schema_for!( + CollectionMetadataAndExtension> + ), &out_dir, ); export_schema_with_title( @@ -61,7 +63,7 @@ fn main() { #[allow(deprecated)] export_schema(&schema_for!(ContractInfoResponse), &out_dir); export_schema( - &schema_for!(CollectionMetadata), + &schema_for!(CollectionMetadataAndExtension), &out_dir, ); export_schema_with_title( diff --git a/contracts/collections/sg721-updatable/src/contract.rs b/contracts/collections/sg721-updatable/src/contract.rs index fc283b984..0914222a4 100644 --- a/contracts/collections/sg721-updatable/src/contract.rs +++ b/contracts/collections/sg721-updatable/src/contract.rs @@ -256,7 +256,7 @@ mod tests { from_json, to_json_binary, ContractInfoResponse, ContractResult, Empty, OwnedDeps, Querier, QuerierResult, QueryRequest, SystemError, SystemResult, WasmQuery, }; - use cw721_base::query::Cw721Query; + use cw721_base::traits::Cw721Query; use sg721::{CollectionInfo, InstantiateMsg}; use std::marker::PhantomData; diff --git a/test-suite/src/sg721_base/tests/integration_tests.rs b/test-suite/src/sg721_base/tests/integration_tests.rs index 0045c71d1..bd036fba2 100644 --- a/test-suite/src/sg721_base/tests/integration_tests.rs +++ b/test-suite/src/sg721_base/tests/integration_tests.rs @@ -1074,9 +1074,9 @@ mod tests { use super::*; use cosmwasm_std::testing::mock_env; use cw721::{ - msg::Cw721MigrateMsg, state::CollectionMetadata, CollectionMetadataExtension, - DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, - RoyaltyInfo, + msg::Cw721MigrateMsg, state::CollectionMetadataAndExtension, + CollectionMetadataExtensionWrapper, DefaultOptionCollectionMetadataExtension, + DefaultOptionNftMetadataExtension, RoyaltyInfo, }; use sg721_base::msg::QueryMsg; @@ -1093,7 +1093,7 @@ mod tests { .unwrap(); // throws a generic error, for unknown GetCollectionMetadata query app.wrap() - .query_wasm_smart::>( + .query_wasm_smart::>( contract.clone(), &QueryMsg::< DefaultOptionNftMetadataExtension, @@ -1114,7 +1114,7 @@ mod tests { // assert collection metadata let collection_metadata = app .wrap() - .query_wasm_smart::>( + .query_wasm_smart::>( contract.clone(), &QueryMsg::< DefaultOptionNftMetadataExtension, @@ -1125,11 +1125,11 @@ mod tests { let env = mock_env(); assert_eq!( collection_metadata, - CollectionMetadata:: { + CollectionMetadataAndExtension:: { name: "Collection Name".to_string(), symbol: "COL".to_string(), updated_at: env.block.time, - extension: Some(CollectionMetadataExtension:: { + extension: Some(CollectionMetadataExtensionWrapper:: { description: legacy_collection_info.description, image: legacy_collection_info.image, external_link: legacy_collection_info.external_link, From 98fd413d0556bb00ca4f3b6516499993fb6c742c Mon Sep 17 00:00:00 2001 From: mr-t Date: Sat, 23 Mar 2024 16:57:16 +0100 Subject: [PATCH 19/24] update lib --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6e220b88f..ae10e9c5a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1367,7 +1367,7 @@ dependencies = [ [[package]] name = "cw721" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#bb0228572db9b2a371e2e014fcc8a59ae9de88df" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#eec41c0db193a17cb70750c41d71d6873a5710ac" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1422,7 +1422,7 @@ dependencies = [ [[package]] name = "cw721-base" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#bb0228572db9b2a371e2e014fcc8a59ae9de88df" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#eec41c0db193a17cb70750c41d71d6873a5710ac" dependencies = [ "cosmwasm-std", "cw-ownable 0.6.0", @@ -3287,9 +3287,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.3" +version = "1.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", From 52beddeb7fea6ce29c1b8aff6c357b968e53d415 Mon Sep 17 00:00:00 2001 From: mr-t Date: Mon, 25 Mar 2024 00:43:33 +0100 Subject: [PATCH 20/24] final cleanup, docs, renamings, update libs --- Cargo.lock | 67 ++++---- .../collections/sg721-base/examples/schema.rs | 23 ++- .../collections/sg721-base/src/contract.rs | 69 ++++---- contracts/collections/sg721-base/src/lib.rs | 58 ++++--- contracts/collections/sg721-base/src/msg.rs | 108 +++++++------ contracts/collections/sg721-base/src/state.rs | 132 ++++++++------- .../sg721-base/src/upgrades/mod.rs | 2 +- ... => v3_0_0_ownable_and_collection_info.rs} | 16 +- .../src/upgrades/v3_1_0_royalty_timestamp.rs | 14 +- .../upgrades/v3_8_0_collection_metadata.rs | 49 +++--- .../collections/sg721-nt/examples/schema.rs | 22 ++- contracts/collections/sg721-nt/src/lib.rs | 31 ++-- .../sg721-updatable/examples/schema.rs | 25 ++- .../sg721-updatable/src/contract.rs | 24 +-- .../collections/sg721-updatable/src/lib.rs | 9 +- .../collections/sg721-updatable/src/msg.rs | 28 ++-- contracts/minters/base-minter/src/contract.rs | 35 ++-- .../open-edition-minter/src/contract.rs | 9 +- .../open-edition-minter/src/helpers.rs | 9 +- .../vending-minter-merkle-wl/src/contract.rs | 13 +- .../vending-minter-wl-flex/src/contract.rs | 13 +- .../minters/vending-minter/src/contract.rs | 13 +- packages/sg2/src/tests.rs | 2 +- packages/sg721/src/lib.rs | 63 ++++---- .../base_minter/tests/integration_tests.rs | 19 ++- test-suite/src/common_setup/contract_boxes.rs | 6 +- .../vending_minter/mock_params.rs | 6 +- .../complete_mint_all_outcomes_validation.rs | 14 +- .../src/sg721_base/tests/integration_tests.rs | 153 ++++++++++-------- .../src/vending_minter/tests/address_limit.rs | 14 +- .../src/vending_minter/tests/happy_unhappy.rs | 13 +- .../src/vending_minter/tests/trading_time.rs | 9 +- .../tests/trading_time_updatable.rs | 9 +- .../src/vending_minter/tests/updatable.rs | 14 +- .../src/vending_minter/tests/whitelist.rs | 11 +- .../vending_minter/tests/zero_mint_price.rs | 10 +- 36 files changed, 606 insertions(+), 506 deletions(-) rename contracts/collections/sg721-base/src/upgrades/{v3_0_0_ownable_and_collection_metadata.rs => v3_0_0_ownable_and_collection_info.rs} (79%) diff --git a/Cargo.lock b/Cargo.lock index ae10e9c5a..ce6cd988d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -105,7 +105,7 @@ dependencies = [ "async-lock 3.3.0", "async-task", "concurrent-queue", - "fastrand 2.0.1", + "fastrand 2.0.2", "futures-lite 2.3.0", "slab", ] @@ -157,7 +157,7 @@ dependencies = [ "futures-io", "futures-lite 2.3.0", "parking", - "polling 3.5.0", + "polling 3.6.0", "rustix 0.38.32", "slab", "tracing", @@ -229,7 +229,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -240,13 +240,13 @@ checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" [[package]] name = "async-trait" -version = "0.1.78" +version = "0.1.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "461abc97219de0eaaf81fe3ef974a540158f3d079c2ab200f891f1a2ef201e85" +checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -274,7 +274,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -584,7 +584,7 @@ dependencies = [ "async-channel 2.2.0", "async-lock 3.3.0", "async-task", - "fastrand 2.0.1", + "fastrand 2.0.2", "futures-io", "futures-lite 2.3.0", "piper", @@ -617,7 +617,7 @@ dependencies = [ "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", "syn_derive", ] @@ -1367,7 +1367,7 @@ dependencies = [ [[package]] name = "cw721" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#eec41c0db193a17cb70750c41d71d6873a5710ac" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#8b211cea2f80e588ab792f34cd77413a6ff3ef51" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1422,7 +1422,7 @@ dependencies = [ [[package]] name = "cw721-base" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#eec41c0db193a17cb70750c41d71d6873a5710ac" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#8b211cea2f80e588ab792f34cd77413a6ff3ef51" dependencies = [ "cosmwasm-std", "cw-ownable 0.6.0", @@ -1896,9 +1896,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" [[package]] name = "ff" @@ -2038,7 +2038,7 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand 2.0.1", + "fastrand 2.0.2", "futures-core", "futures-io", "parking", @@ -2053,7 +2053,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -2936,7 +2936,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -2967,7 +2967,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -2989,7 +2989,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" dependencies = [ "atomic-waker", - "fastrand 2.0.1", + "fastrand 2.0.2", "futures-io", ] @@ -3031,12 +3031,13 @@ dependencies = [ [[package]] name = "polling" -version = "3.5.0" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" +checksum = "e0c976a60b2d7e99d6f229e414670a9b85d13ac305cc6d1e9c134de58c5aaaf6" dependencies = [ "cfg-if", "concurrent-queue", + "hermit-abi 0.3.9", "pin-project-lite", "rustix 0.38.32", "tracing", @@ -3187,7 +3188,7 @@ dependencies = [ "itertools 0.11.0", "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -3746,7 +3747,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -3779,7 +3780,7 @@ checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -4352,9 +4353,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.53" +version = "2.0.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" +checksum = "002a1b3dbf967edfafc32655d0f377ab0bb7b994aa1d32c8cc7e9b8bf3ebb8f0" dependencies = [ "proc-macro2", "quote", @@ -4370,7 +4371,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -4509,7 +4510,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d506c7664333e246f564949bee4ed39062aa0f11918e6f5a95f553cdad65c274" dependencies = [ "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -4590,7 +4591,7 @@ checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -4682,7 +4683,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -4841,7 +4842,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] [[package]] @@ -5180,7 +5181,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", "wasm-bindgen-shared", ] @@ -5214,7 +5215,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5499,5 +5500,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.55", ] diff --git a/contracts/collections/sg721-base/examples/schema.rs b/contracts/collections/sg721-base/examples/schema.rs index 7ab574ed2..7996bdc3f 100644 --- a/contracts/collections/sg721-base/examples/schema.rs +++ b/contracts/collections/sg721-base/examples/schema.rs @@ -3,15 +3,14 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; -use cw721::CollectionMetadataAndExtension; +use cosmwasm_std::Empty; use cw721_base::{ msg::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, MinterResponse, NftInfoResponse, - NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, + AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, + CollectionInfoAndExtensionResponse, MinterResponse, NftInfoResponse, NumTokensResponse, + OperatorsResponse, OwnerOfResponse, TokensResponse, }, - state::CollectionMetadata, - CollectionMetadataExtensionWrapper, DefaultOptionCollectionMetadataExtension, - DefaultOptionNftMetadataExtension, RoyaltyInfo, + DefaultOptionalCollectionExtension, DefaultOptionalNftExtension, }; use sg721::InstantiateMsg; #[allow(deprecated)] @@ -25,19 +24,17 @@ fn main() { export_schema(&schema_for!(InstantiateMsg), &out_dir); export_schema( - &schema_for!(QueryMsg), + &schema_for!(QueryMsg), &out_dir, ); #[allow(deprecated)] export_schema(&schema_for!(CollectionInfoResponse), &out_dir); export_schema( - &schema_for!( - CollectionMetadataAndExtension> - ), + &schema_for!(CollectionInfoAndExtensionResponse), &out_dir, ); export_schema_with_title( - &schema_for!(AllNftInfoResponse), + &schema_for!(AllNftInfoResponse), &out_dir, "AllNftInfoResponse", ); @@ -52,11 +49,11 @@ fn main() { export_schema(&schema_for!(ApprovalsResponse), &out_dir); export_schema(&schema_for!(OperatorsResponse), &out_dir); export_schema( - &schema_for!(CollectionMetadataAndExtension), + &schema_for!(CollectionInfoAndExtensionResponse), &out_dir, ); export_schema_with_title( - &schema_for!(NftInfoResponse), + &schema_for!(NftInfoResponse), &out_dir, "NftInfoResponse", ); diff --git a/contracts/collections/sg721-base/src/contract.rs b/contracts/collections/sg721-base/src/contract.rs index 0b8d480f0..106ccbd06 100644 --- a/contracts/collections/sg721-base/src/contract.rs +++ b/contracts/collections/sg721-base/src/contract.rs @@ -1,10 +1,9 @@ -use cw721::msg::{CollectionMetadataMsg, Cw721MigrateMsg}; +use cw721::msg::{CollectionInfoMsg, Cw721MigrateMsg}; use cw721::state::{MAX_COLLECTION_DESCRIPTION_LENGTH, MINTER}; -use cw721::traits::{Cw721CustomMsg, Cw721State}; -use cw721_base::msg::{CollectionMetadataExtensionMsg, RoyaltyInfoResponse}; +use cw721::traits::{Contains, Cw721CustomMsg, Cw721State}; +use cw721_base::msg::{CollectionExtensionMsg, RoyaltyInfoResponse}; use cw721_base::{ - traits::StateFactory, DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + traits::StateFactory, DefaultOptionalCollectionExtension, DefaultOptionalCollectionExtensionMsg, }; use cosmwasm_std::{ @@ -24,23 +23,35 @@ use crate::{ContractError, Sg721Contract}; use crate::entry::{CONTRACT_NAME, CONTRACT_VERSION}; -impl<'a, TNftMetadataExtension, TNftMetadataExtensionMsg, TCustomResponseMsg> +impl< + 'a, + TNftExtension, + TNftExtensionMsg, + TExtensionMsg, + TExtensionQueryMsg, + TCustomResponseMsg, + > Sg721Contract< 'a, - // Metadata defined in NftInfo (used for mint). - TNftMetadataExtension, - // Message passed for updating metadata. - TNftMetadataExtensionMsg, - // Extension defined in CollectionMetadata. - DefaultOptionCollectionMetadataExtension, - // Message passed for updating collection info extension. - DefaultOptionCollectionMetadataExtensionMsg, + // NftInfo extension (onchain metadata). + TNftExtension, + // NftInfo extension msg for onchain metadata. + TNftExtensionMsg, + // CollectionInfo extension (onchain attributes). + DefaultOptionalCollectionExtension, + // CollectionInfo extension msg for onchain collection attributes. + DefaultOptionalCollectionExtensionMsg, + // Custom extension msg for custom contract logic. Default implementation is a no-op. + TExtensionMsg, + // Custom query msg for custom contract logic. Default implementation returns an empty binary. + TExtensionQueryMsg, // Defines for `CosmosMsg::Custom` in response. Barely used, so `Empty` can be used. TCustomResponseMsg, > where - TNftMetadataExtension: Cw721State, - TNftMetadataExtensionMsg: Cw721CustomMsg + StateFactory, + TNftExtension: Cw721State + Contains, + TNftExtensionMsg: Cw721CustomMsg + StateFactory, + TExtensionQueryMsg: Cw721CustomMsg, TCustomResponseMsg: CustomMsg, { #[allow(deprecated)] @@ -92,7 +103,7 @@ where deps: DepsMut, env: Env, info: MessageInfo, - msg: ExecuteMsg, + msg: ExecuteMsg, ) -> Result, ContractError> { match msg { // ---- sg721 specific msgs ---- @@ -122,7 +133,7 @@ where ) -> Result, ContractError> { let collection_info = self .parent - .query_collection_metadata_and_extension(deps.as_ref())?; + .query_collection_info_and_extension(deps.as_ref())?; if self.frozen_collection_info.load(deps.storage)? { return Err(ContractError::CollectionInfoFrozen {}); @@ -147,15 +158,15 @@ where .save(deps.storage, &env.block.time)?; } - let collection_extension: CollectionMetadataExtensionMsg = + let collection_extension: CollectionExtensionMsg = collection_msg.into(); - let msg = CollectionMetadataMsg { + let msg = CollectionInfoMsg { name: None, symbol: None, extension: Some(collection_extension), }; self.parent - .update_collection_metadata(deps, Some(&info), Some(&env), msg)?; + .update_collection_info(deps, Some(&info), Some(&env), msg)?; let event = Event::new("update_collection_info").add_attribute("sender", info.sender); Ok(Response::new().add_event(event)) @@ -172,10 +183,10 @@ where ) -> Result, ContractError> { assert_minter_owner(deps.storage, &info.sender)?; - let msg = CollectionMetadataMsg { + let msg = CollectionInfoMsg { name: None, symbol: None, - extension: Some(CollectionMetadataExtensionMsg { + extension: Some(CollectionExtensionMsg { description: None, image: None, external_link: None, @@ -185,7 +196,7 @@ where }), }; self.parent - .update_collection_metadata(deps, Some(&info), Some(&env), msg)?; + .update_collection_info(deps, Some(&info), Some(&env), msg)?; let event = Event::new("update_start_trading_time").add_attribute("sender", info.sender); Ok(Response::new().add_event(event)) @@ -214,7 +225,7 @@ where deps: DepsMut, env: Env, info: MessageInfo, - nft_data: NftParams, + nft_data: NftParams, ) -> Result, ContractError> { assert_minter_owner(deps.storage, &info.sender)?; let (token_id, owner, token_uri, extension) = match nft_data { @@ -241,7 +252,7 @@ where &self, deps: Deps, env: Env, - msg: QueryMsg, + msg: QueryMsg, ) -> Result { match msg { #[allow(deprecated)] @@ -255,7 +266,7 @@ where &self, deps: Deps, ) -> Result { - let collection_info = self.parent.query_collection_metadata_and_extension(deps)?; + let collection_info = self.parent.query_collection_info_and_extension(deps)?; let creator = self .get_creator(deps.storage)? @@ -291,7 +302,7 @@ where let mut response = Response::new(); // these upgrades can always be called. migration is only executed in case new stores are empty! It is safe calling these on any version. - response = crate::upgrades::v3_0_0_ownable_and_collection_metadata::upgrade( + response = crate::upgrades::v3_0_0_ownable_and_collection_info::upgrade( deps.branch(), &env, response, @@ -299,7 +310,7 @@ where )?; response = crate::upgrades::v3_1_0_royalty_timestamp::upgrade(deps.branch(), &env, response)?; - // after migration of collection metadata in cw721, we can migrate collection info to new collection metadata extension + // after migration of collection metadata in cw721, we can migrate collection info to new collection extension response = crate::upgrades::v3_8_0_collection_metadata::upgrade(deps.branch(), &env, response)?; diff --git a/contracts/collections/sg721-base/src/lib.rs b/contracts/collections/sg721-base/src/lib.rs index 74c1a872b..5137e9bac 100644 --- a/contracts/collections/sg721-base/src/lib.rs +++ b/contracts/collections/sg721-base/src/lib.rs @@ -6,16 +6,16 @@ pub mod upgrades; pub use crate::error::ContractError; pub use crate::state::Sg721Contract; -use cw721::{DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg}; -use cw721_base::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cosmwasm_std::Empty; +use cw721::{DefaultOptionalCollectionExtensionMsg, DefaultOptionalNftExtensionMsg}; +use cw721_base::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; -pub type ExecuteMsg = sg721::ExecuteMsg< - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtensionMsg, ->; +pub type ExecuteMsg = + sg721::ExecuteMsg; pub type QueryMsg = cw721_base::msg::QueryMsg< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >; pub mod entry { @@ -43,10 +43,12 @@ pub mod entry { set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; let res = Sg721Contract::< - DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, + Empty, + Empty, Empty, >::default() .instantiate(deps, env, info, msg)?; @@ -64,10 +66,12 @@ pub mod entry { msg: ExecuteMsg, ) -> Result { Sg721Contract::< - DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, + Empty, + Empty, Empty, >::default() .execute(deps, env, info, msg) @@ -77,13 +81,15 @@ pub mod entry { pub fn query( deps: Deps, env: Env, - msg: QueryMsg, + msg: QueryMsg, ) -> Result { Sg721Contract::< - DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, + Empty, + Empty, Empty, >::default() .query(deps, env, msg) @@ -97,10 +103,12 @@ pub mod entry { msg: Cw721MigrateMsg, ) -> Result { Sg721Contract::< - DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, + Empty, + Empty, Empty, >::migrate(deps, env, msg) } diff --git a/contracts/collections/sg721-base/src/msg.rs b/contracts/collections/sg721-base/src/msg.rs index c368805bd..d35cdc1fa 100644 --- a/contracts/collections/sg721-base/src/msg.rs +++ b/contracts/collections/sg721-base/src/msg.rs @@ -1,4 +1,5 @@ use cw721::msg::RoyaltyInfoResponse; +use cw721::traits::Cw721CustomMsg; use cw721::traits::Cw721State; use cosmwasm_schema::cw_serde; @@ -6,12 +7,12 @@ use cosmwasm_schema::QueryResponses; use cosmwasm_std::{coin, Addr, BankMsg, Event, StdError, StdResult, Timestamp, Uint128}; use cw721_base::{ msg::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, MinterResponse, NftInfoResponse, - NumTokensResponse, OperatorsResponse, OwnerOfResponse, QueryMsg as Cw721QueryMsg, + AllInfoResponse, AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, + CollectionInfoAndExtensionResponse, MinterResponse, NftInfoResponse, NumTokensResponse, + OperatorResponse, OperatorsResponse, OwnerOfResponse, QueryMsg as Cw721QueryMsg, TokensResponse, }, - state::CollectionMetadataAndExtension, - DefaultOptionCollectionMetadataExtensionMsg, + state::CollectionExtensionAttributes, }; use cw_ownable::Ownership; use sg_std::{Response, SubMsg, NATIVE_DENOM}; @@ -21,13 +22,15 @@ use sg_std::{Response, SubMsg, NATIVE_DENOM}; #[allow(deprecated)] pub enum QueryMsg< // Return type of NFT metadata defined in `NftInfo` and `AllNftInfo`. - TNftMetadataExtension, - // Return type of collection metadata extension defined in `GetCollectionMetadata`. - TCollectionMetadataExtension, + TNftExtension, + // Return type of collection extension defined in `GetCollectionInfo`. + TCollectionExtension, + // Custom query msg for custom contract logic. Default implementation returns an empty binary. + TExtensionQueryMsg, > { #[allow(deprecated)] #[returns(CollectionInfoResponse)] - #[deprecated = "Please use GetCollectionMetadata instead"] + #[deprecated = "Please use GetCollectionInfo instead"] CollectionInfo {}, // ---- cw721 v0.19.0 msgs ---- @@ -51,6 +54,14 @@ pub enum QueryMsg< token_id: String, include_expired: Option, }, + /// Return approval of a given operator for all tokens of an owner, error if not set + #[returns(OperatorResponse)] + Operator { + owner: String, + operator: String, + include_expired: Option, + }, + /// List all operators that can access all of the owner's tokens #[returns(OperatorsResponse)] AllOperators { owner: String, @@ -63,15 +74,25 @@ pub enum QueryMsg< #[returns(NumTokensResponse)] NumTokens {}, - #[deprecated(since = "0.19.0", note = "Please use GetCollectionMetadata instead")] - #[returns(CollectionMetadataAndExtension)] - /// Deprecated: use GetCollectionMetadata instead! Will be removed in next release! + #[deprecated( + since = "0.19.0", + note = "Please use GetCollectionInfoAndExtension instead" + )] + #[returns(CollectionInfoAndExtensionResponse)] + /// Deprecated: use GetCollectionInfoAndExtension instead! Will be removed in next release! ContractInfo {}, - /// With MetaData Extension. - /// Returns top-level metadata about the contract - #[returns(CollectionMetadataAndExtension)] - GetCollectionMetadata {}, + /// Returns `CollectionInfoAndExtensionResponse` + #[returns(CollectionInfoAndExtensionResponse)] + GetCollectionInfoAndExtension {}, + + /// returns `AllInfoResponse` which contains contract, collection and nft details + #[returns(AllInfoResponse)] + GetAllInfo {}, + + /// Returns `CollectionExtensionAttributes` + #[returns(CollectionExtensionAttributes)] + GetCollectionExtensionAttributes {}, #[deprecated(since = "0.19.0", note = "Please use GetMinterOwnership instead")] #[returns(Ownership)] @@ -93,12 +114,20 @@ pub enum QueryMsg< /// With MetaData Extension. /// Returns metadata about one particular token, based on *ERC721 Metadata JSON Schema* /// but directly from the contract - #[returns(NftInfoResponse)] + #[returns(NftInfoResponse)] NftInfo { token_id: String }, + + #[returns(Option>)] + GetNftByExtension { + extension: TNftExtension, + start_after: Option, + limit: Option, + }, + /// With MetaData Extension. /// Returns the result of both `NftInfo` and `OwnerOf` as one query as an optimization /// for clients - #[returns(AllNftInfoResponse)] + #[returns(AllNftInfoResponse)] AllNftInfo { token_id: String, /// unset or false will filter out expired approvals, you must set to true to see them @@ -121,42 +150,29 @@ pub enum QueryMsg< limit: Option, }, - #[returns(Option)] - GetWithdrawAddress {}, - - // -- below queries, Extension and GetCollectionMetadataExtension, are just dummies, since type annotations are required for - // -- TNftMetadataExtension and TCollectionMetadataExtension, Error: - // -- "type annotations needed: cannot infer type for type parameter `TNftMetadataExtension` declared on the enum `Cw721QueryMsg`" - /// Use NftInfo instead. - /// No-op / NFT metadata query returning empty binary, needed for inferring type parameter during compile. - /// - /// Note: it may be extended in case there are use cases e.g. for specific NFT metadata query. + /// Custom msg query. Default implementation returns an empty binary. #[returns(())] - #[deprecated(since = "0.19.0", note = "Please use GetNftMetadata instead")] - Extension { msg: TNftMetadataExtension }, + Extension { msg: TExtensionQueryMsg }, #[returns(())] - GetNftMetadata { msg: TNftMetadataExtension }, + GetCollectionExtension { msg: TCollectionExtension }, - /// Use GetCollectionMetadata instead. - /// No-op / collection metadata extension query returning empty binary, needed for inferring type parameter during compile - /// - /// Note: it may be extended in case there are use cases e.g. for specific collection metadata query. - #[returns(())] - GetCollectionMetadataExtension { msg: TCollectionMetadataExtension }, + #[returns(Option)] + GetWithdrawAddress {}, } -impl - From> - for Cw721QueryMsg +impl + From> + for Cw721QueryMsg where - TNftMetadataExtension: Cw721State, - TCollectionMetadataExtension: Cw721State, + TNftExtension: Cw721State, + TCollectionExtension: Cw721State, + TExtensionQueryMsg: Cw721CustomMsg, { #[allow(deprecated)] fn from( - msg: QueryMsg, - ) -> Cw721QueryMsg { + msg: QueryMsg, + ) -> Cw721QueryMsg { match msg { QueryMsg::OwnerOf { token_id, @@ -194,7 +210,9 @@ where }, QueryMsg::NumTokens {} => Cw721QueryMsg::NumTokens {}, QueryMsg::ContractInfo {} => Cw721QueryMsg::ContractInfo {}, - QueryMsg::GetCollectionMetadata {} => Cw721QueryMsg::GetCollectionMetadata {}, + QueryMsg::GetCollectionInfoAndExtension {} => { + Cw721QueryMsg::GetCollectionInfoAndExtension {} + } QueryMsg::Ownership {} => Cw721QueryMsg::Ownership {}, QueryMsg::Minter {} => Cw721QueryMsg::Minter {}, QueryMsg::GetMinterOwnership {} => Cw721QueryMsg::GetMinterOwnership {}, @@ -225,7 +243,7 @@ where } #[cw_serde] -#[deprecated = "Please use `CollectionMetadata>` instead"] +#[deprecated = "Please use `CollectionInfo>` instead"] pub struct CollectionInfoResponse { pub creator: String, pub description: String, diff --git a/contracts/collections/sg721-base/src/state.rs b/contracts/collections/sg721-base/src/state.rs index 34599e0af..bed14a6fb 100644 --- a/contracts/collections/sg721-base/src/state.rs +++ b/contracts/collections/sg721-base/src/state.rs @@ -6,47 +6,61 @@ use std::ops::Deref; type Parent< 'a, - // Metadata defined in NftInfo (used for mint). - TNftMetadataExtension, - // Message passed for updating metadata. - TNftMetadataExtensionMsg, - // Extension defined in CollectionMetadata. - TCollectionMetadataExtension, - TCollectionMetadataExtensionMsg, + // NftInfo extension (onchain metadata). + TNftExtension, + // NftInfo extension msg for onchain metadata. + TNftExtensionMsg, + // CollectionInfo extension (onchain attributes). + TCollectionExtension, + // CollectionInfo extension msg for onchain collection attributes. + TCollectionExtensionMsg, + // Custom extension msg for custom contract logic. Default implementation is a no-op. + TExtensionMsg, + // Custom query msg for custom contract logic. Default implementation returns an empty binary. + TExtensionQueryMsg, // Defines for `CosmosMsg::Custom` in response. Barely used, so `Empty` can be used. TCustomResponseMsg, > = cw721_base::Cw721Contract< 'a, - TNftMetadataExtension, - TNftMetadataExtensionMsg, - TCollectionMetadataExtension, - TCollectionMetadataExtensionMsg, + TNftExtension, + TNftExtensionMsg, + TCollectionExtension, + TCollectionExtensionMsg, + TExtensionMsg, + TExtensionQueryMsg, TCustomResponseMsg, >; pub struct Sg721Contract< 'a, - // Metadata defined in NftInfo (used for mint). - TNftMetadataExtension, - // Message passed for updating metadata. - TNftMetadataExtensionMsg, - // Extension defined in CollectionMetadata. - TCollectionMetadataExtension, - TCollectionMetadataExtensionMsg, + // NftInfo extension (onchain metadata). + TNftExtension, + // NftInfo extension msg for onchain metadata. + TNftExtensionMsg, + // CollectionInfo extension (onchain attributes). + TCollectionExtension, + // CollectionInfo extension msg for onchain collection attributes. + TCollectionExtensionMsg, + // Custom extension msg for custom contract logic. Default implementation is a no-op. + TExtensionMsg, + // Custom query msg for custom contract logic. Default implementation returns an empty binary. + TExtensionQueryMsg, // Defines for `CosmosMsg::Custom` in response. Barely used, so `Empty` can be used. TCustomResponseMsg, > where - TNftMetadataExtension: Cw721State, - TNftMetadataExtensionMsg: Cw721CustomMsg, - TCollectionMetadataExtension: Cw721State, - TCollectionMetadataExtensionMsg: Cw721CustomMsg, + TNftExtension: Cw721State, + TNftExtensionMsg: Cw721CustomMsg, + TCollectionExtension: Cw721State, + TCollectionExtensionMsg: Cw721CustomMsg, { pub parent: Parent< 'a, - TNftMetadataExtension, - TNftMetadataExtensionMsg, - TCollectionMetadataExtension, - TCollectionMetadataExtensionMsg, + TNftExtension, + TNftExtensionMsg, + TCollectionExtension, + TCollectionExtensionMsg, + TExtensionMsg, + TExtensionQueryMsg, TCustomResponseMsg, >, /// Instantiate set to false by the minter, then true by creator to freeze collection info @@ -56,25 +70,29 @@ pub struct Sg721Contract< impl< 'a, - TNftMetadataExtension, - TNftMetadataExtensionMsg, - TCollectionMetadataExtension, - TCollectionMetadataExtensionMsg, + TNftExtension, + TNftExtensionMsg, + TCollectionExtension, + TCollectionExtensionMsg, + TExtensionMsg, + TExtensionQueryMsg, TCustomResponseMsg, > Default for Sg721Contract< 'a, - TNftMetadataExtension, - TNftMetadataExtensionMsg, - TCollectionMetadataExtension, - TCollectionMetadataExtensionMsg, + TNftExtension, + TNftExtensionMsg, + TCollectionExtension, + TCollectionExtensionMsg, + TExtensionMsg, + TExtensionQueryMsg, TCustomResponseMsg, > where - TNftMetadataExtension: Cw721State, - TNftMetadataExtensionMsg: Cw721CustomMsg, - TCollectionMetadataExtension: Cw721State, - TCollectionMetadataExtensionMsg: Cw721CustomMsg, + TNftExtension: Cw721State, + TNftExtensionMsg: Cw721CustomMsg, + TCollectionExtension: Cw721State, + TCollectionExtensionMsg: Cw721CustomMsg, { fn default() -> Self { Sg721Contract { @@ -87,32 +105,38 @@ where impl< 'a, - TNftMetadataExtension, - TNftMetadataExtensionMsg, - TCollectionMetadataExtension, - TCollectionMetadataExtensionMsg, + TNftExtension, + TNftExtensionMsg, + TCollectionExtension, + TCollectionExtensionMsg, + TExtensionMsg, + TExtensionQueryMsg, TCustomResponseMsg, > Deref for Sg721Contract< 'a, - TNftMetadataExtension, - TNftMetadataExtensionMsg, - TCollectionMetadataExtension, - TCollectionMetadataExtensionMsg, + TNftExtension, + TNftExtensionMsg, + TCollectionExtension, + TCollectionExtensionMsg, + TExtensionMsg, + TExtensionQueryMsg, TCustomResponseMsg, > where - TNftMetadataExtension: Cw721State, - TNftMetadataExtensionMsg: Cw721CustomMsg, - TCollectionMetadataExtension: Cw721State, - TCollectionMetadataExtensionMsg: Cw721CustomMsg, + TNftExtension: Cw721State, + TNftExtensionMsg: Cw721CustomMsg, + TCollectionExtension: Cw721State, + TCollectionExtensionMsg: Cw721CustomMsg, { type Target = Parent< 'a, - TNftMetadataExtension, - TNftMetadataExtensionMsg, - TCollectionMetadataExtension, - TCollectionMetadataExtensionMsg, + TNftExtension, + TNftExtensionMsg, + TCollectionExtension, + TCollectionExtensionMsg, + TExtensionMsg, + TExtensionQueryMsg, TCustomResponseMsg, >; diff --git a/contracts/collections/sg721-base/src/upgrades/mod.rs b/contracts/collections/sg721-base/src/upgrades/mod.rs index 0de018a10..b7733c368 100644 --- a/contracts/collections/sg721-base/src/upgrades/mod.rs +++ b/contracts/collections/sg721-base/src/upgrades/mod.rs @@ -1,3 +1,3 @@ -pub mod v3_0_0_ownable_and_collection_metadata; +pub mod v3_0_0_ownable_and_collection_info; pub mod v3_1_0_royalty_timestamp; pub mod v3_8_0_collection_metadata; diff --git a/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_info.rs similarity index 79% rename from contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs rename to contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_info.rs index 9be7ad7a4..15dfb3c7a 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_metadata.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_0_0_ownable_and_collection_info.rs @@ -5,9 +5,9 @@ use crate::{ use cosmwasm_std::{DepsMut, Empty, Env, Event, Response}; use cw721::{ - msg::Cw721MigrateMsg, DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, + msg::Cw721MigrateMsg, DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, }; use cw721_base::traits::Cw721Execute; @@ -30,10 +30,12 @@ pub fn upgrade( msg: Cw721MigrateMsg, ) -> Result { let contract = Sg721Contract::< - DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, + Empty, + Empty, Empty, >::default(); // cw721 migration covers these versions: 0.18. 0.17, 0.16 and 0.15 diff --git a/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs b/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs index 01c5b5e57..202ff0c18 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_1_0_royalty_timestamp.rs @@ -2,16 +2,18 @@ use crate::{ContractError, Sg721Contract}; use cosmwasm_std::{DepsMut, Empty, Env, Event, Response}; use cw721::{ - DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, - DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, + DefaultOptionalCollectionExtension, DefaultOptionalCollectionExtensionMsg, + DefaultOptionalNftExtension, DefaultOptionalNftExtensionMsg, }; pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result { let contract = Sg721Contract::< - DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, + Empty, + Empty, Empty, >::default(); // check whether royalty timestamp already exists diff --git a/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs b/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs index 244e0c89b..24426b4ce 100644 --- a/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs +++ b/contracts/collections/sg721-base/src/upgrades/v3_8_0_collection_metadata.rs @@ -1,56 +1,57 @@ use crate::{ContractError, Sg721Contract}; use cosmwasm_std::{DepsMut, Empty, Env, Event, Response}; -use cw721::execute::update_collection_metadata; -use cw721::msg::CollectionMetadataMsg; +use cw721::execute::update_collection_info; +use cw721::msg::CollectionInfoMsg; use cw721::{ - msg::CollectionMetadataExtensionMsg, traits::Cw721Query, - DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, - DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, RoyaltyInfo, + msg::CollectionExtensionMsg, traits::Cw721Query, DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, RoyaltyInfo, }; use cw_storage_plus::Item; #[allow(deprecated)] use sg721::{CollectionInfo, RoyaltyInfoResponse}; -/// Migrates collection info (sg721) into new collection metadata extension (cw721) +/// Migrates collection info (sg721) into new collection extension (cw721) #[allow(deprecated)] pub fn upgrade(deps: DepsMut, env: &Env, response: Response) -> Result { let contract = Sg721Contract::< - DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, + Empty, + Empty, Empty, >::default(); let event = Event::new("migrate-3.1.0"); // migrate only in case collection metadata is not set let collection_metadata = contract .parent - .query_collection_metadata_and_extension(deps.as_ref())?; + .query_collection_info_and_extension(deps.as_ref())?; let event = match collection_metadata.extension.clone() { Some(_) => event, None => { let legacy_collection_info_store: Item> = Item::new("collection_info"); let legacy_collection_info = legacy_collection_info_store.load(deps.storage)?; - let collection_metadata_extension_msg = - CollectionMetadataExtensionMsg:: { - description: Some(legacy_collection_info.description), - explicit_content: legacy_collection_info.explicit_content, - external_link: legacy_collection_info.external_link, - image: Some(legacy_collection_info.image), - start_trading_time: legacy_collection_info.start_trading_time, - royalty_info: legacy_collection_info.royalty_info.map(|r| r.into()), - }; - let collection_metadata_msg = CollectionMetadataMsg { + let collection_metadata_extension_msg = CollectionExtensionMsg:: { + description: Some(legacy_collection_info.description), + explicit_content: legacy_collection_info.explicit_content, + external_link: legacy_collection_info.external_link, + image: Some(legacy_collection_info.image), + start_trading_time: legacy_collection_info.start_trading_time, + royalty_info: legacy_collection_info.royalty_info.map(|r| r.into()), + }; + let collection_metadata_msg = CollectionInfoMsg { name: Some(collection_metadata.name), symbol: Some(collection_metadata.symbol), extension: Some(collection_metadata_extension_msg.clone()), }; - update_collection_metadata::< - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + update_collection_info::< + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, Empty, >(deps, None, env.into(), collection_metadata_msg)?; event diff --git a/contracts/collections/sg721-nt/examples/schema.rs b/contracts/collections/sg721-nt/examples/schema.rs index 957215b55..d90796dd6 100644 --- a/contracts/collections/sg721-nt/examples/schema.rs +++ b/contracts/collections/sg721-nt/examples/schema.rs @@ -3,15 +3,14 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; -use cw721::{ - CollectionMetadataAndExtension, DefaultOptionCollectionMetadataExtension, - DefaultOptionNftMetadataExtension, -}; +use cosmwasm_std::Empty; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; #[allow(deprecated)] use cw721_base::{ msg::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, Cw721QueryMsg, MinterResponse, - NftInfoResponse, NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, + AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, + CollectionInfoAndExtensionResponse, Cw721QueryMsg, MinterResponse, NftInfoResponse, + NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, }, ContractInfoResponse, }; @@ -26,15 +25,12 @@ fn main() { export_schema(&schema_for!(InstantiateMsg), &out_dir); export_schema( &schema_for!( - Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, - > + Cw721QueryMsg:: ), &out_dir, ); export_schema_with_title( - &schema_for!(AllNftInfoResponse), + &schema_for!(AllNftInfoResponse), &out_dir, "AllNftInfoResponse", ); @@ -51,11 +47,11 @@ fn main() { #[allow(deprecated)] export_schema(&schema_for!(ContractInfoResponse), &out_dir); export_schema( - &schema_for!(CollectionMetadataAndExtension), + &schema_for!(CollectionInfoAndExtensionResponse), &out_dir, ); export_schema_with_title( - &schema_for!(NftInfoResponse), + &schema_for!(NftInfoResponse), &out_dir, "NftInfoResponse", ); diff --git a/contracts/collections/sg721-nt/src/lib.rs b/contracts/collections/sg721-nt/src/lib.rs index 28a136bff..652d5375f 100644 --- a/contracts/collections/sg721-nt/src/lib.rs +++ b/contracts/collections/sg721-nt/src/lib.rs @@ -4,21 +4,24 @@ use cosmwasm_std::entry_point; pub mod msg; use cosmwasm_std::Empty; use cw721::{ - DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, - DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, + DefaultOptionalCollectionExtension, DefaultOptionalCollectionExtensionMsg, + DefaultOptionalNftExtension, DefaultOptionalNftExtensionMsg, }; use sg721::InstantiateMsg; use sg721_base::Sg721Contract; pub type QueryMsg = sg721_base::msg::QueryMsg< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >; pub type Sg721NonTransferableContract<'a> = Sg721Contract< 'a, - DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, + Empty, + Empty, Empty, >; use sg721_base::msg::NftParams; @@ -61,7 +64,7 @@ pub mod entry { deps: DepsMut, env: Env, info: MessageInfo, - msg: ExecuteMsg, + msg: ExecuteMsg, ) -> Result { match msg { ExecuteMsg::Burn { token_id } => Sg721NonTransferableContract::default() @@ -126,10 +129,12 @@ pub mod entry { // perform the upgrade // cw721 migration allows all versions: 0.18. 0.17, 0.16 and older let contract = Sg721Contract::< - DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, + Empty, + Empty, Empty, >::default(); let migrate_msg = Cw721MigrateMsg::WithUpdate { diff --git a/contracts/collections/sg721-updatable/examples/schema.rs b/contracts/collections/sg721-updatable/examples/schema.rs index 3608f9dad..d1b8a619a 100644 --- a/contracts/collections/sg721-updatable/examples/schema.rs +++ b/contracts/collections/sg721-updatable/examples/schema.rs @@ -3,15 +3,14 @@ use std::fs::create_dir_all; use cosmwasm_schema::{export_schema, export_schema_with_title, remove_schemas, schema_for}; -use cw721::{ - CollectionMetadataAndExtension, CollectionMetadataExtensionWrapper, - DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension, RoyaltyInfo, -}; +use cosmwasm_std::Empty; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; #[allow(deprecated)] pub use cw721_base::{ msg::{ - AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, MinterResponse, NftInfoResponse, - NumTokensResponse, OperatorsResponse, OwnerOfResponse, TokensResponse, + AllNftInfoResponse, ApprovalResponse, ApprovalsResponse, + CollectionInfoAndExtensionResponse, MinterResponse, NftInfoResponse, NumTokensResponse, + OperatorsResponse, OwnerOfResponse, TokensResponse, }, ContractInfoResponse, }; @@ -29,25 +28,23 @@ fn main() { export_schema(&schema_for!(InstantiateMsg), &out_dir); export_schema( - &schema_for!(ExecuteMsg), + &schema_for!(ExecuteMsg), &out_dir, ); export_schema( &schema_for!( - QueryMsg:: + QueryMsg:: ), &out_dir, ); #[allow(deprecated)] export_schema(&schema_for!(CollectionInfoResponse), &out_dir); export_schema( - &schema_for!( - CollectionMetadataAndExtension> - ), + &schema_for!(CollectionInfoAndExtensionResponse), &out_dir, ); export_schema_with_title( - &schema_for!(AllNftInfoResponse), + &schema_for!(AllNftInfoResponse), &out_dir, "AllNftInfoResponse", ); @@ -63,11 +60,11 @@ fn main() { #[allow(deprecated)] export_schema(&schema_for!(ContractInfoResponse), &out_dir); export_schema( - &schema_for!(CollectionMetadataAndExtension), + &schema_for!(CollectionInfoAndExtensionResponse), &out_dir, ); export_schema_with_title( - &schema_for!(NftInfoResponse), + &schema_for!(NftInfoResponse), &out_dir, "NftInfoResponse", ); diff --git a/contracts/collections/sg721-updatable/src/contract.rs b/contracts/collections/sg721-updatable/src/contract.rs index 0914222a4..88dfcd3e1 100644 --- a/contracts/collections/sg721-updatable/src/contract.rs +++ b/contracts/collections/sg721-updatable/src/contract.rs @@ -9,8 +9,8 @@ use cosmwasm_std::{DepsMut, Env, Event, MessageInfo}; use cw2::set_contract_version; use cw721::msg::Cw721MigrateMsg; use cw721::{ - DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, - DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, + DefaultOptionalCollectionExtension, DefaultOptionalCollectionExtensionMsg, + DefaultOptionalNftExtension, DefaultOptionalNftExtensionMsg, }; use semver::Version; use sg721::InstantiateMsg; @@ -26,10 +26,12 @@ use sg721_base::ContractError::Unauthorized; use sg721_base::Sg721Contract; pub type Sg721UpdatableContract<'a> = Sg721Contract< 'a, - DefaultOptionNftMetadataExtension, - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtension, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, + Empty, + Empty, Empty, >; @@ -222,7 +224,7 @@ pub fn _migrate( let mut response = Response::new(); // these upgrades can always be called. migration is only executed in case new stores are empty! It is safe calling these on any version. - response = sg721_base::upgrades::v3_0_0_ownable_and_collection_metadata::upgrade( + response = sg721_base::upgrades::v3_0_0_ownable_and_collection_info::upgrade( deps.branch(), &env, response, @@ -374,14 +376,14 @@ mod tests { // Check token contains updated metadata let res = contract .parent - .query_nft_info(deps.as_ref(), &env, token_id.into()) + .query_nft_info(deps.as_ref().storage, token_id.into()) .unwrap(); assert_eq!(res.token_uri, updated_token_uri); // Update token metadata with None token_uri let update_msg = ExecuteMsg::< - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtensionMsg, >::UpdateTokenMetadata { token_id: token_id.to_string(), token_uri: None, @@ -389,7 +391,7 @@ mod tests { execute(deps.as_mut(), mock_env(), info.clone(), update_msg).unwrap(); let res = contract .parent - .query_nft_info(deps.as_ref(), &env, token_id.into()) + .query_nft_info(deps.as_ref().storage, token_id.into()) .unwrap(); assert_eq!(res.token_uri, None); diff --git a/contracts/collections/sg721-updatable/src/lib.rs b/contracts/collections/sg721-updatable/src/lib.rs index f621954a2..7a41b0610 100644 --- a/contracts/collections/sg721-updatable/src/lib.rs +++ b/contracts/collections/sg721-updatable/src/lib.rs @@ -21,9 +21,7 @@ pub mod entry { use cosmwasm_std::{entry_point, to_json_binary}; use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response}; use cw721::msg::Cw721MigrateMsg; - use cw721::{ - DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg, - }; + use cw721::{DefaultOptionalCollectionExtensionMsg, DefaultOptionalNftExtensionMsg}; #[entry_point] pub fn instantiate( @@ -40,10 +38,7 @@ pub mod entry { deps: DepsMut, env: Env, info: MessageInfo, - msg: ExecuteMsg< - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtensionMsg, - >, + msg: ExecuteMsg, ) -> Result { match msg { ExecuteMsg::FreezeTokenMetadata {} => execute_freeze_token_metadata(deps, env, info), diff --git a/contracts/collections/sg721-updatable/src/msg.rs b/contracts/collections/sg721-updatable/src/msg.rs index 4cdd17555..77c5c5182 100644 --- a/contracts/collections/sg721-updatable/src/msg.rs +++ b/contracts/collections/sg721-updatable/src/msg.rs @@ -1,9 +1,10 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::Binary; +use cosmwasm_std::Empty; use cosmwasm_std::Timestamp; -use cw721::DefaultOptionCollectionMetadataExtension; -use cw721::DefaultOptionNftMetadataExtension; -use cw721::DefaultOptionNftMetadataExtensionMsg; +use cw721::DefaultOptionalCollectionExtension; +use cw721::DefaultOptionalNftExtension; +use cw721::DefaultOptionalNftExtensionMsg; use cw_utils::Expiration; #[allow(deprecated)] use sg721::{RoyaltyInfoResponse, UpdateCollectionInfoMsg}; @@ -11,7 +12,7 @@ use sg721_base::msg::QueryMsg as Sg721QueryMsg; use sg721_base::ExecuteMsg as Sg721ExecuteMsg; #[cw_serde] -pub enum ExecuteMsg { +pub enum ExecuteMsg { /// Freeze token metadata so creator can no longer update token uris FreezeTokenMetadata {}, /// Creator calls can update token uris @@ -67,21 +68,19 @@ pub enum ExecuteMsg { /// Metadata JSON Schema token_uri: Option, /// Any custom extension used by this contract - extension: TNftMetadataExtensionMsg, + extension: TNftExtensionMsg, }, Extension { - msg: TCollectionMetadataExtensionMsg, + msg: TCollectionExtensionMsg, }, } -impl - From> for Sg721ExecuteMsg +impl + From> for Sg721ExecuteMsg where - TNftMetadataExtensionMsg: Clone + PartialEq + Into, + TNftExtensionMsg: Clone + PartialEq + Into, { - fn from( - msg: ExecuteMsg, - ) -> Sg721ExecuteMsg { + fn from(msg: ExecuteMsg) -> Sg721ExecuteMsg { match msg { ExecuteMsg::TransferNft { recipient, @@ -188,12 +187,11 @@ pub enum QueryMsg { } impl From - for Sg721QueryMsg + for Sg721QueryMsg { fn from( msg: QueryMsg, - ) -> Sg721QueryMsg - { + ) -> Sg721QueryMsg { match msg { QueryMsg::OwnerOf { token_id, diff --git a/contracts/minters/base-minter/src/contract.rs b/contracts/minters/base-minter/src/contract.rs index e50862a03..1da6cd321 100644 --- a/contracts/minters/base-minter/src/contract.rs +++ b/contracts/minters/base-minter/src/contract.rs @@ -10,8 +10,8 @@ use cosmwasm_std::{ }; use cw2::set_contract_version; use cw721::{ - DefaultOptionCollectionMetadataExtension, DefaultOptionCollectionMetadataExtensionMsg, - DefaultOptionNftMetadataExtension, DefaultOptionNftMetadataExtensionMsg, + DefaultOptionalCollectionExtension, DefaultOptionalCollectionExtensionMsg, + DefaultOptionalNftExtension, DefaultOptionalNftExtensionMsg, }; use cw_utils::{must_pay, nonpayable, parse_reply_instantiate_data}; use sg1::checked_fair_burn; @@ -128,8 +128,9 @@ pub fn execute_mint_sender( let collection_info: CollectionInfoResponse = deps.querier.query_wasm_smart( collection_address.clone(), &Sg721QueryMsg::CollectionInfo::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, > {}, )?; // allow only sg721 creator address to mint @@ -162,8 +163,9 @@ pub fn execute_mint_sender( // Create mint msgs let mint_msg = Sg721ExecuteMsg::< - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtensionMsg, + Empty, >::Mint { token_id: increment_token_index(deps.storage)?.to_string(), owner: info.sender.to_string(), @@ -194,13 +196,15 @@ pub fn execute_update_start_trading_time( nonpayable(&info)?; let sg721_contract_addr = COLLECTION_ADDRESS.load(deps.storage)?; - let collection_info: CollectionInfoResponse = deps.querier.query_wasm_smart( - sg721_contract_addr.clone(), - &Sg721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, - >::CollectionInfo {}, - )?; + let collection_info: CollectionInfoResponse = + deps.querier.query_wasm_smart( + sg721_contract_addr.clone(), + &Sg721QueryMsg::< + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, + >::CollectionInfo {}, + )?; if info.sender != collection_info.creator { return Err(ContractError::Unauthorized( "Sender is not creator".to_owned(), @@ -221,8 +225,9 @@ pub fn execute_update_start_trading_time( let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), msg: to_json_binary(&Sg721ExecuteMsg::< - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtensionMsg, + Empty, >::UpdateStartTradingTime(start_time))?, funds: vec![], }; diff --git a/contracts/minters/open-edition-minter/src/contract.rs b/contracts/minters/open-edition-minter/src/contract.rs index ad54b8786..5d6e01202 100644 --- a/contracts/minters/open-edition-minter/src/contract.rs +++ b/contracts/minters/open-edition-minter/src/contract.rs @@ -15,9 +15,7 @@ use cosmwasm_std::{ MessageInfo, Order, Reply, ReplyOn, Response, StdError, StdResult, SubMsg, Timestamp, WasmMsg, }; use cw2::set_contract_version; -use cw721_base::{ - DefaultOptionCollectionMetadataExtensionMsg, DefaultOptionNftMetadataExtensionMsg, -}; +use cw721_base::{DefaultOptionalCollectionExtensionMsg, DefaultOptionalNftExtensionMsg}; use cw_utils::{may_pay, maybe_addr, nonpayable, parse_reply_instantiate_data}; use open_edition_factory::msg::{OpenEditionMinterCreateMsg, ParamsResponse}; use open_edition_factory::types::NftMetadataType; @@ -604,8 +602,9 @@ pub fn execute_update_start_trading_time( let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), msg: to_json_binary(&Sg721ExecuteMsg::< - DefaultOptionNftMetadataExtensionMsg, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalNftExtensionMsg, + DefaultOptionalCollectionExtensionMsg, + Empty, >::UpdateStartTradingTime(start_time))?, funds: vec![], }; diff --git a/contracts/minters/open-edition-minter/src/helpers.rs b/contracts/minters/open-edition-minter/src/helpers.rs index 302bf084d..b2f5eb131 100644 --- a/contracts/minters/open-edition-minter/src/helpers.rs +++ b/contracts/minters/open-edition-minter/src/helpers.rs @@ -3,7 +3,7 @@ use cosmwasm_std::{ to_json_binary, Addr, Coin, ContractInfoResponse, CosmosMsg, CustomQuery, Empty, Querier, QuerierWrapper, StdError, StdResult, WasmMsg, WasmQuery, }; -use cw721_base::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721_base::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use sg721::ExecuteMsg as Sg721ExecuteMsg; use sg_metadata::Metadata; @@ -73,7 +73,7 @@ pub fn mint_nft_msg( let mint_msg = if let Some(extension) = extension { CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: sg721_address.to_string(), - msg: to_json_binary(&Sg721ExecuteMsg::::Mint { + msg: to_json_binary(&Sg721ExecuteMsg::::Mint { token_id, owner: recipient_addr.to_string(), token_uri: None, @@ -85,8 +85,9 @@ pub fn mint_nft_msg( CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: sg721_address.to_string(), msg: to_json_binary(&Sg721ExecuteMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Mint { token_id, owner: recipient_addr.to_string(), diff --git a/contracts/minters/vending-minter-merkle-wl/src/contract.rs b/contracts/minters/vending-minter-merkle-wl/src/contract.rs index 8758da350..c0864d2a2 100644 --- a/contracts/minters/vending-minter-merkle-wl/src/contract.rs +++ b/contracts/minters/vending-minter-merkle-wl/src/contract.rs @@ -16,7 +16,7 @@ use cosmwasm_std::{ Timestamp, Uint128, WasmMsg, }; use cw2::set_contract_version; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw_utils::{may_pay, maybe_addr, nonpayable, parse_reply_instantiate_data}; use rand_core::{RngCore, SeedableRng}; use rand_xoshiro::Xoshiro128PlusPlus; @@ -705,8 +705,9 @@ fn _execute_mint( // Create mint msgs let mint_msg = Sg721ExecuteMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Mint { token_id: mintable_token_mapping.token_id.to_string(), owner: recipient_addr.to_string(), @@ -951,9 +952,9 @@ pub fn execute_update_start_trading_time( // execute sg721 contract let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), - msg: to_json_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( - start_time, - ))?, + msg: to_json_binary( + &Sg721ExecuteMsg::::UpdateStartTradingTime(start_time), + )?, funds: vec![], }; diff --git a/contracts/minters/vending-minter-wl-flex/src/contract.rs b/contracts/minters/vending-minter-wl-flex/src/contract.rs index b6ab4cd73..abce21ed4 100644 --- a/contracts/minters/vending-minter-wl-flex/src/contract.rs +++ b/contracts/minters/vending-minter-wl-flex/src/contract.rs @@ -15,7 +15,7 @@ use cosmwasm_std::{ Timestamp, Uint128, WasmMsg, }; use cw2::set_contract_version; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw_utils::{may_pay, maybe_addr, nonpayable, parse_reply_instantiate_data}; use rand_core::{RngCore, SeedableRng}; use rand_xoshiro::Xoshiro128PlusPlus; @@ -675,8 +675,9 @@ fn _execute_mint( // Create mint msgs let mint_msg = Sg721ExecuteMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Mint { token_id: mintable_token_mapping.token_id.to_string(), owner: recipient_addr.to_string(), @@ -927,9 +928,9 @@ pub fn execute_update_start_trading_time( // execute sg721 contract let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), - msg: to_json_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( - start_time, - ))?, + msg: to_json_binary( + &Sg721ExecuteMsg::::UpdateStartTradingTime(start_time), + )?, funds: vec![], }; diff --git a/contracts/minters/vending-minter/src/contract.rs b/contracts/minters/vending-minter/src/contract.rs index 60c70384b..baa212a48 100644 --- a/contracts/minters/vending-minter/src/contract.rs +++ b/contracts/minters/vending-minter/src/contract.rs @@ -16,7 +16,7 @@ use cosmwasm_std::{ Timestamp, Uint128, WasmMsg, }; use cw2::set_contract_version; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw_utils::{may_pay, maybe_addr, nonpayable, parse_reply_instantiate_data}; use rand_core::{RngCore, SeedableRng}; use rand_xoshiro::Xoshiro128PlusPlus; @@ -682,8 +682,9 @@ fn _execute_mint( // Create mint msgs let mint_msg = Sg721ExecuteMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Mint { token_id: mintable_token_mapping.token_id.to_string(), owner: recipient_addr.to_string(), @@ -928,9 +929,9 @@ pub fn execute_update_start_trading_time( // execute sg721 contract let msg = WasmMsg::Execute { contract_addr: sg721_contract_addr.to_string(), - msg: to_json_binary(&Sg721ExecuteMsg::::UpdateStartTradingTime( - start_time, - ))?, + msg: to_json_binary( + &Sg721ExecuteMsg::::UpdateStartTradingTime(start_time), + )?, funds: vec![], }; diff --git a/packages/sg2/src/tests.rs b/packages/sg2/src/tests.rs index b730eb07b..4fbc0de4c 100644 --- a/packages/sg2/src/tests.rs +++ b/packages/sg2/src/tests.rs @@ -25,7 +25,7 @@ pub fn mock_collection_params() -> CollectionParams { } } -/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection extension (cw721) #[allow(deprecated)] pub fn mock_collection_params_v3_8_0_prerelease() -> sg2_v3_8_0_prerelease::msg::CollectionParams { sg2_v3_8_0_prerelease::msg::CollectionParams { diff --git a/packages/sg721/src/lib.rs b/packages/sg721/src/lib.rs index cf47625d8..7df788019 100644 --- a/packages/sg721/src/lib.rs +++ b/packages/sg721/src/lib.rs @@ -2,10 +2,10 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::{Binary, Coin, Timestamp}; use cw721_base::{ msg::{ - CollectionMetadataExtensionMsg, CollectionMetadataMsg, ExecuteMsg as Cw721ExecuteMsg, + CollectionExtensionMsg, CollectionInfoMsg, ExecuteMsg as Cw721ExecuteMsg, InstantiateMsg as Cw721InstantiateMsg, }, - DefaultOptionCollectionMetadataExtensionMsg, + DefaultOptionalCollectionExtensionMsg, }; use cw_ownable::Action; use cw_utils::Expiration; @@ -15,10 +15,12 @@ pub use cw721_base::state::RoyaltyInfo; #[cw_serde] pub enum ExecuteMsg< - // Message passed for updating metadata. - TNftMetadataExtensionMsg, - // Message passed for updating collection info extension. - TCollectionMetadataExtensionMsg, + // NftInfo extension msg for onchain metadata. + TNftExtensionMsg, + // CollectionInfo extension msg for onchain collection attributes. + TCollectionExtensionMsg, + // Custom extension msg for custom contract logic. Default implementation is a no-op. + TExtensionMsg, > { // ---- sg721 specific msgs ---- /// Update specific collection info fields @@ -39,9 +41,9 @@ pub enum ExecuteMsg< UpdateMinterOwnership(Action), UpdateCreatorOwnership(Action), - /// The creator is the only one eligible to update `CollectionMetadata`. - UpdateCollectionMetadata { - collection_metadata: CollectionMetadataMsg, + /// The creator is the only one eligible to update `CollectionInfo`. + Cw721UpdateCollectionInfo { + collection_info: CollectionInfoMsg, }, /// Transfer is a base message to move a token to another account without triggering actions TransferNft { @@ -89,7 +91,7 @@ pub enum ExecuteMsg< /// Metadata JSON Schema token_uri: Option, /// Any custom extension used by this contract - extension: TNftMetadataExtensionMsg, + extension: TNftExtensionMsg, }, /// Burn an NFT the sender has access to @@ -97,18 +99,17 @@ pub enum ExecuteMsg< token_id: String, }, - /// Metadata msg - #[deprecated(since = "0.19.0", note = "Please use UpdateNftMetadata instead")] - /// Deprecated: use UpdateNftMetadata instead! In previous release it was a no-op for customization in other contracts. Will be removed in next release! + /// Custom msg execution. This is a no-op in default implementation. Extension { - msg: TNftMetadataExtensionMsg, + msg: TExtensionMsg, }, + /// The creator is the only one eligible to update NFT's token uri and onchain metadata (`NftInfo.extension`). /// NOTE: approvals and owner are not affected by this call, since they belong to the NFT owner. UpdateNftInfo { token_id: String, token_uri: Option, - extension: TNftMetadataExtensionMsg, + extension: TNftExtensionMsg, }, /// Sets address to send withdrawn fees to. Only owner can call this. @@ -124,12 +125,12 @@ pub enum ExecuteMsg< }, } -impl - From> - for Cw721ExecuteMsg +impl + From> + for Cw721ExecuteMsg { #[allow(deprecated)] - fn from(msg: ExecuteMsg) -> Self { + fn from(msg: ExecuteMsg) -> Self { match msg { // ---- sg721 msgs ---- ExecuteMsg::UpdateCollectionInfo { collection_info: _ } => { @@ -145,11 +146,9 @@ impl ExecuteMsg::UpdateCreatorOwnership(action) => { Cw721ExecuteMsg::UpdateCreatorOwnership(action) } - ExecuteMsg::UpdateCollectionMetadata { - collection_metadata, - } => Cw721ExecuteMsg::UpdateCollectionMetadata { - collection_metadata, - }, + ExecuteMsg::Cw721UpdateCollectionInfo { collection_info } => { + Cw721ExecuteMsg::UpdateCollectionInfo { collection_info } + } ExecuteMsg::TransferNft { recipient, token_id, @@ -214,7 +213,7 @@ impl } #[cw_serde] -#[deprecated = "Please use CollectionMetadata instead"] +#[deprecated = "Please use CollectionInfo instead"] pub struct CollectionInfo { pub creator: String, pub description: String, @@ -226,9 +225,9 @@ pub struct CollectionInfo { } #[allow(deprecated)] -impl From> for DefaultOptionCollectionMetadataExtensionMsg { +impl From> for DefaultOptionalCollectionExtensionMsg { fn from(info: CollectionInfo) -> Self { - Some(CollectionMetadataExtensionMsg { + Some(CollectionExtensionMsg { description: Some(info.description), image: Some(info.image), external_link: info.external_link, @@ -240,7 +239,7 @@ impl From> for DefaultOptionCollectionMetada } #[cw_serde] -#[deprecated = "Please use `UpdateCollectionMetadata` instead"] +#[deprecated = "Please use `UpdateCollectionInfo` instead"] pub struct UpdateCollectionInfoMsg { pub description: Option, pub image: Option, @@ -253,10 +252,10 @@ pub struct UpdateCollectionInfoMsg { #[allow(deprecated)] impl From> - for CollectionMetadataExtensionMsg + for CollectionExtensionMsg { fn from(msg: UpdateCollectionInfoMsg) -> Self { - CollectionMetadataExtensionMsg { + CollectionExtensionMsg { description: msg.description, image: msg.image, external_link: msg.external_link.unwrap_or_default(), @@ -277,14 +276,14 @@ pub struct InstantiateMsg { } #[allow(deprecated)] -impl From for Cw721InstantiateMsg { +impl From for Cw721InstantiateMsg { fn from(msg: InstantiateMsg) -> Self { Cw721InstantiateMsg { name: msg.name, symbol: msg.symbol, minter: Some(msg.minter), creator: Some(msg.collection_info.creator.clone()), - collection_metadata_extension: msg.collection_info.into(), + collection_info_extension: msg.collection_info.into(), withdraw_address: None, } } diff --git a/test-suite/src/base_minter/tests/integration_tests.rs b/test-suite/src/base_minter/tests/integration_tests.rs index 1fe6e2c99..18060bb4c 100644 --- a/test-suite/src/base_minter/tests/integration_tests.rs +++ b/test-suite/src/base_minter/tests/integration_tests.rs @@ -8,8 +8,8 @@ use crate::common_setup::templates::{ use base_factory::msg::{BaseMinterCreateMsg, BaseUpdateParamsMsg, SudoMsg}; use base_minter::msg::{ConfigResponse, ExecuteMsg}; -use cosmwasm_std::{coin, coins, Addr, Timestamp}; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cosmwasm_std::{coin, coins, Addr, Empty, Timestamp}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw721_base::msg::{Cw721ExecuteMsg, Cw721QueryMsg, OwnerOfResponse}; use cw_multi_test::Executor; use sg2::msg::Sg2ExecuteMsg; @@ -158,8 +158,9 @@ fn check_mint() { assert_eq!(res.config.mint_price.amount.u128(), MIN_MINT_PRICE); let query_owner_msg = Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::OwnerOf { token_id: String::from("1"), include_expired: None, @@ -172,8 +173,9 @@ fn check_mint() { // make sure sg721-nt cannot be transferred let transfer_msg = Cw721ExecuteMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::TransferNft { recipient: "adsf".to_string(), token_id: "1".to_string(), @@ -233,8 +235,9 @@ fn update_start_trading_time() { .query_wasm_smart( collection_addr, &Sg721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); diff --git a/test-suite/src/common_setup/contract_boxes.rs b/test-suite/src/common_setup/contract_boxes.rs index f09e4380b..ec193e3f5 100644 --- a/test-suite/src/common_setup/contract_boxes.rs +++ b/test-suite/src/common_setup/contract_boxes.rs @@ -35,7 +35,7 @@ pub fn contract_vending_factory() -> Box> { Box::new(contract) } -/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection extension (cw721) pub fn contract_vending_factory_v3_8_0_prerelease() -> Box> { let contract = ContractWrapper::new( vending_factory_v3_8_0_prerelease::contract::execute, @@ -114,7 +114,7 @@ pub fn contract_vending_minter() -> Box> { Box::new(contract) } -/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection extension (cw721) pub fn contract_vending_minter_v3_8_0_prerelease() -> Box> { let contract = ContractWrapper::new( vending_minter_v3_8_0_prerelease::contract::execute, @@ -135,7 +135,7 @@ pub fn contract_sg721_base() -> Box> { Box::new(contract) } -/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection extension (cw721) pub fn contract_sg721_base_v3_8_0_prerelease() -> Box> { let contract = ContractWrapper::new( sg721_base_v3_8_0_prerelease::entry::execute, diff --git a/test-suite/src/common_setup/setup_minter/vending_minter/mock_params.rs b/test-suite/src/common_setup/setup_minter/vending_minter/mock_params.rs index ea650edfa..f52b63b3a 100644 --- a/test-suite/src/common_setup/setup_minter/vending_minter/mock_params.rs +++ b/test-suite/src/common_setup/setup_minter/vending_minter/mock_params.rs @@ -26,7 +26,7 @@ pub fn mock_init_extension( } } -/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection extension (cw721) pub fn mock_init_extension_v3_8_0_prerelease( splits_addr: Option, start_time: Option, @@ -53,7 +53,7 @@ pub fn mock_create_minter( } } -/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection extension (cw721) pub fn mock_create_minter_v3_8_0_prerelease( splits_addr: Option, collection_params: sg2_v3_8_0_prerelease::msg::CollectionParams, @@ -97,7 +97,7 @@ pub fn mock_params(mint_denom: Option) -> VendingMinterParams { } } -/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) +/// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection extension (cw721) pub fn mock_params_v3_8_0_prerelease( mint_denom: Option, ) -> vending_factory_v3_8_0_prerelease::state::VendingMinterParams { diff --git a/test-suite/src/open_edition_minter/tests/complete_mint_all_outcomes_validation.rs b/test-suite/src/open_edition_minter/tests/complete_mint_all_outcomes_validation.rs index 29c8976cd..d7b982823 100644 --- a/test-suite/src/open_edition_minter/tests/complete_mint_all_outcomes_validation.rs +++ b/test-suite/src/open_edition_minter/tests/complete_mint_all_outcomes_validation.rs @@ -1,5 +1,5 @@ -use cosmwasm_std::{coins, Coin, Timestamp, Uint128}; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cosmwasm_std::{coins, Coin, Empty, Timestamp, Uint128}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw721_base::msg::{Cw721QueryMsg, NumTokensResponse, OwnerOfResponse}; use cw_multi_test::{BankSudo, Executor, SudoMsg}; use open_edition_factory::state::ParamsExtension; @@ -211,8 +211,9 @@ fn check_mint_revenues_distribution(num_tokens: Option, end_minter_time: Op // Should be owner of the token -> 2 let query_owner_msg = Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::OwnerOf { token_id: String::from("2"), include_expired: None, @@ -226,8 +227,9 @@ fn check_mint_revenues_distribution(num_tokens: Option, end_minter_time: Op // Check mint count let num_tokens_msg = Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::NumTokens {}; let res: NumTokensResponse = router .wrap() diff --git a/test-suite/src/sg721_base/tests/integration_tests.rs b/test-suite/src/sg721_base/tests/integration_tests.rs index bd036fba2..4dccd470f 100644 --- a/test-suite/src/sg721_base/tests/integration_tests.rs +++ b/test-suite/src/sg721_base/tests/integration_tests.rs @@ -64,7 +64,7 @@ mod tests { (app, factory_contract) } - /// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) + /// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection extension (cw721) fn proper_instantiate_factory_v3_8_0_prerelease() -> ( App, vending_factory_v3_8_0_prerelease::helpers::FactoryContract, @@ -123,7 +123,7 @@ mod tests { (app, Addr::unchecked("contract2")) } - /// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection metadata extension (cw721) + /// `v3.8.0-prerelease` is only used for testing migration from collection info (sg721) to new collection extension (cw721) fn proper_instantiate_v3_8_0_prerelease() -> (App, Addr) { let (mut app, factory_contract) = proper_instantiate_factory_v3_8_0_prerelease(); let sg721_id = app.store_code(contract_sg721_base_v3_8_0_prerelease()); @@ -184,7 +184,7 @@ mod tests { } mod init { - use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; + use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw721_base::msg::MinterResponse; use crate::common_setup::setup_minter::vending_minter::mock_params::mock_create_minter_init_msg; @@ -202,8 +202,9 @@ mod tests { .query_wasm_smart( contract, &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::NumTokens {}, ) .unwrap(); @@ -262,8 +263,9 @@ mod tests { .query_wasm_smart( contract, &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Minter {}, ) .unwrap(); @@ -295,8 +297,9 @@ mod tests { .query_wasm_smart( contract, &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Minter {}, ) .unwrap(); @@ -322,8 +325,9 @@ mod tests { .query_wasm_smart( contract, &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Minter {}, ) .unwrap(); @@ -338,7 +342,7 @@ mod tests { mod start_trading_time { use cosmwasm_std::{Decimal, Empty}; - use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; + use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use sg721::{RoyaltyInfoResponse, UpdateCollectionInfoMsg}; use crate::common_setup::{ @@ -369,7 +373,7 @@ mod tests { let res = app.execute_contract( creator, contract, - &Sg721ExecuteMsg::::UpdateCollectionInfo { + &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { creator: None, description: None, @@ -399,8 +403,9 @@ mod tests { .query_wasm_smart( contract, &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); @@ -418,7 +423,7 @@ mod tests { let res = app.execute_contract( creator.clone(), contract.clone(), - &Sg721ExecuteMsg::::UpdateCollectionInfo { + &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { creator: None, description: Some(params.info.description.clone()), @@ -440,7 +445,7 @@ mod tests { let res = app.execute_contract( creator.clone(), contract.clone(), - &Sg721ExecuteMsg::::UpdateCollectionInfo { + &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { creator: None, description: Some(params.info.description.clone()), @@ -474,7 +479,7 @@ mod tests { let res = app.execute_contract( creator.clone(), contract.clone(), - &Sg721ExecuteMsg::::UpdateCollectionInfo { + &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { creator: None, description: Some(params.info.description.clone()), @@ -502,7 +507,7 @@ mod tests { let res = app.execute_contract( creator.clone(), contract.clone(), - &Sg721ExecuteMsg::::UpdateCollectionInfo { + &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { creator: None, description: Some(params.info.description.clone()), @@ -530,7 +535,7 @@ mod tests { let res = app.execute_contract( creator.clone(), contract.clone(), - &Sg721ExecuteMsg::::UpdateCollectionInfo { + &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { creator: None, description: Some(params.info.description.clone()), @@ -549,8 +554,9 @@ mod tests { .query_wasm_smart( contract.clone(), &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); @@ -561,7 +567,7 @@ mod tests { let res = app.execute_contract( other.clone(), contract.clone(), - &Sg721ExecuteMsg::::UpdateCollectionInfo { + &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { creator: None, description: Some(params.info.description.clone()), @@ -579,7 +585,7 @@ mod tests { let res = app.execute_contract( creator.clone(), contract.clone(), - &Sg721ExecuteMsg::::UpdateCollectionInfo { + &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { creator: Some(other.to_string()), // other is ignored description: Some(params.info.description.clone()), @@ -598,8 +604,9 @@ mod tests { .query_wasm_smart( contract.clone(), &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); @@ -611,8 +618,9 @@ mod tests { .query_wasm_smart( contract.clone(), &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::GetCreatorOwnership {}, ) .unwrap(); @@ -622,7 +630,7 @@ mod tests { let res = app.execute_contract( Addr::unchecked("badguy"), contract.clone(), - &Sg721ExecuteMsg::::FreezeCollectionInfo {}, + &Sg721ExecuteMsg::::FreezeCollectionInfo {}, &[], ); assert!(res.is_err()); @@ -630,7 +638,7 @@ mod tests { let res = app.execute_contract( creator.clone(), contract.clone(), - &Sg721ExecuteMsg::::FreezeCollectionInfo {}, + &Sg721ExecuteMsg::::FreezeCollectionInfo {}, &[], ); assert!(res.is_ok()); @@ -639,7 +647,7 @@ mod tests { let res = app.execute_contract( creator, contract, - &Sg721ExecuteMsg::::UpdateCollectionInfo { + &Sg721ExecuteMsg::::UpdateCollectionInfo { collection_info: UpdateCollectionInfoMsg { creator: None, description: Some(params.info.description.clone()), @@ -661,8 +669,8 @@ mod tests { use crate::common_setup::setup_minter::vending_minter::mock_params::mock_create_minter_init_msg; use cosmwasm_std::{Decimal, Response, Uint128}; use cw721::{ - state::MAX_ROYALTY_SHARE_PCT, DefaultOptionCollectionMetadataExtension, - DefaultOptionNftMetadataExtension, + state::MAX_ROYALTY_SHARE_PCT, DefaultOptionalCollectionExtension, + DefaultOptionalNftExtension, }; use sg2::msg::CollectionParams; use sg721::RoyaltyInfoResponse; @@ -677,8 +685,9 @@ mod tests { .query_wasm_smart( contract.clone(), &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); @@ -725,8 +734,9 @@ mod tests { .query_wasm_smart( contract.clone(), &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); @@ -772,8 +782,9 @@ mod tests { .query_wasm_smart( contract.clone(), &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); @@ -819,8 +830,9 @@ mod tests { .query_wasm_smart( contract.clone(), &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); @@ -864,8 +876,9 @@ mod tests { .query_wasm_smart( contract.clone(), &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); @@ -887,7 +900,7 @@ mod tests { mod ownership { use cosmwasm_std::Attribute; - use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; + use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw721_base::msg::MinterResponse; use crate::common_setup::setup_minter::vending_minter::mock_params::mock_create_minter_init_msg; @@ -913,8 +926,9 @@ mod tests { .query_wasm_smart( contract, &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Minter {}, ) .unwrap(); @@ -926,7 +940,7 @@ mod tests { .unwrap(); let sg721_address = res.sg721_address; - let update_ownership_msg: cw721ExecuteMsg = + let update_ownership_msg: cw721ExecuteMsg = cw721ExecuteMsg::UpdateMinterOwnership(cw_ownable::Action::TransferOwnership { new_owner: "new_owner".to_string(), expiry: None, @@ -955,8 +969,9 @@ mod tests { .query_wasm_smart( sg721_address.clone(), &sg721_base::msg::QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::GetMinterOwnership {}, ) .unwrap(); @@ -964,7 +979,7 @@ mod tests { let expected_pending_owner = Some(Addr::unchecked("new_owner".to_string())); assert_eq!(pending_owner, expected_pending_owner); - let accept_ownership_msg: cw721ExecuteMsg = + let accept_ownership_msg: cw721ExecuteMsg = cw721ExecuteMsg::UpdateOwnership(cw_ownable::Action::AcceptOwnership {}); let res = app.execute_contract( Addr::unchecked("new_owner".to_string()), @@ -993,8 +1008,9 @@ mod tests { .query_wasm_smart( sg721_address, &sg721_base::msg::QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::GetMinterOwnership {}, ) .unwrap(); @@ -1074,9 +1090,10 @@ mod tests { use super::*; use cosmwasm_std::testing::mock_env; use cw721::{ - msg::Cw721MigrateMsg, state::CollectionMetadataAndExtension, - CollectionMetadataExtensionWrapper, DefaultOptionCollectionMetadataExtension, - DefaultOptionNftMetadataExtension, RoyaltyInfo, + msg::{ + CollectionExtensionResponse, CollectionInfoAndExtensionResponse, Cw721MigrateMsg, + }, + DefaultOptionalCollectionExtension, DefaultOptionalNftExtension, RoyaltyInfo, }; use sg721_base::msg::QueryMsg; @@ -1091,16 +1108,17 @@ mod tests { &sg721_base_v3_8_0_prerelease::msg::QueryMsg::CollectionInfo {}, ) .unwrap(); - // throws a generic error, for unknown GetCollectionMetadata query + // throws a generic error, for unknown GetCollectionInfo query app.wrap() - .query_wasm_smart::>( + .query_wasm_smart::>( contract.clone(), &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, - >::GetCollectionMetadata {}, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, + >::GetCollectionInfoAndExtension {}, ) - .expect_err("expecting generic error, for unknown GetCollectionMetadata query"); + .expect_err("expecting generic error, for unknown GetCollectionInfo query"); // migrate let sg721_id = app.store_code(contract_sg721_base()); @@ -1114,22 +1132,23 @@ mod tests { // assert collection metadata let collection_metadata = app .wrap() - .query_wasm_smart::>( + .query_wasm_smart::>( contract.clone(), &QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, - >::GetCollectionMetadata {}, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, + >::GetCollectionInfoAndExtension { }, ) .unwrap(); let env = mock_env(); assert_eq!( collection_metadata, - CollectionMetadataAndExtension:: { + CollectionInfoAndExtensionResponse:: { name: "Collection Name".to_string(), symbol: "COL".to_string(), updated_at: env.block.time, - extension: Some(CollectionMetadataExtensionWrapper:: { + extension: Some(CollectionExtensionResponse:: { description: legacy_collection_info.description, image: legacy_collection_info.image, external_link: legacy_collection_info.external_link, diff --git a/test-suite/src/vending_minter/tests/address_limit.rs b/test-suite/src/vending_minter/tests/address_limit.rs index 628c90de7..b5e4ecd9a 100644 --- a/test-suite/src/vending_minter/tests/address_limit.rs +++ b/test-suite/src/vending_minter/tests/address_limit.rs @@ -10,8 +10,8 @@ use crate::common_setup::{ setup_accounts_and_block::{coins_for_msg, setup_block_time}, templates::vending_minter_template, }; -use cosmwasm_std::{coin, coins, Coin, Timestamp, Uint128}; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cosmwasm_std::{coin, coins, Coin, Empty, Timestamp, Uint128}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw721_base::msg::{Cw721QueryMsg, OwnerOfResponse, TokensResponse}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; @@ -350,8 +350,9 @@ fn mint_for_token_id_addr() { // get random mint token_id let tokens_msg = Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Tokens { owner: buyer.to_string(), start_after: None, @@ -465,8 +466,9 @@ fn mint_for_token_id_addr() { .query_wasm_smart( collection_addr, &Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::OwnerOf { token_id: 2.to_string(), include_expired: None, diff --git a/test-suite/src/vending_minter/tests/happy_unhappy.rs b/test-suite/src/vending_minter/tests/happy_unhappy.rs index 93c373507..92375853b 100644 --- a/test-suite/src/vending_minter/tests/happy_unhappy.rs +++ b/test-suite/src/vending_minter/tests/happy_unhappy.rs @@ -3,12 +3,13 @@ use crate::common_setup::templates::vending_minter_template; use crate::common_setup::{ setup_accounts_and_block::coins_for_msg, setup_accounts_and_block::setup_block_time, }; +use cosmwasm_std::Empty; use cosmwasm_std::{ coin, coins, testing::{mock_dependencies_with_balance, mock_env, mock_info}, Api, Coin, Timestamp, Uint128, }; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw721_base::msg::{Cw721QueryMsg, OwnerOfResponse}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; @@ -152,8 +153,9 @@ fn happy_path() { // Check NFT owned by buyer // Random mint token_id 1 let query_owner_msg = Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::OwnerOf { token_id: String::from("2"), include_expired: None, @@ -214,8 +216,9 @@ fn happy_path() { // Check that NFT is transferred let query_owner_msg = Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::OwnerOf { token_id: String::from("1"), include_expired: None, diff --git a/test-suite/src/vending_minter/tests/trading_time.rs b/test-suite/src/vending_minter/tests/trading_time.rs index eda6e6707..58b886c4c 100644 --- a/test-suite/src/vending_minter/tests/trading_time.rs +++ b/test-suite/src/vending_minter/tests/trading_time.rs @@ -5,8 +5,8 @@ use crate::common_setup::setup_minter::vending_minter::setup::{ configure_minter, vending_minter_code_ids, }; use crate::common_setup::templates::{vending_minter_with_app, vending_minter_with_start_time}; -use cosmwasm_std::{coins, Addr, Timestamp}; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cosmwasm_std::{coins, Addr, Empty, Timestamp}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; #[allow(deprecated)] @@ -285,8 +285,9 @@ fn update_start_trading_time() { .query_wasm_smart( collection_addr.to_string(), &Sg721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); diff --git a/test-suite/src/vending_minter/tests/trading_time_updatable.rs b/test-suite/src/vending_minter/tests/trading_time_updatable.rs index 3d5d3ff12..7c0de6bd9 100644 --- a/test-suite/src/vending_minter/tests/trading_time_updatable.rs +++ b/test-suite/src/vending_minter/tests/trading_time_updatable.rs @@ -7,8 +7,8 @@ use crate::common_setup::setup_minter::vending_minter::setup::{ use crate::common_setup::templates::{ vending_minter_updatable_with_app, vending_minter_with_updatable_and_start_time, }; -use cosmwasm_std::{coins, Addr, Timestamp}; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cosmwasm_std::{coins, Addr, Empty, Timestamp}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw_multi_test::Executor; use sg2::tests::mock_collection_params_1; #[allow(deprecated)] @@ -292,8 +292,9 @@ fn update_start_trading_time() { .query_wasm_smart( collection_addr.to_string(), &Sg721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::CollectionInfo {}, ) .unwrap(); diff --git a/test-suite/src/vending_minter/tests/updatable.rs b/test-suite/src/vending_minter/tests/updatable.rs index 0e61f2cec..be06ac24d 100644 --- a/test-suite/src/vending_minter/tests/updatable.rs +++ b/test-suite/src/vending_minter/tests/updatable.rs @@ -1,5 +1,5 @@ use cosmwasm_std::{coins, Empty}; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw721_base::msg::{Cw721QueryMsg, NftInfoResponse, TokensResponse}; use cw_multi_test::Executor; use sg721_updatable::msg::ExecuteMsg as Sg721UpdatableExecMsg; @@ -34,8 +34,9 @@ fn update_token_metadata() { // query buyer token_id let query_tokens_msg = Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Tokens { owner: buyer.to_string(), start_after: None, @@ -63,12 +64,13 @@ fn update_token_metadata() { .unwrap(); assert_eq!(res.tokens[0], token_id); let query_token_msg = Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::NftInfo { token_id, }; - let res: NftInfoResponse = router + let res: NftInfoResponse = router .wrap() .query_wasm_smart(collection_addr, &query_token_msg) .unwrap(); diff --git a/test-suite/src/vending_minter/tests/whitelist.rs b/test-suite/src/vending_minter/tests/whitelist.rs index a81e97b89..3017e79f6 100644 --- a/test-suite/src/vending_minter/tests/whitelist.rs +++ b/test-suite/src/vending_minter/tests/whitelist.rs @@ -1,5 +1,5 @@ use cosmwasm_std::{coin, coins, Addr, Empty, Timestamp}; -use cw721::{DefaultOptionCollectionMetadataExtension, DefaultOptionNftMetadataExtension}; +use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension}; use cw721_base::msg::ExecuteMsg as Cw721ExecuteMsg; use cw721_base::msg::{Cw721QueryMsg, TokensResponse}; use cw_multi_test::Executor; @@ -279,8 +279,9 @@ fn whitelist_mint_count_query() { // get random mint token_id let tokens_msg = Cw721QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + Empty, + DefaultOptionalCollectionExtension, >::Tokens { owner: buyer.to_string(), start_after: None, @@ -293,7 +294,7 @@ fn whitelist_mint_count_query() { let sold_token_id: u32 = res.tokens[1].parse::().unwrap(); // Buyer transfers NFT to creator // random mint token id: 8 - let transfer_msg: Cw721ExecuteMsg = Cw721ExecuteMsg::TransferNft { + let transfer_msg: Cw721ExecuteMsg = Cw721ExecuteMsg::TransferNft { recipient: creator.to_string(), // token_id: "8".to_string(), token_id: sold_token_id.to_string(), @@ -535,7 +536,7 @@ fn whitelist_access_len_add_remove_expiration() { ); // Muyer is generous and transfers to creator - let transfer_msg: Cw721ExecuteMsg = Cw721ExecuteMsg::TransferNft { + let transfer_msg: Cw721ExecuteMsg = Cw721ExecuteMsg::TransferNft { recipient: creator.to_string(), token_id: "1".to_string(), }; diff --git a/test-suite/src/vending_minter/tests/zero_mint_price.rs b/test-suite/src/vending_minter/tests/zero_mint_price.rs index eafa10caf..1402d14f4 100644 --- a/test-suite/src/vending_minter/tests/zero_mint_price.rs +++ b/test-suite/src/vending_minter/tests/zero_mint_price.rs @@ -9,9 +9,10 @@ use crate::common_setup::setup_minter::vending_minter::mock_params::{ mock_create_minter_init_msg, mock_init_extension, mock_params, }; use crate::common_setup::setup_minter::vending_minter::setup::vending_minter_code_ids; +use cosmwasm_std::Empty; use cosmwasm_std::{coin, coins, Addr, Timestamp}; -use cw721::DefaultOptionCollectionMetadataExtension; -use cw721::DefaultOptionNftMetadataExtension; +use cw721::DefaultOptionalCollectionExtension; +use cw721::DefaultOptionalNftExtension; use cw721_base::msg::TokensResponse; use cw_multi_test::Executor; use sg2::msg::Sg2ExecuteMsg; @@ -104,8 +105,9 @@ fn zero_mint_price() { .query_wasm_smart( sg721, &sg721_base::msg::QueryMsg::< - DefaultOptionNftMetadataExtension, - DefaultOptionCollectionMetadataExtension, + DefaultOptionalNftExtension, + DefaultOptionalCollectionExtension, + Empty, >::Tokens { owner: buyer.to_string(), start_after: None, From 69b65e2e0ef0d2cd29743a85bfa4a5abab870762 Mon Sep 17 00:00:00 2001 From: mr-t Date: Mon, 25 Mar 2024 00:53:51 +0100 Subject: [PATCH 21/24] docs --- contracts/collections/sg721-base/src/msg.rs | 2 +- packages/sg721/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/collections/sg721-base/src/msg.rs b/contracts/collections/sg721-base/src/msg.rs index d35cdc1fa..d03591115 100644 --- a/contracts/collections/sg721-base/src/msg.rs +++ b/contracts/collections/sg721-base/src/msg.rs @@ -243,7 +243,7 @@ where } #[cw_serde] -#[deprecated = "Please use `CollectionInfo>` instead"] +#[deprecated = "Please use `CollectionInfo>` instead"] pub struct CollectionInfoResponse { pub creator: String, pub description: String, diff --git a/packages/sg721/src/lib.rs b/packages/sg721/src/lib.rs index 7df788019..66f0aab3f 100644 --- a/packages/sg721/src/lib.rs +++ b/packages/sg721/src/lib.rs @@ -24,7 +24,7 @@ pub enum ExecuteMsg< > { // ---- sg721 specific msgs ---- /// Update specific collection info fields - #[deprecated = "Please use UpdateCollectionInfo instead"] + #[deprecated = "Please use Cw721UpdateCollectionInfo instead"] UpdateCollectionInfo { #[allow(deprecated)] collection_info: UpdateCollectionInfoMsg, From 5cf7da8f5736695c925d9a5ef58e12698f6d2e87 Mon Sep 17 00:00:00 2001 From: mr-t Date: Wed, 27 Mar 2024 19:01:36 +0100 Subject: [PATCH 22/24] update lib --- Cargo.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ce6cd988d..d0c10eb9a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -279,9 +279,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" [[package]] name = "axum" @@ -705,9 +705,9 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chrono" -version = "0.4.35" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" +checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" dependencies = [ "num-traits", ] @@ -1367,7 +1367,7 @@ dependencies = [ [[package]] name = "cw721" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#8b211cea2f80e588ab792f34cd77413a6ff3ef51" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#7a36bb78cb6e2512c46476909d0f6bdfc3d4d02f" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1422,7 +1422,7 @@ dependencies = [ [[package]] name = "cw721-base" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#8b211cea2f80e588ab792f34cd77413a6ff3ef51" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#7a36bb78cb6e2512c46476909d0f6bdfc3d4d02f" dependencies = [ "cosmwasm-std", "cw-ownable 0.6.0", @@ -2498,9 +2498,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" @@ -3311,9 +3311,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] name = "rend" @@ -3462,9 +3462,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.34.3" +version = "1.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39449a79f45e8da28c57c341891b69a183044b29518bb8f86dbac9df60bb7df" +checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" dependencies = [ "arrayvec", "borsh", @@ -3572,9 +3572,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ef2175c2907e7c8bc0a9c3f86aeb5ec1f3b275300ad58a44d0c3ae379a5e52e" +checksum = "788745a868b0e751750388f4e6546eb921ef714a4317fa6954f7cde114eb2eb7" dependencies = [ "cfg-if", "derive_more", @@ -3584,9 +3584,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b8eb8fd61c5cdd3390d9b2132300a7e7618955b98b8416f118c1b4e144f" +checksum = "7dc2f4e8bc344b9fc3d5f74f72c2e55bfc38d28dc2ebc69c194a3df424e4d9ac" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", @@ -3763,9 +3763,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.114" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" dependencies = [ "itoa", "ryu", From 1db0bb6e76cd078b29ec372dbe81792b54a16575 Mon Sep 17 00:00:00 2001 From: mr-t Date: Wed, 27 Mar 2024 21:58:45 +0100 Subject: [PATCH 23/24] use cw721 for updating token metadata --- Cargo.lock | 8 ++-- contracts/collections/sg721-base/src/error.rs | 2 +- contracts/collections/sg721-nt/src/lib.rs | 2 +- contracts/collections/sg721-nt/src/msg.rs | 4 +- .../sg721-updatable/src/contract.rs | 44 +++++++------------ .../collections/sg721-updatable/src/error.rs | 9 ++-- packages/sg721/src/lib.rs | 2 +- 7 files changed, 31 insertions(+), 40 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d0c10eb9a..59103c196 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1367,7 +1367,7 @@ dependencies = [ [[package]] name = "cw721" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#7a36bb78cb6e2512c46476909d0f6bdfc3d4d02f" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#dea2b0175f77a2dabd25ad109244bc215f0740df" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1422,7 +1422,7 @@ dependencies = [ [[package]] name = "cw721-base" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#7a36bb78cb6e2512c46476909d0f6bdfc3d4d02f" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#dea2b0175f77a2dabd25ad109244bc215f0740df" dependencies = [ "cosmwasm-std", "cw-ownable 0.6.0", @@ -2614,9 +2614,9 @@ checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "mime" diff --git a/contracts/collections/sg721-base/src/error.rs b/contracts/collections/sg721-base/src/error.rs index bc6b188e8..6e234e18f 100644 --- a/contracts/collections/sg721-base/src/error.rs +++ b/contracts/collections/sg721-base/src/error.rs @@ -3,7 +3,7 @@ use cw_utils::PaymentError; use thiserror::Error; use url::ParseError; -#[derive(Error, Debug)] +#[derive(Error, Debug, PartialEq)] pub enum ContractError { #[error("{0}")] Std(#[from] StdError), diff --git a/contracts/collections/sg721-nt/src/lib.rs b/contracts/collections/sg721-nt/src/lib.rs index 652d5375f..0869e43e6 100644 --- a/contracts/collections/sg721-nt/src/lib.rs +++ b/contracts/collections/sg721-nt/src/lib.rs @@ -64,7 +64,7 @@ pub mod entry { deps: DepsMut, env: Env, info: MessageInfo, - msg: ExecuteMsg, + msg: ExecuteMsg, ) -> Result { match msg { ExecuteMsg::Burn { token_id } => Sg721NonTransferableContract::default() diff --git a/contracts/collections/sg721-nt/src/msg.rs b/contracts/collections/sg721-nt/src/msg.rs index cbaf4ac69..ee00b2c50 100644 --- a/contracts/collections/sg721-nt/src/msg.rs +++ b/contracts/collections/sg721-nt/src/msg.rs @@ -6,7 +6,7 @@ use sg721::{RoyaltyInfoResponse, UpdateCollectionInfoMsg}; #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] #[serde(rename_all = "snake_case")] #[allow(deprecated)] -pub enum ExecuteMsg { +pub enum ExecuteMsg { /// Mint a new NFT, can only be called by the contract minter Mint { /// Unique ID of the NFT @@ -18,7 +18,7 @@ pub enum ExecuteMsg { /// Metadata JSON Schema token_uri: Option, /// Any custom extension used by this contract - extension: T, + extension: TNftExtensionMsg, }, /// Burn an NFT the sender has access to Burn { token_id: String }, diff --git a/contracts/collections/sg721-updatable/src/contract.rs b/contracts/collections/sg721-updatable/src/contract.rs index 88dfcd3e1..e5b224549 100644 --- a/contracts/collections/sg721-updatable/src/contract.rs +++ b/contracts/collections/sg721-updatable/src/contract.rs @@ -9,8 +9,9 @@ use cosmwasm_std::{DepsMut, Env, Event, MessageInfo}; use cw2::set_contract_version; use cw721::msg::Cw721MigrateMsg; use cw721::{ - DefaultOptionalCollectionExtension, DefaultOptionalCollectionExtensionMsg, - DefaultOptionalNftExtension, DefaultOptionalNftExtensionMsg, + traits::Cw721Execute, DefaultOptionalCollectionExtension, + DefaultOptionalCollectionExtensionMsg, DefaultOptionalNftExtension, + DefaultOptionalNftExtensionMsg, }; use semver::Version; use sg721::InstantiateMsg; @@ -115,19 +116,12 @@ pub fn execute_freeze_token_metadata( #[allow(deprecated)] pub fn execute_update_token_metadata( deps: DepsMut, - _env: Env, + env: Env, info: MessageInfo, token_id: String, token_uri: Option, ) -> Result { nonpayable(&info)?; - // Check if sender is creator - let owner = deps.api.addr_validate(info.sender.as_ref())?; - let collection_info: CollectionInfoResponse = - Sg721UpdatableContract::default().query_collection_info(deps.as_ref())?; - if owner != collection_info.creator { - return Err(ContractError::Base(Unauthorized {})); - } // Check if token metadata is frozen let frozen = FROZEN_TOKEN_METADATA.load(deps.storage)?; @@ -142,16 +136,14 @@ pub fn execute_update_token_metadata( } // Update token metadata - Sg721UpdatableContract::default() - .config - .nft_info - .update(deps.storage, &token_id, |token| match token { - Some(mut token_info) => { - token_info.token_uri = token_uri.clone(); - Ok(token_info) - } - None => Err(ContractError::TokenIdNotFound {}), - })?; + Sg721UpdatableContract::default().parent.update_nft_info( + deps, + &env, + &info, + token_id.clone(), + token_uri.clone().into(), + None, + )?; let mut event = Event::new("update_update_token_metadata") .add_attribute("sender", info.sender) @@ -258,6 +250,7 @@ mod tests { from_json, to_json_binary, ContractInfoResponse, ContractResult, Empty, OwnedDeps, Querier, QuerierResult, QueryRequest, SystemError, SystemResult, WasmQuery, }; + use cw721::error::Cw721ContractError; use cw721_base::traits::Cw721Query; use sg721::{CollectionInfo, InstantiateMsg}; use std::marker::PhantomData; @@ -351,11 +344,8 @@ mod tests { token_id: "wrong-token-id".to_string(), token_uri: updated_token_uri.clone(), }; - let err = execute(deps.as_mut(), mock_env(), info.clone(), update_msg).unwrap_err(); - assert_eq!( - err.to_string(), - ContractError::TokenIdNotFound {}.to_string() - ); + // throws not found error + execute(deps.as_mut(), mock_env(), info.clone(), update_msg).unwrap_err(); // Update token metadata fails because sent by hacker let update_msg = ExecuteMsg::UpdateTokenMetadata { @@ -365,8 +355,8 @@ mod tests { let hacker_info = mock_info(HACKER, &[]); let err = execute(deps.as_mut(), mock_env(), hacker_info, update_msg.clone()).unwrap_err(); assert_eq!( - err.to_string(), - ContractError::Base(Unauthorized {}).to_string() + err, + ContractError::Cw721(Cw721ContractError::NotCreator {}) ); // Update token metadata diff --git a/contracts/collections/sg721-updatable/src/error.rs b/contracts/collections/sg721-updatable/src/error.rs index 29823b2b3..11825523a 100644 --- a/contracts/collections/sg721-updatable/src/error.rs +++ b/contracts/collections/sg721-updatable/src/error.rs @@ -1,10 +1,14 @@ use cosmwasm_std::StdError; +use cw721::error::Cw721ContractError; use cw_utils::PaymentError; use sg1::FeeError; use thiserror::Error; -#[derive(Error, Debug)] +#[derive(Error, Debug, PartialEq)] pub enum ContractError { + #[error("{0}")] + Cw721(#[from] Cw721ContractError), + #[error("{0}")] Std(#[from] StdError), @@ -17,9 +21,6 @@ pub enum ContractError { #[error("{0}")] Fee(#[from] FeeError), - #[error("TokenIdNotFound")] - TokenIdNotFound {}, - #[error("TokenMetadataFrozen")] TokenMetadataFrozen {}, diff --git a/packages/sg721/src/lib.rs b/packages/sg721/src/lib.rs index 66f0aab3f..190af1a39 100644 --- a/packages/sg721/src/lib.rs +++ b/packages/sg721/src/lib.rs @@ -200,7 +200,7 @@ impl extension, } => Cw721ExecuteMsg::UpdateNftInfo { token_id, - token_uri, + token_uri: token_uri.into(), extension, }, ExecuteMsg::SetWithdrawAddress { address } => { From a0cf2f78296d7aa3cc5a25280b9cd7e418d83f71 Mon Sep 17 00:00:00 2001 From: mr-t Date: Wed, 27 Mar 2024 22:05:20 +0100 Subject: [PATCH 24/24] update lib --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 59103c196..3252a0ff4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1367,7 +1367,7 @@ dependencies = [ [[package]] name = "cw721" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#dea2b0175f77a2dabd25ad109244bc215f0740df" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#1d2b176a5d310cb2031866f54a6dfe0348806f48" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -1422,7 +1422,7 @@ dependencies = [ [[package]] name = "cw721-base" version = "0.19.0" -source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#dea2b0175f77a2dabd25ad109244bc215f0740df" +source = "git+https://github.com/arkprotocol/cw-nfts.git?branch=collection-info#1d2b176a5d310cb2031866f54a6dfe0348806f48" dependencies = [ "cosmwasm-std", "cw-ownable 0.6.0",