summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsneurlax <sneurlax@gmail.com>2024-10-10 17:10:15 -0500
committerGitHub <noreply@github.com>2024-10-10 17:10:15 -0500
commit440f6c31c764296f5b6856dcd8ba759cfd17d1a0 (patch)
tree9519899493ab0f686e99b8705e0d5770a80fec9a
parenteb7cc583ef7ce825520795fde2b514a304c5548c (diff)
parentfdd92dff2d912ac2a82c8138f1002cc7fce942bc (diff)
Merge branch 'master' into rust
-rw-r--r--.github/workflows/full_check.yaml232
-rw-r--r--.gitmodules1
-rwxr-xr-xexternal/ios/libsodium_apple-ios.sh4
m---------external/libexpat0
m---------external/libsodium0
m---------external/libzmq0
-rw-r--r--impls/monero.c#/README.md7
-rw-r--r--impls/monero.c#/monero_wrapper.cs184
-rw-r--r--impls/monero.dart/pubspec.yaml2
9 files changed, 196 insertions, 234 deletions
diff --git a/.github/workflows/full_check.yaml b/.github/workflows/full_check.yaml
index 67e86a1..21aebd4 100644
--- a/.github/workflows/full_check.yaml
+++ b/.github/workflows/full_check.yaml
@@ -468,236 +468,6 @@ jobs:
name: ios ${{ matrix.coin }}
path: release/${{ matrix.coin }}
- # Extra stuff below, not strictly required for monero_c, but we do want to ensure
- # that nothing really broke the app when we work on some feature.
-
- wallet_cake_android:
- needs: [ lib_android ]
- runs-on: ubuntu-20.04
- env:
- STORE_PASS: test@cake_wallet
- KEY_PASS: test@cake_wallet
- PR_NUMBER: ${{ github.ref_name }}
-
- steps:
- - name: set branch name
- run: echo "BRANCH_NAME=${{ github.ref_name }}" >> $GITHUB_ENV
-
- - uses: actions/download-artifact@v4
- with:
- name: android monero
- path: release/monero
- - uses: actions/download-artifact@v4
- with:
- name: android wownero
- path: release/wownero
-
- - name: unpack and move monero_c
- run: |
- unxz -f -k release/*/*.xz
- mv release /opt/monero_c_release
-
- - name: Free Disk Space (Ubuntu)
- uses: insightsengineering/disk-space-reclaimer@v1
- with:
- tools-cache: true
- android: false
- dotnet: true
- haskell: true
- large-packages: true
- swap-storage: true
- docker-images: true
-
- - uses: actions/setup-java@v4
- with:
- distribution: 'zulu'
- java-version: "17.x"
- - name: Configure placeholder git details
- run: |
- git config --global user.email "CI@cakewallet.com"
- git config --global user.name "Cake Github Actions"
- - name: Flutter action
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.19.6"
- channel: stable
-
- - name: Install package dependencies
- run: sudo apt-get install -y curl unzip automake build-essential file pkg-config git python libtool libtinfo5 cmake clang
-
- - name: Execute Build and Setup Commands
- run: |
- sudo mkdir -p /opt/android
- sudo chown $USER /opt/android
- cd /opt/android
- -y curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- cargo install cargo-ndk
- git clone https://github.com/cake-tech/cake_wallet.git --branch main --depth=1
- cd cake_wallet/scripts/android/
- ./install_ndk.sh
- source ./app_env.sh cakewallet
- chmod +x pubspec_gen.sh
- ./app_config.sh
- mkdir -p /opt/android/cake_wallet/scripts/monero_c
- mv /opt/monero_c_release /opt/android/cake_wallet/scripts/monero_c/release
-
- - name: Install Flutter dependencies
- run: |
- cd /opt/android/cake_wallet
- flutter pub get
-
- - name: Generate KeyStore
- run: |
- cd /opt/android/cake_wallet/android/app
- keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias testKey -noprompt -dname "CN=CakeWallet, OU=CakeWallet, O=CakeWallet, L=Florida, S=America, C=USA" -storepass $STORE_PASS -keypass $KEY_PASS
-
- - name: Generate key properties
- run: |
- cd /opt/android/cake_wallet
- flutter packages pub run tool/generate_android_key_properties.dart keyAlias=testKey storeFile=key.jks storePassword=$STORE_PASS keyPassword=$KEY_PASS
-
- - name: Generate localization
- run: |
- cd /opt/android/cake_wallet
- flutter packages pub run tool/generate_localization.dart
-
- - name: Build generated code
- run: |
- cd /opt/android/cake_wallet
- ./model_generator.sh
-
- - name: Add secrets
- run: |
- cd /opt/android/cake_wallet
- touch lib/.secrets.g.dart
- touch cw_evm/lib/.secrets.g.dart
- touch cw_solana/lib/.secrets.g.dart
- touch cw_core/lib/.secrets.g.dart
- touch cw_nano/lib/.secrets.g.dart
- touch cw_tron/lib/.secrets.g.dart
- echo "const salt = 'd551f8841584b0ce37edf6fd59177d35';" > lib/.secrets.g.dart
- echo "const keychainSalt = '34c626b6a4f8cb6789897c09';" >> lib/.secrets.g.dart
- echo "const key = 'd8ab7230137ebadeb1c4e429395eced1';" >> lib/.secrets.g.dart
- echo "const walletSalt = 'a9a49562';" >> lib/.secrets.g.dart
- echo "const shortKey = 'c1b21c5050527842350dc8f5';" >> lib/.secrets.g.dart
- echo "const backupSalt = 'b3e42404f90ca8e8';" >> lib/.secrets.g.dart
- echo "const backupKeychainSalt = '9e0f3c4d347bc99509695a86';" >> lib/.secrets.g.dart
- echo "const changeNowApiKey = '';" >> lib/.secrets.g.dart
- echo "const changeNowApiKeyDesktop = '';" >> lib/.secrets.g.dart
- echo "const wyreSecretKey = '';" >> lib/.secrets.g.dart
- echo "const wyreApiKey = '';" >> lib/.secrets.g.dart
- echo "const wyreAccountId = '';" >> lib/.secrets.g.dart
- echo "const moonPayApiKey = '';" >> lib/.secrets.g.dart
- echo "const moonPaySecretKey = '';" >> lib/.secrets.g.dart
- echo "const sideShiftAffiliateId = '';" >> lib/.secrets.g.dart
- echo "const simpleSwapApiKey = '';" >> lib/.secrets.g.dart
- echo "const simpleSwapApiKeyDesktop = '';" >> lib/.secrets.g.dart
- echo "const onramperApiKey = '';" >> lib/.secrets.g.dart
- echo "const anypayToken = '';" >> lib/.secrets.g.dart
- echo "const ioniaClientId = '';" >> lib/.secrets.g.dart
- echo "const twitterBearerToken = '';" >> lib/.secrets.g.dart
- echo "const trocadorApiKey = '';" >> lib/.secrets.g.dart
- echo "const trocadorExchangeMarkup = '';" >> lib/.secrets.g.dart
- echo "const anonPayReferralCode = '';" >> lib/.secrets.g.dart
- echo "const fiatApiKey = '';" >> lib/.secrets.g.dart
- echo "const payfuraApiKey = '';" >> lib/.secrets.g.dart
- echo "const ankrApiKey = '';" >> lib/.secrets.g.dart
- echo "const etherScanApiKey = '';" >> cw_evm/lib/.secrets.g.dart
- echo "const moralisApiKey = '';" >> cw_evm/lib/.secrets.g.dart
- echo "const chatwootWebsiteToken = '';" >> lib/.secrets.g.dart
- echo "const exolixApiKey = '';" >> lib/.secrets.g.dart
- echo "const robinhoodApplicationId = '';" >> lib/.secrets.g.dart
- echo "const exchangeHelperApiKey = '';" >> lib/.secrets.g.dart
- echo "const walletConnectProjectId = '';" >> lib/.secrets.g.dart
- echo "const moralisApiKey = '';" >> lib/.secrets.g.dart
- echo "const polygonScanApiKey = '';" >> cw_evm/lib/.secrets.g.dart
- echo "const ankrApiKey = '';" >> cw_solana/lib/.secrets.g.dart
- echo "const testCakePayApiKey = '';" >> lib/.secrets.g.dart
- echo "const cakePayApiKey = '';" >> lib/.secrets.g.dart
- echo "const authorization = '';" >> lib/.secrets.g.dart
- echo "const CSRFToken = '';" >> lib/.secrets.g.dart
- echo "const quantexExchangeMarkup = '';" >> lib/.secrets.g.dart
- echo "const nano2ApiKey = '';" >> cw_nano/lib/.secrets.g.dart
- echo "const nanoNowNodesApiKey = '';" >> cw_nano/lib/.secrets.g.dart
- echo "const tronGridApiKey = '';" >> cw_tron/lib/.secrets.g.dart
- echo "const tronNowNodesApiKey = '';" >> cw_tron/lib/.secrets.g.dart
- echo "const stealthExBearerToken = '';" >> lib/.secrets.g.dart
- echo "const stealthExAdditionalFeePercent = '';" >> lib/.secrets.g.dart
- echo "const letsExchangeBearerToken = '';" >> lib/.secrets.g.dart
- echo "const letsExchangeAffiliateId = '';" >> lib/.secrets.g.dart
- echo "const etherScanApiKey = '';" >> lib/.secrets.g.dart
- echo "const polygonScanApiKey = '';" >> lib/.secrets.g.dart
-
- - name: Rename app
- run: |
- echo -e "id=com.cakewallet.moneroc_${{ env.PR_NUMBER }}\nname=${{ github.ref_name }}" | sed 's/[^a-zA-Z0-9=\n.]//g' > /opt/android/cake_wallet/android/app.properties
-
- - name: Build
- run: |
- cd /opt/android/cake_wallet
- flutter build apk --release --split-per-abi
-
- - name: Upload APK
- uses: actions/upload-artifact@v4
- with:
- name: cake wallet android
- path: /opt/android/cake_wallet/build/app/outputs/flutter-apk/*.apk
-
- - name: remove android_ndk
- run: |
- rm -rf monero/contrib/depends/built/*/android_ndk
- rm -rf monero/contrib/depends/sources/android-ndk-r26d-linux.zip
- rm -rf wownero/contrib/depends/built/*/android_ndk
- rm -rf wownero/contrib/depends/sources/android-ndk-r26d-linux.zip
-
- #wallet_xmruw_android:
- # needs: [ lib_android ]
- # strategy:
- # matrix:
- # coin: [monero, wownero]
- # runs-on: ubuntu-latest
- # steps:
- # - name: Install dependencies
- # run: |
- # sudo apt update
- # sudo apt install -y build-essential pkg-config autoconf libtool ccache make cmake gcc g++ git curl lbzip2 libtinfo5 gperf unzip python-is-python3 jq
- # - uses: actions/download-artifact@v4
- # with:
- # name: android ${{ matrix.coin }}
- # path: release/${{ matrix.coin }}
- # - name: clone xmruw
- # run: |
- # git clone https://github.com/mrcyjanek/unnamed_monero_wallet
- # cd unnamed_monero_wallet
- # cp -a .fvm* ..
- # - uses: kuhnroyal/flutter-fvm-config-action@v2
- # id: fvm-config-action
- # - uses: subosito/flutter-action@v2
- # with:
- # flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }}
- # channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }}
- # - uses: actions/setup-java@v4
- # with:
- # distribution: 'zulu'
- # java-version: '17'
- # - name: build xmruw (${{ matrix.coin }})
- # run: |
- # cd unnamed_monero_wallet
- # if [[ "${{ matrix.coin }}" == "monero" ]]; then ./codegen.sh -DCOIN_MONERO -DLIBSTEALTH_DISABLED; fi
- # if [[ "${{ matrix.coin }}" == "wownero" ]]; then ./codegen.sh -DCOIN_WOWNERO -DLIBSTEALTH_DISABLED; fi
- # flutter pub get
- # make version
- # ./build_changelog.sh
- # cp ../release/${{ matrix.coin }}/aarch64-linux-android_libwallet2_api_c.so.xz android/app/src/main/jniLibs/arm64-v8a/lib${{ matrix.coin }}_libwallet2_api_c.so.xz
- # cp ../release/${{ matrix.coin }}/x86_64-linux-android_libwallet2_api_c.so.xz android/app/src/main/jniLibs/x86_64/lib${{ matrix.coin }}_libwallet2_api_c.so.xz
- # cp ../release/${{ matrix.coin }}/armv7a-linux-androideabi_libwallet2_api_c.so.xz android/app/src/main/jniLibs/armeabi-v7a/lib${{ matrix.coin }}_libwallet2_api_c.so.xz
- # unxz -f android/app/src/main/jniLibs/*/*.xz
- # flutter build apk --release --flavor clean_${{ matrix.coin }}
- # - name: Upload APK
- # uses: actions/upload-artifact@v4
- # with:
- # name: ${{ matrix.coin }} xmruw apk
- # path: unnamed_monero_wallet/build/app/outputs/flutter-apk/*.apk
bulk_lib_release:
name: create single release file
runs-on: ubuntu-latest
@@ -821,8 +591,6 @@ jobs:
runs-on: ubuntu-latest
needs: [
lib_mingw, lib_android, lib_linux, lib_sailfishos_aarch64, lib_sailfishos_i486, lib_darwin, lib_macos, lib_ios,
- wallet_cake_android #,
- #wallet_xmruw_android
]
steps:
- uses: actions/github-script@v7
diff --git a/.gitmodules b/.gitmodules
index 42bd1b7..a49395d 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -24,6 +24,7 @@
[submodule "external/libsodium"]
path = external/libsodium
url = https://github.com/jedisct1/libsodium.git
+ branch = stable
[submodule "external/unbound"]
path = external/unbound
url = https://github.com/NLnetLabs/unbound.git
diff --git a/external/ios/libsodium_apple-ios.sh b/external/ios/libsodium_apple-ios.sh
index 8a47a16..963ba32 100755
--- a/external/ios/libsodium_apple-ios.sh
+++ b/external/ios/libsodium_apple-ios.sh
@@ -100,7 +100,9 @@ build_ios() {
mkdir -p "${PREFIX}/tmp"
-echo "Building for iOS..."
+echo "Building for iOS... ($LOG_FILE)"
+./autogen.sh
+./configure
build_ios >"$LOG_FILE" 2>&1 || exit 1
echo "Adding the Clibsodium module map for Swift..."
diff --git a/external/libexpat b/external/libexpat
-Subproject 624da0f593bb8d7e146b9f42b06d8e6c80d032a
+Subproject 038a0bf44f940ad7f7df59cfa5ed6fcb2c63f64
diff --git a/external/libsodium b/external/libsodium
-Subproject 443617d7507498f7477703f0b51cb596d453926
+Subproject 3c6da4b8c27c7d546746eadabc9e2dd6c1fdfc2
diff --git a/external/libzmq b/external/libzmq
-Subproject 64db7d28fea695132834f6d2c5949cfea2f22d0
+Subproject 90b4f410a07222fa2e9a5f53b454a09d4533e45
diff --git a/impls/monero.c#/README.md b/impls/monero.c#/README.md
new file mode 100644
index 0000000..bfbb3b7
--- /dev/null
+++ b/impls/monero.c#/README.md
@@ -0,0 +1,7 @@
+# monero.c#
+
+> C# port for monero
+
+This is not a ready-to-use package (as opposed to monero.dart and monero.ts), but it works. You can check the `monero_wrapper.cs`.
+
+Currently C# code is optimized to be used in Godot.., if you are not planning to use it there - simply do not extend Node class and remove Godot import, if you are planning to use it in production, please let me know - we can work on a better approach to using monero with proper package code in here. \ No newline at end of file
diff --git a/impls/monero.c#/monero_wrapper.cs b/impls/monero.c#/monero_wrapper.cs
new file mode 100644
index 0000000..ce7749d
--- /dev/null
+++ b/impls/monero.c#/monero_wrapper.cs
@@ -0,0 +1,184 @@
+using Godot;
+using System;
+using System.Runtime.InteropServices;
+
+public partial class monero_wrapper : Node
+{
+ public static IntPtr wmPtr = MONERO_WalletManagerFactory_getWalletManager();
+ public static IntPtr wPtr;
+ public static IntPtr pendingTx;
+ public static IntPtr txHistory;
+ public string path = "";
+
+ // Called when the node enters the scene tree for the first time.
+ public override void _Ready()
+ {
+ }
+
+ // Called every frame. 'delta' is the elapsed time since the previous frame.
+ public override void _Process(double delta)
+ {
+ }
+
+ public static bool openWallet(string path, string password) {
+ MONERO_WalletManager_createWallet(wmPtr, path, password, "English", 0);
+ wPtr = MONERO_WalletManager_openWallet(wmPtr, path, password, 0);
+ return MONERO_Wallet_status(wPtr) == 0;
+ }
+
+ public static void initWallet(string daemonAddress, bool useSsl, String proxyString) {
+ //MONERO_Wallet_init(string daemon_password, bool use_ssl, bool lightWallet, string proxy_address);
+ MONERO_Wallet_init(wPtr, daemonAddress, 0, "", "", useSsl, false, proxyString);
+ GD.Print(lastError());
+ MONERO_Wallet_init3(wPtr, "", "", "/dev/shm/godot_moneroc.log", false);
+ GD.Print(lastError());
+ MONERO_Wallet_setTrustedDaemon(wPtr, true);
+ GD.Print(lastError());
+ MONERO_Wallet_refreshAsync(wPtr);
+ GD.Print(lastError());
+ MONERO_Wallet_startRefresh(wPtr);
+ GD.Print(lastError());
+ }
+
+ public static void storeWallet() {
+ MONERO_Wallet_store(wPtr);
+ }
+
+ public static string lastError() {
+ IntPtr resultPtr = MONERO_Wallet_errorString(wPtr);
+ string result = Marshal.PtrToStringAnsi(resultPtr);
+ return result;
+ }
+
+ public static int lastErrorCode() {
+ return MONERO_Wallet_status(wPtr);
+ }
+
+ public static string lastTxError() {
+ IntPtr resultPtr = MONERO_PendingTransaction_errorString(pendingTx);
+ string result = Marshal.PtrToStringAnsi(resultPtr);
+ return result;
+ }
+
+ public static int lastTxErrorCode() {
+ return MONERO_PendingTransaction_status(pendingTx);
+ }
+
+ public static string getAddress(ulong accountIndex, ulong addressIndex) {
+ IntPtr resultPtr = MONERO_Wallet_address(wPtr, accountIndex, addressIndex);
+ string result = Marshal.PtrToStringAnsi(resultPtr);
+ return result;
+ }
+
+ public static ulong getBalance(uint accountIndex) {
+ return MONERO_Wallet_balance(wPtr, accountIndex);
+ }
+
+ public static void createTransaction(string address, ulong amount) {
+ pendingTx = MONERO_Wallet_createTransaction(wPtr, address, "", amount, 0, 0, 0, "", "");
+ MONERO_PendingTransaction_commit(pendingTx, "", false);
+ }
+
+ public static int getTransactionCount() {
+ txHistory = MONERO_Wallet_history(wPtr);
+ MONERO_TransactionHistory_refresh(txHistory);
+ return MONERO_TransactionHistory_count(txHistory);
+ }
+
+ public static int getTransactionDirection(int index) {
+ txHistory = MONERO_Wallet_history(wPtr);
+ IntPtr txPtr = MONERO_TransactionHistory_transaction(txHistory, index);
+ return MONERO_TransactionInfo_direction(txPtr);
+ }
+
+ public static ulong getTransactionAmount(int index) {
+ txHistory = MONERO_Wallet_history(wPtr);
+ IntPtr txPtr = MONERO_TransactionHistory_transaction(txHistory, index);
+ return MONERO_TransactionInfo_amount(txPtr);
+ }
+
+ public static ulong getTransactionTimestamp(int index) {
+ txHistory = MONERO_Wallet_history(wPtr);
+ IntPtr txPtr = MONERO_TransactionHistory_transaction(txHistory, index);
+ return MONERO_TransactionInfo_timestamp(txPtr);
+ }
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern ulong MONERO_TransactionInfo_timestamp(IntPtr txPtr);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern IntPtr MONERO_TransactionHistory_transaction(IntPtr txHistory, int index);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern int MONERO_TransactionInfo_direction(IntPtr txPtr);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern int MONERO_TransactionHistory_count(IntPtr txHistory);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern ulong MONERO_TransactionInfo_amount(IntPtr txPtr);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern IntPtr MONERO_Wallet_history(IntPtr wm_ptr);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern IntPtr MONERO_TransactionHistory_refresh(IntPtr txHistory);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern IntPtr MONERO_WalletManager_createWallet(IntPtr wm_ptr, string path, string password, string language, int networkType);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern IntPtr MONERO_WalletManager_openWallet(IntPtr wm_ptr, string path, string password, int networkType);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern IntPtr MONERO_WalletManagerFactory_getWalletManager();
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern int MONERO_Wallet_status(IntPtr wPtr);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern int MONERO_PendingTransaction_status(IntPtr wPtr);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern bool MONERO_WalletManager_walletExists(IntPtr wmPtr, string path);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern IntPtr MONERO_Wallet_errorString(IntPtr wPtr);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern IntPtr MONERO_PendingTransaction_errorString(IntPtr pendingTx);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern ulong MONERO_Wallet_balance(IntPtr wPtr, uint accountIndex);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern IntPtr MONERO_Wallet_address(IntPtr wPtr, ulong accountIndex, ulong addressIndex);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern IntPtr MONERO_Wallet_createTransaction(IntPtr wallet_ptr, string dst_addr, string payment_id,
+ ulong amount, uint mixin_count,
+ int pendingTransactionPriority,
+ uint subaddr_account,
+ string preferredInputs, string separator);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern bool MONERO_PendingTransaction_commit(IntPtr pendingTx_ptr, string filename, bool overwrite);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern bool MONERO_Wallet_init(IntPtr wallet_ptr, string daemon_address, ulong upper_transaction_size_limit, string daemon_username, string daemon_password, bool use_ssl, bool lightWallet, string proxy_address);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern bool MONERO_Wallet_init3(IntPtr wallet_ptr, string argv0, string default_log_base_name, string log_path, bool console);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern void MONERO_Wallet_setTrustedDaemon(IntPtr wallet_ptr, bool arg);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern void MONERO_Wallet_startRefresh(IntPtr wallet_ptr);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern void MONERO_Wallet_refreshAsync(IntPtr wallet_ptr);
+
+ [DllImport("/usr/lib/monero_libwallet2_api_c.so")]
+ public static extern bool MONERO_Wallet_store(IntPtr wallet_ptr);
+}
diff --git a/impls/monero.dart/pubspec.yaml b/impls/monero.dart/pubspec.yaml
index d85d600..174a781 100644
--- a/impls/monero.dart/pubspec.yaml
+++ b/impls/monero.dart/pubspec.yaml
@@ -10,6 +10,6 @@ dependencies:
ffi: ^2.1.0
dev_dependencies:
- lints: ^4.0.0
+ lints: ^5.0.0
test: ^1.24.0
ffigen: ^14.0.0 \ No newline at end of file