Skip to content

Commit

Permalink
Updated to frb 0.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
i5hi committed Oct 16, 2024
1 parent 019bbfc commit 19f8ebb
Show file tree
Hide file tree
Showing 20 changed files with 2,084 additions and 1,312 deletions.
16 changes: 10 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
# lwk_dart

A dart/flutter library with language bindings for rust library [lwk](https://github.com/Blockstream/lwk) - Liquid Wallet Kit.

## BREAKING CHANGE FROM 0.1.3 -> 0.1.4

If you are currently using 0.1.3 - updating to 0.1.4 will create a breaking change that will make it difficult for you to spend your existing utxos.

If you are using 0.1.3 sweep your wallets before updating.
If you are using 0.1.3 sweep your wallets before updating.

### legacy branch

Expand All @@ -19,16 +20,17 @@ Initialize the library once, in main()
await LibLwk.init();
```

This will load the binary. It does not need to be called again.
This will load the binary. It does not need to be called again.

Now use the library as usual. See `test/lwk_root_test.dart`

## Dependencies

Docker is required for linux builds.

```bash
dart pub global activate ffigen
cargo install flutter_rust_bridge_codegen
cargo install flutter_rust_bridge_codegen --version 2.0.0
cargo install cargo-expand
cargo install cargo-ndk
@if [ $$(uname) == "Darwin" ] ; then cargo install cargo-lipo ; fi
Expand All @@ -53,22 +55,23 @@ types.rs structures and enums are also re-exported via api.rs

## MacOS as host

macos as the host machine can build binaries for all platforms using:
macos as the host machine can build binaries for all platforms using:

```bash
# requires dockerd running
./compile.all.sh
```

Compile will first build native binaries of the rust code and move them to the dart test folder.
Compile will first build native binaries of the rust code and move them to the dart test folder.

It will then run flutter_rust_bridge_codegen and generate ffi code in rust and dart.
It will then run flutter_rust_bridge_codegen and generate ffi code in rust and dart.

### Non-debian linux users

On non-debian systems you will get some errors with the `bridge_generated.dart` files.

Error would be related to:

```rust
void store_dart_post_cobject(
int ptr,
Expand All @@ -81,6 +84,7 @@ Error would be related to:

You may need to set the path the clang in CPATH manually.
Run the following:

```bash
export CPATH="$(clang -v 2>&1 | grep "Selected GCC installation" | rev | cut -d' ' -f1 | rev)/include"
```
178 changes: 92 additions & 86 deletions ios/Classes/frb_generated.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,80 +103,86 @@ typedef struct wire_cst_pset_amounts {
struct wire_cst_list_balance *balances;
} wire_cst_pset_amounts;

void frbgen_lwk_dart_wire_descriptor_new_confidential(int64_t port_,
int32_t network,
struct wire_cst_list_prim_u_8_strict *mnemonic);

void frbgen_lwk_dart_wire_address_address_from_script(int64_t port_,
int32_t network,
struct wire_cst_list_prim_u_8_strict *script,
struct wire_cst_list_prim_u_8_strict *blinding_key);

void frbgen_lwk_dart_wire_address_validate(int64_t port_,
struct wire_cst_list_prim_u_8_strict *address_string);

void frbgen_lwk_dart_wire_blockchain_test(int64_t port_,
struct wire_cst_blockchain *that,
struct wire_cst_list_prim_u_8_strict *electrum_url);

void frbgen_lwk_dart_wire_wallet_address(int64_t port_,
struct wire_cst_wallet *that,
uint32_t index);

void frbgen_lwk_dart_wire_wallet_address_last_unused(int64_t port_, struct wire_cst_wallet *that);

void frbgen_lwk_dart_wire_wallet_balances(int64_t port_, struct wire_cst_wallet *that);

void frbgen_lwk_dart_wire_wallet_blinding_key(int64_t port_, struct wire_cst_wallet *that);

void frbgen_lwk_dart_wire_wallet_broadcast_tx(int64_t port_,
struct wire_cst_list_prim_u_8_strict *electrum_url,
struct wire_cst_list_prim_u_8_loose *tx_bytes);

void frbgen_lwk_dart_wire_wallet_build_asset_tx(int64_t port_,
struct wire_cst_wallet *that,
uint64_t sats,
struct wire_cst_list_prim_u_8_strict *out_address,
float fee_rate,
struct wire_cst_list_prim_u_8_strict *asset);

void frbgen_lwk_dart_wire_wallet_build_lbtc_tx(int64_t port_,
struct wire_cst_wallet *that,
uint64_t sats,
struct wire_cst_list_prim_u_8_strict *out_address,
float fee_rate,
bool drain);

void frbgen_lwk_dart_wire_wallet_decode_tx(int64_t port_,
struct wire_cst_wallet *that,
struct wire_cst_list_prim_u_8_strict *pset);
void frbgen_lwk_dart_wire__crate__api__descriptor__descriptor_new_confidential(int64_t port_,
int32_t network,
struct wire_cst_list_prim_u_8_strict *mnemonic);

void frbgen_lwk_dart_wire__crate__api__types__address_address_from_script(int64_t port_,
int32_t network,
struct wire_cst_list_prim_u_8_strict *script,
struct wire_cst_list_prim_u_8_strict *blinding_key);

void frbgen_lwk_dart_wire__crate__api__types__address_validate(int64_t port_,
struct wire_cst_list_prim_u_8_strict *address_string);

void frbgen_lwk_dart_wire__crate__api__types__blockchain_test(int64_t port_,
struct wire_cst_blockchain *that,
struct wire_cst_list_prim_u_8_strict *electrum_url);

void frbgen_lwk_dart_wire__crate__api__wallet__wallet_address(int64_t port_,
struct wire_cst_wallet *that,
uint32_t index);

void frbgen_lwk_dart_wire__crate__api__wallet__wallet_address_last_unused(int64_t port_,
struct wire_cst_wallet *that);

void frbgen_lwk_dart_wire__crate__api__wallet__wallet_balances(int64_t port_,
struct wire_cst_wallet *that);

void frbgen_lwk_dart_wire__crate__api__wallet__wallet_blinding_key(int64_t port_,
struct wire_cst_wallet *that);

void frbgen_lwk_dart_wire__crate__api__wallet__wallet_broadcast_tx(int64_t port_,
struct wire_cst_list_prim_u_8_strict *electrum_url,
struct wire_cst_list_prim_u_8_loose *tx_bytes);

void frbgen_lwk_dart_wire__crate__api__wallet__wallet_build_asset_tx(int64_t port_,
struct wire_cst_wallet *that,
uint64_t sats,
struct wire_cst_list_prim_u_8_strict *out_address,
float fee_rate,
struct wire_cst_list_prim_u_8_strict *asset);

void frbgen_lwk_dart_wire__crate__api__wallet__wallet_build_lbtc_tx(int64_t port_,
struct wire_cst_wallet *that,
uint64_t sats,
struct wire_cst_list_prim_u_8_strict *out_address,
float fee_rate,
bool drain);

void frbgen_lwk_dart_wire__crate__api__wallet__wallet_decode_tx(int64_t port_,
struct wire_cst_wallet *that,
struct wire_cst_list_prim_u_8_strict *pset);

void frbgen_lwk_dart_wire_wallet_descriptor(int64_t port_, struct wire_cst_wallet *that);
void frbgen_lwk_dart_wire__crate__api__wallet__wallet_descriptor(int64_t port_,
struct wire_cst_wallet *that);

void frbgen_lwk_dart_wire_wallet_init(int64_t port_,
int32_t network,
struct wire_cst_list_prim_u_8_strict *dbpath,
struct wire_cst_descriptor *descriptor);
void frbgen_lwk_dart_wire__crate__api__wallet__wallet_init(int64_t port_,
int32_t network,
struct wire_cst_list_prim_u_8_strict *dbpath,
struct wire_cst_descriptor *descriptor);

void frbgen_lwk_dart_wire_wallet_sign_tx(int64_t port_,
struct wire_cst_wallet *that,
int32_t network,
struct wire_cst_list_prim_u_8_strict *pset,
struct wire_cst_list_prim_u_8_strict *mnemonic);
void frbgen_lwk_dart_wire__crate__api__wallet__wallet_sign_tx(int64_t port_,
struct wire_cst_wallet *that,
int32_t network,
struct wire_cst_list_prim_u_8_strict *pset,
struct wire_cst_list_prim_u_8_strict *mnemonic);

void frbgen_lwk_dart_wire_wallet_signed_pset_with_extra_details(int64_t port_,
struct wire_cst_wallet *that,
int32_t network,
struct wire_cst_list_prim_u_8_strict *pset,
struct wire_cst_list_prim_u_8_strict *mnemonic);
void frbgen_lwk_dart_wire__crate__api__wallet__wallet_signed_pset_with_extra_details(int64_t port_,
struct wire_cst_wallet *that,
int32_t network,
struct wire_cst_list_prim_u_8_strict *pset,
struct wire_cst_list_prim_u_8_strict *mnemonic);

void frbgen_lwk_dart_wire_wallet_sync(int64_t port_,
struct wire_cst_wallet *that,
struct wire_cst_list_prim_u_8_strict *electrum_url);
void frbgen_lwk_dart_wire__crate__api__wallet__wallet_sync(int64_t port_,
struct wire_cst_wallet *that,
struct wire_cst_list_prim_u_8_strict *electrum_url);

void frbgen_lwk_dart_wire_wallet_txs(int64_t port_, struct wire_cst_wallet *that);
void frbgen_lwk_dart_wire__crate__api__wallet__wallet_txs(int64_t port_,
struct wire_cst_wallet *that);

void frbgen_lwk_dart_wire_wallet_utxos(int64_t port_, struct wire_cst_wallet *that);
void frbgen_lwk_dart_wire__crate__api__wallet__wallet_utxos(int64_t port_,
struct wire_cst_wallet *that);

void frbgen_lwk_dart_rust_arc_increment_strong_count_RustOpaque_Mutexlwk_wolletWollet(const void *ptr);

Expand Down Expand Up @@ -212,25 +218,25 @@ static int64_t dummy_method_to_enforce_bundling(void) {
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_cst_new_list_tx_out);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_rust_arc_decrement_strong_count_RustOpaque_Mutexlwk_wolletWollet);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_rust_arc_increment_strong_count_RustOpaque_Mutexlwk_wolletWollet);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_address_address_from_script);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_address_validate);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_blockchain_test);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_descriptor_new_confidential);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_address);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_address_last_unused);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_balances);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_blinding_key);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_broadcast_tx);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_build_asset_tx);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_build_lbtc_tx);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_decode_tx);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_descriptor);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_init);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_sign_tx);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_signed_pset_with_extra_details);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_sync);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_txs);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire_wallet_utxos);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__descriptor__descriptor_new_confidential);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__types__address_address_from_script);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__types__address_validate);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__types__blockchain_test);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_address);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_address_last_unused);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_balances);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_blinding_key);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_broadcast_tx);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_build_asset_tx);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_build_lbtc_tx);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_decode_tx);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_descriptor);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_init);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_sign_tx);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_signed_pset_with_extra_details);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_sync);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_txs);
dummy_var ^= ((int64_t) (void*) frbgen_lwk_dart_wire__crate__api__wallet__wallet_utxos);
dummy_var ^= ((int64_t) (void*) store_dart_post_cobject);
return dummy_var;
}
10 changes: 6 additions & 4 deletions lib/src/generated/api/descriptor.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// This file is automatically generated, so please do not edit it.
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.31.
// Generated by `flutter_rust_bridge`@ 2.0.0.

// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import

Expand All @@ -8,6 +8,8 @@ import 'error.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import 'types.dart';

// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `fmt`

class Descriptor {
final String ctDescriptor;

Expand All @@ -16,9 +18,9 @@ class Descriptor {
});

static Future<Descriptor> newConfidential(
{required Network network, required String mnemonic, dynamic hint}) =>
LwkCore.instance.api.descriptorNewConfidential(
network: network, mnemonic: mnemonic, hint: hint);
{required Network network, required String mnemonic}) =>
LwkCore.instance.api.crateApiDescriptorDescriptorNewConfidential(
network: network, mnemonic: mnemonic);

@override
int get hashCode => ctDescriptor.hashCode;
Expand Down
4 changes: 3 additions & 1 deletion lib/src/generated/api/error.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// This file is automatically generated, so please do not edit it.
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.31.
// Generated by `flutter_rust_bridge`@ 2.0.0.

// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import

Expand All @@ -8,6 +8,8 @@ import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import 'package:freezed_annotation/freezed_annotation.dart' hide protected;
part 'error.freezed.dart';

// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `fmt`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from`

/// Possible errors emitted
@freezed
class LwkError with _$LwkError implements FrbException {
Expand Down
Loading

0 comments on commit 19f8ebb

Please sign in to comment.