from lwk import *
node = LwkTestEnv()
network = Network.testnet()
network = Network.regtest_default() bip = Bip.new_bip87()
signer_a = Signer.random(network)
xpub_a = signer_a.keyorigin_xpub(bip);
signer_b = Signer.random(network)
xpub_b = signer_b.keyorigin_xpub(bip);
signer_c = Signer.random(network)
xpub_c = signer_c.keyorigin_xpub(bip);
import os
slip77_rand_key = os.urandom(32).hex()
desc_blinding_key = f"slip77({slip77_rand_key})"
threshold = 2;
desc = f"ct({desc_blinding_key},elwsh(multi({threshold},{xpub_a}/<0;1>/*,{xpub_b}/<0;1>/*,{xpub_c}/<0;1>/*)))"
wd = WolletDescriptor(desc)
wollet_c = Wollet(network, wd, datadir=None)
addr = wollet_c.address(None);
txs = wollet_c.transactions();
balance = wollet_c.balance();
url = "https://blockstream.info/liquidtestnet/api"
client = EsploraClient(url, network)
client = ElectrumClient.from_url(node.electrum_url())
update = client.full_scan(wollet_c)
wollet_c.apply_update(update)
client = ElectrumClient.from_url(node.electrum_url())
txid = node.send_to_address(wollet_c.address(0).address(), 10_000, asset=None)
wollet_c.wait_for_tx(txid, client)
address = "<address>"
address = node.get_new_address() sats = 1000
lbtc = network.policy_asset()
b = network.tx_builder()
b.add_recipient(address, sats, lbtc)
pset = b.finish(wollet_c)
pset = signer_c.sign(pset)
wd = WolletDescriptor(desc)
wollet_b = Wollet(network, wd, datadir=None)
update = client.full_scan(wollet_b)
wollet_b.apply_update(update)
details = wollet_b.pset_details(pset)
assert details.balance().fee() < 100
fingerprints_has = details.fingerprints_has()
assert len(fingerprints_has) == 1
assert signer_c.fingerprint() in fingerprints_has
fingerprints_missing = details.fingerprints_missing()
assert len(fingerprints_missing) == 2
assert signer_a.fingerprint() in fingerprints_missing
assert signer_b.fingerprint() in fingerprints_missing
assert len(details.balance().recipients()) == 1
recipient = details.balance().recipients()[0]
assert str(recipient.address()) == str(address)
assert recipient.asset() == lbtc
assert recipient.value() == sats
pset = signer_b.sign(pset)
details = wollet_c.pset_details(pset)
fingerprints_has = details.fingerprints_has()
assert len(fingerprints_has) == 2
tx = pset.finalize()
txid = client.broadcast(tx)