From 4868eb9220962a4176a7ed0fc7c809c6200e71a0 Mon Sep 17 00:00:00 2001 From: cyan Date: Mon, 19 May 2025 12:09:32 +0200 Subject: feat: callback-based ledger connection (#137) * feat: callback-based ledger connection * int -> void use sendToLedgerDeviceCallback only when needed * fix(ledger): fix binds, make functions static * update ledger patch * monero.dart: add ledger callback api --- impls/monero.dart/lib/monero.dart | 48 ++++--- impls/monero.dart/lib/src/checksum_monero.dart | 4 +- .../lib/src/generated_bindings_monero.g.dart | 146 +++++++++------------ impls/monero.dart/lib/src/monero.dart | 51 ++++--- impls/monero.dart/lib/src/wallet2.dart | 9 -- impls/monero.ts/checksum_monero.ts | 4 +- 6 files changed, 120 insertions(+), 142 deletions(-) (limited to 'impls') diff --git a/impls/monero.dart/lib/monero.dart b/impls/monero.dart/lib/monero.dart index 17f0a13..a80924e 100644 --- a/impls/monero.dart/lib/monero.dart +++ b/impls/monero.dart/lib/monero.dart @@ -3515,87 +3515,95 @@ int MONERO_Wallet_getBytesSent(wallet ptr) { } @Deprecated("TODO") -bool Wallet_getStateIsConnected(wallet ptr) { +bool Wallet_getStateIsConnected() { debugStart?.call('MONERO_Wallet_getStateIsConnected'); lib ??= MoneroC(DynamicLibrary.open(libPath)); - final ret = lib!.MONERO_Wallet_getStateIsConnected(ptr); + final ret = lib!.MONERO_Wallet_getStateIsConnected(); debugEnd?.call('MONERO_Wallet_getStateIsConnected'); return ret; } @Deprecated("TODO") -Pointer Wallet_getSendToDevice(wallet ptr) { +Pointer Wallet_getSendToDevice() { debugStart?.call('MONERO_Wallet_getSendToDevice'); lib ??= MoneroC(DynamicLibrary.open(libPath)); - final ret = lib!.MONERO_Wallet_getSendToDevice(ptr); + final ret = lib!.MONERO_Wallet_getSendToDevice(); debugEnd?.call('MONERO_Wallet_getSendToDevice'); return ret; } @Deprecated("TODO") -int Wallet_getSendToDeviceLength(wallet ptr) { +int Wallet_getSendToDeviceLength() { debugStart?.call('MONERO_Wallet_getSendToDeviceLength'); lib ??= MoneroC(DynamicLibrary.open(libPath)); - final ret = lib!.MONERO_Wallet_getSendToDeviceLength(ptr); + final ret = lib!.MONERO_Wallet_getSendToDeviceLength(); debugEnd?.call('MONERO_Wallet_getSendToDeviceLength'); return ret; } @Deprecated("TODO") -Pointer Wallet_getReceivedFromDevice(wallet ptr) { +Pointer Wallet_getReceivedFromDevice() { debugStart?.call('MONERO_Wallet_getReceivedFromDevice'); lib ??= MoneroC(DynamicLibrary.open(libPath)); - final ret = lib!.MONERO_Wallet_getReceivedFromDevice(ptr); + final ret = lib!.MONERO_Wallet_getReceivedFromDevice(); debugEnd?.call('MONERO_Wallet_getReceivedFromDevice'); return ret; } @Deprecated("TODO") -int Wallet_getReceivedFromDeviceLength(wallet ptr) { +int Wallet_getReceivedFromDeviceLength() { debugStart?.call('MONERO_Wallet_getReceivedFromDeviceLength'); lib ??= MoneroC(DynamicLibrary.open(libPath)); - final ret = lib!.MONERO_Wallet_getReceivedFromDeviceLength(ptr); + final ret = lib!.MONERO_Wallet_getReceivedFromDeviceLength(); debugEnd?.call('MONERO_Wallet_getReceivedFromDeviceLength'); return ret; } @Deprecated("TODO") -bool Wallet_getWaitsForDeviceSend(wallet ptr) { +bool Wallet_getWaitsForDeviceSend() { debugStart?.call('MONERO_Wallet_getWaitsForDeviceSend'); lib ??= MoneroC(DynamicLibrary.open(libPath)); - final ret = lib!.MONERO_Wallet_getWaitsForDeviceSend(ptr); + final ret = lib!.MONERO_Wallet_getWaitsForDeviceSend(); debugEnd?.call('MONERO_Wallet_getWaitsForDeviceSend'); return ret; } @Deprecated("TODO") -bool Wallet_getWaitsForDeviceReceive(wallet ptr) { +bool Wallet_getWaitsForDeviceReceive() { debugStart?.call('MONERO_Wallet_getWaitsForDeviceReceive'); lib ??= MoneroC(DynamicLibrary.open(libPath)); - final ret = lib!.MONERO_Wallet_getWaitsForDeviceReceive(ptr); + final ret = lib!.MONERO_Wallet_getWaitsForDeviceReceive(); debugEnd?.call('MONERO_Wallet_getWaitsForDeviceReceive'); return ret; } @Deprecated("TODO") -void Wallet_setDeviceReceivedData( - wallet ptr, Pointer data, int len) { +void Wallet_setDeviceReceivedData(Pointer data, int len) { debugStart?.call('MONERO_Wallet_setDeviceReceivedData'); lib ??= MoneroC(DynamicLibrary.open(libPath)); - final ret = lib!.MONERO_Wallet_setDeviceReceivedData(ptr, data, len); + final ret = lib!.MONERO_Wallet_setDeviceReceivedData(data, len); debugEnd?.call('MONERO_Wallet_setDeviceReceivedData'); return ret; } @Deprecated("TODO") -void Wallet_setDeviceSendData(wallet ptr, Pointer data, int len) { +void Wallet_setDeviceSendData(Pointer data, int len) { debugStart?.call('MONERO_Wallet_setDeviceSendData'); lib ??= MoneroC(DynamicLibrary.open(libPath)); - final ret = lib!.MONERO_Wallet_setDeviceSendData(ptr, data, len); + final ret = lib!.MONERO_Wallet_setDeviceSendData(data, len); debugEnd?.call('MONERO_Wallet_setDeviceSendData'); return ret; } - + +@Deprecated("TODO") +void Wallet_setLedgerCallback(Pointer, UnsignedInt)>> callback) { + debugStart?.call('MONERO_Wallet_setDeviceSendData'); + lib ??= MoneroC(DynamicLibrary.open(libPath)); + final ret = lib!.MONERO_Wallet_setLedgerCallback(callback); + debugEnd?.call('MONERO_Wallet_setDeviceSendData'); + return ret; +} + // WalletManager @Deprecated("TODO") typedef WalletManager = Pointer; diff --git a/impls/monero.dart/lib/src/checksum_monero.dart b/impls/monero.dart/lib/src/checksum_monero.dart index b907f7c..fdbfbaa 100644 --- a/impls/monero.dart/lib/src/checksum_monero.dart +++ b/impls/monero.dart/lib/src/checksum_monero.dart @@ -1,4 +1,4 @@ // ignore_for_file: constant_identifier_names -const String wallet2_api_c_h_sha256 = "9e80c4b59a0509aa02fbf01e8df2881b89f82225d1765bfa7856cbdbaf7af116"; -const String wallet2_api_c_cpp_sha256 = "d229507db508e574bd2badf4819a38dbead8c16a84311ad32c22c887a6003439-0232839913b13cf0ab0bb7ad25fff0c05f37d2fe"; +const String wallet2_api_c_h_sha256 = "91218f60e937753a606b1db899ee2ed66a1b02144eb2d79b950ce59804397f84"; +const String wallet2_api_c_cpp_sha256 = "282128494f3419c128dff7ed67daadd9c2ad0600d10557e829df03d9bc1ad891-0232839913b13cf0ab0bb7ad25fff0c05f37d2fe"; const String wallet2_api_c_exp_sha256 = "d0f95f1f3bc49f1f59fe4eb0b61826128d7d3bb75405d5a01a252d02db03097d"; diff --git a/impls/monero.dart/lib/src/generated_bindings_monero.g.dart b/impls/monero.dart/lib/src/generated_bindings_monero.g.dart index 77e2899..81649b1 100644 --- a/impls/monero.dart/lib/src/generated_bindings_monero.g.dart +++ b/impls/monero.dart/lib/src/generated_bindings_monero.g.dart @@ -4351,120 +4351,83 @@ class MoneroC { late final _MONERO_Wallet_getBytesSent = _MONERO_Wallet_getBytesSentPtr .asFunction)>(); - bool MONERO_Wallet_getStateIsConnected( - ffi.Pointer wallet_ptr, - ) { - return _MONERO_Wallet_getStateIsConnected( - wallet_ptr, - ); + bool MONERO_Wallet_getStateIsConnected() { + return _MONERO_Wallet_getStateIsConnected(); } late final _MONERO_Wallet_getStateIsConnectedPtr = - _lookup)>>( + _lookup>( 'MONERO_Wallet_getStateIsConnected'); late final _MONERO_Wallet_getStateIsConnected = - _MONERO_Wallet_getStateIsConnectedPtr.asFunction< - bool Function(ffi.Pointer)>(); + _MONERO_Wallet_getStateIsConnectedPtr.asFunction(); - ffi.Pointer MONERO_Wallet_getSendToDevice( - ffi.Pointer wallet_ptr, - ) { - return _MONERO_Wallet_getSendToDevice( - wallet_ptr, - ); + ffi.Pointer MONERO_Wallet_getSendToDevice() { + return _MONERO_Wallet_getSendToDevice(); } - late final _MONERO_Wallet_getSendToDevicePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer)>>('MONERO_Wallet_getSendToDevice'); - late final _MONERO_Wallet_getSendToDevice = - _MONERO_Wallet_getSendToDevicePtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + late final _MONERO_Wallet_getSendToDevicePtr = + _lookup Function()>>( + 'MONERO_Wallet_getSendToDevice'); + late final _MONERO_Wallet_getSendToDevice = _MONERO_Wallet_getSendToDevicePtr + .asFunction Function()>(); - int MONERO_Wallet_getSendToDeviceLength( - ffi.Pointer wallet_ptr, - ) { - return _MONERO_Wallet_getSendToDeviceLength( - wallet_ptr, - ); + int MONERO_Wallet_getSendToDeviceLength() { + return _MONERO_Wallet_getSendToDeviceLength(); } late final _MONERO_Wallet_getSendToDeviceLengthPtr = - _lookup)>>( + _lookup>( 'MONERO_Wallet_getSendToDeviceLength'); late final _MONERO_Wallet_getSendToDeviceLength = - _MONERO_Wallet_getSendToDeviceLengthPtr.asFunction< - int Function(ffi.Pointer)>(); + _MONERO_Wallet_getSendToDeviceLengthPtr.asFunction(); - ffi.Pointer MONERO_Wallet_getReceivedFromDevice( - ffi.Pointer wallet_ptr, - ) { - return _MONERO_Wallet_getReceivedFromDevice( - wallet_ptr, - ); + ffi.Pointer MONERO_Wallet_getReceivedFromDevice() { + return _MONERO_Wallet_getReceivedFromDevice(); } - late final _MONERO_Wallet_getReceivedFromDevicePtr = _lookup< - ffi.NativeFunction< - ffi.Pointer Function( - ffi.Pointer)>>('MONERO_Wallet_getReceivedFromDevice'); + late final _MONERO_Wallet_getReceivedFromDevicePtr = + _lookup Function()>>( + 'MONERO_Wallet_getReceivedFromDevice'); late final _MONERO_Wallet_getReceivedFromDevice = _MONERO_Wallet_getReceivedFromDevicePtr.asFunction< - ffi.Pointer Function(ffi.Pointer)>(); + ffi.Pointer Function()>(); - int MONERO_Wallet_getReceivedFromDeviceLength( - ffi.Pointer wallet_ptr, - ) { - return _MONERO_Wallet_getReceivedFromDeviceLength( - wallet_ptr, - ); + int MONERO_Wallet_getReceivedFromDeviceLength() { + return _MONERO_Wallet_getReceivedFromDeviceLength(); } late final _MONERO_Wallet_getReceivedFromDeviceLengthPtr = - _lookup)>>( + _lookup>( 'MONERO_Wallet_getReceivedFromDeviceLength'); late final _MONERO_Wallet_getReceivedFromDeviceLength = _MONERO_Wallet_getReceivedFromDeviceLengthPtr.asFunction< - int Function(ffi.Pointer)>(); + int Function()>(); - bool MONERO_Wallet_getWaitsForDeviceSend( - ffi.Pointer wallet_ptr, - ) { - return _MONERO_Wallet_getWaitsForDeviceSend( - wallet_ptr, - ); + bool MONERO_Wallet_getWaitsForDeviceSend() { + return _MONERO_Wallet_getWaitsForDeviceSend(); } late final _MONERO_Wallet_getWaitsForDeviceSendPtr = - _lookup)>>( + _lookup>( 'MONERO_Wallet_getWaitsForDeviceSend'); late final _MONERO_Wallet_getWaitsForDeviceSend = - _MONERO_Wallet_getWaitsForDeviceSendPtr.asFunction< - bool Function(ffi.Pointer)>(); + _MONERO_Wallet_getWaitsForDeviceSendPtr.asFunction(); - bool MONERO_Wallet_getWaitsForDeviceReceive( - ffi.Pointer wallet_ptr, - ) { - return _MONERO_Wallet_getWaitsForDeviceReceive( - wallet_ptr, - ); + bool MONERO_Wallet_getWaitsForDeviceReceive() { + return _MONERO_Wallet_getWaitsForDeviceReceive(); } late final _MONERO_Wallet_getWaitsForDeviceReceivePtr = - _lookup)>>( + _lookup>( 'MONERO_Wallet_getWaitsForDeviceReceive'); late final _MONERO_Wallet_getWaitsForDeviceReceive = - _MONERO_Wallet_getWaitsForDeviceReceivePtr.asFunction< - bool Function(ffi.Pointer)>(); + _MONERO_Wallet_getWaitsForDeviceReceivePtr.asFunction(); void MONERO_Wallet_setDeviceReceivedData( - ffi.Pointer wallet_ptr, ffi.Pointer data, int len, ) { return _MONERO_Wallet_setDeviceReceivedData( - wallet_ptr, data, len, ); @@ -4472,22 +4435,17 @@ class MoneroC { late final _MONERO_Wallet_setDeviceReceivedDataPtr = _lookup< ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, + ffi.Void Function(ffi.Pointer, ffi.Size)>>('MONERO_Wallet_setDeviceReceivedData'); late final _MONERO_Wallet_setDeviceReceivedData = _MONERO_Wallet_setDeviceReceivedDataPtr.asFunction< - void Function( - ffi.Pointer, ffi.Pointer, int)>(); + void Function(ffi.Pointer, int)>(); void MONERO_Wallet_setDeviceSendData( - ffi.Pointer wallet_ptr, ffi.Pointer data, int len, ) { return _MONERO_Wallet_setDeviceSendData( - wallet_ptr, data, len, ); @@ -4495,14 +4453,40 @@ class MoneroC { late final _MONERO_Wallet_setDeviceSendDataPtr = _lookup< ffi.NativeFunction< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, + ffi.Void Function(ffi.Pointer, ffi.Size)>>('MONERO_Wallet_setDeviceSendData'); late final _MONERO_Wallet_setDeviceSendData = _MONERO_Wallet_setDeviceSendDataPtr.asFunction< + void Function(ffi.Pointer, int)>(); + + void MONERO_Wallet_setLedgerCallback( + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer command, + ffi.UnsignedInt cmd_len)>> + sendToLedgerDevice, + ) { + return _MONERO_Wallet_setLedgerCallback( + sendToLedgerDevice, + ); + } + + late final _MONERO_Wallet_setLedgerCallbackPtr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer command, + ffi.UnsignedInt cmd_len)>>)>>( + 'MONERO_Wallet_setLedgerCallback'); + late final _MONERO_Wallet_setLedgerCallback = + _MONERO_Wallet_setLedgerCallbackPtr.asFunction< void Function( - ffi.Pointer, ffi.Pointer, int)>(); + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer command, + ffi.UnsignedInt cmd_len)>>)>(); ffi.Pointer MONERO_WalletManager_createWallet( ffi.Pointer wm_ptr, diff --git a/impls/monero.dart/lib/src/monero.dart b/impls/monero.dart/lib/src/monero.dart index b2eb8c7..e142d6b 100644 --- a/impls/monero.dart/lib/src/monero.dart +++ b/impls/monero.dart/lib/src/monero.dart @@ -1033,14 +1033,12 @@ class MoneroWallet implements Wallet2Wallet { return monero.Wallet_getPolyseed(walletPtr, passphrase: passphrase); } - @override - Pointer getReceivedFromDevice() { - return monero.Wallet_getReceivedFromDevice(walletPtr); + static Pointer getReceivedFromDevice() { + return monero.Wallet_getReceivedFromDevice(); } - @override - int getReceivedFromDeviceLength() { - return monero.Wallet_getReceivedFromDeviceLength(walletPtr); + static int getReceivedFromDeviceLength() { + return monero.Wallet_getReceivedFromDeviceLength(); } @override @@ -1052,20 +1050,17 @@ class MoneroWallet implements Wallet2Wallet { String getSeedLanguage() { return monero.Wallet_getSeedLanguage(walletPtr); } - - @override - Pointer getSendToDevice() { - return monero.Wallet_getSendToDevice(walletPtr); + + static Pointer getSendToDevice() { + return monero.Wallet_getSendToDevice(); } - @override - int getSendToDeviceLength() { - return monero.Wallet_getSendToDeviceLength(walletPtr); + static int getSendToDeviceLength() { + return monero.Wallet_getSendToDeviceLength(); } - @override - bool getStateIsConnected() { - return monero.Wallet_getStateIsConnected(walletPtr); + static bool getStateIsConnected() { + return monero.Wallet_getStateIsConnected(); } @override @@ -1083,14 +1078,12 @@ class MoneroWallet implements Wallet2Wallet { return monero.Wallet_getUserNote(walletPtr, txid: txid); } - @override - bool getWaitsForDeviceReceive() { - return monero.Wallet_getWaitsForDeviceReceive(walletPtr); + static bool getWaitsForDeviceReceive() { + return monero.Wallet_getWaitsForDeviceReceive(); } - @override - bool getWaitsForDeviceSend() { - return monero.Wallet_getWaitsForDeviceSend(walletPtr); + static bool getWaitsForDeviceSend() { + return monero.Wallet_getWaitsForDeviceSend(); } @override @@ -1357,14 +1350,16 @@ class MoneroWallet implements Wallet2Wallet { return monero.Wallet_setDevicePin(walletPtr, passphrase: passphrase); } - @override - void setDeviceReceivedData(Pointer data, int len) { - monero.Wallet_setDeviceReceivedData(walletPtr, data, len); + static void setDeviceReceivedData(Pointer data, int len) { + monero.Wallet_setDeviceReceivedData(data, len); } - @override - void setDeviceSendData(Pointer data, int len) { - monero.Wallet_setDeviceSendData(walletPtr, data, len); + static void setDeviceSendData(Pointer data, int len) { + monero.Wallet_setDeviceSendData(data, len); + } + + static void setLedgerCallback(Pointer, UnsignedInt)>> callback) { + monero.Wallet_setLedgerCallback(callback); } @override diff --git a/impls/monero.dart/lib/src/wallet2.dart b/impls/monero.dart/lib/src/wallet2.dart index 2c07548..8c41ffa 100644 --- a/impls/monero.dart/lib/src/wallet2.dart +++ b/impls/monero.dart/lib/src/wallet2.dart @@ -364,15 +364,6 @@ abstract class Wallet2Wallet { String deviceShowAddress({required int accountIndex, required int addressIndex}); bool reconnectDevice(); int getBytesReceived(); - bool getStateIsConnected(); - Pointer getSendToDevice(); - int getSendToDeviceLength(); - Pointer getReceivedFromDevice(); - int getReceivedFromDeviceLength(); - bool getWaitsForDeviceSend(); - bool getWaitsForDeviceReceive(); - void setDeviceReceivedData(Pointer data, int len); - void setDeviceSendData(Pointer data, int len); int getBytesSent(); Wallet2WalletListener getWalletListener(); } diff --git a/impls/monero.ts/checksum_monero.ts b/impls/monero.ts/checksum_monero.ts index 0972f78..7ed01a3 100644 --- a/impls/monero.ts/checksum_monero.ts +++ b/impls/monero.ts/checksum_monero.ts @@ -1,5 +1,5 @@ export const moneroChecksum = { - wallet2_api_c_h_sha256: "9e80c4b59a0509aa02fbf01e8df2881b89f82225d1765bfa7856cbdbaf7af116", - wallet2_api_c_cpp_sha256: "d229507db508e574bd2badf4819a38dbead8c16a84311ad32c22c887a6003439-0232839913b13cf0ab0bb7ad25fff0c05f37d2fe", + wallet2_api_c_h_sha256: "91218f60e937753a606b1db899ee2ed66a1b02144eb2d79b950ce59804397f84", + wallet2_api_c_cpp_sha256: "282128494f3419c128dff7ed67daadd9c2ad0600d10557e829df03d9bc1ad891-0232839913b13cf0ab0bb7ad25fff0c05f37d2fe", wallet2_api_c_exp_sha256: "d0f95f1f3bc49f1f59fe4eb0b61826128d7d3bb75405d5a01a252d02db03097d", } -- cgit v1.2.3