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
- Address
Result - Wrapper of
lwk_wollet::AddressResult
- Amp2
- Wrapper of
lwk_wollet::amp2::Amp2
- Amp2
Descriptor - Wrapper of
lwk_wollet::amp2::Amp2Descriptor
- AssetId
- A valid asset identifier. wrapper of
elements::AssetId
- Asset
Ids - A collection of asset identifiers. wrapper of
Vec<elements::AssetId>
- Asset
Meta - Bip
- wrapper over
lwk_common::Bip
- Contract
- Wrapper of
lwk_wollet::Contract
- Esplora
Client - 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
- Option
Wallet TxOut - 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
- Pset
Details - PSET details from a perspective of a wallet, wrapper of
lwk_common::PsetDetails
- Registry
- Registry
Post - 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
- TxOut
Secrets - Wrapper of
elements::TxOutSecrets
- Txid
- A valid transaction identifier.
- Update
- Wrapper of
lwk_wollet::Update
- Wallet
Tx - Wrapper of
lwk_wollet::WalletTx
- Wallet
TxOut - Wrapper of
lwk_wollet::WalletTxOut
- Wollet
- Wrapper of
lwk_wollet::Wollet
- Wollet
Descriptor - Wrapper of
lwk_wollet::WolletDescriptor
- Xpub
- Wrapper of
bip32::Xpub