Browse Source

Optimize miniscript by combining the full expression

bdk-0.11
Philipp Hoenisch 3 years ago
committed by Lucas Soriano del Pino
parent
commit
f70e192ea6
No known key found for this signature in database GPG Key ID: EE611E973A1530E7
  1. 37
      cfd_protocol/src/lib.rs

37
cfd_protocol/src/lib.rs

@ -163,34 +163,29 @@ pub fn commit_descriptor(
(maker_own_pk, maker_rev_pk, maker_publish_pk): (PublicKey, PublicKey, PublicKey), (maker_own_pk, maker_rev_pk, maker_publish_pk): (PublicKey, PublicKey, PublicKey),
(taker_own_pk, taker_rev_pk, taker_publish_pk): (PublicKey, PublicKey, PublicKey), (taker_own_pk, taker_rev_pk, taker_publish_pk): (PublicKey, PublicKey, PublicKey),
) -> Descriptor<PublicKey> { ) -> Descriptor<PublicKey> {
// TODO: Optimize miniscript
let maker_own_pk_hash = maker_own_pk.pubkey_hash().as_hash(); let maker_own_pk_hash = maker_own_pk.pubkey_hash().as_hash();
let maker_own_pk = (&maker_own_pk.key.serialize().to_vec()).to_hex(); let maker_own_pk = (&maker_own_pk.key.serialize().to_vec()).to_hex();
let taker_own_pk_hash = taker_own_pk.pubkey_hash().as_hash(); let maker_publish_pk_hash = maker_publish_pk.pubkey_hash().as_hash();
let taker_own_pk = (&taker_own_pk.key.serialize().to_vec()).to_hex();
let maker_rev_pk_hash = maker_rev_pk.pubkey_hash().as_hash(); let maker_rev_pk_hash = maker_rev_pk.pubkey_hash().as_hash();
let taker_rev_pk_hash = taker_rev_pk.pubkey_hash().as_hash();
let maker_publish_pk_hash = maker_publish_pk.pubkey_hash().as_hash(); let taker_own_pk_hash = taker_own_pk.pubkey_hash().as_hash();
let taker_own_pk = (&taker_own_pk.key.serialize().to_vec()).to_hex();
let taker_publish_pk_hash = taker_publish_pk.pubkey_hash().as_hash(); let taker_publish_pk_hash = taker_publish_pk.pubkey_hash().as_hash();
let taker_rev_pk_hash = taker_rev_pk.pubkey_hash().as_hash();
let cet_or_refund_condition = format!("and_v(v:pk({}),pk_k({}))", maker_own_pk, taker_own_pk); // raw script: or(and(pk(maker_own_pk),pk(taker_own_pk)),or(and(pk(maker_own_pk),and(pk(taker_publish_pk),pk(taker_rev_pk))),and(pk(taker_own_pk),and(pk(maker_publish_pk),pk(maker_rev_pk)))))
let maker_punish_condition = format!( let full_script = format!("wsh(c:andor(pk({maker_own_pk}),pk_k({taker_own_pk}),or_i(and_v(v:pkh({maker_own_pk_hash}),and_v(v:pkh({taker_publish_pk_hash}),pk_h({taker_rev_pk_hash}))),and_v(v:pkh({taker_own_pk_hash}),and_v(v:pkh({maker_publish_pk_hash}),pk_h({maker_rev_pk_hash}))))))",
"and_v(v:pkh({}),and_v(v:pkh({}),pk_h({})))", maker_own_pk = maker_own_pk,
maker_own_pk_hash, taker_publish_pk_hash, taker_rev_pk_hash taker_own_pk = taker_own_pk,
); maker_own_pk_hash = maker_own_pk_hash,
let taker_punish_condition = format!( taker_own_pk_hash = taker_own_pk_hash,
"and_v(v:pkh({}),and_v(v:pkh({}),pk_h({})))", taker_publish_pk_hash = taker_publish_pk_hash,
taker_own_pk_hash, maker_publish_pk_hash, maker_rev_pk_hash taker_rev_pk_hash = taker_rev_pk_hash,
); maker_publish_pk_hash = maker_publish_pk_hash,
let descriptor_str = format!( maker_rev_pk_hash = maker_rev_pk_hash
"wsh(c:or_i(or_i({},{}),{}))",
maker_punish_condition, taker_punish_condition, cet_or_refund_condition
); );
descriptor_str.parse().expect("a valid miniscript") full_script.parse().expect("a valid miniscript")
} }
pub fn spending_tx_sighash( pub fn spending_tx_sighash(
@ -259,7 +254,7 @@ pub fn punish_transaction(
} }
if sigs.is_empty() { if sigs.is_empty() {
// No signature found, this should fail // TODO: No signature found, this should fail
unimplemented!() unimplemented!()
} }

Loading…
Cancel
Save