use bc::Tx;
use commit_verify::mpc::Commitment;
use commit_verify::{EmbedCommitProof, EmbedCommitVerify, EmbedVerifyError};
use super::{OpretError, OpretFirst, OpretProof};
impl EmbedCommitProof<Commitment, Tx, OpretFirst> for OpretProof {
fn restore_original_container(
&self,
commit_container: &Tx,
) -> Result<Tx, EmbedVerifyError<OpretError>> {
let mut tx = commit_container.clone();
for txout in &mut tx.outputs {
if txout.script_pubkey.is_op_return() {
*txout = self.restore_original_container(txout)?;
return Ok(tx);
}
}
Err(OpretError::NoOpretOutput.into())
}
}
impl EmbedCommitVerify<Commitment, OpretFirst> for Tx {
type Proof = OpretProof;
type CommitError = OpretError;
fn embed_commit(&mut self, msg: &Commitment) -> Result<Self::Proof, Self::CommitError> {
for txout in &mut self.outputs {
if txout.script_pubkey.is_op_return() {
return txout.script_pubkey.embed_commit(msg);
}
}
Err(OpretError::NoOpretOutput)
}
}