From bc1979712597da9729c8b0b93230536577023479 Mon Sep 17 00:00:00 2001 From: Carter Jernigan Date: Thu, 18 May 2023 07:36:15 -0400 Subject: [PATCH] [#971] Refactor Rust FFI to separate module --------- Co-authored-by: Honza --- .github/workflows/pull-request.yml | 3 + .../_backend_lib_connectedAndroidTest.xml | 64 ++++++++ ...wallet_client_lib_connectedAndroidTest.xml | 64 ++++++++ ...sdk_incubator_lib_connectedAndroidTest.xml | 64 ++++++++ ...ark_test_connectedBenchmarkAndroidTest.xml | 20 ++- ...side-test-lib_connectedAndroidTest.run.xml | 25 +++- ... => _sdk-lib_connectedAndroidTest.run.xml} | 14 +- CHANGELOG.md | 139 +++++++----------- MIGRATIONS.md | 22 +-- {sdk-lib => backend-lib}/Cargo.lock | 0 {sdk-lib => backend-lib}/Cargo.toml | 0 backend-lib/build.gradle.kts | 124 ++++++++++++++++ backend-lib/lint-baseline.xml | 4 + backend-lib/lint.xml | 4 + backend-lib/proguard-consumer.txt | 3 + backend-lib/proguard-project.txt | 18 +++ .../src/androidTest/AndroidManifest.xml | 9 ++ .../internal/jni/RustDerivationToolTest.kt | 26 ++++ backend-lib/src/main/AndroidManifest.xml | 2 + .../z/ecc/android/sdk/internal}/Backend.kt | 16 +- .../z/ecc/android/sdk/internal/Derivation.kt | 44 ++++++ .../android/sdk/internal/SdkDispatchers.kt | 2 +- .../z/ecc/android/sdk/internal/ext/FileExt.kt | 10 +- .../sdk/internal}/jni/NativeLibraryLoader.kt | 13 +- .../android/sdk/internal}/jni/RustBackend.kt | 107 +++++++------- .../sdk/internal/jni/RustDerivationTool.kt | 78 ++++++++++ .../sdk/internal/model/JniBlockMeta.kt | 2 +- .../internal/model/JniUnifiedSpendingKey.kt | 20 +-- {sdk-lib => backend-lib}/src/main/rust/lib.rs | 78 +++++----- .../src/main/rust/local_rpc_types.rs | 0 .../src/main/rust/utils.rs | 0 .../src/main/rust/utils/exception.rs | 0 .../src/main/rust/utils/target_ndk.rs | 0 .../src/main/rust/utils/trace.rs | 0 .../android/sdk/darkside/test/TestWallet.kt | 2 +- .../sdk/sample/demoapp/SampleCodeTest.kt | 2 +- .../z/ecc/android/sdk/demoapp/Navigation.kt | 2 +- .../demos/getaddress/GetAddressFragment.kt | 2 +- .../demos/getbalance/GetBalanceFragment.kt | 2 +- .../getprivatekey/GetPrivateKeyFragment.kt | 9 +- .../screen/home/viewmodel/WalletViewModel.kt | 2 +- docs/Architecture.md | 10 +- lightwallet-client-lib/build.gradle.kts | 3 +- lightwallet-client-lib/lint-baseline.xml | 46 +----- lightwallet-client-lib/proguard-consumer.txt | 7 +- .../client/model/CompactBlockUnsafe.kt | 2 +- .../ecc/android/sdk/fixture/WalletFixture.kt | 14 +- sdk-lib/build.gradle.kts | 39 +---- sdk-lib/lint-baseline.xml | 46 +----- sdk-lib/proguard-consumer.txt | 24 --- sdk-lib/proguard-project.txt | 1 - .../android/sdk/db/DatabaseCoordinatorTest.kt | 93 ++++++++---- .../ecc/android/sdk/fixture/WalletFixture.kt | 5 +- .../integration/SynchronizerFactoryTest.kt | 48 ------ .../sdk/integration/TestnetIntegrationTest.kt | 2 +- .../android/sdk/internal/CheckpointTest.kt | 7 + .../sdk/internal/SaplingParamToolBasicTest.kt | 15 ++ .../block/FileCompactBlockRepositoryTest.kt | 2 +- .../z/ecc/android/sdk/jni/BranchIdTest.kt | 16 +- .../z/ecc/android/sdk/jni/TransparentTest.kt | 14 +- .../android/sdk/tool/DerivationToolTest.kt | 22 --- .../android/sdk/util/AddressGeneratorUtil.kt | 5 +- .../cash/z/ecc/android/sdk/util/TestWallet.kt | 5 +- .../cash/z/ecc/fixture/CheckpointFixture.kt | 12 +- .../cash/z/ecc/fixture/FakeRustBackend.kt | 32 ++-- .../z/ecc/fixture/FakeRustBackendFixture.kt | 6 +- .../cash/z/ecc/android/sdk/SdkSynchronizer.kt | 64 ++++---- .../cash/z/ecc/android/sdk/Synchronizer.kt | 32 ++-- .../sdk/block/CompactBlockProcessor.kt | 74 +++++----- .../sdk/{jni => internal}/BackendExt.kt | 39 +++-- .../android/sdk/internal/DerivationToolExt.kt | 44 ++++++ .../android/sdk/internal/SaplingParamTool.kt | 7 + .../cash/z/ecc/android/sdk/internal/Sma.kt | 43 ------ .../android/sdk/internal/SuspendingLazy.kt | 28 ++++ .../sdk/{jni => internal}/TypesafeBackend.kt | 4 +- .../{jni => internal}/TypesafeBackendImpl.kt | 5 +- .../internal/TypesafeDerivationToolImpl.kt | 38 +++++ .../sdk/internal/db/derived/DerivedDataDb.kt | 20 +-- .../sdk/internal/{ => ext}/ClosedRangeExt.kt | 2 +- .../sdk/internal/model/JniBlockMetaExt.kt | 17 +++ .../internal/{ => model/ext}/CheckpointExt.kt | 2 +- .../block/FileCompactBlockRepository.kt | 30 ++-- .../transaction/TransactionEncoderImpl.kt | 15 +- .../cash/z/ecc/android/sdk/jni/Derivation.kt | 37 ----- .../android/sdk/model/UnifiedSpendingKey.kt | 12 +- .../z/ecc/android/sdk/tool/CheckpointTool.kt | 2 +- .../z/ecc/android/sdk/tool/DerivationTool.kt | 97 +++--------- sdk-lib/testing.gradle | 46 ------ settings.gradle.kts | 1 + 89 files changed, 1215 insertions(+), 916 deletions(-) create mode 100644 .idea/runConfigurations/_backend_lib_connectedAndroidTest.xml create mode 100644 .idea/runConfigurations/_lightwallet_client_lib_connectedAndroidTest.xml create mode 100644 .idea/runConfigurations/_sdk_incubator_lib_connectedAndroidTest.xml rename .run/{_sdkLib_connectedCheck.run.xml => _sdk-lib_connectedAndroidTest.run.xml} (80%) rename {sdk-lib => backend-lib}/Cargo.lock (100%) rename {sdk-lib => backend-lib}/Cargo.toml (100%) create mode 100644 backend-lib/build.gradle.kts create mode 100644 backend-lib/lint-baseline.xml create mode 100644 backend-lib/lint.xml create mode 100644 backend-lib/proguard-consumer.txt create mode 100644 backend-lib/proguard-project.txt create mode 100644 backend-lib/src/androidTest/AndroidManifest.xml create mode 100644 backend-lib/src/androidTest/java/cash/z/ecc/android/sdk/internal/jni/RustDerivationToolTest.kt create mode 100644 backend-lib/src/main/AndroidManifest.xml rename {sdk-lib/src/main/java/cash/z/ecc/android/sdk/jni => backend-lib/src/main/java/cash/z/ecc/android/sdk/internal}/Backend.kt (90%) create mode 100644 backend-lib/src/main/java/cash/z/ecc/android/sdk/internal/Derivation.kt rename {sdk-lib => backend-lib}/src/main/java/cash/z/ecc/android/sdk/internal/SdkDispatchers.kt (97%) rename {sdk-lib => backend-lib}/src/main/java/cash/z/ecc/android/sdk/internal/ext/FileExt.kt (81%) rename {sdk-lib/src/main/java/cash/z/ecc/android/sdk => backend-lib/src/main/java/cash/z/ecc/android/sdk/internal}/jni/NativeLibraryLoader.kt (81%) rename {sdk-lib/src/main/java/cash/z/ecc/android/sdk => backend-lib/src/main/java/cash/z/ecc/android/sdk/internal}/jni/RustBackend.kt (86%) create mode 100644 backend-lib/src/main/java/cash/z/ecc/android/sdk/internal/jni/RustDerivationTool.kt rename {sdk-lib => backend-lib}/src/main/java/cash/z/ecc/android/sdk/internal/model/JniBlockMeta.kt (96%) rename sdk-lib/src/main/java/cash/z/ecc/android/sdk/jni/UnifiedSpendingKeyJni.kt => backend-lib/src/main/java/cash/z/ecc/android/sdk/internal/model/JniUnifiedSpendingKey.kt (67%) rename {sdk-lib => backend-lib}/src/main/rust/lib.rs (92%) rename {sdk-lib => backend-lib}/src/main/rust/local_rpc_types.rs (100%) rename {sdk-lib => backend-lib}/src/main/rust/utils.rs (100%) rename {sdk-lib => backend-lib}/src/main/rust/utils/exception.rs (100%) rename {sdk-lib => backend-lib}/src/main/rust/utils/target_ndk.rs (100%) rename {sdk-lib => backend-lib}/src/main/rust/utils/trace.rs (100%) delete mode 100644 sdk-lib/src/androidTest/java/cash/z/ecc/android/sdk/integration/SynchronizerFactoryTest.kt delete mode 100644 sdk-lib/src/androidTest/java/cash/z/ecc/android/sdk/tool/DerivationToolTest.kt rename sdk-lib/src/main/java/cash/z/ecc/android/sdk/{jni => internal}/BackendExt.kt (83%) create mode 100644 sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/DerivationToolExt.kt delete mode 100644 sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/Sma.kt create mode 100644 sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/SuspendingLazy.kt rename sdk-lib/src/main/java/cash/z/ecc/android/sdk/{jni => internal}/TypesafeBackend.kt (95%) rename sdk-lib/src/main/java/cash/z/ecc/android/sdk/{jni => internal}/TypesafeBackendImpl.kt (90%) create mode 100644 sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/TypesafeDerivationToolImpl.kt rename sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/{ => ext}/ClosedRangeExt.kt (86%) create mode 100644 sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/model/JniBlockMetaExt.kt rename sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/{ => model/ext}/CheckpointExt.kt (97%) delete mode 100644 sdk-lib/src/main/java/cash/z/ecc/android/sdk/jni/Derivation.kt delete mode 100755 sdk-lib/testing.gradle diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index f8b10e9c..f24eecc4 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -357,6 +357,9 @@ jobs: ORG_GRADLE_PROJECT_ZCASH_RELEASE_KEY_ALIAS: androiddebugkey ORG_GRADLE_PROJECT_ZCASH_RELEASE_KEY_ALIAS_PASSWORD: android run: | + # Due to issues with the Rust integration, building the release APK requires running the task twice to + # ensure the native libraries are bundled in the APK + ./gradlew assembleRelease ./gradlew assembleRelease - name: Collect Artifacts timeout-minutes: 1 diff --git a/.idea/runConfigurations/_backend_lib_connectedAndroidTest.xml b/.idea/runConfigurations/_backend_lib_connectedAndroidTest.xml new file mode 100644 index 00000000..c301e498 --- /dev/null +++ b/.idea/runConfigurations/_backend_lib_connectedAndroidTest.xml @@ -0,0 +1,64 @@ + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/_lightwallet_client_lib_connectedAndroidTest.xml b/.idea/runConfigurations/_lightwallet_client_lib_connectedAndroidTest.xml new file mode 100644 index 00000000..d94f6163 --- /dev/null +++ b/.idea/runConfigurations/_lightwallet_client_lib_connectedAndroidTest.xml @@ -0,0 +1,64 @@ + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/_sdk_incubator_lib_connectedAndroidTest.xml b/.idea/runConfigurations/_sdk_incubator_lib_connectedAndroidTest.xml new file mode 100644 index 00000000..464baf38 --- /dev/null +++ b/.idea/runConfigurations/_sdk_incubator_lib_connectedAndroidTest.xml @@ -0,0 +1,64 @@ + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/demo_app_benchmark_test_connectedBenchmarkAndroidTest.xml b/.idea/runConfigurations/demo_app_benchmark_test_connectedBenchmarkAndroidTest.xml index d381e039..71edf0a5 100644 --- a/.idea/runConfigurations/demo_app_benchmark_test_connectedBenchmarkAndroidTest.xml +++ b/.idea/runConfigurations/demo_app_benchmark_test_connectedBenchmarkAndroidTest.xml @@ -1,7 +1,6 @@ - - + +