jam-std-common 0.1.16

Common datatypes and utilities for the JAM nodes and tooling
Documentation
use jam_types::FixedVec;
use scale::{ConstEncodedLen, Decode, Encode, MaxEncodedLen};

use crate::{bandersnatch, ed25519, PeerAddr, PeerDetails, PeerId};

#[derive(Copy, Clone, Eq, PartialEq, Encode, Decode, MaxEncodedLen)]
pub struct ValidatorMetadata {
	pub addr: PeerAddr,
	pub rest1: [u8; 14],
	pub rest2: [u32; 24],
}
impl ConstEncodedLen for ValidatorMetadata {}

impl Default for ValidatorMetadata {
	fn default() -> Self {
		Self {
			addr: PeerAddr { ip: Default::default(), port: 0 },
			rest1: Default::default(),
			rest2: Default::default(),
		}
	}
}

impl std::fmt::Debug for ValidatorMetadata {
	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
		write!(f, "{}", self.addr)
	}
}

/// BLS Placeholder
pub mod bls {
	use scale::{Decode, Encode, MaxEncodedLen};

	pub const BLS_PUBLIC_SERIALIZED_LEN: usize = 144;

	#[derive(Copy, Clone, Encode, Decode, Debug, Eq, PartialEq, MaxEncodedLen)]
	pub struct Public([u8; BLS_PUBLIC_SERIALIZED_LEN]);

	impl Default for Public {
		fn default() -> Self {
			Public([0u8; BLS_PUBLIC_SERIALIZED_LEN])
		}
	}
}

#[derive(Copy, Clone, Encode, Decode, Debug, Eq, PartialEq, MaxEncodedLen, Default)]
pub struct ValKeyset {
	pub bandersnatch: bandersnatch::Public,
	pub ed25519: ed25519::Public,
	pub bls: bls::Public,
	pub metadata: ValidatorMetadata,
}

impl From<&ValKeyset> for PeerDetails {
	fn from(keyset: &ValKeyset) -> PeerDetails {
		PeerDetails { id: PeerId(keyset.ed25519), addr: keyset.metadata.addr }
	}
}

pub type ValKeysets = FixedVec<ValKeyset, jam_types::ValCount>;
pub type EdKeys = FixedVec<ed25519::Public, jam_types::ValCount>;

pub struct SecretKeyset {
	pub bandersnatch: bandersnatch::Secret,
	pub ed25519: ed25519::Secret,
}

impl SecretKeyset {
	pub fn public(&self, metadata: ValidatorMetadata) -> ValKeyset {
		ValKeyset {
			ed25519: self.ed25519.public(),
			bandersnatch: self.bandersnatch.public(),
			bls: bls::Public::default(),
			metadata,
		}
	}
}