EdgeApp / edge-react-gui

Edge React Native GUI for iOS and Android
https://edge.app
BSD 3-Clause "New" or "Revised" License
462 stars 258 forks source link

App on Google Play can't be verified #1748

Open Giszmo opened 4 years ago

Giszmo commented 4 years ago

At the time of writing this article your app was not verifiable. Please help make your app verifiable for outside developers and let me know when you think it's worth reviewing your wallet again!

Giszmo commented 4 years ago

3.5 months later ... how is it going? No plan to make your wallet secure against the release manager being put under duress?

trymeouteh commented 3 years ago

+1 for making the wallet fully open source and build-able on Android. This will allow people to verify the code to ensure it is truely a private wallet and this can allow the app to be added onto F-Droid!

paullinator commented 3 years ago

@trymeouteh Thanks for the kudos. Much appreciated

paullinator commented 3 years ago

@Giszmo Can you more precisely specify what you are requesting with respect to the app being verifiable?

Giszmo commented 3 years ago

The app was reviewed more than a year ago and back then, the complaint was basically the lack of clear build instructions. If you claim the binary from Google Play can be rebuilt from the public source code, I'll happily look into this again.

Just as a quick check, I compared the version from Google Play (1.19.0) with tags here in the repo and can't find a higher tag than 1.17.5, so that to me looks like "not reproducible" is still the right verdict.

emanuelb commented 3 years ago

Currently use NODE_ENV="development" until issue #2611 is fixed, or the replacement needed (patch file) done in the container itself, also the below Containerfile don't run the ./scripts/updateVersion.js as explained in: (which might be needed) https://github.com/EdgeApp/edge-react-gui#build-release-version-of-app which will fail with: env: can't execute 'node -r sucrase/register': No such file or directory installing the deps can be done by: yarn add disklet cleaners sucrase or npm install -g --save-dev disklet cleaners sucrase https://github.com/EdgeApp/edge-react-gui/blob/6de5ffa7761ab36201f8e5823072b7b2e0673a91/Jenkinsfile#L37 just need to ensure it's found by the script when it's called.

build: podman build --pull --rm -t edge_build_2013n_apk -f ContainerFile2013 run: podman run --rm --name edge_build_2013_apk -ti edge_build_2013_apk APK in: /home/appuser/app/edge/edge-react-gui-v.2.0.13/android/app/build/outputs/apk/release/app-release.apk

FROM frolvlad/alpine-glibc

RUN set -ex; \
    apk update; \
    apk add --no-cache \
        git \
        npm \
        yarn \
        openjdk8; \
    adduser -D appuser;

USER appuser

ENV NODE_ENV="development" \
    ANDROID_SDK_ROOT="/home/appuser/app/sdk/" \
    ANDROID_HOME="/home/appuser/app/sdk/"

RUN set -ex; \
    mkdir -p "/home/appuser/app/sdk/licenses" "/home/appuser/app/edge" "/home/appuser/app/edgeUpstreamAPK"; \
    printf "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" > "/home/appuser/app/sdk/licenses/android-sdk-license"; \
    cd /home/appuser/app/edgeUpstreamAPK; \
    wget https://edge.app/app; \
    unzip app; \ 
    cd /home/appuser/app/edge/; \
    wget https://github.com/EdgeApp/edge-react-gui/archive/refs/tags/v.2.0.13.zip; \
    sha256sum v.2.0.13.zip; \
    unzip v.2.0.13.zip; \
    rm v.2.0.13.zip; \
    git clone https://github.com/EdgeApp/edge-react-gui/; \
    cd /home/appuser/app/edge/edge-react-gui/;

WORKDIR /home/appuser/app/edge/

RUN set -ex; \
    cd edge-react-gui-v.2.0.13; \
    sed -i 's/bin\/bash/bin\/sh/g' ./postinstall.sh; \
    yarn install --frozen-lockfile --ignore-optional --ignore-scripts; \
    yarn postinstall; \
    yarn prepare; \
    cp /home/appuser/app/edgeUpstreamAPK/res/raw/env.json ./env.json; \
    cd android; \
    ./gradlew assembleRelease

compared to APK from: https://edge.app/app

Files ./LocalBuild/AndroidManifest.xml and ./FromSite/AndroidManifest.xml differ
Files ./LocalBuild/assets/edge-core/plugin-bundle.js and ./FromSite/assets/edge-core/plugin-bundle.js differ
Files ./LocalBuild/assets/edge-core/plugin-bundle.js.map and ./FromSite/assets/edge-core/plugin-bundle.js.map differ
Files ./LocalBuild/assets/index.android.bundle and ./FromSite/assets/index.android.bundle differ
Files ./LocalBuild/classes2.dex and ./FromSite/classes2.dex differ
Files ./LocalBuild/classes.dex and ./FromSite/classes.dex differ
Files ./LocalBuild/lib/arm64-v8a/libcrypto_bridge.so and ./FromSite/lib/arm64-v8a/libcrypto_bridge.so differ
Files ./LocalBuild/lib/arm64-v8a/libmymonero-jni.so and ./FromSite/lib/arm64-v8a/libmymonero-jni.so differ
Files ./LocalBuild/lib/armeabi-v7a/libcrypto_bridge.so and ./FromSite/lib/armeabi-v7a/libcrypto_bridge.so differ
Files ./LocalBuild/lib/armeabi-v7a/libmymonero-jni.so and ./FromSite/lib/armeabi-v7a/libmymonero-jni.so differ
Files ./LocalBuild/lib/x86/libcrypto_bridge.so and ./FromSite/lib/x86/libcrypto_bridge.so differ
Files ./LocalBuild/lib/x86/libmymonero-jni.so and ./FromSite/lib/x86/libmymonero-jni.so differ
Files ./LocalBuild/lib/x86_64/libcrypto_bridge.so and ./FromSite/lib/x86_64/libcrypto_bridge.so differ
Files ./LocalBuild/lib/x86_64/libmymonero-jni.so and ./FromSite/lib/x86_64/libmymonero-jni.so differ
Files ./LocalBuild/META-INF/CERT.RSA and ./FromSite/META-INF/CERT.RSA differ
Files ./LocalBuild/META-INF/CERT.SF and ./FromSite/META-INF/CERT.SF differ
Files ./LocalBuild/META-INF/MANIFEST.MF and ./FromSite/META-INF/MANIFEST.MF differ
Files ./LocalBuild/resources.arsc and ./FromSite/resources.arsc differ

a diffoscope should be run on both files to see what the diffs are.

emanuelb commented 2 years ago

Latest version v2.12.0 can be built with Containerfile below: build: podman build --rm -t edge_build_apk -f ContainerFileAlpine APK in: /home/appuser/app/edge/edge-react-gui/android/app/build/outputs/apk/release/app-release.apk

FROM frolvlad/alpine-glibc

RUN set -ex; \
    apk update; \
    apk add --no-cache \
        git \
        npm \
        yarn \
        openjdk11; \
    adduser -D appuser;

USER appuser

ENV NODE_ENV="development" \
    ANDROID_SDK_ROOT="/home/appuser/app/sdk/" \
    ANDROID_HOME="/home/appuser/app/sdk/"

RUN set -ex; \
    mkdir -p "/home/appuser/app/sdk/licenses" "/home/appuser/app/edge" "/home/appuser/app/edgeUpstreamAPK"; \
    printf "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" > "/home/appuser/app/sdk/licenses/android-sdk-license"; \
    cd /home/appuser/app/edgeUpstreamAPK; \
    wget https://edge.app/app; \
    unzip app; \ 
    cd /home/appuser/app/edge/; \
    git clone https://github.com/EdgeApp/edge-react-gui/; \
    cd /home/appuser/app/edge/edge-react-gui/;

WORKDIR /home/appuser/app/edge/

RUN set -ex; \
    cd edge-react-gui; \
    git checkout v2.12.0; \
    yarnpkg install --frozen-lockfile --ignore-optional --ignore-scripts; \
    yarnpkg prepare; \
    cp /home/appuser/app/edgeUpstreamAPK/res/raw/env.json ./env.json; \
    cd android; \
    ./gradlew assembleRelease

compared to APK from: https://edge.app/app

Files ./edgeRebuild/AndroidManifest.xml and ./edgeUpstreamAPK/AndroidManifest.xml differ
Files ./edgeRebuild/assets/index.android.bundle and ./edgeUpstreamAPK/assets/index.android.bundle differ
Files ./edgeRebuild/classes.dex and ./edgeUpstreamAPK/classes.dex differ
Files ./edgeRebuild/classes2.dex and ./edgeUpstreamAPK/classes2.dex differ
Files ./edgeRebuild/classes3.dex and ./edgeUpstreamAPK/classes3.dex differ
Files ./edgeRebuild/classes4.dex and ./edgeUpstreamAPK/classes4.dex differ
Files ./edgeRebuild/lib/arm64-v8a/libcrypto_bridge.so and ./edgeUpstreamAPK/lib/arm64-v8a/libcrypto_bridge.so differ
Files ./edgeRebuild/lib/arm64-v8a/libedge-core-jni.so and ./edgeUpstreamAPK/lib/arm64-v8a/libedge-core-jni.so differ
Files ./edgeRebuild/lib/arm64-v8a/libmymonero-jni.so and ./edgeUpstreamAPK/lib/arm64-v8a/libmymonero-jni.so differ
Files ./edgeRebuild/lib/arm64-v8a/librenderscript-toolkit.so and ./edgeUpstreamAPK/lib/arm64-v8a/librenderscript-toolkit.so differ
Files ./edgeRebuild/lib/armeabi-v7a/libcrypto_bridge.so and ./edgeUpstreamAPK/lib/armeabi-v7a/libcrypto_bridge.so differ
Files ./edgeRebuild/lib/armeabi-v7a/libedge-core-jni.so and ./edgeUpstreamAPK/lib/armeabi-v7a/libedge-core-jni.so differ
Files ./edgeRebuild/lib/armeabi-v7a/libmymonero-jni.so and ./edgeUpstreamAPK/lib/armeabi-v7a/libmymonero-jni.so differ
Files ./edgeRebuild/lib/armeabi-v7a/librenderscript-toolkit.so and ./edgeUpstreamAPK/lib/armeabi-v7a/librenderscript-toolkit.so differ
Files ./edgeRebuild/lib/x86/libcrypto_bridge.so and ./edgeUpstreamAPK/lib/x86/libcrypto_bridge.so differ
Files ./edgeRebuild/lib/x86/libedge-core-jni.so and ./edgeUpstreamAPK/lib/x86/libedge-core-jni.so differ
Files ./edgeRebuild/lib/x86/libmymonero-jni.so and ./edgeUpstreamAPK/lib/x86/libmymonero-jni.so differ
Files ./edgeRebuild/lib/x86/librenderscript-toolkit.so and ./edgeUpstreamAPK/lib/x86/librenderscript-toolkit.so differ
Files ./edgeRebuild/lib/x86_64/libcrypto_bridge.so and ./edgeUpstreamAPK/lib/x86_64/libcrypto_bridge.so differ
Files ./edgeRebuild/lib/x86_64/libedge-core-jni.so and ./edgeUpstreamAPK/lib/x86_64/libedge-core-jni.so differ
Files ./edgeRebuild/lib/x86_64/libmymonero-jni.so and ./edgeUpstreamAPK/lib/x86_64/libmymonero-jni.so differ
Files ./edgeRebuild/lib/x86_64/librenderscript-toolkit.so and ./edgeUpstreamAPK/lib/x86_64/librenderscript-toolkit.so differ
Files ./edgeRebuild/resources.arsc and ./edgeUpstreamAPK/resources.arsc differ
Giszmo commented 2 years ago

I tried for the latest release - 2.25.0 and failed to build from source. I used this container file:

FROM frolvlad/alpine-glibc

RUN set -ex; \
    apk update; \
    apk add --no-cache \
        git \
        npm \
        yarn \
        openjdk11; \
    adduser -D appuser;

USER appuser

ENV NODE_ENV="development" \
    ANDROID_SDK_ROOT="/home/appuser/app/sdk/" \
    ANDROID_HOME="/home/appuser/app/sdk/"

RUN set -ex; \
    mkdir -p "/home/appuser/app/sdk/licenses" "/home/appuser/app/edge"; \
    printf "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" > "/home/appuser/app/sdk/licenses/android-sdk-license"; \
    cd /home/appuser/app/edge/; \
    git clone https://github.com/EdgeApp/edge-react-gui/; \
    cd /home/appuser/app/edge/edge-react-gui/;

WORKDIR /home/appuser/app/edge/

RUN set -ex; \
    cd edge-react-gui; \
    git checkout v2.25.0; \
    yarnpkg install --frozen-lockfile --ignore-optional --ignore-scripts; \
    yarnpkg prepare; \
    cd android; \
    ./gradlew assembleRelease

(same as Emanuel's but without the download of the app and with updated version)

and got this build error:

> Task :bugsnag_react-native:compileReleaseKotlin
w: /home/appuser/app/edge/edge-react-gui/node_modules/@bugsnag/react-native/android/src/main/java/com/bugsnag/android/BugsnagReactNative.kt: (204, 48): Elvis operator (?:) always returns the left operand of non-nullable type ReadableMap

> Task :bugsnag_react-native:javaPreCompileRelease
> Task :disklet:generateReleaseBuildConfig

> Task :bugsnag_react-native:compileReleaseJavaWithJavac FAILED
/home/appuser/app/edge/edge-react-gui/node_modules/@bugsnag/react-native/android/src/main/java/com/bugsnag/android/BugsnagPackage.java:1: error: cannot access com.bugsnag.android
package com.bugsnag.android;
^
  /home/appuser/.gradle/caches/transforms-3/db229a6e5f4fe0ba69c000c5a66ca523/transformed/swiperefreshlayout-1.0.0-api.jar: No file descriptors available
/home/appuser/app/edge/edge-react-gui/node_modules/@bugsnag/react-native/android/build/generated/source/buildConfig/release/com/bugsnag/reactnative/BuildConfig.java:4: error: cannot access com.bugsnag.reactnative
package com.bugsnag.reactnative;
^
  /home/appuser/.gradle/caches/transforms-3/db229a6e5f4fe0ba69c000c5a66ca523/transformed/swiperefreshlayout-1.0.0-api.jar: No file descriptors available
2 errors

FAILURE: Build failed with an exception.
emanuelb commented 1 year ago

There is a Jenkinsfile in repo that likely can be used to build the app (also looks like it used to generate the apk) https://github.com/EdgeApp/edge-react-gui/blob/67e9597452cac52aa7062126d4f2713a3120fe22/Jenkinsfile

Also app latest version 3.6.0 can be compiled with Containerfile below:

FROM frolvlad/alpine-glibc

RUN set -ex; \
    apk update; \
    apk add --no-cache \
        git \
        npm \
        yarn \
        openjdk11; \
    adduser -D appuser; \
    mkdir -p "/Users/jenkins/.jenkins/workspace/Edge_edge-react-gui_master/"; \
    chown -R appuser:appuser /Users/;

USER appuser

ENV NODE_ENV="development" \
    ANDROID_SDK_ROOT="/home/appuser/sdk/" \
    ANDROID_HOME="/home/appuser/sdk/" \
    AIRBITZ_API_KEY="74591cbad4a4938e0049c9d90d4e24091e0d4070" \
    BUGSNAG_API_KEY="5aca2dbe708503471d8137625e092675" \
    NODE_OPTIONS=--openssl-legacy-provider

RUN set -ex; \
    mkdir -p "/home/appuser/sdk/licenses"; \
    printf "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" > "/home/appuser/sdk/licenses/android-sdk-license"; \
    cd /Users/jenkins/.jenkins/workspace/Edge_edge-react-gui_master/; \
    git clone --branch v3.6.0 --depth 1 --no-tags --single-branch https://github.com/EdgeApp/edge-react-gui/ . ; 

WORKDIR /Users/jenkins/.jenkins/workspace/Edge_edge-react-gui_master/

RUN set -ex; \
    sed -i "s/versionCode 21000000/versionCode 23032902/g" android/app/build.gradle; \
    sed -i 's/versionName "99.99.99"/versionName "3.6.0"/g' android/app/build.gradle; \
    sed -i "s/uploadReactNativeMappings = true/uploadReactNativeMappings = false/g" android/app/build.gradle; \
    sed -i '/^\s*<\/application>\s*/i <meta-data android:name="com.bugsnag.android.BUILD_UUID" android:value="fd7bc623-0f99-40f8-b23d-527c1483d077"/>' android/app/src/main/AndroidManifest.xml; \  
    sed -i 's/BUGSNAG_API_KEY/5aca2dbe708503471d8137625e092675/g' android/app/src/main/AndroidManifest.xml; \
    yarnpkg install --frozen-lockfile --ignore-scripts; \
    yarnpkg prepare;
    sed -i 's/AIRBITZ_API_KEY": "/AIRBITZ_API_KEY": "74591cbad4a4938e0049c9d90d4e24091e0d4070/g' env.json; \
    sed -i 's/BUGSNAG_API_KEY": "/BUGSNAG_API_KEY": "5aca2dbe708503471d8137625e092675/g' env.json; \    

RUN set -ex; \    
     cd /Users/jenkins/.jenkins/workspace/Edge_edge-react-gui_master/android/;
     ./gradlew packageReleaseUniversalApk

Opened issues from comparing it to apk from website:

  1. Add static value for BUILD_UUID (or at least declare it) in AndroidManifest to avoid ordering differences #4145
  2. Static versionCode & versionName instead of updated for each tag #4146

There more investigation that need to be done on the diff to figure what should be changed in the build script.

Giszmo commented 1 year ago

I just tried to reproduce version 3.20.0 and got a huge diff. The bugsnag api key is needed when using the build instructions for an Android release with ./gradlew assembleRelease and as I'm reluctant to apply it to fix the failed upload to Edge's bugsnag account, I'm using ./gradlew packageReleaseUniversalApk which doesn't error out on a missing api key.

The api keys kind of floating around like they do while the app is not reproducible is unfortunate and I would really appreciate if you could provide a non-default branch for reproducibility that actually contains the api keys.

xrviv commented 4 months ago

Hello team Edge. Danny here from @walletscrutiny

I was able to build the app version 4.8.0 using this dockerfile:

# Builds 4.8.0
# docker build -t edgeapp-build -f co.edgesecure.app.dockerfile
# docker run -d --name edgeapp-container edgeapp-build
# docker cp edgeapp-container:/home/appuser/output/app-release-universal.apk ./
FROM eclipse-temurin:17-jdk-jammy

ENV ANDROID_HOME="/opt/android-sdk" \
    ANDROID_SDK_ROOT="/opt/android-sdk" \
    PATH="${PATH}:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools"

# Install Node.js 18.x and Yarn
RUN apt-get update && apt-get install -y \
    git \
    wget \
    unzip \
    curl \
    && curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
    && apt-get install -y nodejs \
    && npm install -g yarn \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir -p ${ANDROID_HOME}/cmdline-tools && \
    wget -q https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip && \
    unzip -q commandlinetools-linux-8512546_latest.zip -d ${ANDROID_HOME}/cmdline-tools && \
    mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest && \
    rm commandlinetools-linux-8512546_latest.zip

RUN yes | sdkmanager --licenses && \
    sdkmanager "platform-tools" "platforms;android-33" "build-tools;33.0.0" "ndk;25.1.8937393"

RUN adduser --disabled-password --gecos '' appuser

# Give appuser write permissions to the Android SDK directory
RUN chown -R appuser:appuser ${ANDROID_HOME} && \
    chmod -R 755 ${ANDROID_HOME}

USER appuser

WORKDIR /home/appuser

ENV NODE_ENV="development" \
    AIRBITZ_API_KEY="74591cbad4a4938e0049c9d90d4e24091e0d4070" \
    BUGSNAG_API_KEY="5aca2dbe708503471d8137625e092675"

RUN mkdir edge-react-gui && \
    cd edge-react-gui && \
    git clone --branch v4.8.0 --depth 1 --no-tags --single-branch https://github.com/EdgeApp/edge-react-gui/ .

WORKDIR /home/appuser/edge-react-gui

RUN sed -i "s/versionCode 21000000/versionCode 24062402/g" android/app/build.gradle && \
    sed -i 's/versionName "99.99.99"/versionName "4.8.0"/g' android/app/build.gradle && \
    sed -i "s/uploadReactNativeMappings = true/uploadReactNativeMappings = false/g" android/app/build.gradle && \
    sed -i '/^\s*<\/application>\s*/i <meta-data android:name="com.bugsnag.android.BUILD_UUID" android:value="fd7bc623-0f99-40f8-b23d-527c1483d077"/>' android/app/src/main/AndroidManifest.xml && \
    sed -i 's/BUGSNAG_API_KEY/5aca2dbe708503471d8137625e092675/g' android/app/src/main/AndroidManifest.xml

# Debugging steps
RUN node --version && npm --version && yarn --version
RUN cat package.json
RUN yarn install || (echo "Yarn install failed" && cat yarn-error.log && exit 1)
RUN yarn prepare || (echo "Yarn prepare failed" && exit 1)
RUN sed -i 's/AIRBITZ_API_KEY": "/AIRBITZ_API_KEY": "74591cbad4a4938e0049c9d90d4e24091e0d4070/g' env.json && \
    sed -i 's/BUGSNAG_API_KEY": "/BUGSNAG_API_KEY": "5aca2dbe708503471d8137625e092675/g' env.json

# Remove the package attribute only from the main app's AndroidManifest.xml
RUN sed -i 's/package="[^"]*"//g' android/app/src/main/AndroidManifest.xml
WORKDIR /home/appuser/edge-react-gui/android

# Debug React Native CLI
RUN node /home/appuser/edge-react-gui/node_modules/@react-native-community/cli/build/bin.js config
RUN ./gradlew packageReleaseUniversalApk

# Find and copy the APK to a known location
RUN mkdir -p /home/appuser/output && \
    find /home/appuser/edge-react-gui -name "*release*.apk" -exec cp {} /home/appuser/output/ \; && \
    ls -l /home/appuser/output

# Set the working directory to where the APK is located
WORKDIR /home/appuser/output

# This command will keep the container running
CMD ["tail", "-f", "/dev/null"]

Further notes on how I did it exactly could be found in the walletscrutiny MR

Unfortunately, I found app version 4.8.0 nonverifiable due to the following diffs:

$ diff -r built official/
    Binary files built/AndroidManifest.xml and official/AndroidManifest.xml differ
    Binary files built/assets/dexopt/baseline.prof and official/assets/dexopt/baseline.prof differ
    Binary files built/assets/dexopt/baseline.profm and official/assets/dexopt/baseline.profm differ
    Binary files built/assets/index.android.bundle and official/assets/index.android.bundle differ
    diff -r built/assets/sentry-debug-meta.properties official/assets/sentry-debug-meta.properties
    2c2,3
    < #Fri Jul 19 08:33:47 UTC 2024
    ---
    > #Mon Jun 24 19:12:34 PDT 2024
    > io.sentry.bundle-ids=a7dbdc5d-ac94-4540-92de-097feba6c718
    Binary files built/classes2.dex and official/classes2.dex differ
    Binary files built/classes3.dex and official/classes3.dex differ
    Binary files built/classes4.dex and official/classes4.dex differ
    Binary files built/classes.dex and official/classes.dex differ
    Binary files built/lib/arm64-v8a/libedge-core-jni.so and official/lib/arm64-v8a/libedge-core-jni.so differ
    Binary files built/lib/arm64-v8a/libexpo-modules-core.so and official/lib/arm64-v8a/libexpo-modules-core.so differ
    Binary files built/lib/arm64-v8a/libmymonero-jni.so and official/lib/arm64-v8a/libmymonero-jni.so differ
    Binary files built/lib/arm64-v8a/libreanimated.so and official/lib/arm64-v8a/libreanimated.so differ
    Binary files built/lib/arm64-v8a/librnscreens.so and official/lib/arm64-v8a/librnscreens.so differ
    Binary files built/lib/armeabi-v7a/libedge-core-jni.so and official/lib/armeabi-v7a/libedge-core-jni.so differ
    Binary files built/lib/armeabi-v7a/libexpo-modules-core.so and official/lib/armeabi-v7a/libexpo-modules-core.so differ
    Binary files built/lib/armeabi-v7a/libmymonero-jni.so and official/lib/armeabi-v7a/libmymonero-jni.so differ
    Binary files built/lib/armeabi-v7a/libreanimated.so and official/lib/armeabi-v7a/libreanimated.so differ
    Binary files built/lib/armeabi-v7a/librnscreens.so and official/lib/armeabi-v7a/librnscreens.so differ
    Binary files built/lib/x86/libedge-core-jni.so and official/lib/x86/libedge-core-jni.so differ
    Binary files built/lib/x86/libexpo-modules-core.so and official/lib/x86/libexpo-modules-core.so differ
    Binary files built/lib/x86/libmymonero-jni.so and official/lib/x86/libmymonero-jni.so differ
    Binary files built/lib/x86/libreanimated.so and official/lib/x86/libreanimated.so differ
    Binary files built/lib/x86/librnscreens.so and official/lib/x86/librnscreens.so differ
    Binary files built/lib/x86_64/libedge-core-jni.so and official/lib/x86_64/libedge-core-jni.so differ
    Binary files built/lib/x86_64/libexpo-modules-core.so and official/lib/x86_64/libexpo-modules-core.so differ
    Binary files built/lib/x86_64/libmymonero-jni.so and official/lib/x86_64/libmymonero-jni.so differ
    Binary files built/lib/x86_64/libreanimated.so and official/lib/x86_64/libreanimated.so differ
    Binary files built/lib/x86_64/librnscreens.so and official/lib/x86_64/librnscreens.so differ
    Binary files built/resources.arsc and official/resources.arsc differ
Your feedback is graciously appreciated!
keraliss commented 1 month ago

Hi, keraliss from walletscrutiny here. we tested the reproducability of your wallet and found this -

===== Begin Results =====
appId:          co.edgesecure.app
signer:         8cd6a12e3dc595964fabcbe82341e28f4a2a4ac6a347fcbead488b76faa7e186
apkVersionName: 4.15.0
apkVersionCode: 24101602
verdict:        
appHash:        66342d9ece392d2245abc2ff175ffdb6d800fa3d0b659eb6b62f888e041dab7e
commit:         e0c4a35df1d71c89e2242e0d57454775870ac454

Diff:
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/app.config and /tmp/fromBuild_co.edgesecure.app_24101602/assets/app.config differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/dexopt/baseline.prof and /tmp/fromBuild_co.edgesecure.app_24101602/assets/dexopt/baseline.prof differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/dexopt/baseline.profm and /tmp/fromBuild_co.edgesecure.app_24101602/assets/dexopt/baseline.profm differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-core/plugin-bundle.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-core/plugin-bundle.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-core-js/edge-core.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-core-js/edge-core.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-core-js/edge-core.js.map and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-core-js/edge-core.js.map differ
Only in /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased: 2963.chunk.js
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/4163.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/4163.chunk.js differ
Only in /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased: 4580.chunk.js
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/5870.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/5870.chunk.js differ
Only in /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased: 597.chunk.js
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/6271.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/6271.chunk.js differ
Only in /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased: 6845.chunk.js
Only in /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased: 780.chunk.js
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/8330.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/8330.chunk.js differ
Only in /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased: 9119.chunk.js
Only in /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased: 9228.chunk.js
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/algorand.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/algorand.chunk.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/axelar.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/axelar.chunk.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/cardano.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/cardano.chunk.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/edge-currency-accountbased.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/edge-currency-accountbased.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/ethereum.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/ethereum.chunk.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/fio.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/fio.chunk.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/hedera.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/hedera.chunk.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/polkadot.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/polkadot.chunk.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/ripple.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/ripple.chunk.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/solana.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/solana.chunk.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-accountbased/zcash.chunk.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-accountbased/zcash.chunk.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-currency-plugins/edge-currency-plugins.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-currency-plugins/edge-currency-plugins.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/edge-exchange-plugins/edge-exchange-plugins.js and /tmp/fromBuild_co.edgesecure.app_24101602/assets/edge-exchange-plugins/edge-exchange-plugins.js differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/index.android.bundle and /tmp/fromBuild_co.edgesecure.app_24101602/assets/index.android.bundle differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/sentry-debug-meta.properties and /tmp/fromBuild_co.edgesecure.app_24101602/assets/sentry-debug-meta.properties differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/assets/sentry-external-modules.txt and /tmp/fromBuild_co.edgesecure.app_24101602/assets/sentry-external-modules.txt differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/classes2.dex and /tmp/fromBuild_co.edgesecure.app_24101602/classes2.dex differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/classes3.dex and /tmp/fromBuild_co.edgesecure.app_24101602/classes3.dex differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/classes4.dex and /tmp/fromBuild_co.edgesecure.app_24101602/classes4.dex differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/classes5.dex and /tmp/fromBuild_co.edgesecure.app_24101602/classes5.dex differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/classes.dex and /tmp/fromBuild_co.edgesecure.app_24101602/classes.dex differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/DebugProbesKt.bin and /tmp/fromBuild_co.edgesecure.app_24101602/DebugProbesKt.bin differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/arm64-v8a/libedge-core-jni.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/arm64-v8a/libedge-core-jni.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/arm64-v8a/libexpo-modules-core.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/arm64-v8a/libexpo-modules-core.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/arm64-v8a/libmymonero-jni.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/arm64-v8a/libmymonero-jni.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/arm64-v8a/libreanimated.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/arm64-v8a/libreanimated.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/arm64-v8a/librnscreens.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/arm64-v8a/librnscreens.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/arm64-v8a/libsentry-android.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/arm64-v8a/libsentry-android.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/arm64-v8a/libsentry.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/arm64-v8a/libsentry.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/arm64-v8a/libzcashwalletsdk.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/arm64-v8a/libzcashwalletsdk.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/armeabi-v7a/libedge-core-jni.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/armeabi-v7a/libedge-core-jni.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/armeabi-v7a/libexpo-modules-core.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/armeabi-v7a/libexpo-modules-core.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/armeabi-v7a/libmymonero-jni.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/armeabi-v7a/libmymonero-jni.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/armeabi-v7a/libreanimated.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/armeabi-v7a/libreanimated.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/armeabi-v7a/librnscreens.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/armeabi-v7a/librnscreens.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/armeabi-v7a/libsentry-android.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/armeabi-v7a/libsentry-android.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/armeabi-v7a/libsentry.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/armeabi-v7a/libsentry.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/armeabi-v7a/libzcashwalletsdk.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/armeabi-v7a/libzcashwalletsdk.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86/libedge-core-jni.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86/libedge-core-jni.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86/libexpo-modules-core.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86/libexpo-modules-core.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86/libmymonero-jni.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86/libmymonero-jni.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86/libreanimated.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86/libreanimated.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86/librnscreens.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86/librnscreens.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86/libsentry-android.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86/libsentry-android.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86/libsentry.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86/libsentry.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86/libzcashwalletsdk.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86/libzcashwalletsdk.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86_64/libedge-core-jni.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86_64/libedge-core-jni.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86_64/libexpo-modules-core.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86_64/libexpo-modules-core.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86_64/libmymonero-jni.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86_64/libmymonero-jni.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86_64/libreanimated.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86_64/libreanimated.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86_64/librnscreens.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86_64/librnscreens.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86_64/libsentry-android.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86_64/libsentry-android.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86_64/libsentry.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86_64/libsentry.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/lib/x86_64/libzcashwalletsdk.so and /tmp/fromBuild_co.edgesecure.app_24101602/lib/x86_64/libzcashwalletsdk.so differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.core_core-ktx.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.core_core-ktx.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.core_core.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.core_core.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-livedata-core-ktx.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-livedata-core-ktx.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-livedata-core.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-livedata-core.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-livedata.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-livedata.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-process.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-process.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-runtime-ktx.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-runtime-ktx.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-runtime.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-runtime.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-service.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-service.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-viewmodel-ktx.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-viewmodel-ktx.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-viewmodel-savedstate.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-viewmodel-savedstate.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-viewmodel.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/androidx.lifecycle_lifecycle-viewmodel.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/kotlinx_coroutines_android.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/kotlinx_coroutines_android.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/kotlinx_coroutines_core.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/kotlinx_coroutines_core.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/kotlinx_coroutines_play_services.version and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/kotlinx_coroutines_play_services.version differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/META-INF/services/io.grpc.LoadBalancerProvider and /tmp/fromBuild_co.edgesecure.app_24101602/META-INF/services/io.grpc.LoadBalancerProvider differ
Files /tmp/fromPlay_co.edgesecure.app_24101602/resources.arsc and /tmp/fromBuild_co.edgesecure.app_24101602/resources.arsc differ

Revision, tag (and its signature):

===== End Results =====

there were also 500+ lines of diff including json, xml and png files. would be great if you can look into it!