diff options
Diffstat (limited to 'impls/monero.dart/README.md')
| -rw-r--r-- | impls/monero.dart/README.md | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/impls/monero.dart/README.md b/impls/monero.dart/README.md new file mode 100644 index 0000000..72504e7 --- /dev/null +++ b/impls/monero.dart/README.md @@ -0,0 +1,74 @@ +# monero.dart + +## Usage + +``` +monero: + git: + url: https://github.com/mrcyjanek/monero_c + ref: master + path: impls/monero.dart +``` + +```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: + +```dart +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 + +```dart +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 +$ bash update_bindings.sh +$ # you are done, this is a library, what more did you expect? +```
\ No newline at end of file |
