mod tx;
mod txout;
mod spk;
use bc::Tx;
use commit_verify::mpc::Commitment;
use commit_verify::{CommitmentProtocol, EmbedCommitVerify, EmbedVerifyError};
use strict_encoding::{StrictDeserialize, StrictSerialize};
use crate::proof::Method;
use crate::{Proof, LIB_NAME_BPCORE};
pub enum OpretFirst {}
impl CommitmentProtocol for OpretFirst {}
#[derive(Clone, Eq, PartialEq, Debug, Display, Error, From)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "camelCase"))]
#[display(doc_comments)]
pub enum OpretError {
NoOpretOutput,
InvalidOpretScript,
}
#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Default)]
#[derive(StrictType, StrictEncode, StrictDecode)]
#[strict_type(lib = LIB_NAME_BPCORE)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "camelCase"))]
pub struct OpretProof(());
impl StrictSerialize for OpretProof {}
impl StrictDeserialize for OpretProof {}
impl Proof for OpretProof {
type Error = EmbedVerifyError<OpretError>;
const METHOD: Method = Method::OpretFirst;
fn verify(&self, msg: &Commitment, tx: &Tx) -> Result<(), EmbedVerifyError<OpretError>> {
tx.verify(msg, self)
}
}