* 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>
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?