Skip to content

Commit b0ffdf1

Browse files
committed
Merge #59: Verification for option creation contract
dff4460 Add a verification that `tx` is a well-formed new issuance tx (Kyryl R) Pull request description: This PR is solving the verification for the #36 Solution described in #36 (comment) Top commit has no ACKs. Tree-SHA512: e028346121c96862111f98f77718ccc9143f0d7f29a9d73f50ae4ef313857d5088aa5100f396cd6aef5aaf7deca0f183fa96076b5156a274af740bb189989062
2 parents 3cffae8 + dff4460 commit b0ffdf1

9 files changed

Lines changed: 676 additions & 2 deletions

File tree

crates/contracts/src/array_tr_storage/build_witness.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub struct State {
1717

1818
impl State {
1919
#[must_use]
20-
pub fn new() -> Self {
20+
pub const fn new() -> Self {
2121
Self {
2222
limbs: [[0u8; 32]; MAX_VAL],
2323
}

crates/contracts/src/array_tr_storage/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ mod array_tr_storage_tests {
161161
let outpoint0 = OutPoint::new(Txid::from_slice(&[0; 32])?, 0);
162162
pst.add_input(Input::from_prevout(outpoint0));
163163
pst.add_output(Output::new_explicit(
164-
new_script_pubkey.clone(),
164+
new_script_pubkey,
165165
0,
166166
AssetId::default(),
167167
None,

crates/contracts/src/error.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ pub enum TransactionBuildError {
123123

124124
#[error(transparent)]
125125
TaprootPubkeyGen(#[from] TaprootPubkeyGenError),
126+
127+
#[error(transparent)]
128+
IssuanceValidation(#[from] crate::sdk::IssuanceVerificationError),
126129
}
127130

128131
/// Errors from extracting arguments from Arguments struct.

crates/contracts/src/sdk/finance/options/creation_option.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use crate::error::TransactionBuildError;
55

66
use crate::sdk::taproot_pubkey_gen::TaprootPubkeyGen;
77
use crate::sdk::validation::TxOutExt;
8+
use crate::sdk::{IssuanceInputConstraints, IssuanceTxConstraints, verify_issuance};
89

910
use std::collections::HashMap;
1011

@@ -154,6 +155,31 @@ pub fn build_option_creation(
154155
inp_txout_sec.insert(0, first_input_secrets);
155156
inp_txout_sec.insert(1, second_input_secrets);
156157

158+
verify_issuance(
159+
&pst.extract_tx()?,
160+
&IssuanceTxConstraints {
161+
inputs: vec![
162+
IssuanceInputConstraints {
163+
input_idx: 0,
164+
issuance_destination: None,
165+
reissuance_destination: Some((
166+
options_taproot_pubkey_gen.address.script_pubkey(),
167+
1,
168+
)),
169+
},
170+
IssuanceInputConstraints {
171+
input_idx: 1,
172+
issuance_destination: None,
173+
reissuance_destination: Some((
174+
options_taproot_pubkey_gen.address.script_pubkey(),
175+
1,
176+
)),
177+
},
178+
],
179+
allow_unconstrained_issuances: false,
180+
},
181+
)?;
182+
157183
pst.blind_last(&mut thread_rng(), secp256k1::SECP256K1, &inp_txout_sec)?;
158184

159185
pst.extract_tx()?

0 commit comments

Comments
 (0)