optimize blockchains transaction_at
This commit is contained in:
parent
d0792dff31
commit
4df096fed3
@ -117,7 +117,7 @@ pub trait BlockProvider {
|
|||||||
|
|
||||||
/// Get transaction at given address.
|
/// Get transaction at given address.
|
||||||
fn transaction_at(&self, address: &TransactionAddress) -> Option<LocalizedTransaction> {
|
fn transaction_at(&self, address: &TransactionAddress) -> Option<LocalizedTransaction> {
|
||||||
self.block(&address.block_hash).map(|bytes| BlockView::new(&bytes).localized_transactions()).and_then(|t| t.into_iter().nth(address.index))
|
self.block(&address.block_hash).and_then(|bytes| BlockView::new(&bytes).localized_transaction_at(address.index))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get a list of transactions for a given block.
|
/// Get a list of transactions for a given block.
|
||||||
|
@ -160,7 +160,7 @@ impl<'a> BlockView<'a> {
|
|||||||
let header = self.header_view();
|
let header = self.header_view();
|
||||||
let block_hash = header.sha3();
|
let block_hash = header.sha3();
|
||||||
let block_number = header.number();
|
let block_number = header.number();
|
||||||
self.rlp.val_at::<Vec<SignedTransaction>>(1)
|
self.transactions()
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(i, t)| LocalizedTransaction {
|
.map(|(i, t)| LocalizedTransaction {
|
||||||
@ -186,6 +186,24 @@ impl<'a> BlockView<'a> {
|
|||||||
self.rlp.at(1).iter().map(|rlp| rlp.as_raw().sha3()).collect()
|
self.rlp.at(1).iter().map(|rlp| rlp.as_raw().sha3()).collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns transaction at given index without deserializing unnecessary data.
|
||||||
|
pub fn transaction_at(&self, index: usize) -> Option<SignedTransaction> {
|
||||||
|
self.rlp.at(1).iter().nth(index).map(|rlp| rlp.as_val())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns localized transaction at given index.
|
||||||
|
pub fn localized_transaction_at(&self, index: usize) -> Option<LocalizedTransaction> {
|
||||||
|
let header = self.header_view();
|
||||||
|
let block_hash = header.sha3();
|
||||||
|
let block_number = header.number();
|
||||||
|
self.transaction_at(index).map(|t| LocalizedTransaction {
|
||||||
|
signed: t,
|
||||||
|
block_hash: block_hash,
|
||||||
|
block_number: block_number,
|
||||||
|
transaction_index: index
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/// Return list of uncles of given block.
|
/// Return list of uncles of given block.
|
||||||
pub fn uncles(&self) -> Vec<Header> {
|
pub fn uncles(&self) -> Vec<Header> {
|
||||||
self.rlp.val_at(2)
|
self.rlp.val_at(2)
|
||||||
|
Loading…
Reference in New Issue
Block a user