Add EncodedTransaction::Raw

This commit is contained in:
Michael Vines
2020-07-10 10:52:45 -07:00
parent dce7739b75
commit 60b1bcddb5

View File

@@ -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()),
} }
} }
} }