Skip to content

Commit 8328a6a

Browse files
committed
feat: Transact with pruned program
Prune the Simplicity target code before making a transaction. This means that all transactions that the web IDE makes should now work on Elements.
1 parent 52d073e commit 8328a6a

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

src/components/program_window/transaction_button.rs

+15-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use elements::pset::serialize::Serialize;
22
use hex_conservative::DisplayHex;
3-
use leptos::{component, use_context, view, IntoView, SignalWith};
3+
use leptos::{component, use_context, view, with, IntoView};
44
use simfony::elements;
55

66
use crate::components::copy_to_clipboard::CopyToClipboard;
@@ -13,12 +13,21 @@ pub fn TransactionButton() -> impl IntoView {
1313
let tx_env = use_context::<TxEnv>().expect("transaction environment should exist in context");
1414

1515
let transaction = move || {
16-
tx_env.params.with(|params| match program.satisfied() {
17-
Ok(satisfied) => params
18-
.transaction(&satisfied)
16+
let params = tx_env.params;
17+
let env = tx_env.lazy_env;
18+
with!(|params, env| {
19+
let satisfied = match program.satisfied() {
20+
Ok(x) => x,
21+
Err(..) => return "Invalid program".to_string(),
22+
};
23+
let pruned = match satisfied.redeem().prune(env) {
24+
Ok(x) => x,
25+
Err(..) => return "Execution fails".to_string(),
26+
};
27+
params
28+
.transaction(&pruned)
1929
.serialize()
20-
.to_lower_hex_string(),
21-
Err(..) => "Invalid program".to_string(),
30+
.to_lower_hex_string()
2231
})
2332
};
2433
view! {

src/transaction.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ use std::sync::Arc;
22

33
use elements::confidential;
44
use elements::hashes::Hash;
5-
use simfony::{elements, simplicity, SatisfiedProgram};
5+
use simfony::simplicity::jet::Elements;
6+
use simfony::simplicity::RedeemNode;
7+
use simfony::{elements, simplicity};
68
use simplicity::jet::elements::{ElementsEnv, ElementsUtxo};
79

810
use crate::util;
@@ -88,11 +90,10 @@ impl TxParams {
8890
)
8991
}
9092

91-
pub fn transaction(&self, satisfied: &SatisfiedProgram) -> elements::Transaction {
93+
pub fn transaction(&self, pruned: &RedeemNode<Elements>) -> elements::Transaction {
9294
let mut tx = self.unsatisfied_transaction();
93-
let (simplicity_program_bytes, simplicity_witness_bytes) =
94-
satisfied.redeem().encode_to_vec();
95-
let cmr = satisfied.redeem().cmr();
95+
let (simplicity_program_bytes, simplicity_witness_bytes) = pruned.encode_to_vec();
96+
let cmr = pruned.cmr();
9697
tx.input[0].witness = elements::TxInWitness {
9798
amount_rangeproof: None,
9899
inflation_keys_rangeproof: None,

0 commit comments

Comments
 (0)