difftreelog
perf do not submit eth transactions with no logs
in: master
2 files changed
pallets/nft/src/eth/log.rsdiffbeforeafterboth1use pallet_evm::PrecompileLog;2use sp_std::cell::RefCell;3use sp_std::vec::Vec;4use sp_core::{H160, H256};56#[derive(Default)]7pub struct LogRecorder(RefCell<Vec<(Vec<H256>, Vec<u8>)>>);89impl LogRecorder {10 pub fn log(&self, topics: Vec<H256>, data: super::abi::AbiWriter) {11 self.0.borrow_mut().push((topics, data.finish()));12 }13 fn retrieve_logs(self) -> Vec<(Vec<H256>, Vec<u8>)> {14 self.0.replace(Vec::new())15 }16 pub fn retrieve_logs_for_contract(self, contract: H160) -> Vec<PrecompileLog> {17 // TODO: Remove reallocation18 self.retrieve_logs().into_iter()19 .map(|(topics, data)| PrecompileLog(contract.clone(), topics, data))20 .collect()21 }22}23impl Drop for LogRecorder {24 fn drop(&mut self) {25 #[cfg(feature = "std")]26 {27 // In debug mode, log recorder panics if dropped with logs left28 let logs = self.0.borrow();29 if !logs.is_empty() {30 eprintln!("Logs lost:");31 for line in logs.iter() {32 eprintln!("{:?} {:?}", line.0, line.1);33 }34 panic!();35 }36 }37 }38}pallets/nft/src/lib.rsdiffbeforeafterboth--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -2204,6 +2204,9 @@
}
fn submit_logs(collection: CollectionHandle<T>) -> DispatchResult {
+ if collection.logs.is_empty() {
+ return Ok(())
+ }
T::EthereumTransactionSender::submit_logs_transaction(
eth::generate_transaction(collection.id, T::EthereumChainId::get()),
collection.logs.retrieve_logs_for_contract(eth::collection_id_to_address(collection.id)),