From dccd8b2309a9b69e92676946ee120401d894a5f0 Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Thu, 28 Aug 2025 17:42:11 -0700 Subject: [PATCH 01/12] test: add comment to trigger CI system test --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f83a02c67e..f681b087d8 100644 --- a/README.md +++ b/README.md @@ -89,3 +89,5 @@ Find issues to contribute to [here](https://github.com/stellar/stellar-cli/contr - Video Tutorial on `network container`, `keys`, and `contract init`: https://developers.stellar.org/meetings/2024/06/27 - Video Tutorial on `alias` and `snapshot`: https://developers.stellar.org/meetings/2024/09/12 + + From 02ea5fd8ebbd4155206b1a94676c290fe299d89e Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Thu, 28 Aug 2025 20:29:46 -0700 Subject: [PATCH 02/12] fix: replace StellarAssetSpec with StellarAssetFnSpec The soroban-sdk has renamed StellarAssetSpec to StellarAssetFnSpec. This fixes the compilation errors in CI where the symbol could not be found. --- cmd/soroban-cli/src/commands/contract/bindings/typescript.rs | 2 +- cmd/soroban-cli/src/commands/contract/info/interface.rs | 2 +- cmd/soroban-cli/src/get_spec.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/soroban-cli/src/commands/contract/bindings/typescript.rs b/cmd/soroban-cli/src/commands/contract/bindings/typescript.rs index 1da64eaa59..97da899688 100644 --- a/cmd/soroban-cli/src/commands/contract/bindings/typescript.rs +++ b/cmd/soroban-cli/src/commands/contract/bindings/typescript.rs @@ -66,7 +66,7 @@ impl NetworkRunnable for Cmd { let spec = match contract { contract_spec::Contract::Wasm { wasm_bytes } => Spec::new(&wasm_bytes)?.spec, contract_spec::Contract::StellarAssetContract => { - soroban_spec::read::parse_raw(&soroban_sdk::token::StellarAssetSpec::spec_xdr())? + soroban_spec::read::parse_raw(&soroban_sdk::token::StellarAssetFnSpec::spec_xdr())? } }; diff --git a/cmd/soroban-cli/src/commands/contract/info/interface.rs b/cmd/soroban-cli/src/commands/contract/info/interface.rs index a452052b81..80509ee3ab 100644 --- a/cmd/soroban-cli/src/commands/contract/info/interface.rs +++ b/cmd/soroban-cli/src/commands/contract/info/interface.rs @@ -59,7 +59,7 @@ impl Cmd { (spec.spec_base64.unwrap(), spec.spec) } shared::Contract::StellarAssetContract => { - Spec::spec_to_base64(&soroban_sdk::token::StellarAssetSpec::spec_xdr())? + Spec::spec_to_base64(&soroban_sdk::token::StellarAssetFnSpec::spec_xdr())? } }; diff --git a/cmd/soroban-cli/src/get_spec.rs b/cmd/soroban-cli/src/get_spec.rs index fadd8225e4..25c5ca9467 100644 --- a/cmd/soroban-cli/src/get_spec.rs +++ b/cmd/soroban-cli/src/get_spec.rs @@ -74,7 +74,7 @@ pub async fn get_remote_contract_spec( } } ContractExecutable::StellarAsset => { - soroban_spec::read::parse_raw(&soroban_sdk::token::StellarAssetSpec::spec_xdr())? + soroban_spec::read::parse_raw(&soroban_sdk::token::StellarAssetFnSpec::spec_xdr())? } }) } From 0fb96d2dca20fd6023e2f7a6d58f3fab2dcd64cb Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Thu, 28 Aug 2025 20:52:00 -0700 Subject: [PATCH 03/12] upgrade soroban-sdk version --- Cargo.lock | 142 +++++++++++++++++++++++++++++------------------------ Cargo.toml | 12 ++--- 2 files changed, 83 insertions(+), 71 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 95d5643d10..7200e9a7db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -483,7 +483,7 @@ checksum = "531b97fb4cd3dfdce92c35dedbfdc1f0b9d8091c8ca943d6dae340ef5012d514" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -709,7 +709,7 @@ dependencies = [ "num-bigint", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -775,7 +775,7 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -842,7 +842,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -1037,7 +1037,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -1064,7 +1064,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -1091,7 +1091,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -1108,7 +1108,7 @@ checksum = "b45506e3c66512b0a65d291a6b452128b7b1dd9841e20d1e151addbd2c00ea50" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -1132,7 +1132,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -1143,7 +1143,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -1215,7 +1215,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -1310,7 +1310,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -1443,7 +1443,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -1682,7 +1682,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -2424,7 +2424,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -2881,6 +2881,17 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "markdown" version = "1.0.0" @@ -3055,7 +3066,7 @@ checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -3155,7 +3166,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -3251,7 +3262,7 @@ dependencies = [ "regex", "regex-syntax 0.8.4", "structmeta", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -3321,7 +3332,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -3356,7 +3367,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -3481,7 +3492,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -3509,9 +3520,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -3836,7 +3847,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.87", + "syn 2.0.106", "walkdir", ] @@ -4074,7 +4085,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -4190,7 +4201,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -4201,7 +4212,7 @@ checksum = "330f01ce65a3a5fe59a60c82f3c9a024b573b8a6e875bd233fe5f934e71d54e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -4234,7 +4245,7 @@ checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -4286,7 +4297,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -4311,7 +4322,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -4473,7 +4484,7 @@ dependencies = [ "itertools 0.10.5", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -4646,7 +4657,7 @@ dependencies = [ "serde", "serde_json", "stellar-xdr", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -4655,9 +4666,9 @@ version = "23.1.0" [[package]] name = "soroban-ledger-snapshot" -version = "23.0.0-rc.2.1" +version = "23.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5969baac5e38ba088780b83f2d0d6cc17c09d3d6a901ebe9320b65d4ddd3d8" +checksum = "e4f055250bfa4c3f70d56c932ca0763321a44240ffe9549c5f61880e0cdd3e24" dependencies = [ "serde", "serde_json", @@ -4669,12 +4680,13 @@ dependencies = [ [[package]] name = "soroban-sdk" -version = "23.0.0-rc.2.1" +version = "23.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58d71d1f3c9e61f7936e5b0efd10bc1c9ae25b868a96393bc6af47f3c842a58d" +checksum = "fefe46e9767014f74021e9d5461df6d87f2d55bde2d2fa85fae74bf774fcc995" dependencies = [ "arbitrary", "bytes-lit", + "crate-git-revision", "ctor", "derive_arbitrary", "ed25519-dalek", @@ -4691,29 +4703,29 @@ dependencies = [ [[package]] name = "soroban-sdk-macros" -version = "23.0.0-rc.2.1" +version = "23.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d740b72e77ff031925ddab6168cd3c71a5e2b2cdd936746c73ebab4f7723caf" +checksum = "e9f581c62211a70a02bfdc6a734fc91da49337831bd338bafb13678d6106ab98" dependencies = [ - "crate-git-revision", "darling", + "heck 0.5.0", "itertools 0.10.5", + "macro-string", "proc-macro2", "quote", - "rustc_version", "sha2 0.10.9", "soroban-env-common", "soroban-spec", "soroban-spec-rust", "stellar-xdr", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] name = "soroban-spec" -version = "23.0.0-rc.2.1" +version = "23.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c7b1db33c30b332910ba095d012f9022d37853473053e3b9eddee386f02118" +checksum = "cc25b2f35ce9e25af41003987cff4c4d679ec1c62f7664c5bd9f8d44e82aa3ae" dependencies = [ "base64 0.22.1", "stellar-xdr", @@ -4737,9 +4749,9 @@ dependencies = [ [[package]] name = "soroban-spec-rust" -version = "23.0.0-rc.2.1" +version = "23.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83638e069ebd7370339c64c2c39a40219abe6385b43590511fb39f4c95782f43" +checksum = "30e253d697163fbbd8d2c88f702e7f5ccba191ccdc9d85d570e2f065060331bc" dependencies = [ "prettyplease", "proc-macro2", @@ -4747,7 +4759,7 @@ dependencies = [ "sha2 0.10.9", "soroban-spec", "stellar-xdr", - "syn 2.0.87", + "syn 2.0.106", "thiserror", ] @@ -4829,9 +4841,9 @@ dependencies = [ [[package]] name = "soroban-token-sdk" -version = "23.0.0-rc.2.1" +version = "23.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42cc25f2603e7a87a288e1ddfe25b452368283674b5056ca3ebf6884122c5f1" +checksum = "a3d1bbd92c8320fc2e4b6aeead9342ac3d6ee34e8195d48b2985c4ab8ef53cec" dependencies = [ "soroban-sdk", ] @@ -5040,7 +5052,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -5051,7 +5063,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -5110,9 +5122,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -5136,7 +5148,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -5239,7 +5251,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -5250,7 +5262,7 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", "test-case-core", ] @@ -5357,7 +5369,7 @@ checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -5480,7 +5492,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -5644,7 +5656,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -5879,7 +5891,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", "wasm-bindgen-shared", ] @@ -5913,7 +5925,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6367,7 +6379,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", "synstructure", ] @@ -6389,7 +6401,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -6409,7 +6421,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", "synstructure", ] @@ -6430,7 +6442,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] [[package]] @@ -6452,5 +6464,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.106", ] diff --git a/Cargo.toml b/Cargo.toml index 735a16dab0..ef6ed5a9bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,22 +50,22 @@ version = "23.0.0-rc.2" # Dependencies from the rs-soroban-sdk repo: [workspace.dependencies.soroban-spec] -version = "23.0.0-rc.2" +version = "23.0.0-rc.3" [workspace.dependencies.soroban-spec-rust] -version = "23.0.0-rc.2" +version = "23.0.0-rc.3" [workspace.dependencies.soroban-sdk] -version = "23.0.0-rc.2.1" +version = "23.0.0-rc.3" [workspace.dependencies.soroban-env-host] -version = "23.0.0-rc.2" +version = "23.0.0-rc.3" [workspace.dependencies.soroban-token-sdk] -version = "23.0.0-rc.2" +version = "23.0.0-rc.3" [workspace.dependencies.soroban-ledger-snapshot] -version = "23.0.0-rc.2" +version = "23.0.0-rc.3" # Dependencies from the rs-stellar-rpc-client repo: [workspace.dependencies.soroban-rpc] From a2781a18ef26bcd57b478c2451d7c310af2dba4b Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Thu, 28 Aug 2025 21:04:18 -0700 Subject: [PATCH 04/12] upgrade to soroban-sdk v23.0.0-rc.3 and fix stellar asset spec usage - Update workspace dependencies to use soroban-sdk v23.0.0-rc.3 - Add stellar-asset-spec dependency - Replace StellarAssetFnSpec::spec_xdr() with stellar_asset_spec::xdr() - The new API uses a dedicated crate for stellar asset contract specs --- Cargo.lock | 22 +++++++++++++++++++ Cargo.toml | 3 +++ cmd/soroban-cli/Cargo.toml | 1 + .../commands/contract/bindings/typescript.rs | 2 +- .../src/commands/contract/info/interface.rs | 2 +- cmd/soroban-cli/src/get_spec.rs | 2 +- 6 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7200e9a7db..8e6f64d508 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4551,6 +4551,7 @@ dependencies = [ "soroban-spec-rust", "soroban-spec-tools", "soroban-spec-typescript", + "stellar-asset-spec", "stellar-ledger", "stellar-rpc-client", "stellar-strkey 0.0.11", @@ -4848,6 +4849,16 @@ dependencies = [ "soroban-sdk", ] +[[package]] +name = "soroban-token-spec" +version = "23.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f14917787d7a92236db3efcbc3d56b6c734c5f498021f5d1911bf1ce438905c1" +dependencies = [ + "soroban-sdk", + "soroban-token-sdk", +] + [[package]] name = "soroban-wasmi" version = "0.31.1-soroban.20.0.1" @@ -4889,6 +4900,17 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "stellar-asset-spec" +version = "23.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8836d90140537acb8ddad19b1d6104c164bb5311afa00bd7e2ad3fc91a2c2e63" +dependencies = [ + "soroban-sdk", + "soroban-token-sdk", + "soroban-token-spec", +] + [[package]] name = "stellar-bye" version = "23.1.0" diff --git a/Cargo.toml b/Cargo.toml index ef6ed5a9bb..549f99471b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -67,6 +67,9 @@ version = "23.0.0-rc.3" [workspace.dependencies.soroban-ledger-snapshot] version = "23.0.0-rc.3" +[workspace.dependencies.stellar-asset-spec] +version = "23.0.0-rc.3" + # Dependencies from the rs-stellar-rpc-client repo: [workspace.dependencies.soroban-rpc] package = "stellar-rpc-client" diff --git a/cmd/soroban-cli/Cargo.toml b/cmd/soroban-cli/Cargo.toml index b3b679c1ad..14d6486967 100644 --- a/cmd/soroban-cli/Cargo.toml +++ b/cmd/soroban-cli/Cargo.toml @@ -49,6 +49,7 @@ soroban-spec-tools = { workspace = true } soroban-spec-typescript = { workspace = true } soroban-ledger-snapshot = { workspace = true } stellar-strkey = { workspace = true } +stellar-asset-spec = { workspace = true } soroban-sdk = { workspace = true } soroban-rpc = { workspace = true } stellar-ledger = { workspace = true, optional = true } diff --git a/cmd/soroban-cli/src/commands/contract/bindings/typescript.rs b/cmd/soroban-cli/src/commands/contract/bindings/typescript.rs index 97da899688..9989fdda4b 100644 --- a/cmd/soroban-cli/src/commands/contract/bindings/typescript.rs +++ b/cmd/soroban-cli/src/commands/contract/bindings/typescript.rs @@ -66,7 +66,7 @@ impl NetworkRunnable for Cmd { let spec = match contract { contract_spec::Contract::Wasm { wasm_bytes } => Spec::new(&wasm_bytes)?.spec, contract_spec::Contract::StellarAssetContract => { - soroban_spec::read::parse_raw(&soroban_sdk::token::StellarAssetFnSpec::spec_xdr())? + soroban_spec::read::parse_raw(stellar_asset_spec::xdr())? } }; diff --git a/cmd/soroban-cli/src/commands/contract/info/interface.rs b/cmd/soroban-cli/src/commands/contract/info/interface.rs index 80509ee3ab..65bd503dad 100644 --- a/cmd/soroban-cli/src/commands/contract/info/interface.rs +++ b/cmd/soroban-cli/src/commands/contract/info/interface.rs @@ -59,7 +59,7 @@ impl Cmd { (spec.spec_base64.unwrap(), spec.spec) } shared::Contract::StellarAssetContract => { - Spec::spec_to_base64(&soroban_sdk::token::StellarAssetFnSpec::spec_xdr())? + Spec::spec_to_base64(stellar_asset_spec::xdr())? } }; diff --git a/cmd/soroban-cli/src/get_spec.rs b/cmd/soroban-cli/src/get_spec.rs index 25c5ca9467..a72069e7c5 100644 --- a/cmd/soroban-cli/src/get_spec.rs +++ b/cmd/soroban-cli/src/get_spec.rs @@ -74,7 +74,7 @@ pub async fn get_remote_contract_spec( } } ContractExecutable::StellarAsset => { - soroban_spec::read::parse_raw(&soroban_sdk::token::StellarAssetFnSpec::spec_xdr())? + soroban_spec::read::parse_raw(stellar_asset_spec::xdr())? } }) } From aff7cb5c993bf2ffe2f42cdff9001b175edfacfc Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Thu, 28 Aug 2025 21:37:15 -0700 Subject: [PATCH 05/12] Fix deprecated API usage in test fixtures - Migrate hello_world and token test fixtures from deprecated events().publish() to #[contractevent] system - Update soroban-token-sdk event usage to use new event structs (Approve, TransferWithAmountOnly, Burn, MintWithAmountOnly) - Fix token Interface implementation to use MuxedAddress for transfer parameter - Add custom SetAdmin event struct for token admin changes This resolves CI build failures on Windows, macOS, and Linux caused by deprecated API warnings being treated as errors. --- .../test-wasms/hello_world/src/lib.rs | 19 +++++-- .../fixtures/test-wasms/token/src/contract.rs | 57 ++++++++++++++----- 2 files changed, 57 insertions(+), 19 deletions(-) diff --git a/cmd/crates/soroban-test/tests/fixtures/test-wasms/hello_world/src/lib.rs b/cmd/crates/soroban-test/tests/fixtures/test-wasms/hello_world/src/lib.rs index 305acd1f77..b99cbcc2ff 100644 --- a/cmd/crates/soroban-test/tests/fixtures/test-wasms/hello_world/src/lib.rs +++ b/cmd/crates/soroban-test/tests/fixtures/test-wasms/hello_world/src/lib.rs @@ -1,10 +1,20 @@ #![no_std] use soroban_sdk::{ - contract, contractimpl, log, symbol_short, vec, Address, BytesN, Env, String, Symbol, Vec, + contract, contractevent, contractimpl, log, symbol_short, vec, Address, BytesN, Env, String, Symbol, Vec, }; const COUNTER: Symbol = symbol_short!("COUNTER"); +#[contractevent] +pub struct AuthEvent { + pub world: Symbol, +} + +#[contractevent] +pub struct HelloEvent { + pub str: Symbol, +} + #[contract] pub struct Contract; @@ -25,7 +35,7 @@ impl Contract { pub fn auth(env: Env, addr: Address, world: Symbol) -> Address { addr.require_auth(); // Emit test event - env.events().publish(("auth",), world); + AuthEvent { world }.publish(&env); addr } @@ -61,10 +71,7 @@ impl Contract { /// Logs a string with `hello ` in front. pub fn log(env: Env, str: Symbol) { - env.events().publish( - (Symbol::new(&env, "hello"), Symbol::new(&env, "")), - str.clone(), - ); + HelloEvent { str: str.clone() }.publish(&env); log!(&env, "hello {}", str); } } diff --git a/cmd/crates/soroban-test/tests/fixtures/test-wasms/token/src/contract.rs b/cmd/crates/soroban-test/tests/fixtures/test-wasms/token/src/contract.rs index 519a8fdea8..c46e1010a2 100644 --- a/cmd/crates/soroban-test/tests/fixtures/test-wasms/token/src/contract.rs +++ b/cmd/crates/soroban-test/tests/fixtures/test-wasms/token/src/contract.rs @@ -3,9 +3,16 @@ use crate::storage_types::{INSTANCE_BUMP_AMOUNT, INSTANCE_LIFETIME_THRESHOLD}; use crate::{admin, allowance, balance, metadata}; use soroban_sdk::token::{self, Interface as _}; -use soroban_sdk::{contract, contractimpl, Address, Env, String}; +use soroban_sdk::{contract, contractevent, contractimpl, Address, Env, MuxedAddress, String}; use soroban_token_sdk::metadata::TokenMetadata; -use soroban_token_sdk::TokenUtils; +use soroban_token_sdk::events::{TransferWithAmountOnly, Approve, Burn, MintWithAmountOnly}; + +#[contractevent(data_format = "single-value")] +pub struct SetAdmin { + #[topic] + admin: Address, + new_admin: Address, +} fn check_nonnegative_amount(amount: i128) { assert!(amount >= 0, "negative amount is not allowed: {amount}"); @@ -41,7 +48,10 @@ impl Token { .extend_ttl(INSTANCE_LIFETIME_THRESHOLD, INSTANCE_BUMP_AMOUNT); balance::receive(&e, to.clone(), amount); - TokenUtils::new(&e).events().mint(admin, to, amount); + MintWithAmountOnly { + to: to.clone(), + amount, + }.publish(&e); } pub fn set_admin(e: Env, new_admin: Address) { @@ -53,7 +63,10 @@ impl Token { .extend_ttl(INSTANCE_LIFETIME_THRESHOLD, INSTANCE_BUMP_AMOUNT); admin::write_administrator(&e, &new_admin); - TokenUtils::new(&e).events().set_admin(admin, new_admin); + SetAdmin { + admin: admin.clone(), + new_admin: new_admin.clone(), + }.publish(&e); } } @@ -76,9 +89,12 @@ impl token::Interface for Token { .extend_ttl(INSTANCE_LIFETIME_THRESHOLD, INSTANCE_BUMP_AMOUNT); allowance::write(&e, from.clone(), spender.clone(), amount, expiration_ledger); - TokenUtils::new(&e) - .events() - .approve(from, spender, amount, expiration_ledger); + Approve { + from: from.clone(), + spender: spender.clone(), + amount, + expiration_ledger, + }.publish(&e); } fn balance(e: Env, id: Address) -> i128 { @@ -88,7 +104,7 @@ impl token::Interface for Token { balance::read(&e, id) } - fn transfer(e: Env, from: Address, to: Address, amount: i128) { + fn transfer(e: Env, from: Address, to: MuxedAddress, amount: i128) { from.require_auth(); check_nonnegative_amount(amount); @@ -97,9 +113,14 @@ impl token::Interface for Token { .instance() .extend_ttl(INSTANCE_LIFETIME_THRESHOLD, INSTANCE_BUMP_AMOUNT); + let to_address = to.address(); balance::spend(&e, from.clone(), amount); - balance::receive(&e, to.clone(), amount); - TokenUtils::new(&e).events().transfer(from, to, amount); + balance::receive(&e, to_address.clone(), amount); + TransferWithAmountOnly { + from: from.clone(), + to: to_address, + amount, + }.publish(&e); } fn transfer_from(e: Env, spender: Address, from: Address, to: Address, amount: i128) { @@ -114,7 +135,11 @@ impl token::Interface for Token { allowance::spend(&e, from.clone(), spender, amount); balance::spend(&e, from.clone(), amount); balance::receive(&e, to.clone(), amount); - TokenUtils::new(&e).events().transfer(from, to, amount); + TransferWithAmountOnly { + from: from.clone(), + to: to.clone(), + amount, + }.publish(&e); } fn burn(e: Env, from: Address, amount: i128) { @@ -127,7 +152,10 @@ impl token::Interface for Token { .extend_ttl(INSTANCE_LIFETIME_THRESHOLD, INSTANCE_BUMP_AMOUNT); balance::spend(&e, from.clone(), amount); - TokenUtils::new(&e).events().burn(from, amount); + Burn { + from: from.clone(), + amount, + }.publish(&e); } fn burn_from(e: Env, spender: Address, from: Address, amount: i128) { @@ -141,7 +169,10 @@ impl token::Interface for Token { allowance::spend(&e, from.clone(), spender, amount); balance::spend(&e, from.clone(), amount); - TokenUtils::new(&e).events().burn(from, amount); + Burn { + from: from.clone(), + amount, + }.publish(&e); } fn decimals(e: Env) -> u32 { From c67d2c45f7d2f1dd70913d7bc912a86c3a0964ea Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Thu, 28 Aug 2025 21:45:28 -0700 Subject: [PATCH 06/12] Fix code formatting - Format imports in hello_world fixture (split long line) - Format imports and event publish calls in token fixture - Ensure consistent formatting according to rustfmt standards --- .../test-wasms/hello_world/src/lib.rs | 3 ++- .../fixtures/test-wasms/token/src/contract.rs | 23 ++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/cmd/crates/soroban-test/tests/fixtures/test-wasms/hello_world/src/lib.rs b/cmd/crates/soroban-test/tests/fixtures/test-wasms/hello_world/src/lib.rs index b99cbcc2ff..15af2331a3 100644 --- a/cmd/crates/soroban-test/tests/fixtures/test-wasms/hello_world/src/lib.rs +++ b/cmd/crates/soroban-test/tests/fixtures/test-wasms/hello_world/src/lib.rs @@ -1,6 +1,7 @@ #![no_std] use soroban_sdk::{ - contract, contractevent, contractimpl, log, symbol_short, vec, Address, BytesN, Env, String, Symbol, Vec, + contract, contractevent, contractimpl, log, symbol_short, vec, Address, BytesN, Env, String, + Symbol, Vec, }; const COUNTER: Symbol = symbol_short!("COUNTER"); diff --git a/cmd/crates/soroban-test/tests/fixtures/test-wasms/token/src/contract.rs b/cmd/crates/soroban-test/tests/fixtures/test-wasms/token/src/contract.rs index c46e1010a2..0cd34b9ec6 100644 --- a/cmd/crates/soroban-test/tests/fixtures/test-wasms/token/src/contract.rs +++ b/cmd/crates/soroban-test/tests/fixtures/test-wasms/token/src/contract.rs @@ -4,8 +4,8 @@ use crate::storage_types::{INSTANCE_BUMP_AMOUNT, INSTANCE_LIFETIME_THRESHOLD}; use crate::{admin, allowance, balance, metadata}; use soroban_sdk::token::{self, Interface as _}; use soroban_sdk::{contract, contractevent, contractimpl, Address, Env, MuxedAddress, String}; +use soroban_token_sdk::events::{Approve, Burn, MintWithAmountOnly, TransferWithAmountOnly}; use soroban_token_sdk::metadata::TokenMetadata; -use soroban_token_sdk::events::{TransferWithAmountOnly, Approve, Burn, MintWithAmountOnly}; #[contractevent(data_format = "single-value")] pub struct SetAdmin { @@ -51,7 +51,8 @@ impl Token { MintWithAmountOnly { to: to.clone(), amount, - }.publish(&e); + } + .publish(&e); } pub fn set_admin(e: Env, new_admin: Address) { @@ -66,7 +67,8 @@ impl Token { SetAdmin { admin: admin.clone(), new_admin: new_admin.clone(), - }.publish(&e); + } + .publish(&e); } } @@ -94,7 +96,8 @@ impl token::Interface for Token { spender: spender.clone(), amount, expiration_ledger, - }.publish(&e); + } + .publish(&e); } fn balance(e: Env, id: Address) -> i128 { @@ -120,7 +123,8 @@ impl token::Interface for Token { from: from.clone(), to: to_address, amount, - }.publish(&e); + } + .publish(&e); } fn transfer_from(e: Env, spender: Address, from: Address, to: Address, amount: i128) { @@ -139,7 +143,8 @@ impl token::Interface for Token { from: from.clone(), to: to.clone(), amount, - }.publish(&e); + } + .publish(&e); } fn burn(e: Env, from: Address, amount: i128) { @@ -155,7 +160,8 @@ impl token::Interface for Token { Burn { from: from.clone(), amount, - }.publish(&e); + } + .publish(&e); } fn burn_from(e: Env, spender: Address, from: Address, amount: i128) { @@ -172,7 +178,8 @@ impl token::Interface for Token { Burn { from: from.clone(), amount, - }.publish(&e); + } + .publish(&e); } fn decimals(e: Env) -> u32 { From 765f795d8a14a42d37bd9c54a87829cab42a6c09 Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Thu, 28 Aug 2025 22:07:03 -0700 Subject: [PATCH 07/12] Fix integration test expectation for new event format Update hello_world integration test to expect the new contractevent format: - Old: Event: [{"symbol":"hello"},{"symbol":""}] = {"symbol":"world"} - New: Event: [{"symbol":"hello_event"}] = {"map":[{"key":{"symbol":"str"},"val":{"symbol":"world"}}]} This aligns the test with the updated hello_world fixture that uses the new #[contractevent] system. --- cmd/crates/soroban-test/tests/it/integration/hello_world.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/crates/soroban-test/tests/it/integration/hello_world.rs b/cmd/crates/soroban-test/tests/it/integration/hello_world.rs index 5df5d0dfdb..09da8cc209 100644 --- a/cmd/crates/soroban-test/tests/it/integration/hello_world.rs +++ b/cmd/crates/soroban-test/tests/it/integration/hello_world.rs @@ -410,7 +410,7 @@ fn invoke_log(sandbox: &TestEnv, id: &str) { .assert() .success() .stderr(predicates::str::contains( - r#"Event: [{"symbol":"hello"},{"symbol":""}] = {"symbol":"world"}"#, + r#"Event: [{"symbol":"hello_event"}] = {"map":[{"key":{"symbol":"str"},"val":{"symbol":"world"}}]}"#, )) .stderr(predicates::str::contains( r#"Log: {"vec":[{"string":"hello {}"},{"symbol":"world"}]}"#, From d7f4f5bd03defbe1843f0ec22edcc27f10e328cd Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Thu, 28 Aug 2025 23:39:36 -0700 Subject: [PATCH 08/12] Fix EventV0 'not implemented yet' issue in soroban-spec-json - Add Event variant to Entry enum for proper EventV0 handling - Replace todo! macro with proper EventV0 processing - Fixes cookbook integration test failures caused by rs-soroban-sdk v23.0.0-rc.3 upgrade - Resolves panic when processing contracts with #[contractevent] attributes --- cmd/crates/soroban-spec-json/src/types.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cmd/crates/soroban-spec-json/src/types.rs b/cmd/crates/soroban-spec-json/src/types.rs index f2b4cbe67a..2138c360d2 100644 --- a/cmd/crates/soroban-spec-json/src/types.rs +++ b/cmd/crates/soroban-spec-json/src/types.rs @@ -163,6 +163,10 @@ pub enum Entry { name: String, cases: Vec, }, + Event { + doc: String, + name: String, + }, } impl From<&ScSpecTypeDef> for Type { @@ -240,7 +244,10 @@ impl From<&ScSpecEntry> for Entry { name: e.name.to_utf8_string_lossy(), cases: e.cases.iter().map(EnumCase::from).collect(), }, - ScSpecEntry::EventV0(_) => todo!("EventV0 is not implemented yet"), + ScSpecEntry::EventV0(e) => Entry::Event { + doc: e.doc.to_utf8_string_lossy(), + name: e.name.to_utf8_string_lossy(), + }, } } } From 19d918e91d4589b544e00c2e5da77cbcc7e324d1 Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Thu, 28 Aug 2025 23:43:04 -0700 Subject: [PATCH 09/12] Fix stellar asset contract invoke syntax in payments-and-assets cookbook - Fix transfer command to use correct --from --to --amount argument order - Matches the working syntax used in asset-management.mdx - Resolves cookbook test failure for stellar asset contract operations --- cookbook/payments-and-assets.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookbook/payments-and-assets.mdx b/cookbook/payments-and-assets.mdx index 9cd291c513..78f5a915b8 100644 --- a/cookbook/payments-and-assets.mdx +++ b/cookbook/payments-and-assets.mdx @@ -50,7 +50,7 @@ stellar keys use alice ``` ```bash -stellar contract invoke --id -- transfer --to bob --from alice --amount 100 +stellar contract invoke --id -- transfer --from alice --to bob --amount 100 ``` 6. Check account balance: From bfaee006685169a0773ab6f95a379ee7e486e8e4 Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Fri, 29 Aug 2025 09:00:53 -0700 Subject: [PATCH 10/12] add parsing support for muxed addresses --- cmd/soroban-cli/src/commands/contract/arg_parsing.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cmd/soroban-cli/src/commands/contract/arg_parsing.rs b/cmd/soroban-cli/src/commands/contract/arg_parsing.rs index d3981c3a80..2dff82430a 100644 --- a/cmd/soroban-cli/src/commands/contract/arg_parsing.rs +++ b/cmd/soroban-cli/src/commands/contract/arg_parsing.rs @@ -122,6 +122,13 @@ pub fn build_host_function_parameters( if let Some(signer) = signer { signers.push(signer); } + } else if matches!(i.type_, ScSpecTypeDef::MuxedAddress) { + let addr = resolve_address(&s, config)?; + let signer = resolve_signer(&s, config); + s = addr; + if let Some(signer) = signer { + signers.push(signer); + } } spec.from_string(&s, &i.type_) .map_err(|error| Error::CannotParseArg { arg: name, error }) From cd90ace5a03eac42fced6178e66fee0183db7726 Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Fri, 29 Aug 2025 09:03:57 -0700 Subject: [PATCH 11/12] simpler code --- cmd/soroban-cli/src/commands/contract/arg_parsing.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/cmd/soroban-cli/src/commands/contract/arg_parsing.rs b/cmd/soroban-cli/src/commands/contract/arg_parsing.rs index 2dff82430a..239a390e7d 100644 --- a/cmd/soroban-cli/src/commands/contract/arg_parsing.rs +++ b/cmd/soroban-cli/src/commands/contract/arg_parsing.rs @@ -115,14 +115,7 @@ pub fn build_host_function_parameters( .to_string_lossy() .trim_matches('"') .to_string(); - if matches!(i.type_, ScSpecTypeDef::Address) { - let addr = resolve_address(&s, config)?; - let signer = resolve_signer(&s, config); - s = addr; - if let Some(signer) = signer { - signers.push(signer); - } - } else if matches!(i.type_, ScSpecTypeDef::MuxedAddress) { + if matches!(i.type_, ScSpecTypeDef::Address | ScSpecTypeDef::MuxedAddress) { let addr = resolve_address(&s, config)?; let signer = resolve_signer(&s, config); s = addr; From 0940e076b3f701d8c679799f38211f253a63201a Mon Sep 17 00:00:00 2001 From: Sagar Patil Date: Fri, 29 Aug 2025 09:06:42 -0700 Subject: [PATCH 12/12] Add MuxedAddress support to contract argument parsing - Handle both Address and MuxedAddress types in argument parsing - Resolve address aliases and extract signers for both types - Fixes cookbook test failures with MuxedAddress arguments --- cmd/soroban-cli/src/commands/contract/arg_parsing.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd/soroban-cli/src/commands/contract/arg_parsing.rs b/cmd/soroban-cli/src/commands/contract/arg_parsing.rs index 239a390e7d..8dc50fc15f 100644 --- a/cmd/soroban-cli/src/commands/contract/arg_parsing.rs +++ b/cmd/soroban-cli/src/commands/contract/arg_parsing.rs @@ -115,7 +115,10 @@ pub fn build_host_function_parameters( .to_string_lossy() .trim_matches('"') .to_string(); - if matches!(i.type_, ScSpecTypeDef::Address | ScSpecTypeDef::MuxedAddress) { + if matches!( + i.type_, + ScSpecTypeDef::Address | ScSpecTypeDef::MuxedAddress + ) { let addr = resolve_address(&s, config)?; let signer = resolve_signer(&s, config); s = addr;