mirror of
https://github.com/RoboSats/taptrade-core.git
synced 2026-01-07 12:25:28 +00:00
signing correctly
This commit is contained in:
@ -94,7 +94,7 @@ pub async fn fund_psbt(descriptor: Descriptor<String>) -> Result<(), Box<dyn std
|
|||||||
// println!("Hello create_psbt");
|
// println!("Hello create_psbt");
|
||||||
// let coordinator_wallet= init_coordinator_wallet("xprv9xom13daMHDPvuivoBnceYvuhPHS6EHZZcND9nN3qvnRw8xM8Jrr24KHnARuReaX1G7PAyYxvkqTRdfhjC9MvQFPbQCXfJwiDiEfbFNSWd4");
|
// let coordinator_wallet= init_coordinator_wallet("xprv9xom13daMHDPvuivoBnceYvuhPHS6EHZZcND9nN3qvnRw8xM8Jrr24KHnARuReaX1G7PAyYxvkqTRdfhjC9MvQFPbQCXfJwiDiEfbFNSWd4");
|
||||||
let wallet_result = Wallet::new(
|
let wallet_result = Wallet::new(
|
||||||
"tr(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082,{and_v(v:pk(02fa55532a5ddc036db99412d050d11bf5ce4c78b9816adc3974a3c23e2a876dfe),pk(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082)),and_v(v:pk(0219e6db0b79f8e7ee9c5fa4e77ac77e942ec3248c1a2e94c8d5ea230b13d849f0),pk(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082))})#0du8cgum",
|
"tr(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA,{and_v(v:pk(tpubDDk7P4EjBobe6VbQnW15wCtEm4sfDHiS4Yg3tCS9LQ55x8duoTvELtRJCc4rjdsDeq6FMTW8Sjdy34PC43dY93E2wEn2TytrM8D6FhLtqg2),pk(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA)),and_v(v:pk(tpubDDpD87xvUwFdswsQTXsjkBPWXThYZABDsGP9JbzDatobQzBn2pvPrP4B7MBLTHmTdpx1zuTM4TjB5X31WrLvexsvV4ayGStKF4mxa4gct6y),pk(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA))})#mpnyppnp",
|
||||||
None,
|
None,
|
||||||
bdk::bitcoin::Network::Testnet,
|
bdk::bitcoin::Network::Testnet,
|
||||||
MemoryDatabase::new()
|
MemoryDatabase::new()
|
||||||
@ -139,7 +139,7 @@ fn taker_unresponsive_psbt(
|
|||||||
let taker_responsive = false; // Assume taker is unresponsive
|
let taker_responsive = false; // Assume taker is unresponsive
|
||||||
if !taker_responsive {
|
if !taker_responsive {
|
||||||
let wallet_result = Wallet::new(
|
let wallet_result = Wallet::new(
|
||||||
"tr(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082,{and_v(v:pk(02fa55532a5ddc036db99412d050d11bf5ce4c78b9816adc3974a3c23e2a876dfe),pk(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082)),and_v(v:pk(0219e6db0b79f8e7ee9c5fa4e77ac77e942ec3248c1a2e94c8d5ea230b13d849f0),pk(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082))})#0du8cgum",
|
"tr(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA,{and_v(v:pk(tpubDDk7P4EjBobe6VbQnW15wCtEm4sfDHiS4Yg3tCS9LQ55x8duoTvELtRJCc4rjdsDeq6FMTW8Sjdy34PC43dY93E2wEn2TytrM8D6FhLtqg2),pk(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA)),and_v(v:pk(tpubDDpD87xvUwFdswsQTXsjkBPWXThYZABDsGP9JbzDatobQzBn2pvPrP4B7MBLTHmTdpx1zuTM4TjB5X31WrLvexsvV4ayGStKF4mxa4gct6y),pk(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA))})#mpnyppnp",
|
||||||
None,
|
None,
|
||||||
bdk::bitcoin::Network::Testnet,
|
bdk::bitcoin::Network::Testnet,
|
||||||
MemoryDatabase::new()
|
MemoryDatabase::new()
|
||||||
@ -193,9 +193,9 @@ fn taker_unresponsive_psbt(
|
|||||||
.fee_rate(FeeRate::from_sat_per_vb(3.0))
|
.fee_rate(FeeRate::from_sat_per_vb(3.0))
|
||||||
.policy_path(path, KeychainKind::External);
|
.policy_path(path, KeychainKind::External);
|
||||||
|
|
||||||
let (psbt, tx_details) = tx_builder.finish()?;
|
let (psbt, _tx_details) = tx_builder.finish()?;
|
||||||
// debug!("PSBT: {:?}", psbt);
|
// debug!("PSBT: {:?}", psbt);
|
||||||
// println!("psbt is {:?}", psbt);
|
println!("psbt is main {:?}", psbt);
|
||||||
let json = to_string_pretty(&psbt).unwrap();
|
let json = to_string_pretty(&psbt).unwrap();
|
||||||
// println!("psbt is {}", json);
|
// println!("psbt is {}", json);
|
||||||
|
|
||||||
@ -282,7 +282,7 @@ fn taker_unresponsive(
|
|||||||
let taker_responsive = false; // Assume taker is unresponsive
|
let taker_responsive = false; // Assume taker is unresponsive
|
||||||
if !taker_responsive {
|
if !taker_responsive {
|
||||||
let wallet_result = Wallet::new(
|
let wallet_result = Wallet::new(
|
||||||
"tr(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082,{and_v(v:pk(02fa55532a5ddc036db99412d050d11bf5ce4c78b9816adc3974a3c23e2a876dfe),pk(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082)),and_v(v:pk(0219e6db0b79f8e7ee9c5fa4e77ac77e942ec3248c1a2e94c8d5ea230b13d849f0),pk(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082))})#0du8cgum",
|
"tr(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA,{and_v(v:pk(tpubDDk7P4EjBobe6VbQnW15wCtEm4sfDHiS4Yg3tCS9LQ55x8duoTvELtRJCc4rjdsDeq6FMTW8Sjdy34PC43dY93E2wEn2TytrM8D6FhLtqg2),pk(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA)),and_v(v:pk(tpubDDpD87xvUwFdswsQTXsjkBPWXThYZABDsGP9JbzDatobQzBn2pvPrP4B7MBLTHmTdpx1zuTM4TjB5X31WrLvexsvV4ayGStKF4mxa4gct6y),pk(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA))})#mpnyppnp",
|
||||||
None,
|
None,
|
||||||
bdk::bitcoin::Network::Testnet,
|
bdk::bitcoin::Network::Testnet,
|
||||||
MemoryDatabase::new()
|
MemoryDatabase::new()
|
||||||
@ -311,7 +311,8 @@ fn taker_unresponsive(
|
|||||||
// let mut private_key_str = String::new();
|
// let mut private_key_str = String::new();
|
||||||
// File::open("key.txt")?.read_to_string(&mut private_key_str)?;
|
// File::open("key.txt")?.read_to_string(&mut private_key_str)?;
|
||||||
// println!("{}", private_key_str);
|
// println!("{}", private_key_str);
|
||||||
let xprv_str = "xprv9yuQwS7jc4QpSGTiv5WF2kDjuJh3eXzM1Qa4MWYRJLrsdVEydPxz7psF9YKtyPi72dWk48qwHTjiZL1QYTegT4jQcQxR3XDZtb5ijuH8fjN";
|
// taker xprv
|
||||||
|
let xprv_str = "tprv8inPcmXmKnA9ZA9TURpvvva3i7JDsKEmcXAcAkccVPJtur4p8dgFCLsyYoGe6oNiKoKLyRvJTAUXHUbHC2i7LHFg6dFCLfvrfqa5k1ajTGQ";
|
||||||
let secp = Secp256k1::new();
|
let secp = Secp256k1::new();
|
||||||
|
|
||||||
// Parse the xprv key
|
// Parse the xprv key
|
||||||
@ -337,7 +338,11 @@ fn taker_unresponsive(
|
|||||||
|
|
||||||
println!("here");
|
println!("here");
|
||||||
|
|
||||||
wallet.add_signer(KeychainKind::External, SignerOrdering(0), Arc::new(signer));
|
wallet.add_signer(
|
||||||
|
KeychainKind::External,
|
||||||
|
SignerOrdering(0),
|
||||||
|
Arc::new(signer)
|
||||||
|
);
|
||||||
|
|
||||||
// // Step 3: Sign the transaction
|
// // Step 3: Sign the transaction
|
||||||
// let mut psbt = PartiallySignedTransaction::from_str("TODO: paste the PSBT obtained in step 3 here")?;
|
// let mut psbt = PartiallySignedTransaction::from_str("TODO: paste the PSBT obtained in step 3 here")?;
|
||||||
@ -352,86 +357,6 @@ fn taker_unresponsive(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn coordinator_sign(
|
|
||||||
mut psbt: PartiallySignedTransaction,
|
|
||||||
) -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
println!("here in coordinator_sign");
|
|
||||||
|
|
||||||
let wallet_result = Wallet::new(
|
|
||||||
"tr(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082,{and_v(v:pk(02fa55532a5ddc036db99412d050d11bf5ce4c78b9816adc3974a3c23e2a876dfe),pk(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082)),and_v(v:pk(0219e6db0b79f8e7ee9c5fa4e77ac77e942ec3248c1a2e94c8d5ea230b13d849f0),pk(0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082))})#0du8cgum",
|
|
||||||
None,
|
|
||||||
bdk::bitcoin::Network::Testnet,
|
|
||||||
MemoryDatabase::new()
|
|
||||||
);
|
|
||||||
|
|
||||||
match wallet_result {
|
|
||||||
Ok(mut wallet) => {
|
|
||||||
let electrum_url = "ssl://electrum.blockstream.info:60002";
|
|
||||||
let client = Client::new(electrum_url)?;
|
|
||||||
let blockchain = ElectrumBlockchain::from(client);
|
|
||||||
|
|
||||||
// Sync the wallet with the blockchain
|
|
||||||
wallet.sync(&blockchain, Default::default())?;
|
|
||||||
// Recipient address (where funds will be sent)
|
|
||||||
match wallet.get_balance() {
|
|
||||||
Ok(balance) => {
|
|
||||||
println!("Wallet balance: {}", balance);
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
println!("Error fetching wallet balance: {:?}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// // Step 2: Add the BDK signer
|
|
||||||
// let mut private_key_str = String::new();
|
|
||||||
// File::open("key.txt")?.read_to_string(&mut private_key_str)?;
|
|
||||||
// println!("{}", private_key_str);
|
|
||||||
let xprv_str = "xprv9yu6ywkjYByRSjaivcWau9vXmwXz8MpwhAMNqwgAqeeXjFTiWuxZpz69LjXTauM4nqYuQpEwPbZ71tKK7hvwehK5k8U6JWW8v9odujQx2en";
|
|
||||||
let secp = Secp256k1::new();
|
|
||||||
|
|
||||||
// Parse the xprv key
|
|
||||||
let xprv = ExtendedPrivKey::from_str(xprv_str)?;
|
|
||||||
println!("Parsed xprv: {:?}", xprv);
|
|
||||||
println!("Base58 xprv: {:?}", xprv.to_string());
|
|
||||||
|
|
||||||
// Derive the private key (you can adjust the derivation path as needed)
|
|
||||||
let derivation_path = DerivationPath::from(vec![ChildNumber::from(0)]);
|
|
||||||
let derived_priv_key = xprv.derive_priv(&secp, &derivation_path)?;
|
|
||||||
println!("Derived private key: {:?}", derived_priv_key);
|
|
||||||
println!(
|
|
||||||
"Base58 derived_priv_key: {:?}",
|
|
||||||
derived_priv_key.to_string()
|
|
||||||
);
|
|
||||||
|
|
||||||
// Convert the derived key to a PrivateKey
|
|
||||||
let private_key = PrivateKey::new(derived_priv_key.private_key, Network::Bitcoin);
|
|
||||||
|
|
||||||
// let private_key = PrivateKey::from_str(&private)?;
|
|
||||||
let signer = SignerWrapper::new(
|
|
||||||
private_key,
|
|
||||||
SignerContext::Tap {
|
|
||||||
is_internal_key: false,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
wallet.add_signer(KeychainKind::External, SignerOrdering(0), Arc::new(signer));
|
|
||||||
|
|
||||||
// Print the PSBT before signing
|
|
||||||
println!("PSBT before signing: {:?}", psbt);
|
|
||||||
|
|
||||||
// // Step 3: Sign the transaction
|
|
||||||
// let mut psbt = PartiallySignedTransaction::from_str("TODO: paste the PSBT obtained in step 3 here")?;
|
|
||||||
let finalized = wallet.sign(&mut psbt, SignOptions::default());
|
|
||||||
println!("Finalized: {:?}", finalized);
|
|
||||||
println!("Coordinator psbt after signing is {}", psbt);
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
println!("Error creating wallet: {:?}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The main function in this module is `combine_and_broadcast`, which combines the PSBTs
|
/// The main function in this module is `combine_and_broadcast`, which combines the PSBTs
|
||||||
/// from the maker and taker, finalizes the transaction, and broadcasts it on the blockchain.
|
/// from the maker and taker, finalizes the transaction, and broadcasts it on the blockchain.
|
||||||
pub async fn combine_and_broadcast() -> Result<(), Box<dyn std::error::Error>> {
|
pub async fn combine_and_broadcast() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
@ -459,23 +384,124 @@ pub async fn combine_and_broadcast() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn coordinator_sign(
|
||||||
|
mut psbt: PartiallySignedTransaction,
|
||||||
|
) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
println!("here in coordinator_sign");
|
||||||
|
|
||||||
|
let wallet_result = Wallet::new(
|
||||||
|
"tr(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA,{and_v(v:pk(tpubDDk7P4EjBobe6VbQnW15wCtEm4sfDHiS4Yg3tCS9LQ55x8duoTvELtRJCc4rjdsDeq6FMTW8Sjdy34PC43dY93E2wEn2TytrM8D6FhLtqg2),pk(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA)),and_v(v:pk(tpubDDpD87xvUwFdswsQTXsjkBPWXThYZABDsGP9JbzDatobQzBn2pvPrP4B7MBLTHmTdpx1zuTM4TjB5X31WrLvexsvV4ayGStKF4mxa4gct6y),pk(tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA))})#mpnyppnp",
|
||||||
|
None,
|
||||||
|
bdk::bitcoin::Network::Testnet,
|
||||||
|
MemoryDatabase::new()
|
||||||
|
);
|
||||||
|
|
||||||
|
match wallet_result {
|
||||||
|
Ok(mut wallet) => {
|
||||||
|
let electrum_url = "ssl://electrum.blockstream.info:60002";
|
||||||
|
let client = Client::new(electrum_url)?;
|
||||||
|
let blockchain = ElectrumBlockchain::from(client);
|
||||||
|
|
||||||
|
// Sync the wallet with the blockchain
|
||||||
|
wallet.sync(&blockchain, Default::default())?;
|
||||||
|
// Recipient address (where funds will be sent)
|
||||||
|
match wallet.get_balance() {
|
||||||
|
Ok(balance) => {
|
||||||
|
println!("Wallet balance: {}", balance);
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
println!("Error fetching wallet balance: {:?}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// // Step 2: Add the BDK signer
|
||||||
|
// let mut private_key_str = String::new();
|
||||||
|
// File::open("key.txt")?.read_to_string(&mut private_key_str)?;
|
||||||
|
// println!("{}", private_key_str);
|
||||||
|
let xprv_str = "tprv8iseuSeeGfkpgpV1kK7HBMXFPUp8j8Repu7pGqp6S1fn58snqXUYsNjwVXxgFVN2wt8mtdHcmyjTQKD4F34k3ATozjm8QA66xLUBstpJVKH";
|
||||||
|
let secp = Secp256k1::new();
|
||||||
|
|
||||||
|
// Parse the xprv key
|
||||||
|
let xprv = ExtendedPrivKey::from_str(xprv_str)?;
|
||||||
|
println!("Parsed xprv: {:?}", xprv);
|
||||||
|
println!("Base58 xprv: {:?}", xprv.to_string());
|
||||||
|
|
||||||
|
// Derive the private key (you can adjust the derivation path as needed)
|
||||||
|
let derivation_path = DerivationPath::from(vec![ChildNumber::from(0)]);
|
||||||
|
let derived_priv_key = xprv.derive_priv(&secp, &derivation_path)?;
|
||||||
|
println!("Derived private key: {:?}", derived_priv_key);
|
||||||
|
println!(
|
||||||
|
"Base58 derived_priv_key: {:?}",
|
||||||
|
derived_priv_key.to_string()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Convert the derived key to a PrivateKey
|
||||||
|
let private_key = PrivateKey::new(derived_priv_key.private_key, Network::Bitcoin);
|
||||||
|
|
||||||
|
// let private_key = PrivateKey::from_str(&private)?;
|
||||||
|
let signer = SignerWrapper::new(
|
||||||
|
private_key,
|
||||||
|
SignerContext::Tap {
|
||||||
|
is_internal_key: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
wallet.add_signer(
|
||||||
|
KeychainKind::External,
|
||||||
|
SignerOrdering(0),
|
||||||
|
Arc::new(signer)
|
||||||
|
);
|
||||||
|
// Print the PSBT before signing
|
||||||
|
println!("PSBT before signing: {:?}", psbt);
|
||||||
|
for (i, input) in (0_u32..).zip(psbt.inputs.iter()) {
|
||||||
|
println!("Input: {:?}", input);
|
||||||
|
let input_script = input.witness_utxo.as_ref().unwrap().script_pubkey.clone();
|
||||||
|
let address = wallet.get_address(bdk::wallet::AddressIndex::Peek(i))?;
|
||||||
|
if input_script != address.script_pubkey() {
|
||||||
|
println!("Input {} does not correspond to the wallet", i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// // Step 3: Sign the transaction
|
||||||
|
// let mut psbt = PartiallySignedTransaction::from_str("TODO: paste the PSBT obtained in step 3 here")?;
|
||||||
|
let finalized = wallet.sign(&mut psbt, SignOptions::default());
|
||||||
|
match finalized {
|
||||||
|
Ok(_) => {
|
||||||
|
println!("Successfully signed PSBT.");
|
||||||
|
println!("Final PSBT: {:?}", psbt);
|
||||||
|
},
|
||||||
|
Err(e) => {
|
||||||
|
println!("Error signing PSBT: {:?}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
println!("Error creating wallet: {:?}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use crate::coordinator;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
use anyhow::{Context, Error};
|
use anyhow::{Context, Error};
|
||||||
use bdk::blockchain::ElectrumBlockchain;
|
// use bdk::blockchain::ElectrumBlockchain;
|
||||||
use bdk::sled;
|
// use bdk::sled;
|
||||||
use bdk::template::Bip86;
|
// use bdk::template::Bip86;
|
||||||
use bdk::{bitcoin::bip32::ExtendedPrivKey, descriptor};
|
// use bdk::{bitcoin::bip32::ExtendedPrivKey, descriptor};
|
||||||
use bitcoin::consensus::deserialize;
|
// use bitcoin::consensus::deserialize;
|
||||||
use std::env;
|
// use std::env;
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_fund_psbt() -> Result<(), Error> {
|
async fn test_fund_psbt() -> Result<(), Error> {
|
||||||
let result = create_descriptor().await;
|
let result = create_descriptor().await;
|
||||||
match &result {
|
match &result {
|
||||||
Ok(descriptor) => {
|
Ok(descriptor) => {
|
||||||
// println!("{}", descriptor);
|
println!("descriptor is: {}", descriptor);
|
||||||
let _ = fund_psbt(descriptor.clone()).await;
|
let _ = fund_psbt(descriptor.clone()).await;
|
||||||
let psbt = taker_unresponsive_psbt("tb1qqw8ledhkhezru0rwj7acpker8srtcs28sng0d6");
|
let psbt = taker_unresponsive_psbt("tb1qqw8ledhkhezru0rwj7acpker8srtcs28sng0d6");
|
||||||
match &psbt {
|
match &psbt {
|
||||||
@ -498,12 +524,26 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn create_descriptor() -> Result<Descriptor<String>, Box<dyn std::error::Error>> {
|
async fn create_descriptor() -> Result<Descriptor<String>, Box<dyn std::error::Error>> {
|
||||||
let coordinator_pub = "0209d4277f677aeaeeb6d3da1d66ba0dfabf296bf1609c505ad1f4cf50a870d082";
|
let _coordinator_pub = "03f294ab32537a49f7dc07b49249b4add8cad82cd1f7b7b4a9db6fb0947dc7b755";
|
||||||
let coordinator_xpub = "xpub6C3kuZk67kPgw2evdJ72ckEARaqjwtx62KZY4t4YR6AsqJrsFSnDNm5sh9FkfdHLcXNWgcwAZs2prhNj23xG5Ui1pwyW1mtcGfEtBQdmima";
|
let _maker_pub = "0349ba2df1a252ec57a53d329edc076045ec621334471b19dd54a91054451e2fce";
|
||||||
let maker_pub = "02fa55532a5ddc036db99412d050d11bf5ce4c78b9816adc3974a3c23e2a876dfe";
|
let _taker_pub = "023bb7fc7bf8482fa7a509b24af286a83ce3316036ef97408cdc575d18df387166";
|
||||||
let taker_pub = "0219e6db0b79f8e7ee9c5fa4e77ac77e942ec3248c1a2e94c8d5ea230b13d849f0";
|
|
||||||
|
|
||||||
let result = create_script(&coordinator_pub, maker_pub, taker_pub).await;
|
let _coordinator_xpub= "xpub6FC4XcsChmV3JVKxBmnnNqqzdPEQu57Vra8JCooFWNiHALTrPhT3uRgyReYQuCUTutYNB7X9wSsTuLgYQvSbXFwEfJAefM3msGexe4V8rRz";
|
||||||
|
let _coordinator_xprv= "xprvA2Ci87LJsPvk61FV5kFn1huG5MPvVcPeVMChQRPdx3BJHY8hrA8oMdNVaMo2F7yiaSbztXfrcd9ewTfK7pioE7CDU6YpjoN43EimS76xhqB";
|
||||||
|
let _coordinator_tpub= "tpubDDD58oLVWb7GbbvS4q8DW1wnTgJD1ZNS1p9wgeb1G3zDqTEohjGWbeDcmJNc2S1TJ1FW6hLYG1odBJwp1BhvzGQLhHKjWSHm6E6NzvvLjiA";
|
||||||
|
let _coordinator_tprv= "tprv8iseuSeeGfkpgpV1kK7HBMXFPUp8j8Repu7pGqp6S1fn58snqXUYsNjwVXxgFVN2wt8mtdHcmyjTQKD4F34k3ATozjm8QA66xLUBstpJVKH";
|
||||||
|
|
||||||
|
let _taker_xpub= "xpub6F9EN4dLoTNy5SS3y47TmcY8Y1aDizAkEukEwPEL23NiybeBodokP8gkCWeqvVjaAdn5F56nRtsbg9Jv59NawfgwoD1yypW9WezwZL6YnLn";
|
||||||
|
let _taker_xprv= "xprvA29sxZ6Sy5pfrxMas2aTQUbPyyjjKXStsgpe8zpiThqk6oK3G6VVqLNGMCLsYJ817KvxU6wZmttcJ98QgvAgEbbSZdnaVABxjWHXHM29jnU";
|
||||||
|
let _taker_tpub= "tpubDDpD87xvUwFdswsQTXsjkBPWXThYZABDsGP9JbzDatobQzBn2pvPrP4B7MBLTHmTdpx1zuTM4TjB5X31WrLvexsvV4ayGStKF4mxa4gct6y";
|
||||||
|
let _taker_tprv= "tprv8ippjtQnNMekTmb7XbRxa8DPJ79wZ3UuDEjm1RFAwgLDtQ48FTqFM5jiGNWXYfWKUmTjUCZKwFUQkzg9p8Wd3es36Gzt9Wv1ec2wj2nNUCD";
|
||||||
|
|
||||||
|
let _maker_xpub= "xpub6F6oEwkKkstNApzPutWS8Qtnx1iW3FvceCB66ibmZkMQ13esgoekEPq1UuH3wmGdhtQrCGeP7HxkbpuK9WDWWCKTMow321MsH3fhJjUMnAk";
|
||||||
|
let _maker_xprv= "xprvA27SqSDRvWL4xLuvoryRmGx4Pyt1doCmGyFVJLCA1QpR8FKj9GLVgbWXdd6z6RzPxMnZyLJYHotipd3Y4pNAXDz5Zz2tgKCokjpfJGnvFBU";
|
||||||
|
let _maker_tpub= "tpubDDk7P4EjBobe6VbQnW15wCtEm4sfDHiS4Yg3tCS9LQ55x8duoTvELtRJCc4rjdsDeq6FMTW8Sjdy34PC43dY93E2wEn2TytrM8D6FhLtqg2";
|
||||||
|
let _maker_tprv= "tprv8inPcmXmKnA9ZA9TURpvvva3i7JDsKEmcXAcAkccVPJtur4p8dgFCLsyYoGe6oNiKoKLyRvJTAUXHUbHC2i7LHFg6dFCLfvrfqa5k1ajTGQ";
|
||||||
|
|
||||||
|
let result = create_script(_coordinator_tpub, _maker_tpub, _taker_tpub).await;
|
||||||
match result {
|
match result {
|
||||||
Ok(descriptor) => {
|
Ok(descriptor) => {
|
||||||
// println!("{}", descriptor);
|
// println!("{}", descriptor);
|
||||||
|
|||||||
Reference in New Issue
Block a user