mod tx;
mod txout;
mod spk;
use bitcoin::Transaction as Tx;
use strict_encoding::{DefaultBasedStrictDumb, StrictDeserialize, StrictSerialize};
use crate::commit_verify::mpc::Commitment;
use crate::commit_verify::{CommitmentProtocol, EmbedCommitVerify, EmbedVerifyError};
use crate::dbc::proof::Method;
use crate::dbc::Proof;
use crate::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(crate = "serde_crate", 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(crate = "serde_crate", rename_all = "camelCase")
)]
pub struct OpretProof(());
impl DefaultBasedStrictDumb for OpretProof {}
impl StrictSerialize for OpretProof {}
impl StrictDeserialize for OpretProof {}
impl Proof<Method> for OpretProof {
type Error = EmbedVerifyError<OpretError>;
fn method(&self) -> Method { Method::OpretFirst }
fn verify(&self, msg: &Commitment, tx: &Tx) -> Result<(), EmbedVerifyError<OpretError>> {
<Tx as EmbedCommitVerify<Commitment, OpretFirst>>::verify(tx, msg, self)
}
}