use crate::{Script, Serializable};
use std::convert::TryInto;
pub struct TxIn {
pub prev_hash: Vec<u8>,
pub prev_idx: u32,
pub script_sig: Script,
pub seq_no: u32,
}
impl TxIn {
pub fn deserialize_outpoint(cur: &mut [u8]) -> (TxIn, &mut [u8]) {
let (prev_hash, cur) = cur.split_at_mut(32);
let (prev_idx_bytes, cur) = cur.split_at_mut(4);
let txin = TxIn {
prev_hash: prev_hash.to_vec(),
prev_idx: u32::from_le_bytes((*prev_idx_bytes).try_into().unwrap()),
script_sig: Script::new(),
seq_no: 0,
};
return (txin, cur);
}
pub fn get_outpoint(&self) -> Vec<u8> {
let mut outpoint: Vec<u8> = vec![];
outpoint.extend(self.prev_hash.to_vec());
outpoint.extend(self.prev_idx.to_le_bytes().to_vec());
return outpoint;
}
pub fn get_seq_no(&self) -> Vec<u8> {
return self.seq_no.to_le_bytes().to_vec();
}
}
impl Serializable<TxIn> for TxIn {
fn serialize(&self) -> Vec<u8> {
panic!("Unimplemented!!");
}
fn deserialize(cur: &mut [u8]) -> (TxIn, &mut [u8]) {
let (mut txin, cur) = Self::deserialize_outpoint(cur);
let (script, cur) = Script::deserialize(cur);
let (seq_no_bytes, cur) = cur.split_at_mut(4);
txin.script_sig = script;
txin.seq_no = u32::from_le_bytes((*seq_no_bytes).try_into().unwrap());
return (txin, cur);
}
}