diff --git a/src/helper/p2pool.rs b/src/helper/p2pool.rs index 9d2d6f4..88c0e33 100644 --- a/src/helper/p2pool.rs +++ b/src/helper/p2pool.rs @@ -843,17 +843,26 @@ impl PubP2poolApi { let (payouts_new, xmr_new) = Self::calc_payouts_and_xmr(&output_parse); // Check for "SYNCHRONIZED" only if we aren't already. if process.state == ProcessState::Syncing { - // look for depth 0 + // How many times the word was captured. + let synchronized_captures = P2POOL_REGEX.synchronized.find_iter(&output_parse).count(); - if P2POOL_REGEX.depth_0.is_match(&output_parse) { + // If P2Pool receives shares before syncing, it will start mining on its own sidechain. + // In this instance, we technically are "synced" on block 1 and P2Pool will print "SYNCHRONIZED" + // although, that doesn't necessarily mean we're synced on main/mini-chain. + // + // So, if we find a `next block = 1`, that means we + // must look for at least 2 instances of "SYNCHRONIZED", + // one for the sidechain, one for main/mini. + if P2POOL_REGEX.next_height_1.is_match(&output_parse) { + if synchronized_captures > 1 { + process.state = ProcessState::Alive; + } + } else if synchronized_captures > 0 { + // if there is no `next block = 1`, fallback to + // just finding 1 instance of "SYNCHRONIZED". process.state = ProcessState::Alive; } } - // check if zmq server still alive - if process.state == ProcessState::Alive && contains_zmq_connection_lost(&output_parse) { - // node zmq is not responding, p2pool is not ready - process.state = ProcessState::Syncing; - } // 3. Throw away [output_parse] output_parse.clear(); diff --git a/src/utils/regex.rs b/src/utils/regex.rs index 19f1ab6..0b07c73 100644 --- a/src/utils/regex.rs +++ b/src/utils/regex.rs @@ -90,7 +90,8 @@ pub struct P2poolRegex { pub block: Regex, pub block_int: Regex, pub block_comma: Regex, - pub depth_0: Regex, + pub synchronized: Regex, + pub next_height_1: Regex, } impl P2poolRegex { @@ -104,7 +105,8 @@ impl P2poolRegex { block: Regex::new("block [0-9]{7}").unwrap(), // Monero blocks will be 7 digits for... the next 10,379 years block_int: Regex::new("[0-9]{7}").unwrap(), block_comma: Regex::new("[0-9],[0-9]{3},[0-9]{3}").unwrap(), - depth_0: Regex::new("depth = 0").unwrap(), + synchronized: Regex::new("SYNCHRONIZED").unwrap(), + next_height_1: Regex::new("next height = 1").unwrap(), } } } @@ -297,6 +299,7 @@ mod test { assert_eq!(r.block.find(text).unwrap().as_str(), "block 1111111"); assert_eq!(r.block_int.find(text).unwrap().as_str(), "1111111"); assert_eq!(r.block_comma.find(text2).unwrap().as_str(), "1,111,111"); + assert_eq!(r.synchronized.find(text3).unwrap().as_str(), "SYNCHRONIZED"); } #[test]