diff --git a/crates/rooch-types/src/transaction/rooch.rs b/crates/rooch-types/src/transaction/rooch.rs index e546d9546..5ea51c78a 100644 --- a/crates/rooch-types/src/transaction/rooch.rs +++ b/crates/rooch-types/src/transaction/rooch.rs @@ -118,6 +118,10 @@ impl PartiallySignedRoochTransaction { self.data.sender } + pub fn signatories(&self) -> usize { + self.authenticators.len() + } + pub fn contains_authenticator(&self, authenticator: &BitcoinAuthenticator) -> bool { self.authenticators .iter() diff --git a/crates/rooch/src/commands/transaction/commands/mod.rs b/crates/rooch/src/commands/transaction/commands/mod.rs index a1b3891a0..b1fbb5af2 100644 --- a/crates/rooch/src/commands/transaction/commands/mod.rs +++ b/crates/rooch/src/commands/transaction/commands/mod.rs @@ -31,6 +31,14 @@ impl FileOutputData { } } + pub fn file_signatory_suffix(&self) -> String { + match self { + FileOutputData::RoochTransactionData(data) => data.sender.to_bech32(), + FileOutputData::SignedRoochTransaction(data) => data.sender().to_bech32(), + FileOutputData::PartiallySignedRoochTransaction(data) => data.signatories().to_string(), + } + } + pub fn file_suffix(&self) -> &str { match self { FileOutputData::RoochTransactionData(_) => "rtd", @@ -50,7 +58,12 @@ impl FileOutputData { pub fn default_output_file_path(&self) -> Result { let temp_dir = env::temp_dir(); let tx_hash = self.tx_hash(); - let file_name = format!("{}.{}", hex::encode(&tx_hash[..8]), self.file_suffix()); + let file_name = format!( + "{}.{}.{}", + hex::encode(&tx_hash[..8]), + self.file_signatory_suffix(), + self.file_suffix() + ); Ok(temp_dir.join(file_name)) } }