Crate lwk_wasm

Crate lwk_wasm 

Source
Expand description

§Liquid Wallet Kit for WASM

This is only a proof of concept at the moment but we want to show our commitment to have the Liquid Wallet Kit working in the WASM environment.

Available as npm package.

For an example usage see the Liquid Web Wallet (source). Works as CT descriptor watch-only wallet or connected to a Jade.

§For LWK Library developers

To build the WASM library you need rust and wasm-pack installed

$ wasm-pack build --dev

To enable web-serial:

$ RUSTFLAGS="--cfg=web_sys_unstable_apis" wasm-pack build --dev --features serial

§For LWK library consumers (front-end developers)

Download the Liquid Web Wallet source

$ git clone https://github.com/RCasatta/liquid-web-wallet
$ npm install
$ npm run start

Open the browser at http://localhost:8080

§Test

$ cd lwk_wasm
$ wasm-pack test --firefox # or --chrome

Then open the browser at http://127.0.0.1:8000, open also the dev tools to see console messages and network requests.

To avoid requiring opening the browser the headless mode is possible.

Note the increased timeout specified via the env var, the 20s default one could be too low.

$ cd lwk_wasm
$ WASM_BINDGEN_TEST_TIMEOUT=60 wasm-pack test --firefox --headless

run specific test (note the double --)

$ wasm-pack test --firefox --headless -- -- balance_test_testnet

§Build NPM Package for release

Build rust crates in release mode, optimizing for space.

$ cd lwk_wasm/
$ RUSTFLAGS="--cfg=web_sys_unstable_apis" CARGO_PROFILE_RELEASE_OPT_LEVEL=z wasm-pack build --features serial
$ cd pkg
$ npm publish

§Build wasm lib for profiling

To analyze the generated wasm file to optimize for size, we want to follow the same optimization as release but we want to keep debug info to analyze the produced lib with function names.

$ cd lwk_wasm/
$ RUSTFLAGS="--cfg=web_sys_unstable_apis" CARGO_PROFILE_RELEASE_OPT_LEVEL=z CARGO_PROFILE_RELEASE_DEBUG=2 wasm-pack build --profiling --features serial

With twiggy is then possible to analyze the library:

twiggy top -n 10 pkg/lwk_wasm_bg.wasm

§Build for nodejs

$ cd lwk_wasm
$ RUSTFLAGS="--cfg=web_sys_unstable_apis" CARGO_PROFILE_RELEASE_OPT_LEVEL=z wasm-pack build --target nodejs --out-dir pkg_node -- --features serial

Rename the package to lwk_node so that we can publish it to npm.

sed -i 's/"lwk_wasm"/"lwk_node"/g' pkg_node/package.json

Structs§

Address
Wrapper of elements::Address
AddressResult
Wrapper of lwk_wollet::AddressResult
Amp2
Wrapper of lwk_wollet::amp2::Amp2
Amp2Descriptor
Wrapper of lwk_wollet::amp2::Amp2Descriptor
AssetId
A valid asset identifier. wrapper of elements::AssetId
AssetIds
A collection of asset identifiers. wrapper of Vec<elements::AssetId>
AssetMeta
Bip
wrapper over lwk_common::Bip
Contract
Wrapper of lwk_wollet::Contract
EsploraClient
Wrapper of asyncr::EsploraClient
Issuance
PSET details from a perspective of a wallet, wrapper of lwk_common::Issuance
Mnemonic
Wrapper of bip39::Mnemonic
Network
Wrapper of lwk_wollet::ElementsNetwork
OptionWalletTxOut
An optional wallet transaction output. Could be None when it’s not possible to unblind. It seems required by wasm_bindgen because we can’t return Vec<Option<WalletTxOut>>
OutPoint
Wrapper of elements::OutPoint
Precision
Wrapper of lwk_common::precision::Precision
Pset
Partially Signed Elements Transaction, wrapper of PartiallySignedTransaction
PsetDetails
PSET details from a perspective of a wallet, wrapper of lwk_common::PsetDetails
Registry
RegistryPost
Script
Wrapper of elements::Script
Signer
A Software signer, wrapper of lwk_signer::SwSigner
Transaction
A Liquid transaction, wrapper of elements::Transaction
TxBuilder
Wrapper of lwk_wollet::TxBuilder
TxOutSecrets
Wrapper of elements::TxOutSecrets
Txid
A valid transaction identifier.
Update
Wrapper of lwk_wollet::Update
WalletTx
Wrapper of lwk_wollet::WalletTx
WalletTxOut
Wrapper of lwk_wollet::WalletTxOut
Wollet
Wrapper of lwk_wollet::Wollet
WolletDescriptor
Wrapper of lwk_wollet::WolletDescriptor
Xpub
Wrapper of bip32::Xpub