use alloc::{fmt, vec::Vec};
use binary_sv2::{self, Deserialize, Serialize, Str0255, B032};
use core::convert::TryInto;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SubmitSharesStandard {
pub channel_id: u32,
pub sequence_number: u32,
pub job_id: u32,
pub nonce: u32,
pub ntime: u32,
pub version: u32,
}
impl fmt::Display for SubmitSharesStandard {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"SubmitSharesStandard(channel_id={}, sequence_number={}, job_id={}, nonce=0x{:08x}, ntime={}, version=0x{:08x})",
self.channel_id, self.sequence_number, self.job_id, self.nonce, self.ntime, self.version
)
}
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SubmitSharesExtended<'decoder> {
pub channel_id: u32,
pub sequence_number: u32,
pub job_id: u32,
pub nonce: u32,
pub ntime: u32,
pub version: u32,
pub extranonce: B032<'decoder>,
}
impl fmt::Display for SubmitSharesExtended<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"SubmitSharesExtended(channel_id={}, sequence_number={}, job_id={}, nonce=0x{:08x}, ntime={}, version=0x{:08x}, extranonce={})",
self.channel_id, self.sequence_number, self.job_id, self.nonce, self.ntime, self.version, self.extranonce
)
}
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SubmitSharesSuccess {
pub channel_id: u32,
pub last_sequence_number: u32,
pub new_submits_accepted_count: u32,
pub new_shares_sum: u64,
}
impl fmt::Display for SubmitSharesSuccess {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"SubmitSharesSuccess(channel_id={}, last_sequence_number={}, new_submits_accepted_count={}, new_shares_sum={})",
self.channel_id, self.last_sequence_number, self.new_submits_accepted_count, self.new_shares_sum
)
}
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SubmitSharesError<'decoder> {
pub channel_id: u32,
pub sequence_number: u32,
pub error_code: Str0255<'decoder>,
}
impl fmt::Display for SubmitSharesError<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"SubmitSharesError(channel_id={}, sequence_number={}, error_code={})",
self.channel_id,
self.sequence_number,
self.error_code.as_utf8_or_hex()
)
}
}
impl SubmitSharesError<'_> {
pub fn invalid_channel_error_code() -> &'static str {
"invalid-channel-id"
}
pub fn stale_share_error_code() -> &'static str {
"stale-share"
}
pub fn difficulty_too_low_error_code() -> &'static str {
"difficulty-too-low"
}
pub fn invalid_job_id_error_code() -> &'static str {
"invalid-job-id"
}
}