use did::DidSignature;
use parity_scale_codec::{Decode, Encode};
use scale_info::TypeInfo;
use sp_std::vec::Vec;
use crate::merkle_proofs::v0::output_common::RevealedDidMerkleProofLeaf;
#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, TypeInfo)]
#[cfg_attr(test, derive(Default))]
pub struct ProviderHeadStateProof<RelayBlockNumber> {
pub(crate) relay_block_number: RelayBlockNumber,
pub(crate) proof: Vec<Vec<u8>>,
}
impl<RelayBlockNumber> ProviderHeadStateProof<RelayBlockNumber> {
pub fn new(relay_block_number: RelayBlockNumber, proof: Vec<Vec<u8>>) -> Self {
Self {
proof,
relay_block_number,
}
}
}
#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, TypeInfo)]
#[cfg_attr(test, derive(Default))]
pub struct DipCommitmentStateProof(pub(crate) Vec<Vec<u8>>);
impl DipCommitmentStateProof {
pub fn new(proof: Vec<Vec<u8>>) -> Self {
Self(proof)
}
}
#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, TypeInfo)]
pub struct DidMerkleProof<
ProviderDidKeyId,
ProviderAccountId,
ProviderBlockNumber,
ProviderWeb3Name,
ProviderLinkableAccountId,
> {
pub(crate) blinded: Vec<Vec<u8>>,
pub(crate) revealed: Vec<
RevealedDidMerkleProofLeaf<
ProviderDidKeyId,
ProviderAccountId,
ProviderBlockNumber,
ProviderWeb3Name,
ProviderLinkableAccountId,
>,
>,
}
impl<ProviderDidKeyId, ProviderAccountId, ProviderBlockNumber, ProviderWeb3Name, ProviderLinkableAccountId>
DidMerkleProof<ProviderDidKeyId, ProviderAccountId, ProviderBlockNumber, ProviderWeb3Name, ProviderLinkableAccountId>
{
pub fn new(
blinded: Vec<Vec<u8>>,
revealed: Vec<
RevealedDidMerkleProofLeaf<
ProviderDidKeyId,
ProviderAccountId,
ProviderBlockNumber,
ProviderWeb3Name,
ProviderLinkableAccountId,
>,
>,
) -> Self {
Self { blinded, revealed }
}
pub fn revealed(
&self,
) -> &[RevealedDidMerkleProofLeaf<
ProviderDidKeyId,
ProviderAccountId,
ProviderBlockNumber,
ProviderWeb3Name,
ProviderLinkableAccountId,
>] {
self.revealed.as_ref()
}
}
#[cfg(test)]
impl<ProviderDidKeyId, ProviderAccountId, ProviderBlockNumber, ProviderWeb3Name, ProviderLinkableAccountId> Default
for DidMerkleProof<
ProviderDidKeyId,
ProviderAccountId,
ProviderBlockNumber,
ProviderWeb3Name,
ProviderLinkableAccountId,
> where
ProviderDidKeyId: Default,
ProviderBlockNumber: Default,
{
fn default() -> Self {
Self {
revealed: Default::default(),
blinded: Default::default(),
}
}
}
#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, TypeInfo)]
pub struct TimeBoundDidSignature<BlockNumber> {
pub(crate) signature: DidSignature,
pub(crate) valid_until: BlockNumber,
}
impl<BlockNumber> TimeBoundDidSignature<BlockNumber> {
pub fn new(signature: DidSignature, valid_until: BlockNumber) -> Self {
Self { signature, valid_until }
}
}
#[cfg(test)]
impl<BlockNumber> Default for TimeBoundDidSignature<BlockNumber>
where
BlockNumber: Default,
{
fn default() -> Self {
Self {
signature: DidSignature::Ed25519(sp_core::ed25519::Signature([0u8; 64])),
valid_until: BlockNumber::default(),
}
}
}