Files
monero_c/impls/monero.dart
cyan fcc2924f31 initial zano commit (#83)
* initial zano commit

* update checksum, fix zano patches on CI

* fix monero builds

* fix cmake command

* fix: devcontainer on x64
ffigen: add zano
zano: add missing free
dart: implement zano

* update boost filenames

* unboost the cmakelists

* fix zano boost issues

* added patch into proper location

* fix various build issues

* [skip ci] update tor-connect

* fix zano builds for ios

* fix apply patches and don't fail-fast

* uncomment build depends for monero

* build_single.sh fix for macos native builds

* disable qemu on arm64 builders from buildjet

* fix boost, fix missing symbols (maybe)

* fix ordering of crypto and ssl libraries

* fix wownero mingw

* fetch zano releases to release-bulk

* build things 'the zano way'

* proper cmake config

* Zano.. yeah...

* Update zano release to 2.0.1.367

* update zano patches

* update zano builds

* update zano build

* fix zano build

* move zlibstatic to the top (this shouldn't matter anyway)

* fix patch location, update tor-connect

* update ci runner

* fix zano build on the CI

* enable zano for other targets

* nvm

* don't use darwin in single release file

* Increase max password length

* build contrib/depends offline

* zano support for macos

* Update dependencies to work on multithread via rosetta2

* different way of adding .patch-applied

* Improve performance of incremental builds

* remove unnecessary patches

* update coin-control patch

* fix test

* remove contrib/depends patches in wownero

* chore: support fallback names in the download_deps util

---------

Co-authored-by: Im-Beast <franik.mateusz@gmail.com>
2025-01-04 09:02:44 +01:00
..
2025-01-04 09:02:44 +01:00
2025-01-04 09:02:44 +01:00
2024-10-21 12:54:58 +02:00
2025-01-04 09:02:44 +01:00

monero.dart

Usage

monero:
  git:
    url: https://github.com/mrcyjanek/monero_c
    ref: master
    path: impls/monero.dart
import 'package: monero/monero.dart' as monero;

void main() {
    final wm = monero.WalletManagerFactory_getWalletManager();
    final w = monero.WalletManager_openWallet({...});
    print(monero.Wallet_balance(w));
}

If you need more advanced usage, to for example use the code in an isolate, some workarounding is required NOTE: from now on you manage your own memory partialy.

Simplest example is this:

final addr = w.address; 
final height = await Isolate.run(() async {
    return monero.lib.MONERO_Wallet_daemonBlockChainHeight(Pointer.fromAddress(addr));
});

It gets even funnier when sending a transaction

final ptrAddr = xmrwPtr!.address;
final dstAddrPtr = txData.recipients!.first.address.toNativeUtf8().address;
final paymentAddrPtr = ''.toNativeUtf8().address;
final preferredInputsPtr = ''.toNativeUtf8().address;
final separatorPtr = ''.toNativeUtf8().address;
final amount = txData.recipients!.first.amount.raw.toInt();
final txPtrAddr = await Isolate.run(
    () {
        monero.lib ??= MoneroC(DynamicLibrary.open(monero.libPath));
        final txPtr = monero.lib!.MONERO_Wallet_createTransaction(
            Pointer.fromAddress(ptrAddr), 
            Pointer.fromAddress(dstAddrPtr).cast(), 
            Pointer.fromAddress(paymentAddrPtr).cast(), 
            amount, 0, 0, 0, 
            Pointer.fromAddress(preferredInputsPtr).cast(), 
            Pointer.fromAddress(separatorPtr).cast(),
        );
        // Nothing hits better than managing memory in GC language :)
        return txPtr.address;
    },
    debugName: 'MONERO_Wallet_createTransaction',
);

final txPtr = Pointer.fromAddress(txPtrAddr).cast<Void>();
calloc.free(Pointer.fromAddress(dstAddrPtr));
calloc.free(Pointer.fromAddress(paymentAddrPtr));
calloc.free(Pointer.fromAddress(preferredInputsPtr));
calloc.free(Pointer.fromAddress(separatorPtr));

Async api will be made as a part of the generator update, too much effort under current design.

Building

$ bash update_bindings.sh
$ # you are done, this is a library, what more did you expect?