diff --git a/Cargo.lock b/Cargo.lock index 2ff9fbbd74fc6..d8ad64cc449e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5451,6 +5451,7 @@ name = "move-disassembler" version = "0.1.0" dependencies = [ "anyhow", + "bcs", "clap", "colored", "hex", diff --git a/external-crates/move/Cargo.lock b/external-crates/move/Cargo.lock index 98b4a1e7e5aed..d6297754490b3 100644 --- a/external-crates/move/Cargo.lock +++ b/external-crates/move/Cargo.lock @@ -2709,6 +2709,7 @@ name = "move-disassembler" version = "0.1.0" dependencies = [ "anyhow", + "bcs", "clap 4.4.1", "colored", "hex", diff --git a/external-crates/move/tools/move-disassembler/Cargo.toml b/external-crates/move/tools/move-disassembler/Cargo.toml index e02fcb4ddacbc..3c87cdb48336c 100644 --- a/external-crates/move/tools/move-disassembler/Cargo.toml +++ b/external-crates/move/tools/move-disassembler/Cargo.toml @@ -19,6 +19,7 @@ move-binary-format = { path = "../../move-binary-format" } move-coverage = { path = "../move-coverage" } move-compiler = { path = "../../move-compiler" } +bcs.workspace = true clap.workspace = true hex = "0.4.3" diff --git a/external-crates/move/tools/move-disassembler/src/disassembler.rs b/external-crates/move/tools/move-disassembler/src/disassembler.rs index fc3d39917f421..2f96d4fb8806d 100644 --- a/external-crates/move/tools/move-disassembler/src/disassembler.rs +++ b/external-crates/move/tools/move-disassembler/src/disassembler.rs @@ -1260,8 +1260,19 @@ impl<'a> Disassembler<'a> { constant_index: usize, Constant { type_, data }: &Constant, ) -> Result { + let data_str = match type_ { + SignatureToken::Vector(x) if x.as_ref() == &SignatureToken::U8 => { + match bcs::from_bytes::>(data) + .ok() + .and_then(|data| String::from_utf8(data).ok()) + { + Some(str) => "\"".to_owned() + &str + "\" // interpreted as UTF8 string", + None => hex::encode(data), + } + } + _ => hex::encode(data), + }; let type_str = self.disassemble_sig_tok(type_.clone(), &[])?; - let data_str = hex::encode(data); Ok(format!("\t{constant_index} => {}: {}", type_str, data_str)) }