Skip to content

cake-tech/monero.dart

This branch is 7 commits behind MrCyjaneK/monero.dart:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4fc722c · Jun 26, 2024

History

75 Commits
Jun 26, 2024
Jun 26, 2024
Jun 26, 2024
Jun 15, 2024
May 16, 2024
Dec 28, 2023
Dec 28, 2023
Apr 19, 2024
Dec 28, 2023
Apr 19, 2024
Apr 19, 2024
Jun 26, 2024
Jun 26, 2024
Jan 20, 2024
Jun 26, 2024
May 1, 2024

Repository files navigation

monero.dart

Usage

$ dart pub add monero --git-url=https://git.mrcyjanek.net/mrcyjanek/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?

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Dart 82.4%
  • C++ 17.5%
  • Shell 0.1%