diff --git a/Cargo.lock b/Cargo.lock
index e02396ca..e6ff320e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -7930,6 +7930,7 @@ dependencies = [
"parity-scale-codec",
"scale-info",
"serai-coins-primitives",
+ "serai-emissions-primitives",
"serai-genesis-liquidity-primitives",
"serai-in-instructions-primitives",
"serai-primitives",
@@ -8089,6 +8090,32 @@ dependencies = [
"chrono",
]
+[[package]]
+name = "serai-emissions-pallet"
+version = "0.1.0"
+dependencies = [
+ "frame-support",
+ "frame-system",
+ "parity-scale-codec",
+ "scale-info",
+ "serai-coins-pallet",
+ "serai-dex-pallet",
+ "serai-emissions-primitives",
+ "serai-genesis-liquidity-pallet",
+ "serai-primitives",
+ "serai-validator-sets-pallet",
+ "serai-validator-sets-primitives",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
+name = "serai-emissions-primitives"
+version = "0.1.0"
+dependencies = [
+ "serai-primitives",
+]
+
[[package]]
name = "serai-env"
version = "0.1.0"
@@ -8172,8 +8199,8 @@ dependencies = [
"scale-info",
"serai-coins-pallet",
"serai-dex-pallet",
+ "serai-emissions-pallet",
"serai-genesis-liquidity-pallet",
- "serai-genesis-liquidity-primitives",
"serai-in-instructions-primitives",
"serai-primitives",
"serai-validator-sets-pallet",
@@ -8442,6 +8469,7 @@ dependencies = [
"serai-abi",
"serai-coins-pallet",
"serai-dex-pallet",
+ "serai-emissions-pallet",
"serai-genesis-liquidity-pallet",
"serai-in-instructions-pallet",
"serai-primitives",
diff --git a/deny.toml b/deny.toml
index b8da5705..b10772ef 100644
--- a/deny.toml
+++ b/deny.toml
@@ -54,6 +54,7 @@ exceptions = [
{ allow = ["AGPL-3.0"], name = "serai-dex-pallet" },
{ allow = ["AGPL-3.0"], name = "serai-genesis-liquidity-pallet" },
+ { allow = ["AGPL-3.0"], name = "serai-emissions-pallet" },
{ allow = ["AGPL-3.0"], name = "serai-in-instructions-pallet" },
diff --git a/substrate/abi/Cargo.toml b/substrate/abi/Cargo.toml
index c2947aaa..072f7460 100644
--- a/substrate/abi/Cargo.toml
+++ b/substrate/abi/Cargo.toml
@@ -34,6 +34,7 @@ serai-primitives = { path = "../primitives", version = "0.1", default-features =
serai-coins-primitives = { path = "../coins/primitives", version = "0.1", default-features = false }
serai-validator-sets-primitives = { path = "../validator-sets/primitives", version = "0.1", default-features = false }
serai-genesis-liquidity-primitives = { path = "../genesis-liquidity/primitives", version = "0.1", default-features = false }
+serai-emissions-primitives = { path = "../emissions/primitives", version = "0.1", default-features = false }
serai-in-instructions-primitives = { path = "../in-instructions/primitives", version = "0.1", default-features = false }
serai-signals-primitives = { path = "../signals/primitives", version = "0.1", default-features = false }
@@ -57,6 +58,7 @@ std = [
"serai-coins-primitives/std",
"serai-validator-sets-primitives/std",
"serai-genesis-liquidity-primitives/std",
+ "serai-emissions-primitives/std",
"serai-in-instructions-primitives/std",
"serai-signals-primitives/std",
]
diff --git a/substrate/abi/src/emissions.rs b/substrate/abi/src/emissions.rs
new file mode 100644
index 00000000..ff948f5f
--- /dev/null
+++ b/substrate/abi/src/emissions.rs
@@ -0,0 +1 @@
+pub use serai_emissions_primitives as primitives;
diff --git a/substrate/abi/src/lib.rs b/substrate/abi/src/lib.rs
index ac8b8824..c45a8935 100644
--- a/substrate/abi/src/lib.rs
+++ b/substrate/abi/src/lib.rs
@@ -16,10 +16,13 @@ pub mod liquidity_tokens;
pub mod dex;
pub mod validator_sets;
-pub mod in_instructions;
-pub mod signals;
pub mod genesis_liquidity;
+pub mod emissions;
+
+pub mod in_instructions;
+
+pub mod signals;
pub mod babe;
pub mod grandpa;
@@ -32,8 +35,8 @@ pub enum Call {
Coins(coins::Call),
LiquidityTokens(liquidity_tokens::Call),
Dex(dex::Call),
- GenesisLiquidity(genesis_liquidity::Call),
ValidatorSets(validator_sets::Call),
+ GenesisLiquidity(genesis_liquidity::Call),
InInstructions(in_instructions::Call),
Signals(signals::Call),
Babe(babe::Call),
@@ -54,8 +57,9 @@ pub enum Event {
Coins(coins::Event),
LiquidityTokens(liquidity_tokens::Event),
Dex(dex::Event),
- GenesisLiquidity(genesis_liquidity::Event),
ValidatorSets(validator_sets::Event),
+ GenesisLiquidity(genesis_liquidity::Event),
+ Emissions,
InInstructions(in_instructions::Event),
Signals(signals::Event),
Babe,
diff --git a/substrate/client/src/serai/dex.rs b/substrate/client/src/serai/dex.rs
index d9edc56b..ea76e625 100644
--- a/substrate/client/src/serai/dex.rs
+++ b/substrate/client/src/serai/dex.rs
@@ -1,12 +1,12 @@
use sp_core::bounded_vec::BoundedVec;
use serai_abi::primitives::{SeraiAddress, Amount, Coin};
-use scale::{decode_from_bytes, Encode};
-
-use crate::{Serai, SeraiError, TemporalSerai};
+use crate::{SeraiError, TemporalSerai};
pub type DexEvent = serai_abi::dex::Event;
+const PALLET: &str = "Dex";
+
#[derive(Clone, Copy)]
pub struct SeraiDex<'a>(pub(crate) &'a TemporalSerai<'a>);
impl<'a> SeraiDex<'a> {
@@ -62,17 +62,10 @@ impl<'a> SeraiDex<'a> {
/// Returns the reserves of `coin:SRI` pool.
pub async fn get_reserves(&self, coin: Coin) -> Result