poseidon_client/transactions/
transaction.rs1use crate::{Message, PoseidonResult, Signature};
2use core::fmt;
3use generic_array::GenericArray;
4use serde::{Deserialize, Serialize};
5
6#[derive(PartialEq, Eq, Clone, Deserialize, Serialize)]
7pub struct Transaction {
8 #[serde(with = "short_vec")]
9 pub signatures: Vec<Signature>,
10 pub message: Message,
11}
12
13impl Transaction {
14 pub fn new(message: Message) -> Self {
15 Transaction {
16 signatures: Vec::default(),
17 message,
18 }
19 }
20
21 pub fn add_signature(&mut self, signature: [u8; 64]) -> &mut Self {
22 self.signatures
23 .push(GenericArray::clone_from_slice(&signature));
24
25 self
26 }
27
28 pub fn to_bytes(&self) -> PoseidonResult<Vec<u8>> {
29 Ok(bincode::serialize(&self)?)
30 }
31
32 pub fn to_base58(&self) -> PoseidonResult<String> {
33 let serialized_tx = bincode::serialize(&self)?;
34
35 Ok(bs58::encode(&serialized_tx).into_string())
36 }
37}
38
39impl fmt::Debug for Transaction {
40 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
41 let signatures: Vec<String> = self
42 .signatures
43 .iter()
44 .map(|signature| bs58::encode(signature).into_string())
45 .collect();
46 f.debug_struct("Transaction")
47 .field("signatures", &signatures)
48 .field("message", &self.message)
49 .finish()
50 }
51}