Repository: public-awesome/launchpad
Pull request #438 (2022-10-18 06:19:52)

Use cargo workspace feature to manage versions and dependencies
See: https://twitter.com/larry0x/status/1582200990060941312

The benefit of this approach is that, say you have 20 crates in the repo, and they all depend on `cosmwasm-std`. To bump of the version of `cosmwasm-std`, you won't need to go into the `Cargo.toml` of each crate and edit them individually. Instead you just edit it once in the workspace-level.

Notes:

- **This PR makes all crates in this repo (both contracts and packages) to have the workspace-level version of v0.20.0.** For example and `base-factory` contracts jumps directly form `0.2.0` to `0.20.0`. Let me know if this is desired. It is possible to set individual crate versions different from the workspace-level version.
- I applied some styling based on my personal preference in the dependencies lists (specifically, order all deps alphabetically and align the equation marks). Let me know if this is ok; can revert.
- An implication of this PR is that a minimum Rust version of 1.64.0 will be required for working this repo. Have to bump the docker container versions used in CI due to this reason.


Patch:
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 9cd1e509..5ca069cc 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -26,7 +26,7 @@ workflows:
 jobs:
   contract_sg721_base:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     working_directory: ~/project/contracts/sg721-base
     steps:
       - checkout:
@@ -36,7 +36,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version
       - restore_cache:
           keys:
-            - cargocache-sg721-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+            - cargocache-sg721-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Unit Tests
           environment:
@@ -58,11 +58,11 @@ jobs:
           paths:
             - /usr/local/cargo/registry
             - target
-          key: cargocache-sg721-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+          key: cargocache-sg721-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
 
   contract_sg721_nt:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     working_directory: ~/project/contracts/sg721-nt
     steps:
       - checkout:
@@ -72,7 +72,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version
       - restore_cache:
           keys:
-            - cargocache-sg721-nt-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+            - cargocache-sg721-nt-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Unit Tests
           environment:
@@ -94,11 +94,11 @@ jobs:
           paths:
             - /usr/local/cargo/registry
             - target
-          key: cargocache-sg721-nt-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+          key: cargocache-sg721-nt-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
 
   contract_base_factory:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     working_directory: ~/project/contracts/base-factory
     steps:
       - checkout:
@@ -108,7 +108,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version
       - restore_cache:
           keys:
-            - cargocache-base-factory-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+            - cargocache-base-factory-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Unit Tests
           environment:
@@ -130,11 +130,11 @@ jobs:
           paths:
             - /usr/local/cargo/registry
             - target
-          key: cargocache-base-factory-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+          key: cargocache-base-factory-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
 
   contract_base_minter:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     working_directory: ~/project/contracts/base-minter
     steps:
       - checkout:
@@ -144,7 +144,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version
       - restore_cache:
           keys:
-            - cargocache-base-minter-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+            - cargocache-base-minter-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Unit Tests
           environment:
@@ -166,11 +166,11 @@ jobs:
           paths:
             - /usr/local/cargo/registry
             - target
-          key: cargocache-base-minter-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+          key: cargocache-base-minter-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
 
   contract_vending_factory:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     working_directory: ~/project/contracts/vending-factory
     steps:
       - checkout:
@@ -180,7 +180,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version
       - restore_cache:
           keys:
-            - cargocache-vending-factory-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+            - cargocache-vending-factory-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Unit Tests
           environment:
@@ -202,11 +202,11 @@ jobs:
           paths:
             - /usr/local/cargo/registry
             - target
-          key: cargocache-vending-factory-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+          key: cargocache-vending-factory-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
 
   contract_vending_minter:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     working_directory: ~/project/contracts/vending-minter
     steps:
       - checkout:
@@ -216,7 +216,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version
       - restore_cache:
           keys:
-            - cargocache-vending-minter-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+            - cargocache-vending-minter-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Unit Tests
           environment:
@@ -238,11 +238,11 @@ jobs:
           paths:
             - /usr/local/cargo/registry
             - target
-          key: cargocache-vending-minter-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+          key: cargocache-vending-minter-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
 
   contract_whitelist:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     working_directory: ~/project/contracts/whitelist
     steps:
       - checkout:
@@ -252,7 +252,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version
       - restore_cache:
           keys:
-            - cargocache-whitelist-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+            - cargocache-whitelist-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Unit Tests
           environment:
@@ -274,11 +274,11 @@ jobs:
           paths:
             - /usr/local/cargo/registry
             - target
-          key: cargocache-whitelist-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+          key: cargocache-whitelist-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
 
   package_sg_std:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     working_directory: ~/project/package/sg-std
     steps:
       - checkout:
@@ -288,7 +288,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version
       - restore_cache:
           keys:
-            - cargocache-sg-std-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+            - cargocache-sg-std-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Unit Tests
           environment:
@@ -298,11 +298,11 @@ jobs:
           paths:
             - /usr/local/cargo/registry
             - target
-          key: cargocache-sg-std-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+          key: cargocache-sg-std-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
 
   package_sg_utils:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     working_directory: ~/project/package/sg-utils
     steps:
       - checkout:
@@ -312,7 +312,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version
       - restore_cache:
           keys:
-            - cargocache-sg-utils-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+            - cargocache-sg-utils-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Unit Tests
           environment:
@@ -322,11 +322,11 @@ jobs:
           paths:
             - /usr/local/cargo/registry
             - target
-          key: cargocache-sg-utils-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+          key: cargocache-sg-utils-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
 
   lint:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     steps:
       - checkout
       - run:
@@ -334,7 +334,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version; rustup target list --installed
       - restore_cache:
           keys:
-            - cargocache-v2-lint-rust:1.59.0-{{ checksum "Cargo.lock" }}
+            - cargocache-v2-lint-rust:1.64.0-{{ checksum "Cargo.lock" }}
       - run:
           name: Add rustfmt component
           command: rustup component add rustfmt
@@ -353,7 +353,7 @@ jobs:
             - target/debug/.fingerprint
             - target/debug/build
             - target/debug/deps
-          key: cargocache-v2-lint-rust:1.59.0-{{ checksum "Cargo.lock" }}
+          key: cargocache-v2-lint-rust:1.64.0-{{ checksum "Cargo.lock" }}
 
   # This runs one time on the top level to ensure all contracts compile properly into wasm.
   # We don't run the wasm build per contract build, and then reuse a lot of the same dependencies, so this speeds up CI time
@@ -361,7 +361,7 @@ jobs:
   # We also sanity-check the resultant wasm files.
   wasm-build:
     docker:
-      - image: rust:1.59.0
+      - image: rust:1.64.0
     steps:
       - checkout:
           path: ~/project
@@ -370,7 +370,7 @@ jobs:
           command: rustc --version; cargo --version; rustup --version
       - restore_cache:
           keys:
-            - cargocache-wasm-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+            - cargocache-wasm-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Add wasm32 target
           command: rustup target add wasm32-unknown-unknown
@@ -390,7 +390,7 @@ jobs:
           paths:
             - /usr/local/cargo/registry
             - target
-          key: cargocache-wasm-rust:1.59.0-{{ checksum "~/project/Cargo.lock" }}
+          key: cargocache-wasm-rust:1.64.0-{{ checksum "~/project/Cargo.lock" }}
       - run:
           name: Check wasm contracts
           command: |
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index fdd9c435..4d4479ac 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -8,7 +8,7 @@ jobs:
     name: coverage
     runs-on: ubuntu-latest
     container:
-      image: xd009642/tarpaulin:0.20.1
+      image: xd009642/tarpaulin:0.22.0
       options: --security-opt seccomp=unconfined
     steps:
       - name: Checkout repository
diff --git a/Cargo.lock b/Cargo.lock
index 516e71ea..ebff1faa 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -22,18 +22,18 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
 [[package]]
 name = "base-factory"
-version = "0.2.0"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-multi-test 0.15.1",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "cw2 0.15.1",
+ "cw-multi-test",
+ "cw-storage-plus",
+ "cw-utils",
+ "cw2",
  "schemars",
  "serde",
  "sg-multi-test",
- "sg-std 0.15.0",
+ "sg-std",
  "sg1",
  "sg2",
  "thiserror",
@@ -41,21 +41,21 @@ dependencies = [
 
 [[package]]
 name = "base-minter"
-version = "0.14.1"
+version = "0.20.0"
 dependencies = [
  "base-factory",
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-multi-test 0.15.1",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "cw2 0.15.1",
- "cw721 0.15.0",
- "cw721-base 0.15.0",
+ "cw-multi-test",
+ "cw-storage-plus",
+ "cw-utils",
+ "cw2",
+ "cw721",
+ "cw721-base",
  "schemars",
  "serde",
  "sg-multi-test",
- "sg-std 0.15.0",
+ "sg-std",
  "sg1",
  "sg2",
  "sg4",
@@ -267,20 +267,6 @@ dependencies = [
  "zeroize",
 ]
 
-[[package]]
-name = "cw-controllers"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b81b8c4647f13be38baea7345885fcd97cffe8ad4e0454a43f975be9609127ed"
-dependencies = [
- "cosmwasm-std",
- "cw-storage-plus 0.14.0",
- "cw-utils 0.14.0",
- "schemars",
- "serde",
- "thiserror",
-]
-
 [[package]]
 name = "cw-controllers"
 version = "0.15.1"
@@ -289,27 +275,8 @@ checksum = "09b3ababe9f0a473c2d878b7c973eee08e05e5d768253fbb08d475daeadba503"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "schemars",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "cw-multi-test"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3f9a8ab7c3c29ec93cb7a39ce4b14a05e053153b4a17ef7cf2246af1b7c087e"
-dependencies = [
- "anyhow",
- "cosmwasm-std",
- "cosmwasm-storage",
- "cw-storage-plus 0.13.4",
- "cw-utils 0.13.4",
- "derivative",
- "itertools",
- "prost",
+ "cw-storage-plus",
+ "cw-utils",
  "schemars",
  "serde",
  "thiserror",
@@ -324,8 +291,8 @@ dependencies = [
  "anyhow",
  "cosmwasm-std",
  "cosmwasm-storage",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
+ "cw-storage-plus",
+ "cw-utils",
  "derivative",
  "itertools",
  "prost",
@@ -334,28 +301,6 @@ dependencies = [
  "thiserror",
 ]
 
-[[package]]
-name = "cw-storage-plus"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "648b1507290bbc03a8d88463d7cd9b04b1fa0155e5eef366c4fa052b9caaac7a"
-dependencies = [
- "cosmwasm-std",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw-storage-plus"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c8b264257c4f44c49b7ce09377af63aa040768ecd3fd7bdd2d48a09323a1e90"
-dependencies = [
- "cosmwasm-std",
- "schemars",
- "serde",
-]
-
 [[package]]
 name = "cw-storage-plus"
 version = "0.15.1"
@@ -367,32 +312,6 @@ dependencies = [
  "serde",
 ]
 
-[[package]]
-name = "cw-utils"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9dbaecb78c8e8abfd6b4258c7f4fbeb5c49a5e45ee4d910d3240ee8e1d714e1b"
-dependencies = [
- "cosmwasm-std",
- "schemars",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "cw-utils"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "414b91f3d7a619bb26c835119d7095804596a1382ddc1d184c33c1d2c17f6c5e"
-dependencies = [
- "cosmwasm-std",
- "cw2 0.14.0",
- "schemars",
- "semver",
- "serde",
- "thiserror",
-]
-
 [[package]]
 name = "cw-utils"
 version = "0.15.1"
@@ -401,37 +320,13 @@ checksum = "0ae0b69fa7679de78825b4edeeec045066aa2b2c4b6e063d80042e565bb4da5c"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw2 0.15.1",
+ "cw2",
  "schemars",
  "semver",
  "serde",
  "thiserror",
 ]
 
-[[package]]
-name = "cw2"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04cf4639517490dd36b333bbd6c4fbd92e325fd0acf4683b41753bc5eb63bfc1"
-dependencies = [
- "cosmwasm-std",
- "cw-storage-plus 0.13.4",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw2"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa74c324af8e3506fd8d50759a265bead3f87402e413c840042af5d2808463d6"
-dependencies = [
- "cosmwasm-std",
- "cw-storage-plus 0.14.0",
- "schemars",
- "serde",
-]
-
 [[package]]
 name = "cw2"
 version = "0.15.1"
@@ -440,65 +335,7 @@ checksum = "5abb8ecea72e09afff830252963cb60faf945ce6cef2c20a43814516082653da"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-storage-plus 0.15.1",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw3"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c387f56a69bd3ad3bf9e13bb7bd638668a78b4eae9aecaa6a8ab3f7542051f7"
-dependencies = [
- "cosmwasm-std",
- "cw-utils 0.14.0",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw3-fixed-multisig"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "15c447a27f00bc04b276133293cb5d21b4a4887675648ec5e06d633bd2d461ed"
-dependencies = [
- "cosmwasm-std",
- "cw-storage-plus 0.14.0",
- "cw-utils 0.14.0",
- "cw2 0.14.0",
- "cw3",
- "schemars",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "cw3-flex-multisig"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08789fcbefa5a1e395931be3e76e2e3ca6e4eac9a917ee7a97515cf0d834f2f0"
-dependencies = [
- "cosmwasm-std",
- "cw-storage-plus 0.14.0",
- "cw-utils 0.14.0",
- "cw2 0.14.0",
- "cw3",
- "cw3-fixed-multisig",
- "cw4 0.14.0",
- "schemars",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "cw4"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95dcc5320bdee5475aadfe7ebce70be5d98040bf91b44b7c22d3acd0c133c329"
-dependencies = [
- "cosmwasm-std",
- "cw-storage-plus 0.14.0",
+ "cw-storage-plus",
  "schemars",
  "serde",
 ]
@@ -511,26 +348,9 @@ checksum = "5dfbc9e431223e3fa64ddc98f3e6d20db015a933d4f76da3721ec093d5f113ea"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-storage-plus 0.15.1",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw4-group"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93204a7aa587466636d001b21831c4b4ac87fccd40c7b39f78ad95dee452309e"
-dependencies = [
- "cosmwasm-std",
- "cw-controllers 0.14.0",
- "cw-storage-plus 0.14.0",
- "cw-utils 0.14.0",
- "cw2 0.14.0",
- "cw4 0.14.0",
+ "cw-storage-plus",
  "schemars",
  "serde",
- "thiserror",
 ]
 
 [[package]]
@@ -541,28 +361,16 @@ checksum = "811087a9180b248a9f1a8c10a91f128a020e22bdf51603672399a2b956efdde5"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-controllers 0.15.1",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "cw2 0.15.1",
- "cw4 0.15.1",
+ "cw-controllers",
+ "cw-storage-plus",
+ "cw-utils",
+ "cw2",
+ "cw4",
  "schemars",
  "serde",
  "thiserror",
 ]
 
-[[package]]
-name = "cw721"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "035818368a74c07dd9ed5c5a93340199ba251530162010b9f34c3809e3b97df1"
-dependencies = [
- "cosmwasm-std",
- "cw-utils 0.13.4",
- "schemars",
- "serde",
-]
-
 [[package]]
 name = "cw721"
 version = "0.15.0"
@@ -571,25 +379,9 @@ checksum = "20dfe04f86e5327956b559ffcc86d9a43167391f37402afd8bf40b0be16bee4d"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-utils 0.15.1",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw721-base"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "423d4efe8b649d228d1533e141c238415f49aa8a9ee4e40fce192d7a93ffd057"
-dependencies = [
- "cosmwasm-std",
- "cw-storage-plus 0.13.4",
- "cw-utils 0.13.4",
- "cw2 0.13.4",
- "cw721 0.13.4",
+ "cw-utils",
  "schemars",
  "serde",
- "thiserror",
 ]
 
 [[package]]
@@ -600,10 +392,10 @@ checksum = "62c3ee3b669fc2a8094301a73fd7be97a7454d4df2650c33599f737e8f254d24"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "cw2 0.15.1",
- "cw721 0.15.0",
+ "cw-storage-plus",
+ "cw-utils",
+ "cw2",
+ "cw721",
  "schemars",
  "serde",
  "thiserror",
@@ -1074,20 +866,20 @@ dependencies = [
 
 [[package]]
 name = "sg-controllers"
-version = "0.13.1"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-std",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
+ "cw-storage-plus",
+ "cw-utils",
  "schemars",
  "serde",
- "sg-std 0.15.0",
+ "sg-std",
  "thiserror",
 ]
 
 [[package]]
 name = "sg-metadata"
-version = "0.14.0"
+version = "0.20.0"
 dependencies = [
  "schemars",
  "serde",
@@ -1095,79 +887,42 @@ dependencies = [
 
 [[package]]
 name = "sg-multi-test"
-version = "0.15.1"
+version = "0.20.0"
 dependencies = [
  "anyhow",
  "cosmwasm-std",
- "cw-multi-test 0.15.1",
+ "cw-multi-test",
  "schemars",
  "serde",
- "sg-std 0.15.0",
+ "sg-std",
 ]
 
 [[package]]
 name = "sg-splits"
-version = "0.1.0"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cosmwasm-storage",
- "cw-multi-test 0.13.4",
- "cw-storage-plus 0.13.4",
- "cw2 0.13.4",
- "cw3",
- "cw3-flex-multisig",
- "cw4 0.14.0",
- "cw4-group 0.14.0",
+ "cw-multi-test",
+ "cw-storage-plus",
+ "cw2",
+ "cw4",
+ "cw4-group",
  "schemars",
  "serde",
  "sg-multi-test",
- "sg-std 0.15.0",
- "thiserror",
-]
-
-[[package]]
-name = "sg-splits"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12dd36eba64c444524067686abdfe326364a6dbb3e274a83f08782f0e9ca1542"
-dependencies = [
- "cosmwasm-std",
- "cosmwasm-storage",
- "cw-storage-plus 0.13.4",
- "cw2 0.13.4",
- "cw3",
- "cw3-flex-multisig",
- "cw4 0.14.0",
- "schemars",
- "serde",
- "sg-std 0.14.0",
- "thiserror",
-]
-
-[[package]]
-name = "sg-std"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a02682bc950eb5511b7166ee943424801caa3f160ebc6f62743b54cffbbea581"
-dependencies = [
- "cosmwasm-std",
- "cw-utils 0.13.4",
- "cw721 0.13.4",
- "cw721-base 0.13.4",
- "schemars",
- "serde",
+ "sg-std",
  "thiserror",
 ]
 
 [[package]]
 name = "sg-std"
-version = "0.15.0"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-utils 0.15.1",
- "cw721 0.15.0",
+ "cw-utils",
+ "cw721",
  "schemars",
  "serde",
  "thiserror",
@@ -1175,7 +930,7 @@ dependencies = [
 
 [[package]]
 name = "sg-utils"
-version = "0.12.1"
+version = "0.20.0"
 dependencies = [
  "bech32",
  "cosmwasm-std",
@@ -1183,38 +938,38 @@ dependencies = [
 
 [[package]]
 name = "sg-whitelist"
-version = "0.12.4"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "cw2 0.15.1",
+ "cw-storage-plus",
+ "cw-utils",
+ "cw2",
  "rust_decimal",
  "schemars",
  "serde",
- "sg-std 0.15.0",
+ "sg-std",
  "sg1",
  "thiserror",
 ]
 
 [[package]]
 name = "sg1"
-version = "0.14.1"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-std",
- "cw-utils 0.15.1",
+ "cw-utils",
  "serde",
- "sg-std 0.15.0",
+ "sg-std",
  "thiserror",
 ]
 
 [[package]]
 name = "sg2"
-version = "0.2.0"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-std",
- "cw-utils 0.15.1",
+ "cw-utils",
  "schemars",
  "serde",
  "sg721",
@@ -1223,7 +978,7 @@ dependencies = [
 
 [[package]]
 name = "sg4"
-version = "0.12.1"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-std",
  "schemars",
@@ -1233,32 +988,32 @@ dependencies = [
 
 [[package]]
 name = "sg721"
-version = "0.18.0"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-multi-test 0.15.1",
- "cw-utils 0.15.1",
- "cw721-base 0.15.0",
+ "cw-multi-test",
+ "cw-utils",
+ "cw721-base",
  "serde",
  "thiserror",
 ]
 
 [[package]]
 name = "sg721-base"
-version = "0.15.1"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-multi-test 0.15.1",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "cw2 0.15.1",
- "cw721 0.15.0",
- "cw721-base 0.15.0",
+ "cw-multi-test",
+ "cw-storage-plus",
+ "cw-utils",
+ "cw2",
+ "cw721",
+ "cw721-base",
  "serde",
  "sg-multi-test",
- "sg-std 0.15.0",
+ "sg-std",
  "sg2",
  "sg721",
  "thiserror",
@@ -1269,35 +1024,34 @@ dependencies = [
 
 [[package]]
 name = "sg721-metadata-onchain"
-version = "0.14.0"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw2 0.15.1",
- "cw721 0.15.0",
- "cw721-base 0.15.0",
+ "cw2",
+ "cw721",
+ "cw721-base",
  "schemars",
  "serde",
  "sg-metadata",
- "sg-std 0.15.0",
+ "sg-std",
  "sg721",
  "sg721-base",
 ]
 
 [[package]]
 name = "sg721-nt"
-version = "0.14.0"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "cw2 0.15.1",
- "cw721 0.15.0",
- "cw721-base 0.15.0",
+ "cw-utils",
+ "cw2",
+ "cw721",
+ "cw721-base",
  "schemars",
  "serde",
- "sg-std 0.15.0",
+ "sg-std",
  "sg721",
  "sg721-base",
 ]
@@ -1465,19 +1219,19 @@ dependencies = [
 
 [[package]]
 name = "vending-factory"
-version = "0.3.0"
+version = "0.20.0"
 dependencies = [
  "base-factory",
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-multi-test 0.15.1",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "cw2 0.15.1",
+ "cw-multi-test",
+ "cw-storage-plus",
+ "cw-utils",
+ "cw2",
  "schemars",
  "serde",
  "sg-multi-test",
- "sg-std 0.15.0",
+ "sg-std",
  "sg1",
  "sg2",
  "sg721",
@@ -1486,25 +1240,25 @@ dependencies = [
 
 [[package]]
 name = "vending-minter"
-version = "0.15.1"
+version = "0.20.0"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
- "cw-multi-test 0.15.1",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "cw2 0.15.1",
- "cw4 0.15.1",
- "cw4-group 0.15.1",
- "cw721 0.15.0",
- "cw721-base 0.15.0",
+ "cw-multi-test",
+ "cw-storage-plus",
+ "cw-utils",
+ "cw2",
+ "cw4",
+ "cw4-group",
+ "cw721",
+ "cw721-base",
  "rand_core 0.6.4",
  "rand_xoshiro",
  "schemars",
  "serde",
  "sg-multi-test",
- "sg-splits 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "sg-std 0.15.0",
+ "sg-splits",
+ "sg-std",
  "sg-whitelist",
  "sg1",
  "sg2",
diff --git a/Cargo.toml b/Cargo.toml
index ddc20ee9..57c72df6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -2,6 +2,29 @@
 members = ["packages/*", "contracts/*"]
 resolver = "2"
 
+[workspace.package]
+version    = "0.20.0"
+edition    = "2021"
+homepage   = "https://stargaze.zone"
+repository = "https://github.com/public-awesome/launchpad"
+license    = "Apache-2.0"
+
+[workspace.dependencies]
+cosmwasm-schema   = "1.1.0"
+cosmwasm-std      = "1.1.0"
+cw2               = "0.15.0"
+cw4               = "0.15.0"
+cw4-group         = "0.15.0"
+cw721             = "0.15.0"
+cw721-base        = "0.15.0"
+cw-multi-test     = "0.15.0"
+cw-storage-plus   = "0.15.0"
+cw-utils          = "0.15.0"
+schemars          = "0.8.8"
+serde             = { version = "1.0.133", default-features = false, features = ["derive"] }
+thiserror         = "1.0.31"
+url               = "2.2.2"
+
 [profile.release.package.sg721]
 codegen-units = 1
 incremental = false
@@ -58,7 +81,6 @@ incremental = false
 codegen-units = 1
 incremental = false
 
-
 [profile.release]
 rpath = false
 lto = true
diff --git a/contracts/base-factory/Cargo.toml b/contracts/base-factory/Cargo.toml
index 772e1036..758f4976 100644
--- a/contracts/base-factory/Cargo.toml
+++ b/contracts/base-factory/Cargo.toml
@@ -1,12 +1,12 @@
 [package]
-name = "base-factory"
-version = "0.2.0"
-authors = ["Shane Vitarana <s@noreply.publicawesome.com>"]
-edition = "2018"
+name        = "base-factory"
+authors     = ["Shane Vitarana <s@noreply.publicawesome.com>"]
 description = "A 1/1 Stargaze minter factory"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+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.
@@ -26,18 +26,18 @@ backtraces = ["cosmwasm-std/backtraces"]
 library = []
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4", features = ["staking"] }
-cw-storage-plus = "0.15.0"
-cw2 = "0.15.0"
-schemars = "0.8.8"
-serde = { version = "1.0.137", default-features = false, features = ["derive"] }
-thiserror = { version = "1.0.31" }
-cw-utils = "0.15.0"
-sg1 = { path = "../../packages/sg1" }
-sg-std = { path = "../../packages/sg-std" }
-sg2 = { path = "../../packages/sg2" }
+cosmwasm-schema = { workspace = true }
+cosmwasm-std    = { workspace = true, features = ["staking"] }
+cw2             = { workspace = true }
+cw-storage-plus = { workspace = true }
+cw-utils        = { workspace = true }
+schemars        = { workspace = true }
+serde           = { workspace = true }
+sg1             = { path = "../../packages/sg1" }
+sg2             = { path = "../../packages/sg2" }
+sg-std          = { path = "../../packages/sg-std" }
+thiserror       = { workspace = true }
 
 [dev-dependencies]
-cosmwasm-schema = "1.1.4"
-cw-multi-test = "0.15.0"
+cw-multi-test = { workspace = true }
 sg-multi-test = { path = "../../packages/sg-multi-test" }
diff --git a/contracts/base-minter/Cargo.toml b/contracts/base-minter/Cargo.toml
index c1f9350a..a79c3532 100644
--- a/contracts/base-minter/Cargo.toml
+++ b/contracts/base-minter/Cargo.toml
@@ -1,10 +1,12 @@
 [package]
-name = "base-minter"
-version = "0.14.1"
-authors = ["Shane Vitarana <s@noreply.publicawesome.com>"]
-edition = "2018"
+name        = "base-minter"
+authors     = ["Shane Vitarana <s@noreply.publicawesome.com>"]
 description = "Stargaze NFT basic 1/1 minter contract"
-license = "Apache-2.0"
+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.
@@ -27,31 +29,30 @@ library = []
 optimize = """docker run --rm -v "$(pwd)":/code \
   --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
   --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
-  cosmwasm/rust-optimizer:0.12.8
+  cosmwasm/rust-optimizer:0.12.9
 """
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4" }
-cw-storage-plus = "0.15.0"
-cw2 = "0.15.0"
-cw-utils = "0.15.0"
-schemars = "0.8"
-serde = { version = "1.0", default-features = false, features = ["derive"] }
-thiserror = { version = "1.0" }
-url = "2.2.0"
-sg-std = { path = "../../packages/sg-std" }
-cw721 = "0.15.0"
-cw721-base = { version = "0.15.0", features = ["library"] }
-sg721-base = { path = "../sg721-base" }
-base-factory = { path = "../base-factory" }
-sg1 = { path = "../../packages/sg1" }
-sg721 = { path = "../../packages/sg721" }
-
-sg2 = { path = "../../packages/sg2" }
-sg4 = { path = "../../packages/sg4" }
+base-factory    = { path = "../base-factory" }
+cosmwasm-schema = { workspace = true }
+cosmwasm-std    = { workspace = true, features = ["staking"] }
+cw2             = { workspace = true }
+cw721           = { workspace = true }
+cw721-base      = { workspace = true, features = ["library"] }
+cw-storage-plus = { workspace = true }
+cw-utils        = { workspace = true }
+schemars        = { workspace = true }
+serde           = { workspace = true }
+sg1             = { path = "../../packages/sg1" }
+sg2             = { path = "../../packages/sg2" }
+sg4             = { path = "../../packages/sg4" }
+sg721           = { path = "../../packages/sg721" }
+sg721-base      = { path = "../sg721-base" }
+sg-std          = { path = "../../packages/sg-std" }
+thiserror       = { workspace = true }
+url             = { workspace = true }
 
 [dev-dependencies]
-cosmwasm-schema = { version = "1.1.4" }
-cw-multi-test = "0.15.0"
+cw-multi-test = { workspace = true }
 sg-multi-test = { path = "../../packages/sg-multi-test" }
-sg721-nt = { path = "../sg721-nt" }
+sg721-nt      = { path = "../sg721-nt" }
diff --git a/contracts/sg721-base/Cargo.toml b/contracts/sg721-base/Cargo.toml
index 9ae0c08a..980940ca 100644
--- a/contracts/sg721-base/Cargo.toml
+++ b/contracts/sg721-base/Cargo.toml
@@ -1,12 +1,12 @@
 [package]
-name = "sg721-base"
-version = "0.15.1"
-authors = ["Shane Vitarana <s@noreply.publicawesome.com>"]
-edition = "2018"
+name        = "sg721-base"
+authors     = ["Shane Vitarana <s@noreply.publicawesome.com>"]
 description = "Stargaze NFT collection contract"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+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.
@@ -26,22 +26,22 @@ backtraces = ["cosmwasm-std/backtraces"]
 library = []
 
 [dependencies]
-cosmwasm-schema = { version = "1.1.4" }
-cosmwasm-std = { version = "1.1.4" }
-cw-storage-plus = "0.15.0"
-cw-utils = "0.15.0"
-cw2 = "0.15.0"
-serde = { version = "1.0.137", default-features = false, features = ["derive"] }
-thiserror = { version = "1.0.30" }
-sg-std = { path = "../../packages/sg-std" }
-url = "2.2.2"
-cw721 = "0.15.0"
-cw721-base = { version = "0.15.0", features = ["library"] }
-sg721 = { path = "../../packages/sg721" }
+cosmwasm-schema = { workspace = true }
+cosmwasm-std    = { workspace = true, features = ["staking"] }
+cw2             = { workspace = true }
+cw721           = { workspace = true }
+cw721-base      = { workspace = true, features = ["library"] }
+cw-storage-plus = { workspace = true }
+cw-utils        = { workspace = true }
+serde           = { workspace = true }
+sg721           = { path = "../../packages/sg721" }
+sg-std          = { path = "../../packages/sg-std" }
+thiserror       = { workspace = true }
+url             = { workspace = true }
 
 [dev-dependencies]
-cw-multi-test = "0.15.0"
-sg-multi-test = { path = "../../packages/sg-multi-test" }
-vending-minter = { path = "../vending-minter", features = ["library"] }
-vending-factory = { path = "../vending-factory", features = ["library"] }
-sg2 = { path = "../../packages/sg2" }
+cw-multi-test   = { workspace = true }
+sg2             = { path = "../../packages/sg2" }
+sg-multi-test   = { path = "../../packages/sg-multi-test" }
+vending-factory = { path = "../vending-factory" }
+vending-minter  = { path = "../vending-minter" }
diff --git a/contracts/sg721-metadata-onchain/Cargo.toml b/contracts/sg721-metadata-onchain/Cargo.toml
index b544be40..9bb8510a 100644
--- a/contracts/sg721-metadata-onchain/Cargo.toml
+++ b/contracts/sg721-metadata-onchain/Cargo.toml
@@ -1,15 +1,15 @@
 [package]
-name = "sg721-metadata-onchain"
-version = "0.14.0"
-authors = [
+name        = "sg721-metadata-onchain"
+authors     = [
   "Shane Vitarana <s@noreply.publicawesome.com>",
-  "larry <gm@larry.engineer>",
+  "Larry Engineer <gm@larry.engineer>",
 ]
-edition = "2018"
 description = "Example extending SG721 NFT to store metadata on chain"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+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.
@@ -29,16 +29,16 @@ backtraces = ["cosmwasm-std/backtraces"]
 library = []
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4" }
-cw2 = "0.15.0"
-schemars = "0.8.8"
-serde = { version = "1.0.137", default-features = false, features = ["derive"] }
-sg-metadata = { path = "../../packages/sg-metadata" }
-sg-std = { path = "../../packages/sg-std" }
-sg721 = { path = "../../packages/sg721" }
-sg721-base = { path = "../sg721-base", features = ["library"] }
+cosmwasm-schema = { workspace = true }
+cosmwasm-std    = { workspace = true, features = ["staking"] }
+cw2             = { workspace = true }
+schemars        = { workspace = true }
+serde           = { workspace = true }
+sg721           = { path = "../../packages/sg721" }
+sg721-base      = { path = "../sg721-base", features = ["library"] }
+sg-metadata     = { path = "../../packages/sg-metadata" }
+sg-std          = { path = "../../packages/sg-std" }
 
 [dev-dependencies]
-cosmwasm-schema = { version = "1.1.4" }
-cw721 = "0.15.0"
-cw721-base = { version = "0.15.0", features = ["library"] }
+cw721      = { workspace = true }
+cw721-base = { workspace = true }
diff --git a/contracts/sg721-nt/Cargo.toml b/contracts/sg721-nt/Cargo.toml
index 1e0746a3..c0fdc0e3 100644
--- a/contracts/sg721-nt/Cargo.toml
+++ b/contracts/sg721-nt/Cargo.toml
@@ -1,15 +1,15 @@
 [package]
-name = "sg721-nt"
-version = "0.14.0"
-authors = [
+name        = "sg721-nt"
+authors     = [
   "Shane Vitarana <s@noreply.publicawesome.com>",
   "John Y <j@noreply.publicawesome.com>",
 ]
-edition = "2018"
 description = "Stargaze Non-transferrable NFT collection contract"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+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.
@@ -29,17 +29,14 @@ backtraces = ["cosmwasm-std/backtraces"]
 library = []
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4" }
-cw-storage-plus = "0.15.0"
-cw-utils = "0.15.0"
-cw2 = "0.15.0"
-schemars = "0.8.8"
-serde = { version = "1.0.133", default-features = false, features = ["derive"] }
-sg-std = { path = "../../packages/sg-std" }
-cw721 = "0.15.0"
-cw721-base = { version = "0.15.0", features = ["library"] }
-sg721 = { path = "../../packages/sg721" }
-sg721-base = { path = "../sg721-base", features = ["library"] }
-
-[dev-dependencies]
-cosmwasm-schema = { version = "1.1.4" }
+cosmwasm-schema = { workspace = true }
+cosmwasm-std    = { workspace = true, features = ["staking"] }
+cw2             = { workspace = true }
+cw721           = { workspace = true }
+cw721-base      = { workspace = true, features = ["library"] }
+cw-utils        = { workspace = true }
+schemars        = { workspace = true }
+serde           = { workspace = true }
+sg721           = { path = "../../packages/sg721" }
+sg721-base      = { path = "../sg721-base", features = ["library"] }
+sg-std          = { path = "../../packages/sg-std" }
diff --git a/contracts/splits/Cargo.toml b/contracts/splits/Cargo.toml
index db9f6a42..a43fefef 100644
--- a/contracts/splits/Cargo.toml
+++ b/contracts/splits/Cargo.toml
@@ -1,12 +1,12 @@
 [package]
-name = "sg-splits"
-version = "0.1.0"
-authors = ["Shane Vitarana <s@noreply.publicawesome.com>"]
-edition = "2018"
+name        = "sg-splits"
+authors     = ["Shane Vitarana <s@noreply.publicawesome.com>"]
 description = "Stargaze Splits contract"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+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.
@@ -19,17 +19,6 @@ exclude = [
 [lib]
 crate-type = ["cdylib", "rlib"]
 
-[profile.release]
-opt-level = 3
-debug = false
-rpath = false
-lto = true
-debug-assertions = false
-codegen-units = 1
-panic = 'abort'
-incremental = false
-overflow-checks = true
-
 [features]
 # for more explicit tests, cargo test --features=backtraces
 backtraces = ["cosmwasm-std/backtraces"]
@@ -40,24 +29,21 @@ library = []
 optimize = """docker run --rm -v "$(pwd)":/code \
   --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
   --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
-  cosmwasm/rust-optimizer:0.12.8
+  cosmwasm/rust-optimizer:0.12.9
 """
 
 [dependencies]
-cosmwasm-std = "1.1.4"
-cosmwasm-storage = "1.1.4"
-cw-storage-plus = "0.13.2"
-cw2 = "0.13.2"
-cw3-flex-multisig = { version = "0.14.0", features = ["library"] }
-schemars = "0.8.8"
-serde = { version = "1.0.137", default-features = false, features = ["derive"] }
-thiserror = { version = "1.0.31" }
-cw4 = "0.14.0"
-cw3 = "0.14.0"
-sg-std = { path = "../../packages/sg-std" }
+cosmwasm-std      = { workspace = true }
+cw2               = { workspace = true }
+cw4               = { workspace = true }
+cw-storage-plus   = { workspace = true }
+schemars          = { workspace = true }
+serde             = { workspace = true }
+sg-std            = { path = "../../packages/sg-std" }
+thiserror         = { workspace = true }
 
 [dev-dependencies]
-cosmwasm-schema = "1.1.4"
-cw-multi-test = "0.13.2"
-cw4-group = "0.14.0"
-sg-multi-test = { path = "../../packages/sg-multi-test" }
+cosmwasm-schema = { workspace = true }
+cw4-group       = { workspace = true }
+cw-multi-test   = { workspace = true }
+sg-multi-test   = { path = "../../packages/sg-multi-test" }
diff --git a/contracts/vending-factory/Cargo.toml b/contracts/vending-factory/Cargo.toml
index 40883216..2f1a2be8 100644
--- a/contracts/vending-factory/Cargo.toml
+++ b/contracts/vending-factory/Cargo.toml
@@ -1,12 +1,12 @@
 [package]
-name = "vending-factory"
-version = "0.3.0"
-authors = ["Shane Vitarana <s@noreply.publicawesome.com>"]
-edition = "2018"
+name        = "vending-factory"
+authors     = ["Shane Vitarana <s@noreply.publicawesome.com>"]
 description = "Stargaze vending minter factory contract"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+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.
@@ -26,20 +26,20 @@ backtraces = ["cosmwasm-std/backtraces"]
 library = []
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4", features = ["staking"] }
-cw-storage-plus = "0.15.0"
-cw2 = "0.15.0"
-schemars = "0.8.8"
-serde = { version = "1.0.137", default-features = false, features = ["derive"] }
-thiserror = { version = "1.0.31" }
-cw-utils = "0.15.0"
-sg1 = { path = "../../packages/sg1" }
-sg-std = { path = "../../packages/sg-std" }
-sg721 = { path = "../../packages/sg721" }
-sg2 = { path = "../../packages/sg2" }
-base-factory = { path = "../base-factory", features = ["library"] }
+base-factory    = { path = "../base-factory", features = ["library"] }
+cosmwasm-schema = { workspace = true }
+cosmwasm-std    = { workspace = true, features = ["staking"] }
+cw2             = { workspace = true }
+cw-storage-plus = { workspace = true }
+cw-utils        = { workspace = true }
+schemars        = { workspace = true }
+serde           = { workspace = true }
+sg1             = { path = "../../packages/sg1" }
+sg2             = { path = "../../packages/sg2" }
+sg721           = { path = "../../packages/sg721" }
+sg-std          = { path = "../../packages/sg-std" }
+thiserror       = { workspace = true }
 
 [dev-dependencies]
-cosmwasm-schema = "1.1.4"
-cw-multi-test = "0.15.0"
+cw-multi-test = { workspace = true }
 sg-multi-test = { path = "../../packages/sg-multi-test" }
diff --git a/contracts/vending-minter/Cargo.toml b/contracts/vending-minter/Cargo.toml
index 93c40e14..ef54ba25 100644
--- a/contracts/vending-minter/Cargo.toml
+++ b/contracts/vending-minter/Cargo.toml
@@ -1,15 +1,15 @@
 [package]
-name = "vending-minter"
-version = "0.15.1"
-authors = [
+name        = "vending-minter"
+authors     = [
   "Jake Hartnell <jake@stargaze.zone>",
   "Shane Vitarana <s@noreply.publicawesome.com>",
 ]
-edition = "2018"
 description = "Stargaze vending minter contract"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+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.
@@ -32,37 +32,37 @@ library = []
 optimize = """docker run --rm -v "$(pwd)":/code \
   --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
   --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
-  cosmwasm/rust-optimizer:0.12.8
+  cosmwasm/rust-optimizer:0.12.9
 """
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4" }
-cw-storage-plus = "0.15.0"
-cw2 = "0.15.0"
-cw-utils = "0.15.0"
-schemars = "0.8"
-serde = { version = "1.0", default-features = false, features = ["derive"] }
-thiserror = { version = "1.0" }
-url = "2.2.0"
-sg-std = { path = "../../packages/sg-std"}
-sg-whitelist = { path = "../whitelist", features = ["library"] }
-rand_core = { version = "0.6", default-features = false }
-rand_xoshiro = { version = "0.6.0", default-features = false }
-shuffle = { git = "https://github.com/webmaster128/shuffle", branch = "rm-getrandom", version = "0.1.7" }
-sha2 = "0.10.2"
-cw721 = "0.15.0"
-cw721-base = { version = "0.15.0", features = ["library"] }
-sg1 = { path = "../../packages/sg1" }
-sg721 = { path = "../../packages/sg721" }
+cosmwasm-schema = { workspace = true }
+cosmwasm-std    = { workspace = true }
+cw2             = { workspace = true }
+cw721           = { workspace = true }
+cw721-base      = { workspace = true, features = ["library"] }
+cw-storage-plus = { workspace = true }
+cw-utils        = { workspace = true }
+rand_core       = { version = "0.6.0", default-features = false }
+rand_xoshiro    = { version = "0.6.0", default-features = false }
+schemars        = { workspace = true }
+serde           = { workspace = true }
+sha2            = "0.10.2"
+shuffle         = { git = "https://github.com/webmaster128/shuffle", branch = "rm-getrandom", version = "0.1.7" }
+sg1             = { path = "../../packages/sg1" }
+sg2             = { path = "../../packages/sg2" }
+sg4             = { path = "../../packages/sg4" }
+sg721           = { path = "../../packages/sg721" }
+sg-std          = { path = "../../packages/sg-std"}
+sg-whitelist    = { path = "../whitelist", features = ["library"] }
+thiserror       = { workspace = true }
+url             = { workspace = true }
 vending-factory = { path = "../vending-factory", features = ["library"] }
-sg2 = { path = "../../packages/sg2" }
-sg4 = { path = "../../packages/sg4" }
-cw4 = "0.15.0"
 
 [dev-dependencies]
-cosmwasm-schema = { version = "1.1.4" }
-cw-multi-test = "0.15.0"
+cw4           = { workspace = true }
+cw-multi-test = { workspace = true }
 sg-multi-test = { path = "../../packages/sg-multi-test" }
-sg721-base = { path = "../sg721-base", features = ["library"] }
-cw4-group = "0.15.0"
-sg-splits = "0.1.0"
+sg721-base    = { path = "../sg721-base" }
+cw4-group     = { workspace = true }
+sg-splits     = { path = "../splits" }
diff --git a/contracts/whitelist/Cargo.toml b/contracts/whitelist/Cargo.toml
index aa789bf0..931cefd2 100644
--- a/contracts/whitelist/Cargo.toml
+++ b/contracts/whitelist/Cargo.toml
@@ -1,10 +1,12 @@
 [package]
-name = "sg-whitelist"
-version = "0.12.4"
-authors = ["Shane Vitarana <s@noreply.publicawesome.com>"]
-edition = "2018"
+name        = "sg-whitelist"
+authors     = ["Shane Vitarana <s@noreply.publicawesome.com>"]
 description = "Stargaze NFT whitelist contract"
-license = "Apache-2.0"
+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.
@@ -27,20 +29,20 @@ library = []
 optimize = """docker run --rm -v "$(pwd)":/code \
   --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
   --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
-  cosmwasm/rust-optimizer:0.12.8
+  cosmwasm/rust-optimizer:0.12.9
 """
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4" }
-cw-storage-plus = "0.15.0"
-cw-utils = "0.15.0"
-cw2 = "0.15.0"
-schemars = "0.8"
-rust_decimal = { version = "1.14.3" }
-serde = { version = "1.0", default-features = false, features = ["derive"] }
-thiserror = { version = "1.0" }
-sg-std = { path = "../../packages/sg-std" }
-sg1 = { path = "../../packages/sg1" }
+cosmwasm-std    = { workspace = true }
+cw2             = { workspace = true }
+cw-storage-plus = { workspace = true }
+cw-utils        = { workspace = true }
+rust_decimal    = { version = "1.14.3" }
+schemars        = { workspace = true }
+serde           = { workspace = true }
+sg1             = { path = "../../packages/sg1" }
+sg-std          = { path = "../../packages/sg-std" }
+thiserror       = { workspace = true }
 
 [dev-dependencies]
-cosmwasm-schema = { version = "1.1.4" }
+cosmwasm-schema = { workspace = true }
diff --git a/packages/controllers/Cargo.toml b/packages/controllers/Cargo.toml
index 1fe93126..9d9f2f09 100644
--- a/packages/controllers/Cargo.toml
+++ b/packages/controllers/Cargo.toml
@@ -1,21 +1,18 @@
-
 [package]
-name = "sg-controllers"
-version = "0.13.1"
-authors = ["Shane Vitarana <s@users.noreply.publicawesome.com>"]
-edition = "2018"
+name        = "sg-controllers"
+authors     = ["Shane Vitarana <s@users.noreply.publicawesome.com>"]
 description = "Common controllers we can reuse in many contracts"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://www.stargaze.zone"
-documentation = "https://docs.stargaze.zone"
-
+version     = { workspace = true }
+edition     = { workspace = true }
+homepage    = { workspace = true }
+repository  = { workspace = true }
+license     = { workspace = true }
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4" }
-cw-storage-plus = "0.15.0"
-schemars = "0.8.1"
-serde = { version = "1.0.103", default-features = false, features = ["derive"] }
-sg-std = { path = "../sg-std" }
-thiserror = { version = "1.0.21" }
-cw-utils = "0.15.0"
+cosmwasm-std    = { version = "1.1.4" }
+cw-storage-plus = { workspace = true }
+cw-utils        = { workspace = true }
+schemars        = { workspace = true }
+serde           = { workspace = true }
+sg-std          = { path = "../sg-std" }
+thiserror       = { workspace = true }
diff --git a/packages/sg-metadata/Cargo.toml b/packages/sg-metadata/Cargo.toml
index cc63da76..c22557b0 100644
--- a/packages/sg-metadata/Cargo.toml
+++ b/packages/sg-metadata/Cargo.toml
@@ -1,15 +1,15 @@
 [package]
-name = "sg-metadata"
-version = "0.14.0"
-authors = [
+name        = "sg-metadata"
+authors     = [
   "Shane Vitarana <s@noreply.publicawsome.com>",
-  "larry <gm@larry.engineer>"
+  "Larry Engineer <gm@larry.engineer>",
 ]
-edition = "2018"
 description = "Rust definition of the OpenSea metadata standard, used by Stargaze marketplace"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+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.
@@ -23,5 +23,5 @@ exclude = [
 crate-type = ["cdylib", "rlib"]
 
 [dependencies]
-schemars = "0.8.8"
-serde = { version = "1.0.137", default-features = false, features = ["derive"] }
+schemars = { workspace = true }
+serde    = { workspace = true }
diff --git a/packages/sg-std/Cargo.toml b/packages/sg-std/Cargo.toml
index adcdff4c..3561fe6f 100644
--- a/packages/sg-std/Cargo.toml
+++ b/packages/sg-std/Cargo.toml
@@ -1,17 +1,15 @@
 [package]
-name = "sg-std"
-version = "0.15.0"
-edition = "2021"
-
-authors = ["Jorge Hernandez <jorge@publicawesome.com>"]
+name        = "sg-std"
+authors     = ["Jorge Hernandez <jorge@publicawesome.com>"]
 description = "Bindings for CosmWasm contracts to call into custom modules of Stargaze"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+version     = { workspace = true }
+edition     = { workspace = true }
+homepage    = { workspace = true }
+repository  = { workspace = true }
+license     = { workspace = true }
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
-
 [features]
 # for more explicit tests, cargo test --features=backtraces
 backtraces = ["cosmwasm-std/backtraces"]
@@ -19,10 +17,10 @@ backtraces = ["cosmwasm-std/backtraces"]
 library = []
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4" }
-cw-utils = "0.15.0"
-cw721 = "0.15.0"
-schemars = "0.8.8"
-serde = { version = "1.0.133", default-features = false, features = ["derive"] }
-thiserror = "1.0.30"
-cosmwasm-schema = { version = "1.1.4" }
+cosmwasm-schema = { workspace = true }
+cosmwasm-std    = { workspace = true }
+cw721           = { workspace = true }
+cw-utils        = { workspace = true }
+schemars        = { workspace = true }
+serde           = { workspace = true }
+thiserror       = { workspace = true }
diff --git a/packages/sg-utils/Cargo.toml b/packages/sg-utils/Cargo.toml
index 818409cf..3467e624 100644
--- a/packages/sg-utils/Cargo.toml
+++ b/packages/sg-utils/Cargo.toml
@@ -1,13 +1,13 @@
 [package]
-name = "sg-utils"
-version = "0.12.1"
-edition = "2021"
-authors = ["Shane Vitarana <s@noreply.com>"]
+name        = "sg-utils"
+authors     = ["Shane Vitarana <s@noreply.com>"]
 description = "Common utilities for Stargaze contract"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+version     = { workspace = true }
+edition     = { workspace = true }
+homepage    = { workspace = true }
+repository  = { workspace = true }
+license     = { workspace = true }
 
 [dependencies]
-bech32 = "0.8.1"
-cosmwasm-std = { version = "1.1.4" }
+bech32       = "0.8.1"
+cosmwasm-std = { workspace = true }
diff --git a/packages/sg1/Cargo.toml b/packages/sg1/Cargo.toml
index 96ff3bf9..2afdd50b 100644
--- a/packages/sg1/Cargo.toml
+++ b/packages/sg1/Cargo.toml
@@ -1,17 +1,16 @@
 [package]
-name = "sg1"
-version = "0.14.1"
-edition = "2021"
-
-authors = ["Shane Vitarana <s@noreply.publicawesome.com>"]
+name        = "sg1"
+authors     = ["Shane Vitarana <s@noreply.publicawesome.com>"]
 description = "Definition and types for the SG1 interface"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+version     = { workspace = true }
+edition     = { workspace = true }
+homepage    = { workspace = true }
+repository  = { workspace = true }
+license     = { workspace = true }
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4" }
-cw-utils = "0.15.0"
-serde = { version = "1.0.133", default-features = false, features = ["derive"] }
-sg-std = { path = "../sg-std" }
-thiserror = "1.0.30"
+cosmwasm-std = { workspace = true }
+cw-utils     = { workspace = true }
+serde        = { workspace = true }
+sg-std       = { path = "../sg-std" }
+thiserror    = { workspace = true }
diff --git a/packages/sg2/Cargo.toml b/packages/sg2/Cargo.toml
index a00214ce..660edc80 100644
--- a/packages/sg2/Cargo.toml
+++ b/packages/sg2/Cargo.toml
@@ -1,17 +1,17 @@
 [package]
-name = "sg2"
-version = "0.2.0"
-edition = "2021"
-authors = ["Shane Vitarana <s@noreply.publicawesome.com>"]
+name        = "sg2"
+authors     = ["Shane Vitarana <s@noreply.publicawesome.com>"]
 description = "Definition and types for the SG2 interface"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+version     = { workspace = true }
+edition     = { workspace = true }
+homepage    = { workspace = true }
+repository  = { workspace = true }
+license     = { workspace = true }
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4" }
-cw-utils = "0.15.0"
-serde = { version = "1.0.133", default-features = false, features = ["derive"] }
-thiserror = "1.0.30"
-schemars = "0.8.8"
-sg721 = { path = "../sg721" }
+cosmwasm-std = { workspace = true }
+cw-utils     = { workspace = true }
+schemars     = { workspace = true }
+serde        = { workspace = true }
+sg721        = { path = "../sg721" }
+thiserror    = { workspace = true }
diff --git a/packages/sg4/Cargo.toml b/packages/sg4/Cargo.toml
index c63d05c7..ee66194c 100644
--- a/packages/sg4/Cargo.toml
+++ b/packages/sg4/Cargo.toml
@@ -1,15 +1,15 @@
 [package]
-name = "sg4"
-version = "0.12.1"
-edition = "2021"
-authors = ["Shane Vitarana <s@noreply.publicawesome.com>"]
+name        = "sg4"
+authors     = ["Shane Vitarana <s@noreply.publicawesome.com>"]
 description = "Definition and types for the SG4 interface"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+version     = { workspace = true }
+edition     = { workspace = true }
+homepage    = { workspace = true }
+repository  = { workspace = true }
+license     = { workspace = true }
 
 [dependencies]
-cosmwasm-std = { version = "1.1.4" }
-serde = { version = "1.0.133", default-features = false, features = ["derive"] }
-thiserror = "1.0.30"
-schemars = "0.8.8"
+cosmwasm-std = { workspace = true }
+schemars     = { workspace = true }
+serde        = { workspace = true }
+thiserror    = { workspace = true }
diff --git a/packages/sg721/Cargo.lock b/packages/sg721/Cargo.lock
deleted file mode 100644
index b2a2faa6..00000000
--- a/packages/sg721/Cargo.lock
+++ /dev/null
@@ -1,738 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 3
-
-[[package]]
-name = "anyhow"
-version = "1.0.57"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
-
-[[package]]
-name = "base16ct"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
-
-[[package]]
-name = "base64"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
-
-[[package]]
-name = "base64ct"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dea908e7347a8c64e378c17e30ef880ad73e3b4498346b055c2c00ea342f3179"
-
-[[package]]
-name = "block-buffer"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
-name = "byteorder"
-version = "1.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
-
-[[package]]
-name = "bytes"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "const-oid"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3"
-
-[[package]]
-name = "cosmwasm-crypto"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5eb0afef2325df81aadbf9be1233f522ed8f6e91df870c764bc44cca2b1415bd"
-dependencies = [
- "digest",
- "ed25519-zebra",
- "k256",
- "rand_core 0.6.3",
- "thiserror",
-]
-
-[[package]]
-name = "cosmwasm-derive"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b36e527620a2a3e00e46b6e731ab6c9b68d11069c986f7d7be8eba79ef081a4"
-dependencies = [
- "syn",
-]
-
-[[package]]
-name = "cosmwasm-schema"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "772e80bbad231a47a2068812b723a1ff81dd4a0d56c9391ac748177bea3a61da"
-dependencies = [
- "schemars",
- "serde_json",
-]
-
-[[package]]
-name = "cosmwasm-std"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "875994993c2082a6fcd406937bf0fca21c349e4a624f3810253a14fa83a3a195"
-dependencies = [
- "base64",
- "cosmwasm-crypto",
- "cosmwasm-derive",
- "forward_ref",
- "schemars",
- "serde",
- "serde-json-wasm",
- "thiserror",
- "uint",
-]
-
-[[package]]
-name = "cosmwasm-storage"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d18403b07304d15d304dad11040d45bbcaf78d603b4be3fb5e2685c16f9229b5"
-dependencies = [
- "cosmwasm-std",
- "serde",
-]
-
-[[package]]
-name = "cpufeatures"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "crunchy"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
-
-[[package]]
-name = "crypto-bigint"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21"
-dependencies = [
- "generic-array",
- "rand_core 0.6.3",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "crypto-mac"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
-dependencies = [
- "generic-array",
- "subtle",
-]
-
-[[package]]
-name = "curve25519-dalek"
-version = "3.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"
-dependencies = [
- "byteorder",
- "digest",
- "rand_core 0.5.1",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "cw-multi-test"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbea57e5be4a682268a5eca1a57efece57a54ff216bfd87603d5e864aad40e12"
-dependencies = [
- "anyhow",
- "cosmwasm-std",
- "cosmwasm-storage",
- "cw-storage-plus",
- "cw-utils",
- "derivative",
- "itertools",
- "prost",
- "schemars",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "cw-storage-plus"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9336ecef1e19d56cf6e3e932475fc6a3dee35eec5a386e07917a1d1ba6bb0e35"
-dependencies = [
- "cosmwasm-std",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw-utils"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "babd2c090f39d07ce5bf2556962305e795daa048ce20a93709eb591476e4a29e"
-dependencies = [
- "cosmwasm-std",
- "schemars",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "cw2"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "993df11574f29574dd443eb0c189484bb91bc0638b6de3e32ab7f9319c92122d"
-dependencies = [
- "cosmwasm-std",
- "cw-storage-plus",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "der"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c"
-dependencies = [
- "const-oid",
-]
-
-[[package]]
-name = "derivative"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "digest"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
-name = "dyn-clone"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28"
-
-[[package]]
-name = "ecdsa"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0d69ae62e0ce582d56380743515fefaf1a8c70cec685d9677636d7e30ae9dc9"
-dependencies = [
- "der",
- "elliptic-curve",
- "rfc6979",
- "signature",
-]
-
-[[package]]
-name = "ed25519-zebra"
-version = "3.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "403ef3e961ab98f0ba902771d29f842058578bb1ce7e3c59dad5a6a93e784c69"
-dependencies = [
- "curve25519-dalek",
- "hex",
- "rand_core 0.6.3",
- "serde",
- "sha2",
- "thiserror",
- "zeroize",
-]
-
-[[package]]
-name = "either"
-version = "1.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
-
-[[package]]
-name = "elliptic-curve"
-version = "0.11.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25b477563c2bfed38a3b7a60964c49e058b2510ad3f12ba3483fd8f62c2306d6"
-dependencies = [
- "base16ct",
- "crypto-bigint",
- "der",
- "ff",
- "generic-array",
- "group",
- "rand_core 0.6.3",
- "sec1",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "ff"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "131655483be284720a17d74ff97592b8e76576dc25563148601df2d7c9080924"
-dependencies = [
- "rand_core 0.6.3",
- "subtle",
-]
-
-[[package]]
-name = "forward_ref"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e"
-
-[[package]]
-name = "generic-array"
-version = "0.14.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
-dependencies = [
- "typenum",
- "version_check",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.1.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi 0.9.0+wasi-snapshot-preview1",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi 0.10.2+wasi-snapshot-preview1",
-]
-
-[[package]]
-name = "group"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc5ac374b108929de78460075f3dc439fa66df9d8fc77e8f12caa5165fcf0c89"
-dependencies = [
- "ff",
- "rand_core 0.6.3",
- "subtle",
-]
-
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
-[[package]]
-name = "hmac"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
-dependencies = [
- "crypto-mac",
- "digest",
-]
-
-[[package]]
-name = "itertools"
-version = "0.10.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
-dependencies = [
- "either",
-]
-
-[[package]]
-name = "itoa"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
-
-[[package]]
-name = "k256"
-version = "0.10.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19c3a5e0a0b8450278feda242592512e09f61c72e018b8cd5c859482802daf2d"
-dependencies = [
- "cfg-if",
- "ecdsa",
- "elliptic-curve",
- "sec1",
- "sha2",
-]
-
-[[package]]
-name = "libc"
-version = "0.2.126"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
-
-[[package]]
-name = "opaque-debug"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
-
-[[package]]
-name = "pkcs8"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0"
-dependencies = [
- "der",
- "spki",
- "zeroize",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.39"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "prost"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
-dependencies = [
- "bytes",
- "prost-derive",
-]
-
-[[package]]
-name = "prost-derive"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
-dependencies = [
- "anyhow",
- "itertools",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-dependencies = [
- "getrandom 0.1.16",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
-dependencies = [
- "getrandom 0.2.6",
-]
-
-[[package]]
-name = "rfc6979"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96ef608575f6392792f9ecf7890c00086591d29a83910939d430753f7c050525"
-dependencies = [
- "crypto-bigint",
- "hmac",
- "zeroize",
-]
-
-[[package]]
-name = "ryu"
-version = "1.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
-
-[[package]]
-name = "schemars"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d21ecb263bf75fc69d5e74b0f2a60b6dd80cfd9fb0eba15c4b9d1104ceffc77"
-dependencies = [
- "dyn-clone",
- "schemars_derive",
- "serde",
- "serde_json",
-]
-
-[[package]]
-name = "schemars_derive"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "219b924f5b39f25b7d7c9203873a2698fdac8db2b396aaea6fa099b699cc40e9"
-dependencies = [
- "proc-macro2",
- "quote",
- "serde_derive_internals",
- "syn",
-]
-
-[[package]]
-name = "sec1"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1"
-dependencies = [
- "der",
- "generic-array",
- "pkcs8",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "serde"
-version = "1.0.137"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde-json-wasm"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "479b4dbc401ca13ee8ce902851b834893251404c4f3c65370a49e047a6be09a5"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.137"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_derive_internals"
-version = "0.26.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.81"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
-dependencies = [
- "itoa",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "sha2"
-version = "0.9.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
-dependencies = [
- "block-buffer",
- "cfg-if",
- "cpufeatures",
- "digest",
- "opaque-debug",
-]
-
-[[package]]
-name = "signature"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788"
-dependencies = [
- "digest",
- "rand_core 0.6.3",
-]
-
-[[package]]
-name = "spki"
-version = "0.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27"
-dependencies = [
- "base64ct",
- "der",
-]
-
-[[package]]
-name = "static_assertions"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
-
-[[package]]
-name = "subtle"
-version = "2.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
-
-[[package]]
-name = "syn"
-version = "1.0.95"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "testgen-local"
-version = "0.1.0"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cosmwasm-storage",
- "cw-multi-test",
- "cw-storage-plus",
- "cw2",
- "schemars",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "thiserror"
-version = "1.0.31"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
-dependencies = [
- "thiserror-impl",
-]
-
-[[package]]
-name = "thiserror-impl"
-version = "1.0.31"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "typenum"
-version = "1.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
-
-[[package]]
-name = "uint"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12f03af7ccf01dd611cc450a0d10dbc9b745770d096473e2faf0ca6e2d66d1e0"
-dependencies = [
- "byteorder",
- "crunchy",
- "hex",
- "static_assertions",
-]
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
-
-[[package]]
-name = "version_check"
-version = "0.9.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-
-[[package]]
-name = "wasi"
-version = "0.9.0+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
-
-[[package]]
-name = "wasi"
-version = "0.10.2+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
-
-[[package]]
-name = "zeroize"
-version = "1.5.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07"
diff --git a/packages/sg721/Cargo.toml b/packages/sg721/Cargo.toml
index bad21d88..4124229b 100644
--- a/packages/sg721/Cargo.toml
+++ b/packages/sg721/Cargo.toml
@@ -1,12 +1,12 @@
 [package]
-name = "sg721"
-version = "0.18.0"
-authors = ["Shane Vitarana <s@noreply.publicawsome.com>"]
-edition = "2018"
+name        = "sg721"
+authors     = ["Shane Vitarana <s@noreply.publicawsome.com>"]
 description = "Stargaze Basic NFT Collection Interface"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+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.
@@ -26,12 +26,12 @@ backtraces = ["cosmwasm-std/backtraces"]
 library = []
 
 [dependencies]
-cosmwasm-schema = "1.1.4"
-cosmwasm-std = "1.1.4"
-serde = { version = "1.0.137", default-features = false, features = ["derive"] }
-thiserror = { version = "1.0.31" }
-cw-utils = "0.15.0"
-cw721-base = "0.15.0"
+cosmwasm-schema = { workspace = true }
+cosmwasm-std    = { workspace = true }
+cw721-base      = { workspace = true, features = ["library"] }
+cw-utils        = { workspace = true }
+serde           = { workspace = true }
+thiserror       = { workspace = true }
 
 [dev-dependencies]
-cw-multi-test = "0.15.0"
+cw-multi-test = { workspace = true }
diff --git a/scripts/optimize.sh b/scripts/optimize.sh
index de1b5158..1e9c51ac 100644
--- a/scripts/optimize.sh
+++ b/scripts/optimize.sh
@@ -1,4 +1,4 @@
 docker run --rm -v "$(pwd)":/code --platform linux/amd64 \
 	--mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
 	--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
-	cosmwasm/workspace-optimizer:0.12.8
+	cosmwasm/workspace-optimizer:0.12.9


Test patch:
diff --git a/contracts/splits/src/integration_tests.rs b/contracts/splits/src/integration_tests.rs
index 8cc71cc7..a6117ccf 100644
--- a/contracts/splits/src/integration_tests.rs
+++ b/contracts/splits/src/integration_tests.rs
@@ -161,7 +161,7 @@ mod tests {
         assert_eq!(
             ContractVersion {
                 contract: "crates.io:sg-splits".to_string(),
-                version: "0.1.0".to_string(),
+                version: env!("CARGO_PKG_VERSION").to_string(),
             },
             version,
         );
diff --git a/packages/sg-multi-test/Cargo.toml b/packages/sg-multi-test/Cargo.toml
index 5cb36147..9fc215e7 100644
--- a/packages/sg-multi-test/Cargo.toml
+++ b/packages/sg-multi-test/Cargo.toml
@@ -1,17 +1,17 @@
 [package]
-name = "sg-multi-test"
-version = "0.15.1"
-edition = "2021"
-authors = ["Jorge Hernandez <jorge@publicawesome.com>"]
+name        = "sg-multi-test"
+authors     = ["Jorge Hernandez <jorge@publicawesome.com>"]
 description = "Integration test helpers for Stargaze custom contracts"
-license = "Apache-2.0"
-repository = "https://github.com/public-awesome/launchpad"
-homepage = "https://stargaze.zone"
+version     = { workspace = true }
+edition     = { workspace = true }
+homepage    = { workspace = true }
+repository  = { workspace = true }
+license     = { workspace = true }
 
 [dependencies]
-anyhow = "1"
-cw-multi-test = "0.15.0"
-cosmwasm-std = { version = "1.1.4" }
-schemars = "0.8"
-serde = { version = "1.0", default-features = false, features = ["derive"] }
-sg-std = { path = "../sg-std" }
+anyhow        = "1"
+cosmwasm-std  = { workspace = true }
+cw-multi-test = { workspace = true }
+schemars      = { workspace = true }
+serde         = { workspace = true }
+sg-std        = { path = "../sg-std" }