From f3f377f5ec7009036a33a822fdbb8439ca696ca7 Mon Sep 17 00:00:00 2001
From: PG Herveou <pgherveou@gmail.com>
Date: Mon, 9 Sep 2024 22:25:42 +0200
Subject: [PATCH] [pallet-revive] move event topics in event's body (#5640)

Fix https://github.com/paritytech/polkadot-sdk/issues/5629
---
 prdoc/pr_5640.prdoc                            | 10 ++++++++++
 substrate/frame/revive/src/benchmarking/mod.rs |  6 +-----
 substrate/frame/revive/src/exec.rs             | 10 ++++------
 substrate/frame/revive/src/lib.rs              | 11 +++--------
 substrate/frame/revive/src/tests.rs            |  5 +++--
 5 files changed, 21 insertions(+), 21 deletions(-)
 create mode 100644 prdoc/pr_5640.prdoc

diff --git a/prdoc/pr_5640.prdoc b/prdoc/pr_5640.prdoc
new file mode 100644
index 00000000000..fdd7f5e1b89
--- /dev/null
+++ b/prdoc/pr_5640.prdoc
@@ -0,0 +1,10 @@
+title:  "[pallet-revive] Move event's topics" 
+
+doc:
+  - audience: Runtime Dev
+    description: |
+     Move event's topics inside body
+
+crates:
+  - name: pallet-revive
+    bump: major
diff --git a/substrate/frame/revive/src/benchmarking/mod.rs b/substrate/frame/revive/src/benchmarking/mod.rs
index 8cdd7da5db9..8601f5f5354 100644
--- a/substrate/frame/revive/src/benchmarking/mod.rs
+++ b/substrate/frame/revive/src/benchmarking/mod.rs
@@ -772,11 +772,7 @@ mod benchmarks {
 
 		assert_eq!(
 			record.event,
-			crate::Event::ContractEmitted { contract: instance.address(), data }.into(),
-		);
-		assert_eq!(
-			record.topics.iter().map(|t| H256::from_slice(t.as_ref())).collect::<Vec<_>>(),
-			topics,
+			crate::Event::ContractEmitted { contract: instance.address(), data, topics }.into(),
 		);
 	}
 
diff --git a/substrate/frame/revive/src/exec.rs b/substrate/frame/revive/src/exec.rs
index 016bdec37af..468f5aa8240 100644
--- a/substrate/frame/revive/src/exec.rs
+++ b/substrate/frame/revive/src/exec.rs
@@ -1487,13 +1487,11 @@ where
 	}
 
 	fn deposit_event(&mut self, topics: Vec<H256>, data: Vec<u8>) {
-		Contracts::<Self::T>::deposit_indexed_event(
+		Contracts::<Self::T>::deposit_event(Event::ContractEmitted {
+			contract: T::AddressMapper::to_address(self.account_id()),
+			data,
 			topics,
-			Event::ContractEmitted {
-				contract: T::AddressMapper::to_address(self.account_id()),
-				data,
-			},
-		);
+		});
 	}
 
 	fn block_number(&self) -> U256 {
diff --git a/substrate/frame/revive/src/lib.rs b/substrate/frame/revive/src/lib.rs
index 4c6e5cd26a1..d1e17fb7b39 100644
--- a/substrate/frame/revive/src/lib.rs
+++ b/substrate/frame/revive/src/lib.rs
@@ -406,6 +406,9 @@ pub mod pallet {
 			/// Data supplied by the contract. Metadata generated during contract compilation
 			/// is needed to decode it.
 			data: Vec<u8>,
+			/// A list of topics used to index the event.
+			/// Number of topics is capped by [`limits::NUM_EVENT_TOPICS`].
+			topics: Vec<H256>,
 		},
 
 		/// A code with the specified hash was removed.
@@ -1186,14 +1189,6 @@ where
 	fn deposit_event(event: Event<T>) {
 		<frame_system::Pallet<T>>::deposit_event(<T as Config>::RuntimeEvent::from(event))
 	}
-
-	/// Deposit a pallet contracts indexed event.
-	fn deposit_indexed_event(topics: Vec<H256>, event: Event<T>) {
-		<frame_system::Pallet<T>>::deposit_event_indexed(
-			&topics.into_iter().map(Into::into).collect::<Vec<_>>(),
-			<T as Config>::RuntimeEvent::from(event).into(),
-		)
-	}
 }
 
 // Set up a global reference to the boolean flag used for the re-entrancy guard.
diff --git a/substrate/frame/revive/src/tests.rs b/substrate/frame/revive/src/tests.rs
index f2944c7932a..73914c9aae0 100644
--- a/substrate/frame/revive/src/tests.rs
+++ b/substrate/frame/revive/src/tests.rs
@@ -678,9 +678,10 @@ mod run_tests {
 						phase: Phase::Initialization,
 						event: RuntimeEvent::Contracts(crate::Event::ContractEmitted {
 							contract: addr,
-							data: vec![1, 2, 3, 4]
+							data: vec![1, 2, 3, 4],
+							topics: vec![H256::repeat_byte(42)],
 						}),
-						topics: vec![H256::repeat_byte(42)],
+						topics: vec![],
 					},
 					EventRecord {
 						phase: Phase::Initialization,
-- 
GitLab