#wallet #descriptor #ct #liquid #transaction #lwk #blinding

lwk_wollet

液态钱包套件 - 基于CT描述符的只读钱包

7个版本 (破坏性)

0.7.0 2024年7月5日
0.5.1 2024年5月22日
0.4.0 2024年5月3日
0.3.0 2024年3月20日
0.1.0 2024年1月26日

#5#ct

每月49次 下载
用于 4 个crate(3个直接使用)

MIT OR BSD-2-Clause

200KB
4.5K SLoC

LWK是一组用于液态钱包的库。 lwk_wollet 是只读钱包的库。

钱包由一个 CT描述符 定义,该描述符由一个比特币描述符加上描述符盲化密钥组成。

从钱包中可以生成地址,从区块链同步钱包数据并创建交易,包括发行、再发行和销毁。

示例

生成地址

let desc = "ct(slip77(ab5824f4477b4ebb00a132adfd8eb0b7935cf24f6ac151add5d1913db374ce92),elwpkh([759db348/84'/1'/0']tpubDCRMaF33e44pcJj534LXVhFbHibPbJ5vuLhSSPFAw57kYURv4tzXFL6LSnd78bkjqdmE3USedkbpXJUPA1tdzKfuYSL7PianceqAhwL2UkA/<0;1>/*))#cch6wrnp";

// Parse the descriptor and create the watch only wallet
let descriptor: WolletDescriptor = desc.parse()?;
let mut wollet = Wollet::new(
    ElementsNetwork::LiquidTestnet,
    NoPersist::new(), // Do not persist data
    descriptor,
)?;

// Generate the address
let addr = wollet.address(None)?;
println!("Address: {} (index {})", addr.address(), addr.index());

同步钱包

full_scan_with_electrum_client};
// Use an Electrum server
let electrum_url = ElectrumUrl::new("blockstream.info:465", true, true);
let mut electrum_client = ElectrumClient::new(&electrum_url)?;
full_scan_with_electrum_client(&mut wollet, &mut electrum_client)?;

// Print a summary of the wallet transactions
for tx in wollet.transactions()?.into_iter().rev() {
    println!("TXID: {}, balance {:?}", tx.txid, tx.balance);
}

创建交易

// Create a transaction
let recipient = UnvalidatedRecipient {
    satoshi: 1000,
    address: "tlq1qqgpjea0jcel4tqeln5kyxlrgqx2eh4vw67ecswm54476mddy3n0klrlmty5gn0wsdw4045rtl2y2wdtr4rdu6v93zds6zn8xd".to_string(),
    asset: "144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49".to_string(),
};
let pset = wollet
    .tx_builder()
    .add_unvalidated_recipient(&recipient)?
    .finish()?;

// Then pass the PSET to the signer(s) for them to sign.

依赖项

~26–42MB
~582K SLoC