Add EncodedTransaction::Raw
This commit is contained in:
@@ -132,6 +132,8 @@ pub struct TransactionWithStatusMeta {
|
|||||||
pub enum TransactionEncoding {
|
pub enum TransactionEncoding {
|
||||||
Binary,
|
Binary,
|
||||||
Json,
|
Json,
|
||||||
|
JsonParsed, // same as Json in 1.1
|
||||||
|
Raw,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||||
@@ -139,42 +141,45 @@ pub enum TransactionEncoding {
|
|||||||
pub enum EncodedTransaction {
|
pub enum EncodedTransaction {
|
||||||
Binary(String),
|
Binary(String),
|
||||||
Json(RpcTransaction),
|
Json(RpcTransaction),
|
||||||
|
Raw(Transaction),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EncodedTransaction {
|
impl EncodedTransaction {
|
||||||
pub fn encode(transaction: Transaction, encoding: TransactionEncoding) -> Self {
|
pub fn encode(transaction: Transaction, encoding: TransactionEncoding) -> Self {
|
||||||
if encoding == TransactionEncoding::Json {
|
match encoding {
|
||||||
EncodedTransaction::Json(RpcTransaction {
|
TransactionEncoding::Json | TransactionEncoding::JsonParsed => {
|
||||||
signatures: transaction
|
EncodedTransaction::Json(RpcTransaction {
|
||||||
.signatures
|
signatures: transaction
|
||||||
.iter()
|
.signatures
|
||||||
.map(|sig| sig.to_string())
|
|
||||||
.collect(),
|
|
||||||
message: RpcMessage {
|
|
||||||
header: transaction.message.header,
|
|
||||||
account_keys: transaction
|
|
||||||
.message
|
|
||||||
.account_keys
|
|
||||||
.iter()
|
.iter()
|
||||||
.map(|pubkey| pubkey.to_string())
|
.map(|sig| sig.to_string())
|
||||||
.collect(),
|
.collect(),
|
||||||
recent_blockhash: transaction.message.recent_blockhash.to_string(),
|
message: RpcMessage {
|
||||||
instructions: transaction
|
header: transaction.message.header,
|
||||||
.message
|
account_keys: transaction
|
||||||
.instructions
|
.message
|
||||||
.iter()
|
.account_keys
|
||||||
.map(|instruction| RpcCompiledInstruction {
|
.iter()
|
||||||
program_id_index: instruction.program_id_index,
|
.map(|pubkey| pubkey.to_string())
|
||||||
accounts: instruction.accounts.clone(),
|
.collect(),
|
||||||
data: bs58::encode(instruction.data.clone()).into_string(),
|
recent_blockhash: transaction.message.recent_blockhash.to_string(),
|
||||||
})
|
instructions: transaction
|
||||||
.collect(),
|
.message
|
||||||
},
|
.instructions
|
||||||
})
|
.iter()
|
||||||
} else {
|
.map(|instruction| RpcCompiledInstruction {
|
||||||
EncodedTransaction::Binary(
|
program_id_index: instruction.program_id_index,
|
||||||
|
accounts: instruction.accounts.clone(),
|
||||||
|
data: bs58::encode(instruction.data.clone()).into_string(),
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
TransactionEncoding::Binary => EncodedTransaction::Binary(
|
||||||
bs58::encode(bincode::serialize(&transaction).unwrap()).into_string(),
|
bs58::encode(bincode::serialize(&transaction).unwrap()).into_string(),
|
||||||
)
|
),
|
||||||
|
TransactionEncoding::Raw => EncodedTransaction::Raw(transaction),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn decode(&self) -> Option<Transaction> {
|
pub fn decode(&self) -> Option<Transaction> {
|
||||||
@@ -184,6 +189,7 @@ impl EncodedTransaction {
|
|||||||
.into_vec()
|
.into_vec()
|
||||||
.ok()
|
.ok()
|
||||||
.and_then(|bytes| bincode::deserialize(&bytes).ok()),
|
.and_then(|bytes| bincode::deserialize(&bytes).ok()),
|
||||||
|
EncodedTransaction::Raw(transaction) => Some(transaction.clone()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user