From e6e10f02957cf61182f8d9c5b76832a4097f36a1 Mon Sep 17 00:00:00 2001 From: Alfonso Acosta Date: Tue, 22 Aug 2023 11:05:29 +0200 Subject: [PATCH] Revert "Update to remove ScSpecTypeSet" (#882) --- Cargo.lock | 120 +++++------------- Cargo.toml | 12 +- cmd/crates/soroban-spec-json/src/lib.rs | 3 - cmd/crates/soroban-spec-json/src/types.rs | 4 + cmd/crates/soroban-spec-tools/src/lib.rs | 50 +++++++- cmd/crates/soroban-spec-typescript/src/lib.rs | 1 + .../soroban-spec-typescript/src/types.rs | 4 + .../soroban-spec-typescript/src/wrapper.rs | 8 +- .../src/commands/config/ledger_file.rs | 2 +- cmd/soroban-cli/src/commands/config/mod.rs | 2 +- cmd/soroban-cli/src/commands/contract/bump.rs | 3 +- .../src/commands/contract/deploy.rs | 2 +- .../src/commands/contract/install.rs | 2 +- .../src/commands/contract/invoke.rs | 6 +- .../src/commands/contract/restore.rs | 1 + .../src/commands/lab/token/wrap.rs | 2 +- cmd/soroban-cli/src/commands/version.rs | 2 +- cmd/soroban-cli/src/log/event.rs | 2 +- cmd/soroban-cli/src/rpc/transaction.rs | 7 +- cmd/soroban-cli/src/utils.rs | 6 +- cmd/soroban-rpc/lib/preflight/src/fees.rs | 34 +++-- .../lib/preflight/src/ledger_storage.rs | 10 +- .../lib/preflight/src/preflight.rs | 20 +-- docs/soroban-cli-full-docs.md | 2 +- 24 files changed, 153 insertions(+), 152 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6b9a10b93..8aa7fc7b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -582,34 +582,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "curve25519-dalek" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f711ade317dd348950a9910f81c5947e3d8907ebd2b83f76203ff1807e6a2bc2" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "platforms", - "rustc_version", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.23", -] - [[package]] name = "cxx" version = "1.0.98" @@ -798,44 +770,20 @@ dependencies = [ "signature 1.6.4", ] -[[package]] -name = "ed25519" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1d" -dependencies = [ - "pkcs8", - "signature 2.1.0", -] - [[package]] name = "ed25519-dalek" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ - "curve25519-dalek 3.2.0", - "ed25519 1.5.3", + "curve25519-dalek", + "ed25519", "rand 0.7.3", "serde", "sha2 0.9.9", "zeroize", ] -[[package]] -name = "ed25519-dalek" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" -dependencies = [ - "curve25519-dalek 4.0.0", - "ed25519 2.2.2", - "rand_core 0.6.4", - "serde", - "sha2 0.10.7", - "zeroize", -] - [[package]] name = "either" version = "1.8.1" @@ -907,12 +855,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "fiat-crypto" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" - [[package]] name = "float-cmp" version = "0.9.0" @@ -1595,13 +1537,13 @@ dependencies = [ [[package]] name = "num-derive" -version = "0.4.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6a0fd4f737c707bd9086cc16c925f294943eb62eb71499e9fd4cf71f8b9f4e" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 1.0.109", ] [[package]] @@ -1815,12 +1757,6 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" -[[package]] -name = "platforms" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -2471,7 +2407,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28724a6e6f70b0cb115c580891483da6f3aa99e6a353598303a57f89d23aa6bc" dependencies = [ - "ed25519-dalek 1.0.1", + "ed25519-dalek", "hmac 0.9.0", "sha2 0.9.9", ] @@ -2507,7 +2443,7 @@ dependencies = [ "crate-git-revision 0.0.4", "csv", "dirs", - "ed25519-dalek 1.0.1", + "ed25519-dalek", "ethnum", "heck", "hex", @@ -2557,12 +2493,13 @@ dependencies = [ [[package]] name = "soroban-env-common" version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=00c85906a602b4050b2a49ca1a86860c3812d699#00c85906a602b4050b2a49ca1a86860c3812d699" +source = "git+https://github.com/stellar/rs-soroban-env?rev=048be90e10dfda6486141f96ea86e32fb91681f4#048be90e10dfda6486141f96ea86e32fb91681f4" dependencies = [ "arbitrary", "crate-git-revision 0.0.6", "ethnum", "num-derive", + "num-integer", "num-traits", "serde", "soroban-env-macros", @@ -2574,7 +2511,7 @@ dependencies = [ [[package]] name = "soroban-env-guest" version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=00c85906a602b4050b2a49ca1a86860c3812d699#00c85906a602b4050b2a49ca1a86860c3812d699" +source = "git+https://github.com/stellar/rs-soroban-env?rev=048be90e10dfda6486141f96ea86e32fb91681f4#048be90e10dfda6486141f96ea86e32fb91681f4" dependencies = [ "soroban-env-common", "static_assertions", @@ -2583,11 +2520,11 @@ dependencies = [ [[package]] name = "soroban-env-host" version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=00c85906a602b4050b2a49ca1a86860c3812d699#00c85906a602b4050b2a49ca1a86860c3812d699" +source = "git+https://github.com/stellar/rs-soroban-env?rev=048be90e10dfda6486141f96ea86e32fb91681f4#048be90e10dfda6486141f96ea86e32fb91681f4" dependencies = [ "backtrace", - "curve25519-dalek 4.0.0", - "ed25519-dalek 2.0.0", + "curve25519-dalek", + "ed25519-dalek", "getrandom 0.2.10", "hex", "k256", @@ -2595,9 +2532,9 @@ dependencies = [ "num-derive", "num-integer", "num-traits", - "rand 0.8.5", - "rand_chacha 0.3.1", - "sha2 0.10.7", + "rand 0.7.3", + "rand_chacha 0.2.2", + "sha2 0.9.9", "sha3", "soroban-env-common", "soroban-native-sdk-macros", @@ -2609,7 +2546,7 @@ dependencies = [ [[package]] name = "soroban-env-macros" version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=00c85906a602b4050b2a49ca1a86860c3812d699#00c85906a602b4050b2a49ca1a86860c3812d699" +source = "git+https://github.com/stellar/rs-soroban-env?rev=048be90e10dfda6486141f96ea86e32fb91681f4#048be90e10dfda6486141f96ea86e32fb91681f4" dependencies = [ "itertools", "proc-macro2", @@ -2618,6 +2555,7 @@ dependencies = [ "serde_json", "stellar-xdr", "syn 2.0.23", + "thiserror", ] [[package]] @@ -2627,7 +2565,7 @@ version = "0.9.4" [[package]] name = "soroban-ledger-snapshot" version = "0.9.2" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=ff71e7414acfb56fb347d3745c9e0f2119a3cfeb#ff71e7414acfb56fb347d3745c9e0f2119a3cfeb" +source = "git+https://github.com/stellar/rs-soroban-sdk?rev=df9334d4e3a1a2c2e0034cfabb643972d4d7f717#df9334d4e3a1a2c2e0034cfabb643972d4d7f717" dependencies = [ "serde", "serde_json", @@ -2639,7 +2577,7 @@ dependencies = [ [[package]] name = "soroban-native-sdk-macros" version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=00c85906a602b4050b2a49ca1a86860c3812d699#00c85906a602b4050b2a49ca1a86860c3812d699" +source = "git+https://github.com/stellar/rs-soroban-env?rev=048be90e10dfda6486141f96ea86e32fb91681f4#048be90e10dfda6486141f96ea86e32fb91681f4" dependencies = [ "itertools", "proc-macro2", @@ -2650,13 +2588,13 @@ dependencies = [ [[package]] name = "soroban-sdk" version = "0.9.2" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=ff71e7414acfb56fb347d3745c9e0f2119a3cfeb#ff71e7414acfb56fb347d3745c9e0f2119a3cfeb" +source = "git+https://github.com/stellar/rs-soroban-sdk?rev=df9334d4e3a1a2c2e0034cfabb643972d4d7f717#df9334d4e3a1a2c2e0034cfabb643972d4d7f717" dependencies = [ "arbitrary", "bytes-lit", "ctor 0.2.3", - "ed25519-dalek 2.0.0", - "rand 0.8.5", + "ed25519-dalek", + "rand 0.7.3", "soroban-env-guest", "soroban-env-host", "soroban-ledger-snapshot", @@ -2667,7 +2605,7 @@ dependencies = [ [[package]] name = "soroban-sdk-macros" version = "0.9.2" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=ff71e7414acfb56fb347d3745c9e0f2119a3cfeb#ff71e7414acfb56fb347d3745c9e0f2119a3cfeb" +source = "git+https://github.com/stellar/rs-soroban-sdk?rev=df9334d4e3a1a2c2e0034cfabb643972d4d7f717#df9334d4e3a1a2c2e0034cfabb643972d4d7f717" dependencies = [ "crate-git-revision 0.0.6", "darling", @@ -2675,7 +2613,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "sha2 0.10.7", + "sha2 0.9.9", "soroban-env-common", "soroban-spec", "soroban-spec-rust", @@ -2686,7 +2624,7 @@ dependencies = [ [[package]] name = "soroban-spec" version = "0.9.2" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=ff71e7414acfb56fb347d3745c9e0f2119a3cfeb#ff71e7414acfb56fb347d3745c9e0f2119a3cfeb" +source = "git+https://github.com/stellar/rs-soroban-sdk?rev=df9334d4e3a1a2c2e0034cfabb643972d4d7f717#df9334d4e3a1a2c2e0034cfabb643972d4d7f717" dependencies = [ "base64 0.13.1", "stellar-xdr", @@ -2711,12 +2649,12 @@ dependencies = [ [[package]] name = "soroban-spec-rust" version = "0.9.2" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=ff71e7414acfb56fb347d3745c9e0f2119a3cfeb#ff71e7414acfb56fb347d3745c9e0f2119a3cfeb" +source = "git+https://github.com/stellar/rs-soroban-sdk?rev=df9334d4e3a1a2c2e0034cfabb643972d4d7f717#df9334d4e3a1a2c2e0034cfabb643972d4d7f717" dependencies = [ "prettyplease", "proc-macro2", "quote", - "sha2 0.10.7", + "sha2 0.9.9", "soroban-spec", "stellar-xdr", "syn 2.0.23", @@ -2847,7 +2785,7 @@ dependencies = [ [[package]] name = "stellar-xdr" version = "0.0.17" -source = "git+https://github.com/stellar/rs-stellar-xdr?rev=e2a9cbf72d94941de1bde6ba34a38e1f49328567#e2a9cbf72d94941de1bde6ba34a38e1f49328567" +source = "git+https://github.com/stellar/rs-stellar-xdr?rev=4876e5eb20016caebbd13bcf6401626dc6073b8e#4876e5eb20016caebbd13bcf6401626dc6073b8e" dependencies = [ "arbitrary", "base64 0.13.1", diff --git a/Cargo.toml b/Cargo.toml index c45525e13..955e23b74 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,18 +16,18 @@ version = "0.9.4" [workspace.dependencies.soroban-env-host] version = "0.0.17" git = "https://github.com/stellar/rs-soroban-env" -rev = "00c85906a602b4050b2a49ca1a86860c3812d699" +rev = "048be90e10dfda6486141f96ea86e32fb91681f4" [workspace.dependencies.soroban-spec] version = "0.9.1" git = "https://github.com/stellar/rs-soroban-sdk" -rev = "ff71e7414acfb56fb347d3745c9e0f2119a3cfeb" +rev = "df9334d4e3a1a2c2e0034cfabb643972d4d7f717" # path = "../rs-soroban-sdk/soroban-spec" [workspace.dependencies.soroban-spec-rust] version = "0.9.1" git = "https://github.com/stellar/rs-soroban-sdk" -rev = "ff71e7414acfb56fb347d3745c9e0f2119a3cfeb" +rev = "df9334d4e3a1a2c2e0034cfabb643972d4d7f717" # path = "../rs-soroban-sdk/soroban-spec-rust" [workspace.dependencies.soroban-spec-json] @@ -45,12 +45,12 @@ path = "./cmd/crates/soroban-spec-tools" [workspace.dependencies.soroban-sdk] version = "0.9.1" git = "https://github.com/stellar/rs-soroban-sdk" -rev = "ff71e7414acfb56fb347d3745c9e0f2119a3cfeb" +rev = "df9334d4e3a1a2c2e0034cfabb643972d4d7f717" [workspace.dependencies.soroban-ledger-snapshot] version = "0.9.1" git = "https://github.com/stellar/rs-soroban-sdk" -rev = "ff71e7414acfb56fb347d3745c9e0f2119a3cfeb" +rev = "df9334d4e3a1a2c2e0034cfabb643972d4d7f717" [workspace.dependencies.soroban-cli] version = "0.9.4" @@ -59,7 +59,7 @@ path = "cmd/soroban-cli" [workspace.dependencies.stellar-xdr] version = "0.0.17" git = "https://github.com/stellar/rs-stellar-xdr" -rev = "e2a9cbf72d94941de1bde6ba34a38e1f49328567" +rev = "4876e5eb20016caebbd13bcf6401626dc6073b8e" default-features = false [workspace.dependencies] diff --git a/cmd/crates/soroban-spec-json/src/lib.rs b/cmd/crates/soroban-spec-json/src/lib.rs index e7310ccfd..9394f33db 100644 --- a/cmd/crates/soroban-spec-json/src/lib.rs +++ b/cmd/crates/soroban-spec-json/src/lib.rs @@ -55,9 +55,6 @@ pub fn generate_from_wasm(wasm: &[u8]) -> Result { Ok(json) } -/// # Panics -/// -/// If `serde_json::to_string_pretty` fails to serialize the spec entries. pub fn generate(spec: &[ScSpecEntry]) -> String { let collected: Vec<_> = spec.iter().map(Entry::from).collect(); serde_json::to_string_pretty(&collected).expect("serialization of the spec entries should not have any failure cases as all keys are strings and the serialize implementations are derived") diff --git a/cmd/crates/soroban-spec-json/src/types.rs b/cmd/crates/soroban-spec-json/src/types.rs index 863132ca8..85020cdbf 100644 --- a/cmd/crates/soroban-spec-json/src/types.rs +++ b/cmd/crates/soroban-spec-json/src/types.rs @@ -125,6 +125,7 @@ pub enum Type { Map { key: Box, value: Box }, Option { value: Box }, Result { value: Box, error: Box }, + Set { element: Box }, Vec { element: Box }, BytesN { n: u32 }, Tuple { elements: Vec }, @@ -177,6 +178,9 @@ impl From<&ScSpecTypeDef> for Type { value: Box::new(Type::from(res.ok_type.as_ref())), error: Box::new(Type::from(res.error_type.as_ref())), }, + ScSpecTypeDef::Set(set) => Type::Set { + element: Box::new(Type::from(set.element_type.as_ref())), + }, ScSpecTypeDef::Tuple(tuple) => Type::Tuple { elements: tuple.value_types.iter().map(Type::from).collect(), }, diff --git a/cmd/crates/soroban-spec-tools/src/lib.rs b/cmd/crates/soroban-spec-tools/src/lib.rs index be5580196..79b91d6d9 100644 --- a/cmd/crates/soroban-spec-tools/src/lib.rs +++ b/cmd/crates/soroban-spec-tools/src/lib.rs @@ -7,10 +7,10 @@ use stellar_xdr::{ AccountId, BytesM, ContractExecutable, Error as XdrError, Hash, Int128Parts, Int256Parts, PublicKey, ScAddress, ScBytes, ScContractInstance, ScMap, ScMapEntry, ScNonceKey, ScSpecEntry, ScSpecFunctionV0, ScSpecTypeDef as ScType, ScSpecTypeMap, ScSpecTypeOption, ScSpecTypeResult, - ScSpecTypeTuple, ScSpecTypeUdt, ScSpecTypeVec, ScSpecUdtEnumV0, ScSpecUdtErrorEnumCaseV0, - ScSpecUdtErrorEnumV0, ScSpecUdtStructV0, ScSpecUdtUnionCaseTupleV0, ScSpecUdtUnionCaseV0, - ScSpecUdtUnionCaseVoidV0, ScSpecUdtUnionV0, ScString, ScSymbol, ScVal, ScVec, StringM, - UInt128Parts, UInt256Parts, Uint256, VecM, + ScSpecTypeSet, ScSpecTypeTuple, ScSpecTypeUdt, ScSpecTypeVec, ScSpecUdtEnumV0, + ScSpecUdtErrorEnumCaseV0, ScSpecUdtErrorEnumV0, ScSpecUdtStructV0, ScSpecUdtUnionCaseTupleV0, + ScSpecUdtUnionCaseV0, ScSpecUdtUnionCaseVoidV0, ScSpecUdtUnionV0, ScString, ScSymbol, ScVal, + ScVec, StringM, UInt128Parts, UInt256Parts, Uint256, VecM, }; pub mod utils; @@ -107,6 +107,7 @@ impl Spec { | ScType::Result(_) | ScType::Vec(_) | ScType::Map(_) + | ScType::Set(_) | ScType::Tuple(_) | ScType::BytesN(_) | ScType::Symbol @@ -314,6 +315,9 @@ impl Spec { // User defined types parsing (ScType::Udt(ScSpecTypeUdt { name }), _) => self.parse_udt(name, v)?, + // Set parsing + (ScType::Set(set), Value::Array(values)) => self.parse_set(set, values)?, + // TODO: Implement the rest of these (_, raw) => serde_json::from_value(raw.clone()).map_err(Error::Serde)?, }; @@ -494,6 +498,21 @@ impl Spec { ScMap::sorted_from(parsed?).map_err(Error::Xdr)?, ))) } + + fn parse_set(&self, set: &ScSpecTypeSet, values: &[Value]) -> Result { + let ScSpecTypeSet { element_type } = set; + let parsed: Result, Error> = values + .iter() + .map(|v| { + let key = self.from_json(v, element_type)?; + let val = ScVal::Void; + Ok(ScMapEntry { key, val }) + }) + .collect(); + Ok(ScVal::Map(Some( + ScMap::sorted_from(parsed?).map_err(Error::Xdr)?, + ))) + } } impl Spec { @@ -575,6 +594,17 @@ impl Spec { Ok(Value::Object(v)) } + /// # Errors + /// + /// Might return an error + pub fn sc_set_to_json(&self, sc_map: &ScMap, type_: &ScSpecTypeSet) -> Result { + let v = sc_map + .iter() + .map(|ScMapEntry { key, .. }| self.xdr_to_json(key, &type_.element_type)) + .collect::, Error>>()?; + Ok(Value::Array(v)) + } + /// # Errors /// /// Might return an error @@ -688,6 +718,8 @@ impl Spec { (ScVal::Map(Some(map)), ScType::Map(map_type)) => self.sc_map_to_json(map, map_type)?, + (ScVal::Map(Some(map)), ScType::Set(set_type)) => self.sc_set_to_json(map, set_type)?, + (ScVal::U64(u64_), ScType::U64) => Value::Number(serde_json::Number::from(*u64_)), (ScVal::I64(i64_), ScType::I64) => Value::Number(serde_json::Number::from(*i64_)), @@ -1098,6 +1130,11 @@ impl Spec { let inner = self.arg_value_name(element_type.as_ref(), depth + 1)?; Some(format!("Array<{inner}>")) } + ScType::Set(val) => { + let ScSpecTypeSet { element_type } = val.as_ref(); + let inner = self.arg_value_name(element_type.as_ref(), depth + 1)?; + Some(format!("Set<{inner}>")) + } ScType::Result(val) => { let ScSpecTypeResult { ok_type, @@ -1239,6 +1276,11 @@ impl Spec { let inner = self.example(element_type.as_ref())?; Some(format!("[ {inner} ]")) } + ScType::Set(val) => { + let ScSpecTypeSet { element_type } = val.as_ref(); + let inner = self.example(element_type.as_ref())?; + Some(format!("[ {inner} ]")) + } ScType::Result(val) => { let ScSpecTypeResult { ok_type, diff --git a/cmd/crates/soroban-spec-typescript/src/lib.rs b/cmd/crates/soroban-spec-typescript/src/lib.rs index b7f101ea6..2e4a94828 100644 --- a/cmd/crates/soroban-spec-typescript/src/lib.rs +++ b/cmd/crates/soroban-spec-typescript/src/lib.rs @@ -456,6 +456,7 @@ pub fn type_to_ts(value: &types::Type) -> String { types::Type::Result { value, .. } => { format!("Result<{}>", type_to_ts(value)) } + types::Type::Set { element } => format!("Set<{}>", type_to_ts(element)), types::Type::Vec { element } => format!("Array<{}>", type_to_ts(element)), types::Type::Tuple { elements } => { if elements.is_empty() { diff --git a/cmd/crates/soroban-spec-typescript/src/types.rs b/cmd/crates/soroban-spec-typescript/src/types.rs index b70bb6836..3fa4a03aa 100644 --- a/cmd/crates/soroban-spec-typescript/src/types.rs +++ b/cmd/crates/soroban-spec-typescript/src/types.rs @@ -124,6 +124,7 @@ pub enum Type { Map { key: Box, value: Box }, Option { value: Box }, Result { value: Box, error: Box }, + Set { element: Box }, Vec { element: Box }, BytesN { n: u32 }, Tuple { elements: Vec }, @@ -182,6 +183,9 @@ impl From<&ScSpecTypeDef> for Type { value: Box::new(Type::from(res.ok_type.as_ref())), error: Box::new(Type::from(res.error_type.as_ref())), }, + ScSpecTypeDef::Set(set) => Type::Set { + element: Box::new(Type::from(set.element_type.as_ref())), + }, ScSpecTypeDef::Tuple(tuple) => Type::Tuple { elements: tuple.value_types.iter().map(Type::from).collect(), }, diff --git a/cmd/crates/soroban-spec-typescript/src/wrapper.rs b/cmd/crates/soroban-spec-typescript/src/wrapper.rs index d2a8d60a7..97e676a52 100644 --- a/cmd/crates/soroban-spec-typescript/src/wrapper.rs +++ b/cmd/crates/soroban-spec-typescript/src/wrapper.rs @@ -45,9 +45,11 @@ pub fn type_to_js_xdr(value: &types::Type) -> String { types::Type::U128 => "u128ToScVal(i)".to_owned(), types::Type::I128 => "i128ToScVal(i)".to_owned(), - types::Type::U256 | types::Type::I256 | types::Type::Timepoint | types::Type::Duration => { - "i".to_owned() - } + types::Type::Set { .. } + | types::Type::U256 + | types::Type::I256 + | types::Type::Timepoint + | types::Type::Duration => "i".to_owned(), // This is case shouldn't happen since we only go xdr -> js for errors types::Type::Error { .. } => "N/A".to_owned(), types::Type::String => "xdr.ScVal.scvString(i)".to_owned(), diff --git a/cmd/soroban-cli/src/commands/config/ledger_file.rs b/cmd/soroban-cli/src/commands/config/ledger_file.rs index f85cbfdac..0d3fb3bc7 100644 --- a/cmd/soroban-cli/src/commands/config/ledger_file.rs +++ b/cmd/soroban-cli/src/commands/config/ledger_file.rs @@ -37,7 +37,7 @@ impl Args { .map_err(|e| Error::CannotReadLedgerFile { filepath, error: e }) } - pub fn write(&self, state: &LedgerSnapshot, pwd: &Path) -> Result<(), Error> { + pub fn write(&self, state: &mut LedgerSnapshot, pwd: &Path) -> Result<(), Error> { let filepath = self.path(pwd); state diff --git a/cmd/soroban-cli/src/commands/config/mod.rs b/cmd/soroban-cli/src/commands/config/mod.rs index 7f406c264..0ea9b3437 100644 --- a/cmd/soroban-cli/src/commands/config/mod.rs +++ b/cmd/soroban-cli/src/commands/config/mod.rs @@ -106,7 +106,7 @@ impl Args { Ok(self.ledger_file.read(&self.locator.config_dir()?)?) } - pub fn set_state(&self, state: &LedgerSnapshot) -> Result<(), Error> { + pub fn set_state(&self, state: &mut LedgerSnapshot) -> Result<(), Error> { Ok(self.ledger_file.write(state, &self.locator.config_dir()?)?) } diff --git a/cmd/soroban-cli/src/commands/contract/bump.rs b/cmd/soroban-cli/src/commands/contract/bump.rs index 6ded03d6a..438155b88 100644 --- a/cmd/soroban-cli/src/commands/contract/bump.rs +++ b/cmd/soroban-cli/src/commands/contract/bump.rs @@ -164,6 +164,7 @@ impl Cmd { instructions: 0, read_bytes: 0, write_bytes: 0, + contract_events_size_bytes: 0, }, refundable_fee: 0, }), @@ -243,7 +244,7 @@ impl Cmd { }) .collect::>(); - self.config.set_state(&state)?; + self.config.set_state(&mut state)?; let Some(new_expiration_ledger_seq) = expiration_ledger_seq else { return Err(Error::LedgerEntryNotFound); diff --git a/cmd/soroban-cli/src/commands/contract/deploy.rs b/cmd/soroban-cli/src/commands/contract/deploy.rs index 8eb2913f2..645ffee41 100644 --- a/cmd/soroban-cli/src/commands/contract/deploy.rs +++ b/cmd/soroban-cli/src/commands/contract/deploy.rs @@ -151,7 +151,7 @@ impl Cmd { wasm_hash.0, state.min_persistent_entry_expiration, ); - self.config.set_state(&state)?; + self.config.set_state(&mut state)?; Ok(stellar_strkey::Contract(contract_id).to_string()) } diff --git a/cmd/soroban-cli/src/commands/contract/install.rs b/cmd/soroban-cli/src/commands/contract/install.rs index 1a8bf44e8..648c9299d 100644 --- a/cmd/soroban-cli/src/commands/contract/install.rs +++ b/cmd/soroban-cli/src/commands/contract/install.rs @@ -70,7 +70,7 @@ impl Cmd { state.min_persistent_entry_expiration, )?; - self.config.set_state(&state)?; + self.config.set_state(&mut state)?; Ok(wasm_hash) } diff --git a/cmd/soroban-cli/src/commands/contract/invoke.rs b/cmd/soroban-cli/src/commands/contract/invoke.rs index 3f799a901..2a6a404a3 100644 --- a/cmd/soroban-cli/src/commands/contract/invoke.rs +++ b/cmd/soroban-cli/src/commands/contract/invoke.rs @@ -375,7 +375,7 @@ impl Cmd { budget.reset_unlimited()?; }; let h = Host::with_storage_and_budget(storage, budget); - h.switch_to_recording_auth(true)?; + h.switch_to_recording_auth()?; h.set_source_account(source_account)?; let mut ledger_info = state.ledger_info(); @@ -438,7 +438,7 @@ impl Cmd { } utils::bump_ledger_entry_expirations(&mut state.ledger_entries, &expiration_ledger_bumps); - self.config.set_state(&state)?; + self.config.set_state(&mut state)?; if !events.0.is_empty() { self.events_file .commit(&events.0, &state, &self.config.locator.config_dir()?)?; @@ -570,7 +570,7 @@ fn build_custom_cmd(name: &str, spec: &Spec) -> Result { let long_doc: &'static str = Box::leak(arg_file_help(doc).into_boxed_str()); cmd = cmd.about(Some(doc)).long_about(long_doc); - for (name, type_) in inputs_map { + for (name, type_) in inputs_map.iter() { let mut arg = clap::Arg::new(name); let file_arg_name = fmt_arg_file_name(name); let mut file_arg = clap::Arg::new(&file_arg_name); diff --git a/cmd/soroban-cli/src/commands/contract/restore.rs b/cmd/soroban-cli/src/commands/contract/restore.rs index a5d3cb0df..f9c56ecd2 100644 --- a/cmd/soroban-cli/src/commands/contract/restore.rs +++ b/cmd/soroban-cli/src/commands/contract/restore.rs @@ -171,6 +171,7 @@ impl Cmd { instructions: 0, read_bytes: 0, write_bytes: 0, + contract_events_size_bytes: 0, }, refundable_fee: 0, }), diff --git a/cmd/soroban-cli/src/commands/lab/token/wrap.rs b/cmd/soroban-cli/src/commands/lab/token/wrap.rs index 963413671..3d8588574 100644 --- a/cmd/soroban-cli/src/commands/lab/token/wrap.rs +++ b/cmd/soroban-cli/src/commands/lab/token/wrap.rs @@ -97,7 +97,7 @@ impl Cmd { let contract_id = vec_to_hash(&res)?; state.update(&h); - self.config.set_state(&state)?; + self.config.set_state(&mut state)?; Ok(stellar_strkey::Contract(contract_id.0).to_string()) } diff --git a/cmd/soroban-cli/src/commands/version.rs b/cmd/soroban-cli/src/commands/version.rs index 21be0743a..44848322c 100644 --- a/cmd/soroban-cli/src/commands/version.rs +++ b/cmd/soroban-cli/src/commands/version.rs @@ -22,7 +22,7 @@ pub fn short() -> String { pub fn long() -> String { let env = soroban_env_host::VERSION; let xdr = soroban_env_host::VERSION.xdr; - [ + vec![ short(), format!("soroban-env {} ({})", env.pkg, env.rev), format!("soroban-env interface version {}", meta::INTERFACE_VERSION), diff --git a/cmd/soroban-cli/src/log/event.rs b/cmd/soroban-cli/src/log/event.rs index 33d150ca0..acd92fee5 100644 --- a/cmd/soroban-cli/src/log/event.rs +++ b/cmd/soroban-cli/src/log/event.rs @@ -1,7 +1,7 @@ use soroban_env_host::events::HostEvent; pub fn events(events: &[HostEvent]) { - for event in events { + for event in events.iter() { tracing::info!(log = event.to_string()); } } diff --git a/cmd/soroban-cli/src/rpc/transaction.rs b/cmd/soroban-cli/src/rpc/transaction.rs index bf8e29430..341451452 100644 --- a/cmd/soroban-cli/src/rpc/transaction.rs +++ b/cmd/soroban-cli/src/rpc/transaction.rs @@ -126,8 +126,7 @@ pub fn sign_soroban_authorizations( let SorobanAuthorizationEntry { credentials: SorobanCredentials::Address(ref mut credentials), .. - } = auth - else { + } = auth else { // Doesn't need special signing return Ok(auth); }; @@ -185,8 +184,7 @@ pub fn sign_soroban_authorization_entry( let SorobanAuthorizationEntry { credentials: SorobanCredentials::Address(ref mut credentials), .. - } = auth - else { + } = auth else { // Doesn't need special signing return Ok(auth); }; @@ -261,6 +259,7 @@ mod tests { instructions: 0, read_bytes: 5, write_bytes: 0, + contract_events_size_bytes: 0, }, refundable_fee: 0, ext: ExtensionPoint::V0, diff --git a/cmd/soroban-cli/src/utils.rs b/cmd/soroban-cli/src/utils.rs index 3792c63d7..be49aebcc 100644 --- a/cmd/soroban-cli/src/utils.rs +++ b/cmd/soroban-cli/src/utils.rs @@ -84,7 +84,7 @@ pub fn add_contract_code_to_ledger_entries( }), ext: LedgerEntryExt::V0, }; - for (k, e) in &mut *entries { + for (k, e) in entries.iter_mut() { if **k == code_key { **e = code_entry; return Ok(hash); @@ -125,7 +125,7 @@ pub fn add_contract_to_ledger_entries( }), ext: LedgerEntryExt::V0, }; - for (k, e) in &mut *entries { + for (k, e) in entries.iter_mut() { if **k == contract_key { **e = contract_entry; return; @@ -138,7 +138,7 @@ pub fn bump_ledger_entry_expirations( entries: &mut [(Box, Box)], lookup: &HashMap, ) { - for (k, e) in &mut *entries { + for (k, e) in entries.iter_mut() { if let Some(min_expiration) = lookup.get(k.as_ref()) { if let LedgerEntryData::ContractData(entry) = &mut e.data { entry.expiration_ledger_seq = *min_expiration; diff --git a/cmd/soroban-rpc/lib/preflight/src/fees.rs b/cmd/soroban-rpc/lib/preflight/src/fees.rs index e79a40f70..c0c59fb85 100644 --- a/cmd/soroban-rpc/lib/preflight/src/fees.rs +++ b/cmd/soroban-rpc/lib/preflight/src/fees.rs @@ -31,9 +31,13 @@ pub(crate) fn compute_host_function_transaction_data_and_min_fee( current_ledger_seq: u32, ) -> Result<(SorobanTransactionData, i64)> { let ledger_changes = get_ledger_changes(budget, post_storage, pre_storage)?; - let soroban_resources = - calculate_host_function_soroban_resources(&ledger_changes, &post_storage.footprint, budget) - .context("cannot compute host function resources")?; + let soroban_resources = calculate_host_function_soroban_resources( + &ledger_changes, + &post_storage.footprint, + budget, + events, + ) + .context("cannot compute host function resources")?; let read_write_entries = u32::try_from(soroban_resources.footprint.read_write.as_vec().len())?; @@ -50,8 +54,7 @@ pub(crate) fn compute_host_function_transaction_data_and_min_fee( &soroban_resources.footprint, ) .context("cannot estimate maximum transaction size")?, - contract_events_size_bytes: calculate_event_size_bytes(events) - .context("cannot calculate events size")?, + contract_events_size_bytes: soroban_resources.contract_events_size_bytes, }; let rent_changes = extract_rent_changes(&ledger_changes); @@ -101,6 +104,7 @@ fn estimate_max_transaction_size_for_operation( instructions: 0, read_bytes: 0, write_bytes: 0, + contract_events_size_bytes: 0, }, refundable_fee: 0, ext: ExtensionPoint::V0, @@ -121,6 +125,7 @@ fn calculate_host_function_soroban_resources( ledger_changes: &Vec, footprint: &Footprint, budget: &Budget, + events: &Vec, ) -> Result { let ledger_footprint = storage_footprint_to_ledger_footprint(footprint) .context("cannot convert storage footprint to ledger footprint")?; @@ -136,6 +141,9 @@ fn calculate_host_function_soroban_resources( }) .sum(); + let contract_events_size_bytes = + calculate_event_size_bytes(events).context("cannot calculate events size")?; + // Add a 15% leeway with a minimum of 50k instructions let budget_instructions = budget .get_cpu_insns_consumed() @@ -146,6 +154,7 @@ fn calculate_host_function_soroban_resources( instructions: u32::try_from(instructions)?, read_bytes, write_bytes, + contract_events_size_bytes, }) } @@ -157,6 +166,7 @@ fn get_fee_configurations( ledger_storage.get_configuration_setting(ConfigSettingId::ContractComputeV0)? else { bail!("unexpected config setting entry for ComputeV0 key"); + }; let ConfigSettingEntry::ContractLedgerCostV0(ledger_cost) = @@ -185,9 +195,9 @@ fn get_fee_configurations( let ConfigSettingEntry::StateExpiration(state_expiration) = ledger_storage.get_configuration_setting(ConfigSettingId::StateExpiration)? - else { - bail!("unexpected config setting entry for StateExpiration key"); - }; + else { + bail!("unexpected config setting entry for StateExpiration key"); + }; let write_fee_configuration = WriteFeeConfiguration { bucket_list_target_size_bytes: ledger_cost.bucket_list_target_size_bytes, @@ -314,6 +324,7 @@ pub(crate) fn compute_bump_footprint_exp_transaction_data_and_min_fee( instructions: 0, read_bytes, write_bytes: 0, + contract_events_size_bytes: 0, }; let transaction_size_bytes = estimate_max_transaction_size_for_operation( &OperationBody::BumpFootprintExpiration(BumpFootprintExpirationOp { @@ -384,9 +395,9 @@ pub(crate) fn compute_restore_footprint_transaction_data_and_min_fee( ) -> Result<(SorobanTransactionData, i64)> { let ConfigSettingEntry::StateExpiration(state_expiration) = ledger_storage.get_configuration_setting(ConfigSettingId::StateExpiration)? - else { - bail!("unexpected config setting entry for StateExpiration key"); - }; + else { + bail!("unexpected config setting entry for StateExpiration key"); + }; let rent_changes = compute_restore_footprint_rent_changes( &footprint, ledger_storage, @@ -405,6 +416,7 @@ pub(crate) fn compute_restore_footprint_transaction_data_and_min_fee( instructions: 0, read_bytes: write_bytes, write_bytes, + contract_events_size_bytes: 0, }; let entry_count = u32::try_from(soroban_resources.footprint.read_write.as_vec().len())?; let transaction_size_bytes = estimate_max_transaction_size_for_operation( diff --git a/cmd/soroban-rpc/lib/preflight/src/ledger_storage.rs b/cmd/soroban-rpc/lib/preflight/src/ledger_storage.rs index e9dac7ab8..54632d0f3 100644 --- a/cmd/soroban-rpc/lib/preflight/src/ledger_storage.rs +++ b/cmd/soroban-rpc/lib/preflight/src/ledger_storage.rs @@ -117,11 +117,11 @@ impl LedgerStorage { let setting_id = ConfigSettingId::StateExpiration; let ConfigSettingEntry::StateExpiration(state_expiration) = ledger_storage.get_configuration_setting(setting_id)? - else { - return Err(Error::UnexpectedConfigLedgerEntry { - setting_id: setting_id.name().to_string(), - }); - }; + else { + return Err( + Error::UnexpectedConfigLedgerEntry { setting_id: setting_id.name().to_string() } + ); + }; // Now that we have the state expiration config, we can build the tracker ledger_storage.restore_tracker = Some(EntryRestoreTracker { current_ledger_seq: current_ledger_sequence, diff --git a/cmd/soroban-rpc/lib/preflight/src/preflight.rs b/cmd/soroban-rpc/lib/preflight/src/preflight.rs index f85ca307a..e1b64bf29 100644 --- a/cmd/soroban-rpc/lib/preflight/src/preflight.rs +++ b/cmd/soroban-rpc/lib/preflight/src/preflight.rs @@ -56,7 +56,7 @@ pub(crate) fn preflight_invoke_hf_op( // them, and return the correct fees and footprint. let needs_auth_recording = invoke_hf_op.auth.is_empty(); if needs_auth_recording { - host.switch_to_recording_auth(true) + host.switch_to_recording_auth() .context("cannot switch auth to recording mode")?; } else { host.set_authorization_entries(invoke_hf_op.auth.to_vec()) @@ -211,21 +211,21 @@ fn host_events_to_diagnostic_events(events: &Events) -> Vec { fn get_budget_from_network_config_params(ledger_storage: &LedgerStorage) -> Result { let ConfigSettingEntry::ContractComputeV0(compute) = ledger_storage.get_configuration_setting(ConfigSettingId::ContractComputeV0)? - else { - bail!("unexpected config setting entry for ComputeV0 key"); - }; + else { + bail!("unexpected config setting entry for ComputeV0 key"); + }; let ConfigSettingEntry::ContractCostParamsCpuInstructions(cost_params_cpu) = ledger_storage .get_configuration_setting(ConfigSettingId::ContractCostParamsCpuInstructions)? - else { - bail!("unexpected config setting entry for CostParamsCpuInstructions key"); - }; + else { + bail!("unexpected config setting entry for CostParamsCpuInstructions key"); + }; let ConfigSettingEntry::ContractCostParamsMemoryBytes(cost_params_memory) = ledger_storage.get_configuration_setting(ConfigSettingId::ContractCostParamsMemoryBytes)? - else { - bail!("unexpected config setting entry for CostParamsMemoryBytes key"); - }; + else { + bail!("unexpected config setting entry for CostParamsMemoryBytes key"); + }; let budget = Budget::try_from_configs( compute.tx_max_instructions as u64, diff --git a/docs/soroban-cli-full-docs.md b/docs/soroban-cli-full-docs.md index f528ccb35..54cc73c08 100644 --- a/docs/soroban-cli-full-docs.md +++ b/docs/soroban-cli-full-docs.md @@ -833,7 +833,7 @@ Decode XDR * `--type ` — XDR type to decode to - Possible values: `Value`, `ScpBallot`, `ScpStatementType`, `ScpNomination`, `ScpStatement`, `ScpStatementPledges`, `ScpStatementPrepare`, `ScpStatementConfirm`, `ScpStatementExternalize`, `ScpEnvelope`, `ScpQuorumSet`, `ConfigSettingContractExecutionLanesV0`, `ConfigSettingContractComputeV0`, `ConfigSettingContractLedgerCostV0`, `ConfigSettingContractHistoricalDataV0`, `ConfigSettingContractEventsV0`, `ConfigSettingContractBandwidthV0`, `ContractCostType`, `ContractCostParamEntry`, `StateExpirationSettings`, `EvictionIterator`, `ContractCostParams`, `ConfigSettingId`, `ConfigSettingEntry`, `ScEnvMetaKind`, `ScEnvMetaEntry`, `ScMetaV0`, `ScMetaKind`, `ScMetaEntry`, `ScSpecType`, `ScSpecTypeOption`, `ScSpecTypeResult`, `ScSpecTypeVec`, `ScSpecTypeMap`, `ScSpecTypeTuple`, `ScSpecTypeBytesN`, `ScSpecTypeUdt`, `ScSpecTypeDef`, `ScSpecUdtStructFieldV0`, `ScSpecUdtStructV0`, `ScSpecUdtUnionCaseVoidV0`, `ScSpecUdtUnionCaseTupleV0`, `ScSpecUdtUnionCaseV0Kind`, `ScSpecUdtUnionCaseV0`, `ScSpecUdtUnionV0`, `ScSpecUdtEnumCaseV0`, `ScSpecUdtEnumV0`, `ScSpecUdtErrorEnumCaseV0`, `ScSpecUdtErrorEnumV0`, `ScSpecFunctionInputV0`, `ScSpecFunctionV0`, `ScSpecEntryKind`, `ScSpecEntry`, `ScValType`, `ScErrorType`, `ScErrorCode`, `ScError`, `UInt128Parts`, `Int128Parts`, `UInt256Parts`, `Int256Parts`, `ContractExecutableType`, `ContractExecutable`, `ScAddressType`, `ScAddress`, `ScVec`, `ScMap`, `ScBytes`, `ScString`, `ScSymbol`, `ScNonceKey`, `ScContractInstance`, `ScVal`, `ScMapEntry`, `StoredTransactionSet`, `PersistedScpStateV0`, `PersistedScpStateV1`, `PersistedScpState`, `Thresholds`, `String32`, `String64`, `SequenceNumber`, `DataValue`, `PoolId`, `AssetCode4`, `AssetCode12`, `AssetType`, `AssetCode`, `AlphaNum4`, `AlphaNum12`, `Asset`, `Price`, `Liabilities`, `ThresholdIndexes`, `LedgerEntryType`, `Signer`, `AccountFlags`, `SponsorshipDescriptor`, `AccountEntryExtensionV3`, `AccountEntryExtensionV2`, `AccountEntryExtensionV2Ext`, `AccountEntryExtensionV1`, `AccountEntryExtensionV1Ext`, `AccountEntry`, `AccountEntryExt`, `TrustLineFlags`, `LiquidityPoolType`, `TrustLineAsset`, `TrustLineEntryExtensionV2`, `TrustLineEntryExtensionV2Ext`, `TrustLineEntry`, `TrustLineEntryExt`, `TrustLineEntryV1`, `TrustLineEntryV1Ext`, `OfferEntryFlags`, `OfferEntry`, `OfferEntryExt`, `DataEntry`, `DataEntryExt`, `ClaimPredicateType`, `ClaimPredicate`, `ClaimantType`, `Claimant`, `ClaimantV0`, `ClaimableBalanceIdType`, `ClaimableBalanceId`, `ClaimableBalanceFlags`, `ClaimableBalanceEntryExtensionV1`, `ClaimableBalanceEntryExtensionV1Ext`, `ClaimableBalanceEntry`, `ClaimableBalanceEntryExt`, `LiquidityPoolConstantProductParameters`, `LiquidityPoolEntry`, `LiquidityPoolEntryBody`, `LiquidityPoolEntryConstantProduct`, `ContractEntryBodyType`, `ContractDataFlags`, `ContractDataDurability`, `ContractDataEntry`, `ContractDataEntryBody`, `ContractDataEntryData`, `ContractCodeEntry`, `ContractCodeEntryBody`, `LedgerEntryExtensionV1`, `LedgerEntryExtensionV1Ext`, `LedgerEntry`, `LedgerEntryData`, `LedgerEntryExt`, `LedgerKey`, `LedgerKeyAccount`, `LedgerKeyTrustLine`, `LedgerKeyOffer`, `LedgerKeyData`, `LedgerKeyClaimableBalance`, `LedgerKeyLiquidityPool`, `LedgerKeyContractData`, `LedgerKeyContractCode`, `LedgerKeyConfigSetting`, `EnvelopeType`, `UpgradeType`, `StellarValueType`, `LedgerCloseValueSignature`, `StellarValue`, `StellarValueExt`, `LedgerHeaderFlags`, `LedgerHeaderExtensionV1`, `LedgerHeaderExtensionV1Ext`, `LedgerHeader`, `LedgerHeaderExt`, `LedgerUpgradeType`, `ConfigUpgradeSetKey`, `LedgerUpgrade`, `ConfigUpgradeSet`, `BucketEntryType`, `BucketMetadata`, `BucketMetadataExt`, `BucketEntry`, `TxSetComponentType`, `TxSetComponent`, `TxSetComponentTxsMaybeDiscountedFee`, `TransactionPhase`, `TransactionSet`, `TransactionSetV1`, `GeneralizedTransactionSet`, `TransactionResultPair`, `TransactionResultSet`, `TransactionHistoryEntry`, `TransactionHistoryEntryExt`, `TransactionHistoryResultEntry`, `TransactionHistoryResultEntryExt`, `LedgerHeaderHistoryEntry`, `LedgerHeaderHistoryEntryExt`, `LedgerScpMessages`, `ScpHistoryEntryV0`, `ScpHistoryEntry`, `LedgerEntryChangeType`, `LedgerEntryChange`, `LedgerEntryChanges`, `OperationMeta`, `TransactionMetaV1`, `TransactionMetaV2`, `ContractEventType`, `ContractEvent`, `ContractEventBody`, `ContractEventV0`, `DiagnosticEvent`, `SorobanTransactionMeta`, `TransactionMetaV3`, `InvokeHostFunctionSuccessPreImage`, `TransactionMeta`, `TransactionResultMeta`, `UpgradeEntryMeta`, `LedgerCloseMetaV0`, `LedgerCloseMetaV1`, `LedgerCloseMetaV2`, `LedgerCloseMeta`, `ErrorCode`, `SError`, `SendMore`, `SendMoreExtended`, `AuthCert`, `Hello`, `Auth`, `IpAddrType`, `PeerAddress`, `PeerAddressIp`, `MessageType`, `DontHave`, `SurveyMessageCommandType`, `SurveyMessageResponseType`, `SurveyRequestMessage`, `SignedSurveyRequestMessage`, `EncryptedBody`, `SurveyResponseMessage`, `SignedSurveyResponseMessage`, `PeerStats`, `PeerStatList`, `TopologyResponseBodyV0`, `TopologyResponseBodyV1`, `SurveyResponseBody`, `TxAdvertVector`, `FloodAdvert`, `TxDemandVector`, `FloodDemand`, `StellarMessage`, `AuthenticatedMessage`, `AuthenticatedMessageV0`, `LiquidityPoolParameters`, `MuxedAccount`, `MuxedAccountMed25519`, `DecoratedSignature`, `OperationType`, `CreateAccountOp`, `PaymentOp`, `PathPaymentStrictReceiveOp`, `PathPaymentStrictSendOp`, `ManageSellOfferOp`, `ManageBuyOfferOp`, `CreatePassiveSellOfferOp`, `SetOptionsOp`, `ChangeTrustAsset`, `ChangeTrustOp`, `AllowTrustOp`, `ManageDataOp`, `BumpSequenceOp`, `CreateClaimableBalanceOp`, `ClaimClaimableBalanceOp`, `BeginSponsoringFutureReservesOp`, `RevokeSponsorshipType`, `RevokeSponsorshipOp`, `RevokeSponsorshipOpSigner`, `ClawbackOp`, `ClawbackClaimableBalanceOp`, `SetTrustLineFlagsOp`, `LiquidityPoolDepositOp`, `LiquidityPoolWithdrawOp`, `HostFunctionType`, `ContractIdPreimageType`, `ContractIdPreimage`, `ContractIdPreimageFromAddress`, `CreateContractArgs`, `InvokeContractArgs`, `HostFunction`, `SorobanAuthorizedFunctionType`, `SorobanAuthorizedFunction`, `SorobanAuthorizedInvocation`, `SorobanAddressCredentials`, `SorobanCredentialsType`, `SorobanCredentials`, `SorobanAuthorizationEntry`, `InvokeHostFunctionOp`, `BumpFootprintExpirationOp`, `RestoreFootprintOp`, `Operation`, `OperationBody`, `HashIdPreimage`, `HashIdPreimageOperationId`, `HashIdPreimageRevokeId`, `HashIdPreimageContractId`, `HashIdPreimageSorobanAuthorization`, `MemoType`, `Memo`, `TimeBounds`, `LedgerBounds`, `PreconditionsV2`, `PreconditionType`, `Preconditions`, `LedgerFootprint`, `SorobanResources`, `SorobanTransactionData`, `TransactionV0`, `TransactionV0Ext`, `TransactionV0Envelope`, `Transaction`, `TransactionExt`, `TransactionV1Envelope`, `FeeBumpTransaction`, `FeeBumpTransactionInnerTx`, `FeeBumpTransactionExt`, `FeeBumpTransactionEnvelope`, `TransactionEnvelope`, `TransactionSignaturePayload`, `TransactionSignaturePayloadTaggedTransaction`, `ClaimAtomType`, `ClaimOfferAtomV0`, `ClaimOfferAtom`, `ClaimLiquidityAtom`, `ClaimAtom`, `CreateAccountResultCode`, `CreateAccountResult`, `PaymentResultCode`, `PaymentResult`, `PathPaymentStrictReceiveResultCode`, `SimplePaymentResult`, `PathPaymentStrictReceiveResult`, `PathPaymentStrictReceiveResultSuccess`, `PathPaymentStrictSendResultCode`, `PathPaymentStrictSendResult`, `PathPaymentStrictSendResultSuccess`, `ManageSellOfferResultCode`, `ManageOfferEffect`, `ManageOfferSuccessResult`, `ManageOfferSuccessResultOffer`, `ManageSellOfferResult`, `ManageBuyOfferResultCode`, `ManageBuyOfferResult`, `SetOptionsResultCode`, `SetOptionsResult`, `ChangeTrustResultCode`, `ChangeTrustResult`, `AllowTrustResultCode`, `AllowTrustResult`, `AccountMergeResultCode`, `AccountMergeResult`, `InflationResultCode`, `InflationPayout`, `InflationResult`, `ManageDataResultCode`, `ManageDataResult`, `BumpSequenceResultCode`, `BumpSequenceResult`, `CreateClaimableBalanceResultCode`, `CreateClaimableBalanceResult`, `ClaimClaimableBalanceResultCode`, `ClaimClaimableBalanceResult`, `BeginSponsoringFutureReservesResultCode`, `BeginSponsoringFutureReservesResult`, `EndSponsoringFutureReservesResultCode`, `EndSponsoringFutureReservesResult`, `RevokeSponsorshipResultCode`, `RevokeSponsorshipResult`, `ClawbackResultCode`, `ClawbackResult`, `ClawbackClaimableBalanceResultCode`, `ClawbackClaimableBalanceResult`, `SetTrustLineFlagsResultCode`, `SetTrustLineFlagsResult`, `LiquidityPoolDepositResultCode`, `LiquidityPoolDepositResult`, `LiquidityPoolWithdrawResultCode`, `LiquidityPoolWithdrawResult`, `InvokeHostFunctionResultCode`, `InvokeHostFunctionResult`, `BumpFootprintExpirationResultCode`, `BumpFootprintExpirationResult`, `RestoreFootprintResultCode`, `RestoreFootprintResult`, `OperationResultCode`, `OperationResult`, `OperationResultTr`, `TransactionResultCode`, `InnerTransactionResult`, `InnerTransactionResultResult`, `InnerTransactionResultExt`, `InnerTransactionResultPair`, `TransactionResult`, `TransactionResultResult`, `TransactionResultExt`, `Hash`, `Uint256`, `Uint32`, `Int32`, `Uint64`, `Int64`, `TimePoint`, `Duration`, `ExtensionPoint`, `CryptoKeyType`, `PublicKeyType`, `SignerKeyType`, `PublicKey`, `SignerKey`, `SignerKeyEd25519SignedPayload`, `Signature`, `SignatureHint`, `NodeId`, `AccountId`, `Curve25519Secret`, `Curve25519Public`, `HmacSha256Key`, `HmacSha256Mac` + Possible values: `Value`, `ScpBallot`, `ScpStatementType`, `ScpNomination`, `ScpStatement`, `ScpStatementPledges`, `ScpStatementPrepare`, `ScpStatementConfirm`, `ScpStatementExternalize`, `ScpEnvelope`, `ScpQuorumSet`, `ConfigSettingContractExecutionLanesV0`, `ConfigSettingContractComputeV0`, `ConfigSettingContractLedgerCostV0`, `ConfigSettingContractHistoricalDataV0`, `ConfigSettingContractEventsV0`, `ConfigSettingContractBandwidthV0`, `ContractCostType`, `ContractCostParamEntry`, `StateExpirationSettings`, `EvictionIterator`, `ContractCostParams`, `ConfigSettingId`, `ConfigSettingEntry`, `ScEnvMetaKind`, `ScEnvMetaEntry`, `ScMetaV0`, `ScMetaKind`, `ScMetaEntry`, `ScSpecType`, `ScSpecTypeOption`, `ScSpecTypeResult`, `ScSpecTypeVec`, `ScSpecTypeMap`, `ScSpecTypeSet`, `ScSpecTypeTuple`, `ScSpecTypeBytesN`, `ScSpecTypeUdt`, `ScSpecTypeDef`, `ScSpecUdtStructFieldV0`, `ScSpecUdtStructV0`, `ScSpecUdtUnionCaseVoidV0`, `ScSpecUdtUnionCaseTupleV0`, `ScSpecUdtUnionCaseV0Kind`, `ScSpecUdtUnionCaseV0`, `ScSpecUdtUnionV0`, `ScSpecUdtEnumCaseV0`, `ScSpecUdtEnumV0`, `ScSpecUdtErrorEnumCaseV0`, `ScSpecUdtErrorEnumV0`, `ScSpecFunctionInputV0`, `ScSpecFunctionV0`, `ScSpecEntryKind`, `ScSpecEntry`, `ScValType`, `ScErrorType`, `ScErrorCode`, `ScError`, `UInt128Parts`, `Int128Parts`, `UInt256Parts`, `Int256Parts`, `ContractExecutableType`, `ContractExecutable`, `ScAddressType`, `ScAddress`, `ScVec`, `ScMap`, `ScBytes`, `ScString`, `ScSymbol`, `ScNonceKey`, `ScContractInstance`, `ScVal`, `ScMapEntry`, `StoredTransactionSet`, `PersistedScpStateV0`, `PersistedScpStateV1`, `PersistedScpState`, `Thresholds`, `String32`, `String64`, `SequenceNumber`, `DataValue`, `PoolId`, `AssetCode4`, `AssetCode12`, `AssetType`, `AssetCode`, `AlphaNum4`, `AlphaNum12`, `Asset`, `Price`, `Liabilities`, `ThresholdIndexes`, `LedgerEntryType`, `Signer`, `AccountFlags`, `SponsorshipDescriptor`, `AccountEntryExtensionV3`, `AccountEntryExtensionV2`, `AccountEntryExtensionV2Ext`, `AccountEntryExtensionV1`, `AccountEntryExtensionV1Ext`, `AccountEntry`, `AccountEntryExt`, `TrustLineFlags`, `LiquidityPoolType`, `TrustLineAsset`, `TrustLineEntryExtensionV2`, `TrustLineEntryExtensionV2Ext`, `TrustLineEntry`, `TrustLineEntryExt`, `TrustLineEntryV1`, `TrustLineEntryV1Ext`, `OfferEntryFlags`, `OfferEntry`, `OfferEntryExt`, `DataEntry`, `DataEntryExt`, `ClaimPredicateType`, `ClaimPredicate`, `ClaimantType`, `Claimant`, `ClaimantV0`, `ClaimableBalanceIdType`, `ClaimableBalanceId`, `ClaimableBalanceFlags`, `ClaimableBalanceEntryExtensionV1`, `ClaimableBalanceEntryExtensionV1Ext`, `ClaimableBalanceEntry`, `ClaimableBalanceEntryExt`, `LiquidityPoolConstantProductParameters`, `LiquidityPoolEntry`, `LiquidityPoolEntryBody`, `LiquidityPoolEntryConstantProduct`, `ContractEntryBodyType`, `ContractDataFlags`, `ContractDataDurability`, `ContractDataEntry`, `ContractDataEntryBody`, `ContractDataEntryData`, `ContractCodeEntry`, `ContractCodeEntryBody`, `LedgerEntryExtensionV1`, `LedgerEntryExtensionV1Ext`, `LedgerEntry`, `LedgerEntryData`, `LedgerEntryExt`, `LedgerKey`, `LedgerKeyAccount`, `LedgerKeyTrustLine`, `LedgerKeyOffer`, `LedgerKeyData`, `LedgerKeyClaimableBalance`, `LedgerKeyLiquidityPool`, `LedgerKeyContractData`, `LedgerKeyContractCode`, `LedgerKeyConfigSetting`, `EnvelopeType`, `UpgradeType`, `StellarValueType`, `LedgerCloseValueSignature`, `StellarValue`, `StellarValueExt`, `LedgerHeaderFlags`, `LedgerHeaderExtensionV1`, `LedgerHeaderExtensionV1Ext`, `LedgerHeader`, `LedgerHeaderExt`, `LedgerUpgradeType`, `ConfigUpgradeSetKey`, `LedgerUpgrade`, `ConfigUpgradeSet`, `BucketEntryType`, `BucketMetadata`, `BucketMetadataExt`, `BucketEntry`, `TxSetComponentType`, `TxSetComponent`, `TxSetComponentTxsMaybeDiscountedFee`, `TransactionPhase`, `TransactionSet`, `TransactionSetV1`, `GeneralizedTransactionSet`, `TransactionResultPair`, `TransactionResultSet`, `TransactionHistoryEntry`, `TransactionHistoryEntryExt`, `TransactionHistoryResultEntry`, `TransactionHistoryResultEntryExt`, `LedgerHeaderHistoryEntry`, `LedgerHeaderHistoryEntryExt`, `LedgerScpMessages`, `ScpHistoryEntryV0`, `ScpHistoryEntry`, `LedgerEntryChangeType`, `LedgerEntryChange`, `LedgerEntryChanges`, `OperationMeta`, `TransactionMetaV1`, `TransactionMetaV2`, `ContractEventType`, `ContractEvent`, `ContractEventBody`, `ContractEventV0`, `DiagnosticEvent`, `SorobanTransactionMeta`, `TransactionMetaV3`, `InvokeHostFunctionSuccessPreImage`, `TransactionMeta`, `TransactionResultMeta`, `UpgradeEntryMeta`, `LedgerCloseMetaV0`, `LedgerCloseMetaV1`, `LedgerCloseMetaV2`, `LedgerCloseMeta`, `ErrorCode`, `SError`, `SendMore`, `SendMoreExtended`, `AuthCert`, `Hello`, `Auth`, `IpAddrType`, `PeerAddress`, `PeerAddressIp`, `MessageType`, `DontHave`, `SurveyMessageCommandType`, `SurveyMessageResponseType`, `SurveyRequestMessage`, `SignedSurveyRequestMessage`, `EncryptedBody`, `SurveyResponseMessage`, `SignedSurveyResponseMessage`, `PeerStats`, `PeerStatList`, `TopologyResponseBodyV0`, `TopologyResponseBodyV1`, `SurveyResponseBody`, `TxAdvertVector`, `FloodAdvert`, `TxDemandVector`, `FloodDemand`, `StellarMessage`, `AuthenticatedMessage`, `AuthenticatedMessageV0`, `LiquidityPoolParameters`, `MuxedAccount`, `MuxedAccountMed25519`, `DecoratedSignature`, `OperationType`, `CreateAccountOp`, `PaymentOp`, `PathPaymentStrictReceiveOp`, `PathPaymentStrictSendOp`, `ManageSellOfferOp`, `ManageBuyOfferOp`, `CreatePassiveSellOfferOp`, `SetOptionsOp`, `ChangeTrustAsset`, `ChangeTrustOp`, `AllowTrustOp`, `ManageDataOp`, `BumpSequenceOp`, `CreateClaimableBalanceOp`, `ClaimClaimableBalanceOp`, `BeginSponsoringFutureReservesOp`, `RevokeSponsorshipType`, `RevokeSponsorshipOp`, `RevokeSponsorshipOpSigner`, `ClawbackOp`, `ClawbackClaimableBalanceOp`, `SetTrustLineFlagsOp`, `LiquidityPoolDepositOp`, `LiquidityPoolWithdrawOp`, `HostFunctionType`, `ContractIdPreimageType`, `ContractIdPreimage`, `ContractIdPreimageFromAddress`, `CreateContractArgs`, `InvokeContractArgs`, `HostFunction`, `SorobanAuthorizedFunctionType`, `SorobanAuthorizedFunction`, `SorobanAuthorizedInvocation`, `SorobanAddressCredentials`, `SorobanCredentialsType`, `SorobanCredentials`, `SorobanAuthorizationEntry`, `InvokeHostFunctionOp`, `BumpFootprintExpirationOp`, `RestoreFootprintOp`, `Operation`, `OperationBody`, `HashIdPreimage`, `HashIdPreimageOperationId`, `HashIdPreimageRevokeId`, `HashIdPreimageContractId`, `HashIdPreimageSorobanAuthorization`, `MemoType`, `Memo`, `TimeBounds`, `LedgerBounds`, `PreconditionsV2`, `PreconditionType`, `Preconditions`, `LedgerFootprint`, `SorobanResources`, `SorobanTransactionData`, `TransactionV0`, `TransactionV0Ext`, `TransactionV0Envelope`, `Transaction`, `TransactionExt`, `TransactionV1Envelope`, `FeeBumpTransaction`, `FeeBumpTransactionInnerTx`, `FeeBumpTransactionExt`, `FeeBumpTransactionEnvelope`, `TransactionEnvelope`, `TransactionSignaturePayload`, `TransactionSignaturePayloadTaggedTransaction`, `ClaimAtomType`, `ClaimOfferAtomV0`, `ClaimOfferAtom`, `ClaimLiquidityAtom`, `ClaimAtom`, `CreateAccountResultCode`, `CreateAccountResult`, `PaymentResultCode`, `PaymentResult`, `PathPaymentStrictReceiveResultCode`, `SimplePaymentResult`, `PathPaymentStrictReceiveResult`, `PathPaymentStrictReceiveResultSuccess`, `PathPaymentStrictSendResultCode`, `PathPaymentStrictSendResult`, `PathPaymentStrictSendResultSuccess`, `ManageSellOfferResultCode`, `ManageOfferEffect`, `ManageOfferSuccessResult`, `ManageOfferSuccessResultOffer`, `ManageSellOfferResult`, `ManageBuyOfferResultCode`, `ManageBuyOfferResult`, `SetOptionsResultCode`, `SetOptionsResult`, `ChangeTrustResultCode`, `ChangeTrustResult`, `AllowTrustResultCode`, `AllowTrustResult`, `AccountMergeResultCode`, `AccountMergeResult`, `InflationResultCode`, `InflationPayout`, `InflationResult`, `ManageDataResultCode`, `ManageDataResult`, `BumpSequenceResultCode`, `BumpSequenceResult`, `CreateClaimableBalanceResultCode`, `CreateClaimableBalanceResult`, `ClaimClaimableBalanceResultCode`, `ClaimClaimableBalanceResult`, `BeginSponsoringFutureReservesResultCode`, `BeginSponsoringFutureReservesResult`, `EndSponsoringFutureReservesResultCode`, `EndSponsoringFutureReservesResult`, `RevokeSponsorshipResultCode`, `RevokeSponsorshipResult`, `ClawbackResultCode`, `ClawbackResult`, `ClawbackClaimableBalanceResultCode`, `ClawbackClaimableBalanceResult`, `SetTrustLineFlagsResultCode`, `SetTrustLineFlagsResult`, `LiquidityPoolDepositResultCode`, `LiquidityPoolDepositResult`, `LiquidityPoolWithdrawResultCode`, `LiquidityPoolWithdrawResult`, `InvokeHostFunctionResultCode`, `InvokeHostFunctionResult`, `BumpFootprintExpirationResultCode`, `BumpFootprintExpirationResult`, `RestoreFootprintResultCode`, `RestoreFootprintResult`, `OperationResultCode`, `OperationResult`, `OperationResultTr`, `TransactionResultCode`, `InnerTransactionResult`, `InnerTransactionResultResult`, `InnerTransactionResultExt`, `InnerTransactionResultPair`, `TransactionResult`, `TransactionResultResult`, `TransactionResultExt`, `Hash`, `Uint256`, `Uint32`, `Int32`, `Uint64`, `Int64`, `TimePoint`, `Duration`, `ExtensionPoint`, `CryptoKeyType`, `PublicKeyType`, `SignerKeyType`, `PublicKey`, `SignerKey`, `SignerKeyEd25519SignedPayload`, `Signature`, `SignatureHint`, `NodeId`, `AccountId`, `Curve25519Secret`, `Curve25519Public`, `HmacSha256Key`, `HmacSha256Mac` * `--xdr ` — XDR (base64 encoded) to decode * `--output ` — Type of output