From 5c683bbab68cc72ef810e4830256be450a26ee47 Mon Sep 17 00:00:00 2001 From: Peter Zhang Date: Fri, 30 Jan 2026 23:12:05 +0800 Subject: [PATCH 1/2] bounded channel for mem control --- node/miner/src/mine.rs | 9 ++++----- node/miner/src/submitter.rs | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/node/miner/src/mine.rs b/node/miner/src/mine.rs index 4c192cc1..25f7684d 100644 --- a/node/miner/src/mine.rs +++ b/node/miner/src/mine.rs @@ -20,7 +20,7 @@ use std::sync::Arc; pub struct PoraService { mine_context_receiver: broadcast::Receiver, - mine_answer_sender: mpsc::UnboundedSender, + mine_answer_sender: mpsc::Sender, msg_recv: broadcast::Receiver, loader: Arc, @@ -123,9 +123,8 @@ impl PoraService { loader: Arc, config: &MinerConfig, miner_id: H256, - ) -> mpsc::UnboundedReceiver { - let (mine_answer_sender, mine_answer_receiver) = - mpsc::unbounded_channel::(); + ) -> mpsc::Receiver { + let (mine_answer_sender, mine_answer_receiver) = mpsc::channel::(20); let mine_range = MineRangeConfig { start_position: Some(0), end_position: Some(u64::MAX), @@ -218,7 +217,7 @@ impl PoraService { if let Some(answer) = miner.batch_iteration(nonce, self.iter_batch).await { info!("Hit Pora answer {:?}", answer); - if self.mine_answer_sender.send(answer).is_err() { + if self.mine_answer_sender.send(answer).await.is_err() { warn!("Mine submitter channel closed"); } } else if cpu_percent < 100 { diff --git a/node/miner/src/submitter.rs b/node/miner/src/submitter.rs index 99251b1f..ef55731c 100644 --- a/node/miner/src/submitter.rs +++ b/node/miner/src/submitter.rs @@ -18,7 +18,7 @@ use crate::watcher::MineContextMessage; use zgs_spec::{BYTES_PER_SEAL, SECTORS_PER_SEAL}; pub struct Submitter { - mine_answer_receiver: mpsc::UnboundedReceiver, + mine_answer_receiver: mpsc::Receiver, mine_context_receiver: broadcast::Receiver, mine_contract: PoraMine, flow_contract: ZgsFlow>>, @@ -29,7 +29,7 @@ pub struct Submitter { impl Submitter { pub fn spawn( executor: TaskExecutor, - mine_answer_receiver: mpsc::UnboundedReceiver, + mine_answer_receiver: mpsc::Receiver, mine_context_receiver: broadcast::Receiver, provider: Arc>>, signing_provider: Arc, From 7c4f8ca4be2807cd89de09f8b8dbab12672c0d48 Mon Sep 17 00:00:00 2001 From: Peter Zhang Date: Mon, 2 Feb 2026 10:41:56 +0800 Subject: [PATCH 2/2] make constant --- node/miner/src/mine.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/node/miner/src/mine.rs b/node/miner/src/mine.rs index 25f7684d..b73a7074 100644 --- a/node/miner/src/mine.rs +++ b/node/miner/src/mine.rs @@ -18,6 +18,8 @@ use crate::{ use std::sync::Arc; +const MINE_ANSWER_CHANNEL_CAPACITY: usize = 20; + pub struct PoraService { mine_context_receiver: broadcast::Receiver, mine_answer_sender: mpsc::Sender, @@ -124,7 +126,8 @@ impl PoraService { config: &MinerConfig, miner_id: H256, ) -> mpsc::Receiver { - let (mine_answer_sender, mine_answer_receiver) = mpsc::channel::(20); + let (mine_answer_sender, mine_answer_receiver) = + mpsc::channel::(MINE_ANSWER_CHANNEL_CAPACITY); let mine_range = MineRangeConfig { start_position: Some(0), end_position: Some(u64::MAX),