Compare commits
74 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c965746f8f | |||
| 8d150266fb | |||
| 44fd64496b | |||
| 84d0f39f8a | |||
| 138c0199c9 | |||
| cbce1070b4 | |||
| ba057617d3 | |||
| 91f2b5d254 | |||
| 6939dfd4c3 | |||
| 2177683838 | |||
| 81b0491691 | |||
| 5705d0d578 | |||
| d33a0a6289 | |||
| 5771fbc10b | |||
| 66be33c43e | |||
| 33c6559a41 | |||
| 894e5dac22 | |||
| 2d0d46688e | |||
| 40f1b9bcaa | |||
| ef1c71a320 | |||
| 415085b0d5 | |||
| 2374dac2ad | |||
| 853bbf567e | |||
| 2462c2b306 | |||
| e43bb7a595 | |||
| 49bbb8cf51 | |||
| 8da8dd0088 | |||
| abc624b57a | |||
| d8810676a6 | |||
| e6a087f907 | |||
| c30cdf2411 | |||
| f746697d57 | |||
| 94a567c672 | |||
| e13cb18576 | |||
| 7a1e7d8270 | |||
| 8ed1909dc1 | |||
| a1ce3137a1 | |||
| 611a55599c | |||
| ff19f88323 | |||
| 652913da35 | |||
| 8760a0b9da | |||
| 61451ca178 | |||
| 31e0dcadb7 | |||
| c794cbe5c4 | |||
| b9fadbe6da | |||
| 771c9c8877 | |||
| f6dc35b80e | |||
| 11fd0a5d10 | |||
| 233d06da12 | |||
| 11159e4ba9 | |||
| 7dbfc3b85e | |||
| 37829e30f0 | |||
| e06c5379dd | |||
| 7f00c98359 | |||
| eb2c6cda55 | |||
| 03075104b4 | |||
| 3061555485 | |||
| 6a16d0a04e | |||
| 359cfb1eb3 | |||
| 326aa869ed | |||
| 533aa9e831 | |||
| d7f515aab2 | |||
| 14519d7818 | |||
| 9c7bb7c6e9 | |||
| 93e94cbf15 | |||
| 9899bb5c40 | |||
| 0a95d04e45 | |||
| fa17968108 | |||
| ffae9159fe | |||
| f253686d10 | |||
| c461e61895 | |||
| 921e6de224 | |||
| ec250adb07 | |||
| a294aa1a6b |
@@ -130,9 +130,7 @@ env:
|
||||
|
||||
POLKASSEMBLY_SUMMARY_API_KEY: ${{ secrets.POLKASSEMBLY_SUMMARY_API_KEY }}
|
||||
|
||||
CI_BUILD_ID: ${{ github.run_number }}
|
||||
|
||||
concurrency:
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}-${{inputs.upload-name}}
|
||||
cancel-in-progress: true
|
||||
|
||||
@@ -146,6 +144,14 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Compute version code from commit count
|
||||
run: |
|
||||
COMMIT_COUNT=$(git rev-list --count HEAD)
|
||||
VERSION_CODE=$((COMMIT_COUNT + 100))
|
||||
echo "CI_BUILD_ID=$VERSION_CODE" >> $GITHUB_ENV
|
||||
echo "Version code: $VERSION_CODE (commits: $COMMIT_COUNT + offset 100)"
|
||||
|
||||
- name: 📂 Set up DEV Google Services
|
||||
uses: davidSchuppa/base64Secret-toFile-action@v3
|
||||
@@ -161,6 +167,16 @@ jobs:
|
||||
filename: google-services.json
|
||||
destination-path: ./app/src/release/
|
||||
|
||||
- name: 📂 Copy PROD Google Services to releaseMarket
|
||||
run: |
|
||||
mkdir -p ./app/src/releaseMarket
|
||||
cp ./app/src/release/google-services.json ./app/src/releaseMarket/google-services.json
|
||||
|
||||
- name: 📂 Copy PROD Google Services to releaseGithub
|
||||
run: |
|
||||
mkdir -p ./app/src/releaseGithub
|
||||
cp ./app/src/release/google-services.json ./app/src/releaseGithub/google-services.json
|
||||
|
||||
- name: 🔧 Install dependencies
|
||||
uses: ./.github/workflows/install/
|
||||
|
||||
@@ -202,3 +218,28 @@ jobs:
|
||||
with:
|
||||
name: ${{ inputs.upload-name }}
|
||||
path: app/build/outputs/apk/
|
||||
if-no-files-found: ignore
|
||||
|
||||
- name: ➡️ Upload bundle artifacts
|
||||
if: ${{ !startsWith(inputs.gradlew-command, 'false') }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ inputs.upload-name }}-bundle
|
||||
path: app/build/outputs/bundle/
|
||||
if-no-files-found: ignore
|
||||
|
||||
- name: ➡️ Upload mapping file
|
||||
if: ${{ !startsWith(inputs.gradlew-command, 'false') }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ inputs.upload-name }}-mapping
|
||||
path: app/build/outputs/mapping/
|
||||
if-no-files-found: ignore
|
||||
|
||||
- name: ➡️ Upload native debug symbols
|
||||
if: ${{ !startsWith(inputs.gradlew-command, 'false') }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ inputs.upload-name }}-native-debug-symbols
|
||||
path: app/build/outputs/native-debug-symbols/
|
||||
if-no-files-found: ignore
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
name: Auto Merge
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Code Quality"]
|
||||
types: [completed]
|
||||
|
||||
jobs:
|
||||
auto-merge:
|
||||
runs-on: ubuntu-latest
|
||||
if: >
|
||||
github.event.workflow_run.conclusion == 'success' &&
|
||||
github.event.workflow_run.event == 'pull_request'
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Find and merge master → main PR
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
HEAD_BRANCH="${{ github.event.workflow_run.head_branch }}"
|
||||
echo "Workflow ran on branch: $HEAD_BRANCH"
|
||||
|
||||
if [ "$HEAD_BRANCH" != "master" ]; then
|
||||
echo "Not a master branch PR, skipping"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
PR_NUMBER=$(gh pr list \
|
||||
--repo "$GITHUB_REPOSITORY" \
|
||||
--base main \
|
||||
--head master \
|
||||
--state open \
|
||||
--json number \
|
||||
--jq '.[0].number')
|
||||
|
||||
if [ -z "$PR_NUMBER" ]; then
|
||||
echo "No open PR from master to main found, skipping"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Merging PR #$PR_NUMBER"
|
||||
gh pr merge "$PR_NUMBER" \
|
||||
--repo "$GITHUB_REPOSITORY" \
|
||||
--merge \
|
||||
--delete-branch=false
|
||||
@@ -0,0 +1,40 @@
|
||||
name: Auto PR (master → main)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
create-pr:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Create or update PR
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
# Check if there's already an open PR from master to main
|
||||
EXISTING_PR=$(gh pr list --base main --head master --state open --json number --jq '.[0].number')
|
||||
|
||||
if [ -n "$EXISTING_PR" ]; then
|
||||
echo "PR #$EXISTING_PR already exists — new commits will appear automatically"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Creating new PR: master → main"
|
||||
if gh pr create \
|
||||
--base main \
|
||||
--head master \
|
||||
--title "Sync: master → main" \
|
||||
--body "Automated PR to sync master branch changes to main.
|
||||
|
||||
This PR was created automatically and will be merged once CI checks pass."; then
|
||||
echo "PR created successfully"
|
||||
else
|
||||
echo "PR creation skipped (branches may already be in sync)"
|
||||
fi
|
||||
@@ -9,7 +9,7 @@ jobs:
|
||||
build-app:
|
||||
uses: pezkuwichain/pezkuwi-wallet-android/.github/workflows/android_build.yml@main
|
||||
with:
|
||||
branch: ${{github.head_ref}}
|
||||
branch: ${{ github.head_ref || github.ref_name || 'main' }}
|
||||
gradlew-command: assembleDebug
|
||||
upload-name: develop-apk
|
||||
run-tests: false
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
|
||||
run-tests:
|
||||
needs: [build-app]
|
||||
runs-on: macos-13
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -46,7 +46,7 @@ jobs:
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: anroid-results
|
||||
name: android-results
|
||||
path: ./allure-results.tar
|
||||
|
||||
report:
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
- name: Unzip results
|
||||
run: |
|
||||
find artifacts -name allure-results.tar -exec tar -xvf {} \;
|
||||
|
||||
|
||||
- name: Debug path
|
||||
run: |
|
||||
ls -laR
|
||||
@@ -89,5 +89,5 @@ jobs:
|
||||
💸 Balances tests failed.
|
||||
|
||||
Test Results: https://pezkuwichain.github.io/balances_test_result/${{ github.run_number }}/index.html
|
||||
|
||||
|
||||
Github run: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
name: Code Quality
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
concurrency:
|
||||
group: code-quality-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
ACALA_PROD_AUTH_TOKEN: ${{ secrets.ACALA_PROD_AUTH_TOKEN }}
|
||||
ACALA_TEST_AUTH_TOKEN: ${{ secrets.ACALA_TEST_AUTH_TOKEN }}
|
||||
MOONBEAM_PROD_AUTH_TOKEN: ${{ secrets.MOONBEAM_PROD_AUTH_TOKEN }}
|
||||
MOONBEAM_TEST_AUTH_TOKEN: ${{ secrets.MOONBEAM_TEST_AUTH_TOKEN }}
|
||||
MOONPAY_PRODUCTION_SECRET: ${{ secrets.MOONPAY_PRODUCTION_SECRET }}
|
||||
MOONPAY_TEST_SECRET: ${{ secrets.MOONPAY_TEST_SECRET }}
|
||||
MERCURYO_PRODUCTION_SECRET: ${{ secrets.MERCURYO_PRODUCTION_SECRET }}
|
||||
MERCURYO_TEST_SECRET: ${{ secrets.MERCURYO_TEST_SECRET }}
|
||||
EHTERSCAN_API_KEY_MOONBEAM: ${{ secrets.EHTERSCAN_API_KEY_MOONBEAM }}
|
||||
EHTERSCAN_API_KEY_MOONRIVER: ${{ secrets.EHTERSCAN_API_KEY_MOONRIVER }}
|
||||
EHTERSCAN_API_KEY_ETHEREUM: ${{ secrets.EHTERSCAN_API_KEY_ETHEREUM }}
|
||||
INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }}
|
||||
DWELLIR_API_KEY: ${{ secrets.DWELLIR_API_KEY }}
|
||||
WALLET_CONNECT_PROJECT_ID: ${{ secrets.WALLET_CONNECT_PROJECT_ID }}
|
||||
DEBUG_GOOGLE_OAUTH_ID: ${{ secrets.DEBUG_GOOGLE_OAUTH_ID }}
|
||||
RELEASE_GOOGLE_OAUTH_ID: ${{ secrets.RELEASE_GOOGLE_OAUTH_ID }}
|
||||
|
||||
jobs:
|
||||
ktlint:
|
||||
name: Kotlin Lint
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
uses: ./.github/workflows/install/
|
||||
|
||||
- name: Run ktlint
|
||||
run: ./gradlew ktlint
|
||||
|
||||
- name: Upload ktlint report
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ktlint-report
|
||||
path: build/reports/checkstyle/ktlint.xml
|
||||
if-no-files-found: ignore
|
||||
@@ -4,9 +4,9 @@ on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
app_version:
|
||||
description: 'Version of application'
|
||||
description: 'Version of application (e.g. v1.0.0)'
|
||||
required: true
|
||||
default: v*.*.*
|
||||
default: v1.0.0
|
||||
branch:
|
||||
description: 'From which branch the application will be built'
|
||||
required: true
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
uses: pezkuwichain/pezkuwi-wallet-android/.github/workflows/android_build.yml@main
|
||||
with:
|
||||
branch: ${{ github.event.inputs.branch }}
|
||||
gradlew-command: assembleReleaseMarket
|
||||
gradlew-command: bundleReleaseMarket
|
||||
keystore-file-name: market_key.jks
|
||||
secrets: inherit
|
||||
|
||||
@@ -27,30 +27,46 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set Environment Variables
|
||||
uses: tw3lveparsecs/github-actions-setvars@v0.1
|
||||
with:
|
||||
envFilePath: .github/workflows/variables/android.env
|
||||
|
||||
- name: Download built artifact
|
||||
- name: Download bundle artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: apk
|
||||
path: app
|
||||
name: apk-bundle
|
||||
path: app/bundle
|
||||
|
||||
- name: Download mapping artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: apk-mapping
|
||||
path: app/mapping
|
||||
continue-on-error: true
|
||||
|
||||
- name: Download native debug symbols
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: apk-native-debug-symbols
|
||||
path: app/native-debug-symbols
|
||||
continue-on-error: true
|
||||
|
||||
- name: Rename artifacts
|
||||
run: mv app/releaseMarket/app-releaseMarket.apk app/releaseMarket/pezkuwi-wallet-android-${{ github.event.inputs.app_version }}.apk
|
||||
run: mv app/bundle/releaseMarket/app-releaseMarket.aab app/bundle/releaseMarket/pezkuwi-wallet-android-${{ github.event.inputs.app_version }}.aab
|
||||
|
||||
- name: Check for native debug symbols
|
||||
id: check-symbols
|
||||
run: |
|
||||
if [ -f "app/native-debug-symbols/releaseMarket/native-debug-symbols.zip" ]; then
|
||||
echo "path=app/native-debug-symbols/releaseMarket/native-debug-symbols.zip" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Market publication
|
||||
uses: r0adkll/upload-google-play@v1
|
||||
with:
|
||||
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }} # The contents of your service-account.json
|
||||
serviceAccountJsonPlainText: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
|
||||
packageName: io.pezkuwichain.wallet
|
||||
releaseFiles: app/releaseMarket/pezkuwi-wallet-android-${{ github.event.inputs.app_version }}.apk
|
||||
track: production # One of production, beta, alpha, internalsharing, internal, or a custom track name (case sensitive)
|
||||
status: draft # One of "completed", "inProgress", "halted", "draft"
|
||||
releaseFiles: app/bundle/releaseMarket/pezkuwi-wallet-android-${{ github.event.inputs.app_version }}.aab
|
||||
track: alpha
|
||||
status: draft
|
||||
inAppUpdatePriority: 2
|
||||
userFraction: 1.0 # Percentage of users who should get the staged version of the app. Defaults to 1.0
|
||||
whatsNewDirectory: distribution/whatsnew # The directory of localized "whats new" files to upload as the release notes. The files contained in the whatsNewDirectory MUST use the pattern whatsnew-<LOCALE> where LOCALE is using the BCP 47 format
|
||||
mappingFile: app/build/outputs/mapping/release/mapping.txt # The mapping.txt file used to de-obfuscate your stack traces from crash reports
|
||||
debugSymbols: app/intermediates/merged_native_libs/release/out/lib
|
||||
whatsNewDirectory: distribution/whatsnew
|
||||
mappingFile: app/mapping/releaseMarket/mapping.txt
|
||||
debugSymbols: ${{ steps.check-symbols.outputs.path }}
|
||||
|
||||
@@ -16,11 +16,13 @@ runs:
|
||||
cmdline-tools-version: 12266719
|
||||
|
||||
- name: Install NDK
|
||||
run: echo "y" | sudo ${ANDROID_SDK_ROOT}/cmdline-tools/16.0/bin/sdkmanager --install "ndk;26.1.10909125" --sdk_root=${ANDROID_SDK_ROOT}
|
||||
run: |
|
||||
SDKMANAGER=$(find ${ANDROID_SDK_ROOT}/cmdline-tools -name sdkmanager -type f 2>/dev/null | head -1)
|
||||
echo "y" | sudo ${SDKMANAGER} --install "ndk;26.1.10909125" --sdk_root=${ANDROID_SDK_ROOT}
|
||||
shell: bash
|
||||
|
||||
- name: Set ndk.dir in local.properties
|
||||
run: echo "ndk.dir=${{ steps.setup-ndk.outputs.ndk-path }}" >> local.properties
|
||||
run: echo "ndk.dir=${ANDROID_SDK_ROOT}/ndk/26.1.10909125" >> local.properties
|
||||
shell: bash
|
||||
|
||||
- name: 🦀 Install Rust
|
||||
|
||||
@@ -3,6 +3,14 @@ name: Manual Firebase distribution
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
build_variant:
|
||||
description: 'Build variant'
|
||||
required: true
|
||||
type: choice
|
||||
options:
|
||||
- develop
|
||||
- releaseMarket
|
||||
default: develop
|
||||
firebase_group:
|
||||
description: 'Firebase group'
|
||||
required: true
|
||||
@@ -17,7 +25,8 @@ jobs:
|
||||
uses: pezkuwichain/pezkuwi-wallet-android/.github/workflows/android_build.yml@main
|
||||
with:
|
||||
branch: ${{ github.event.inputs.branch }}
|
||||
gradlew-command: assembleDevelop
|
||||
gradlew-command: assemble${{ github.event.inputs.build_variant == 'releaseMarket' && 'ReleaseMarket' || 'Develop' }}
|
||||
keystore-file-name: ${{ github.event.inputs.build_variant == 'releaseMarket' && 'market_key.jks' || 'false' }}
|
||||
secrets: inherit
|
||||
|
||||
upload:
|
||||
@@ -35,8 +44,8 @@ jobs:
|
||||
- name: 🗳 Upload to Firebase
|
||||
uses: ./.github/workflows/upload-to-firebase
|
||||
with:
|
||||
appId: ${{ secrets.ANDROID_DEVELOP_FIREBASE_APP_ID }}
|
||||
firebase-token: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
|
||||
releaseNotes: ${{ github.event.head_commit.message }}
|
||||
appId: ${{ github.event.inputs.build_variant == 'releaseMarket' && secrets.ANDROID_RELEASE_FIREBASE_APP_ID || secrets.ANDROID_DEVELOP_FIREBASE_APP_ID }}
|
||||
firebase-token: ${{ github.event.inputs.build_variant == 'releaseMarket' && secrets.RELEASE_FIREBASE_CREDENTIAL || secrets.CREDENTIAL_FILE_CONTENT }}
|
||||
releaseNotes: "v1.0.0 - ${{ github.event.inputs.build_variant }} build from ${{ github.event.inputs.branch }}"
|
||||
test-groups: ${{ github.event.inputs.firebase_group }}
|
||||
upload-file: app/develop/app-develop.apk
|
||||
upload-file: ${{ github.event.inputs.build_variant == 'releaseMarket' && 'app/releaseMarket/app-releaseMarket.apk' || 'app/develop/app-develop.apk' }}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Build test and deploy debug apk
|
||||
name: Build and deploy release apk
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -10,7 +10,8 @@ jobs:
|
||||
uses: pezkuwichain/pezkuwi-wallet-android/.github/workflows/android_build.yml@main
|
||||
with:
|
||||
branch: main
|
||||
gradlew-command: assembleDebug
|
||||
gradlew-command: assembleReleaseMarket
|
||||
keystore-file-name: market_key.jks
|
||||
secrets: inherit
|
||||
|
||||
upload-to-firebase:
|
||||
@@ -28,11 +29,11 @@ jobs:
|
||||
- name: 🗳 Upload to Firebase
|
||||
uses: ./.github/workflows/upload-to-firebase
|
||||
with:
|
||||
appId: ${{ secrets.ANDROID_DEBUG_FIREBASE_APP_ID }}
|
||||
firebase-token: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
|
||||
appId: ${{ secrets.ANDROID_RELEASE_FIREBASE_APP_ID }}
|
||||
firebase-token: ${{ secrets.RELEASE_FIREBASE_CREDENTIAL }}
|
||||
releaseNotes: ${{ github.event.head_commit.message }}
|
||||
test-groups: dev-team
|
||||
upload-file: app/debug/app-debug.apk
|
||||
upload-file: app/releaseMarket/app-releaseMarket.apk
|
||||
|
||||
upload-to-s3:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -59,7 +60,7 @@ jobs:
|
||||
s3_access_key: ${{ secrets.SCW_ACCESS_KEY }}
|
||||
s3_secret_key: ${{ secrets.SCW_SECRET_KEY }}
|
||||
s3_bucket: ${{ env.S3_BUCKET }}
|
||||
upload_file: app/debug/app-debug.apk
|
||||
upload_file: app/releaseMarket/app-releaseMarket.apk
|
||||
|
||||
- name: Show S3 URL
|
||||
run: |
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
name: Security
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
schedule:
|
||||
- cron: '0 6 * * 1'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
env:
|
||||
ACALA_PROD_AUTH_TOKEN: ${{ secrets.ACALA_PROD_AUTH_TOKEN }}
|
||||
ACALA_TEST_AUTH_TOKEN: ${{ secrets.ACALA_TEST_AUTH_TOKEN }}
|
||||
MOONBEAM_PROD_AUTH_TOKEN: ${{ secrets.MOONBEAM_PROD_AUTH_TOKEN }}
|
||||
MOONBEAM_TEST_AUTH_TOKEN: ${{ secrets.MOONBEAM_TEST_AUTH_TOKEN }}
|
||||
MOONPAY_PRODUCTION_SECRET: ${{ secrets.MOONPAY_PRODUCTION_SECRET }}
|
||||
MOONPAY_TEST_SECRET: ${{ secrets.MOONPAY_TEST_SECRET }}
|
||||
MERCURYO_PRODUCTION_SECRET: ${{ secrets.MERCURYO_PRODUCTION_SECRET }}
|
||||
MERCURYO_TEST_SECRET: ${{ secrets.MERCURYO_TEST_SECRET }}
|
||||
EHTERSCAN_API_KEY_MOONBEAM: ${{ secrets.EHTERSCAN_API_KEY_MOONBEAM }}
|
||||
EHTERSCAN_API_KEY_MOONRIVER: ${{ secrets.EHTERSCAN_API_KEY_MOONRIVER }}
|
||||
EHTERSCAN_API_KEY_ETHEREUM: ${{ secrets.EHTERSCAN_API_KEY_ETHEREUM }}
|
||||
INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }}
|
||||
DWELLIR_API_KEY: ${{ secrets.DWELLIR_API_KEY }}
|
||||
WALLET_CONNECT_PROJECT_ID: ${{ secrets.WALLET_CONNECT_PROJECT_ID }}
|
||||
DEBUG_GOOGLE_OAUTH_ID: ${{ secrets.DEBUG_GOOGLE_OAUTH_ID }}
|
||||
RELEASE_GOOGLE_OAUTH_ID: ${{ secrets.RELEASE_GOOGLE_OAUTH_ID }}
|
||||
|
||||
jobs:
|
||||
codeql:
|
||||
name: CodeQL Analysis
|
||||
runs-on: [self-hosted, wallet]
|
||||
if: github.event_name == 'push' # Only run on push, not PRs (self-hosted security)
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
uses: ./.github/workflows/install/
|
||||
|
||||
- name: Set up DEV Google Services
|
||||
uses: davidSchuppa/base64Secret-toFile-action@v3
|
||||
with:
|
||||
secret: ${{ secrets.CI_DEVELOP_GOOGLE_SERVICES }}
|
||||
filename: google-services.json
|
||||
destination-path: ./app/
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: java-kotlin
|
||||
|
||||
- name: Build for CodeQL
|
||||
run: ./gradlew assembleDebug -x test -x lint
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
|
||||
dependency-review:
|
||||
name: Dependency Review
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'pull_request'
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Dependency Review
|
||||
uses: actions/dependency-review-action@v4
|
||||
with:
|
||||
fail-on-severity: critical
|
||||
deny-licenses: GPL-3.0, AGPL-3.0
|
||||
|
||||
secret-scan:
|
||||
name: Secret Scan
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: TruffleHog Secret Scan
|
||||
uses: trufflesecurity/trufflehog@main
|
||||
with:
|
||||
path: ./
|
||||
base: ${{ github.event.repository.default_branch }}
|
||||
extra_args: --only-verified
|
||||
|
||||
hardcoded-secrets:
|
||||
name: Hardcoded Secret Detection
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Scan for hardcoded secrets
|
||||
run: |
|
||||
FOUND=0
|
||||
|
||||
echo "Checking for seed phrases / mnemonics..."
|
||||
if grep -rn --include="*.kt" --include="*.java" --include="*.xml" -iE "(mnemonic|seed_phrase)\s*=\s*\"[a-z]+" . | grep -v /build/ | grep -v /test/ | grep -v /androidTest/ | grep -v "R.string" | grep -v "getString"; then
|
||||
echo "::error::Possible seed phrase found in source"
|
||||
FOUND=1
|
||||
fi
|
||||
|
||||
echo "Checking for private keys..."
|
||||
if grep -rn --include="*.kt" --include="*.java" -E "(private_key|privateKey|secret)\s*=\s*\"0x[a-fA-F0-9]{64}\"" . | grep -v /build/ | grep -v /test/ | grep -v /androidTest/; then
|
||||
echo "::error::Possible private key found in source"
|
||||
FOUND=1
|
||||
fi
|
||||
|
||||
echo "Checking for API keys in source..."
|
||||
if grep -rn --include="*.kt" --include="*.java" -iE "(api_key|apikey|secret_key|password)\s*=\s*\"[^\"]{16,}" . | grep -v /build/ | grep -v /test/ | grep -v /androidTest/ | grep -v BuildConfig | grep -v "process"; then
|
||||
echo "::error::Possible API key or password found in source"
|
||||
FOUND=1
|
||||
fi
|
||||
|
||||
if [ "$FOUND" -eq 0 ]; then
|
||||
echo "No hardcoded secrets found."
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,34 +0,0 @@
|
||||
name: Sync main and master branches
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Sync branches
|
||||
run: |
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
|
||||
echo "main was updated, syncing master..."
|
||||
git checkout master
|
||||
git reset --hard origin/main
|
||||
git push origin master --force
|
||||
elif [ "${{ github.ref }}" = "refs/heads/master" ]; then
|
||||
echo "master was updated, syncing main..."
|
||||
git checkout main
|
||||
git reset --hard origin/master
|
||||
git push origin main --force
|
||||
fi
|
||||
@@ -25,5 +25,8 @@ app/*.apk
|
||||
!/core-db/schemas/io.novafoundation.nova.core_db.AppDatabase/8.json
|
||||
!/core-db/schemas/io.novafoundation.nova.core_db.AppDatabase/9.json
|
||||
|
||||
google-services.jsonversion.properties
|
||||
# Firebase config - contains sensitive API keys
|
||||
google-services.json
|
||||
**/google-services.json
|
||||
|
||||
.kotlin/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/build
|
||||
/release*
|
||||
|
||||
src/release*/google-services.json
|
||||
!src/release/google-services.json
|
||||
# Firebase config - sensitive API keys
|
||||
**/google-services.json
|
||||
@@ -11,6 +11,10 @@ android {
|
||||
versionCode computeVersionCode()
|
||||
versionName computeVersionName()
|
||||
|
||||
// Branch.io key from local.properties or environment variable
|
||||
manifestPlaceholders = [
|
||||
BRANCH_KEY: readRawSecretOrNull('BRANCH_KEY') ?: "key_test_placeholder"
|
||||
]
|
||||
}
|
||||
signingConfigs {
|
||||
dev {
|
||||
@@ -45,8 +49,9 @@ android {
|
||||
signingConfig signingConfigs.debug
|
||||
}
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
|
||||
buildConfigField "String", "BuildType", "\"release\""
|
||||
}
|
||||
@@ -64,9 +69,7 @@ android {
|
||||
initWith buildTypes.release
|
||||
matchingFallbacks = ['release']
|
||||
signingConfig signingConfigs.market
|
||||
|
||||
versionNameSuffix "-${releaseApplicationSuffix}"
|
||||
applicationIdSuffix ".${releaseApplicationSuffix}"
|
||||
ndk { debugSymbolLevel 'FULL' }
|
||||
|
||||
buildConfigField "String", "BuildType", "\"releaseMarket\""
|
||||
}
|
||||
@@ -75,9 +78,6 @@ android {
|
||||
matchingFallbacks = ['release']
|
||||
signingConfig signingConfigs.github
|
||||
|
||||
versionNameSuffix '-github'
|
||||
applicationIdSuffix '.github'
|
||||
|
||||
buildConfigField "String", "BuildType", "\"releaseGithub\""
|
||||
}
|
||||
develop {
|
||||
@@ -169,7 +169,7 @@ void createBindReleaseFileTask(String destination) {
|
||||
|
||||
play {
|
||||
serviceAccountCredentials = file(System.env.CI_PLAY_KEY ?: "../key/fake.json")
|
||||
track = "beta"
|
||||
track = "production"
|
||||
releaseStatus = "completed"
|
||||
}
|
||||
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "783787781434",
|
||||
"project_id": "pezkuwi-wallet",
|
||||
"storage_bucket": "pezkuwi-wallet.firebasestorage.app"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:783787781434:android:3645395a1f99c11c53b403",
|
||||
"android_client_info": {
|
||||
"package_name": "io.pezkuwichain.wallet"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "783787781434-6tn9gh3ko4u73ckjjbv336bbmdk4eefv.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyDK_P0TE_QyomWlO1BN79qY4xUAKcei12g"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "783787781434-6tn9gh3ko4u73ckjjbv336bbmdk4eefv.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
@@ -1,21 +1,266 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
# ============================================================
|
||||
# Pezkuwi Wallet ProGuard Rules
|
||||
# ============================================================
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
# Keep line numbers for debugging crash reports
|
||||
-keepattributes SourceFile,LineNumberTable
|
||||
-renamesourcefileattribute SourceFile
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
# ============================================================
|
||||
# Kotlin
|
||||
# ============================================================
|
||||
-dontwarn kotlin.**
|
||||
-keep class kotlin.Metadata { *; }
|
||||
-keepclassmembers class kotlin.Metadata {
|
||||
public <methods>;
|
||||
}
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
# Kotlin Coroutines
|
||||
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
|
||||
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
|
||||
-keepclassmembers class kotlinx.coroutines.** {
|
||||
volatile <fields>;
|
||||
}
|
||||
-dontwarn kotlinx.coroutines.**
|
||||
|
||||
# ============================================================
|
||||
# Retrofit & OkHttp (Strict rules for generic type preservation)
|
||||
# ============================================================
|
||||
-dontwarn okhttp3.**
|
||||
-dontwarn okio.**
|
||||
-dontwarn javax.annotation.**
|
||||
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
|
||||
|
||||
# Keep Retrofit library
|
||||
-keep class retrofit2.** { *; }
|
||||
-keepclassmembers class retrofit2.** { *; }
|
||||
|
||||
# Essential attributes for reflection
|
||||
-keepattributes Signature
|
||||
-keepattributes Exceptions
|
||||
-keepattributes InnerClasses
|
||||
-keepattributes EnclosingMethod
|
||||
-keepattributes RuntimeVisibleAnnotations
|
||||
-keepattributes RuntimeInvisibleAnnotations
|
||||
-keepattributes RuntimeVisibleParameterAnnotations
|
||||
-keepattributes RuntimeInvisibleParameterAnnotations
|
||||
-keepattributes AnnotationDefault
|
||||
|
||||
# Keep ALL interfaces with Retrofit annotations - NO allowshrinking/allowobfuscation
|
||||
-keep interface * {
|
||||
@retrofit2.http.* <methods>;
|
||||
}
|
||||
|
||||
# Keep the method signatures including generic types
|
||||
-keepclasseswithmembers interface * {
|
||||
@retrofit2.http.* <methods>;
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# Gson
|
||||
# ============================================================
|
||||
-keepattributes Signature
|
||||
-keepattributes *Annotation*
|
||||
-dontwarn sun.misc.**
|
||||
-keep class com.google.gson.** { *; }
|
||||
-keep class * extends com.google.gson.TypeAdapter
|
||||
-keep class * implements com.google.gson.TypeAdapterFactory
|
||||
-keep class * implements com.google.gson.JsonSerializer
|
||||
-keep class * implements com.google.gson.JsonDeserializer
|
||||
-keepclassmembers,allowobfuscation class * {
|
||||
@com.google.gson.annotations.SerializedName <fields>;
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# BouncyCastle Crypto
|
||||
# ============================================================
|
||||
-keep class org.bouncycastle.** { *; }
|
||||
-dontwarn org.bouncycastle.**
|
||||
|
||||
# ============================================================
|
||||
# Native JNI Bindings (Rust)
|
||||
# ============================================================
|
||||
# SR25519 signing - keep the native methods and the class
|
||||
-keep class io.novafoundation.nova.sr25519.BizinikiwSr25519 { *; }
|
||||
-keep class io.novafoundation.nova.** { native <methods>; }
|
||||
-keepclasseswithmembernames class * {
|
||||
native <methods>;
|
||||
}
|
||||
|
||||
# Keep all JNI related classes
|
||||
-keep class io.parity.** { *; }
|
||||
|
||||
# Runtime signers
|
||||
-keep class io.novafoundation.nova.runtime.extrinsic.signer.** { *; }
|
||||
|
||||
# ============================================================
|
||||
# Substrate SDK
|
||||
# ============================================================
|
||||
-keep class jp.co.soramitsu.** { *; }
|
||||
-dontwarn jp.co.soramitsu.**
|
||||
|
||||
# Nova Substrate SDK (io.novasama)
|
||||
-keep class io.novasama.substrate_sdk_android.** { *; }
|
||||
-keepclassmembers class io.novasama.substrate_sdk_android.** { *; }
|
||||
-dontwarn io.novasama.substrate_sdk_android.**
|
||||
|
||||
# XXHash library (used by Substrate SDK hashing)
|
||||
-keep class net.jpountz.** { *; }
|
||||
-keepclassmembers class net.jpountz.** { *; }
|
||||
-dontwarn net.jpountz.**
|
||||
|
||||
# Keep Schema objects and their delegated properties
|
||||
-keep class * extends io.novasama.substrate_sdk_android.scale.Schema { *; }
|
||||
-keepclassmembers class * extends io.novasama.substrate_sdk_android.scale.Schema {
|
||||
<fields>;
|
||||
<methods>;
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# Secrets & Crypto Classes
|
||||
# ============================================================
|
||||
-keep class io.novafoundation.nova.common.data.secrets.** { *; }
|
||||
-keepclassmembers class io.novafoundation.nova.common.data.secrets.** { *; }
|
||||
-keep class io.novafoundation.nova.feature_account_impl.data.secrets.** { *; }
|
||||
-keep class io.novafoundation.nova.feature_account_impl.data.repository.datasource.** { *; }
|
||||
-keep class io.novafoundation.nova.feature_account_impl.data.repository.addAccount.** { *; }
|
||||
|
||||
# ============================================================
|
||||
# Firebase
|
||||
# ============================================================
|
||||
-keep class com.google.firebase.** { *; }
|
||||
-dontwarn com.google.firebase.**
|
||||
-keep class com.google.android.gms.** { *; }
|
||||
-dontwarn com.google.android.gms.**
|
||||
|
||||
# ============================================================
|
||||
# Branch.io Deep Linking
|
||||
# ============================================================
|
||||
-keep class io.branch.** { *; }
|
||||
-dontwarn io.branch.**
|
||||
|
||||
# ============================================================
|
||||
# Web3j (Ethereum)
|
||||
# ============================================================
|
||||
-keep class org.web3j.** { *; }
|
||||
-dontwarn org.web3j.**
|
||||
|
||||
# ============================================================
|
||||
# SQLCipher
|
||||
# ============================================================
|
||||
-keep class net.sqlcipher.** { *; }
|
||||
-dontwarn net.sqlcipher.**
|
||||
|
||||
# ============================================================
|
||||
# Room Database
|
||||
# ============================================================
|
||||
-keep class * extends androidx.room.RoomDatabase
|
||||
-keep @androidx.room.Entity class *
|
||||
-dontwarn androidx.room.paging.**
|
||||
|
||||
# ============================================================
|
||||
# Data Classes & Models (Keep for serialization)
|
||||
# ============================================================
|
||||
-keep class io.novafoundation.nova.**.model.** { *; }
|
||||
-keep class io.novafoundation.nova.**.response.** { *; }
|
||||
-keep class io.novafoundation.nova.**.request.** { *; }
|
||||
-keep class io.novafoundation.nova.**.dto.** { *; }
|
||||
-keep class io.novafoundation.nova.**.*Remote { *; }
|
||||
-keep class io.novafoundation.nova.**.*Remote$* { *; }
|
||||
|
||||
# ============================================================
|
||||
# Parcelable
|
||||
# ============================================================
|
||||
-keepclassmembers class * implements android.os.Parcelable {
|
||||
public static final ** CREATOR;
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# Enums
|
||||
# ============================================================
|
||||
-keepclassmembers enum * {
|
||||
public static **[] values();
|
||||
public static ** valueOf(java.lang.String);
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# Serializable
|
||||
# ============================================================
|
||||
-keepclassmembers class * implements java.io.Serializable {
|
||||
static final long serialVersionUID;
|
||||
private static final java.io.ObjectStreamField[] serialPersistentFields;
|
||||
private void writeObject(java.io.ObjectOutputStream);
|
||||
private void readObject(java.io.ObjectInputStream);
|
||||
java.lang.Object writeReplace();
|
||||
java.lang.Object readResolve();
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# Ledger USB/Bluetooth
|
||||
# ============================================================
|
||||
-keep class io.novafoundation.nova.feature_ledger_impl.** { *; }
|
||||
|
||||
# ============================================================
|
||||
# WalletConnect
|
||||
# ============================================================
|
||||
-keep class com.walletconnect.** { *; }
|
||||
-keepclassmembers class com.walletconnect.** { *; }
|
||||
-dontwarn com.walletconnect.**
|
||||
|
||||
# ============================================================
|
||||
# Google API Client (Google Drive)
|
||||
# ============================================================
|
||||
-keep class com.google.api.** { *; }
|
||||
-keepclassmembers class com.google.api.** { *; }
|
||||
-keep class com.google.api.client.** { *; }
|
||||
-keepclassmembers class com.google.api.client.** { *; }
|
||||
-keep class com.google.api.services.** { *; }
|
||||
-keepclassmembers class com.google.api.services.** { *; }
|
||||
-dontwarn com.google.api.**
|
||||
|
||||
# ============================================================
|
||||
# Navigation Component
|
||||
# ============================================================
|
||||
-keep class * extends androidx.navigation.Navigator { *; }
|
||||
-keep @androidx.navigation.Navigator.Name class * { *; }
|
||||
-keepnames class * extends androidx.navigation.Navigator
|
||||
-keepattributes *Annotation*
|
||||
-keep class androidx.navigation.** { *; }
|
||||
-keep class * implements androidx.navigation.NavArgs { *; }
|
||||
-keep class androidx.navigation.fragment.** { *; }
|
||||
-keep class io.novafoundation.nova.**.navigation.** { *; }
|
||||
-keep class * extends androidx.navigation.NavDestination { *; }
|
||||
|
||||
# Keep all Nova foundation classes (prevent aggressive obfuscation)
|
||||
-keep class io.novafoundation.nova.** { *; }
|
||||
-keepnames class io.novafoundation.nova.**
|
||||
|
||||
# ============================================================
|
||||
# Optimization settings
|
||||
# ============================================================
|
||||
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*,!method/inlining/*
|
||||
-optimizationpasses 5
|
||||
-allowaccessmodification
|
||||
|
||||
# Don't optimize or obfuscate Retrofit interfaces - critical for type reflection
|
||||
-keepnames,includedescriptorclasses interface * {
|
||||
@retrofit2.http.* <methods>;
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# Don't warn about missing classes that we don't use
|
||||
# ============================================================
|
||||
-dontwarn org.conscrypt.**
|
||||
-dontwarn org.slf4j.**
|
||||
-dontwarn javax.naming.**
|
||||
-dontwarn org.w3c.dom.traversal.**
|
||||
-dontwarn org.apache.xerces.**
|
||||
-dontwarn org.apache.xml.**
|
||||
-dontwarn org.apache.xalan.**
|
||||
-dontwarn org.ietf.jgss.**
|
||||
-dontwarn org.apache.http.**
|
||||
|
||||
# ByteBuddy (test dependency)
|
||||
-dontwarn net.bytebuddy.**
|
||||
-dontwarn com.sun.jna.**
|
||||
-dontwarn edu.umd.cs.findbugs.annotations.**
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "633686702274",
|
||||
"project_id": "pezkuwi-wallet-debug",
|
||||
"storage_bucket": "pezkuwi-wallet-debug.firebasestorage.app"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:633686702274:android:897282d4fda3f5ed7e635b",
|
||||
"android_client_info": {
|
||||
"package_name": "io.pezkuwichain.wallet"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "633686702274-42ktqav1laf6d4ol7f714ib3s6lka73f.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
"android_info": {
|
||||
"package_name": "io.pezkuwichain.wallet",
|
||||
"certificate_hash": "8fb4f8977fc9b990e9d501a0041f5723f23b65d2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_id": "633686702274-seee7qsisjmrps3npbnep2i8rtu44hdu.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyBY_4wMnmyc8etnkyNOd_I-bCFAxO2Z-Os"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "633686702274-seee7qsisjmrps3npbnep2i8rtu44hdu.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:633686702274:android:018702ece3f601067e635b",
|
||||
"android_client_info": {
|
||||
"package_name": "io.pezkuwichain.wallet.debug"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "633686702274-3dduat8jpbqfnie9kvqr441np1gcbm90.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
"android_info": {
|
||||
"package_name": "io.pezkuwichain.wallet.debug",
|
||||
"certificate_hash": "fc2d7bde71183e18377baf8076b35b3c68f9b02e"
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_id": "633686702274-seee7qsisjmrps3npbnep2i8rtu44hdu.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyBY_4wMnmyc8etnkyNOd_I-bCFAxO2Z-Os"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "633686702274-seee7qsisjmrps3npbnep2i8rtu44hdu.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "633686702274",
|
||||
"project_id": "pezkuwi-wallet-debug",
|
||||
"storage_bucket": "pezkuwi-wallet-debug.firebasestorage.app"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:633686702274:android:018702ece3f601067e635b",
|
||||
"android_client_info": {
|
||||
"package_name": "io.pezkuwichain.wallet.debug"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "633686702274-seee7qsisjmrps3npbnep2i8rtu44hdu.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyBY_4wMnmyc8etnkyNOd_I-bCFAxO2Z-Os"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "633686702274-seee7qsisjmrps3npbnep2i8rtu44hdu.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "815440502995",
|
||||
"project_id": "pezkuwi-wallet-debug-dev",
|
||||
"storage_bucket": "pezkuwi-wallet-debug-dev.firebasestorage.app"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:815440502995:android:8383afc644e3feed7ff426",
|
||||
"android_client_info": {
|
||||
"package_name": "io.pezkuwichain.wallet.dev"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "815440502995-7v2lq2podh5i1uge0lfeo2gvbja708bf.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
"android_info": {
|
||||
"package_name": "io.pezkuwichain.wallet.dev",
|
||||
"certificate_hash": "8fb4f8977fc9b990e9d501a0041f5723f23b65d2"
|
||||
}
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyCRYO6PKnKyzqWxR-O3tfVC5J6e44kTUZk"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": []
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
@@ -208,7 +208,7 @@
|
||||
|
||||
<meta-data
|
||||
android:name="io.branch.sdk.BranchKey"
|
||||
android:value="key_live_dsxlmUqNhbtOYX6e7cfgrpkbqsjGPYBf" />
|
||||
android:value="${BRANCH_KEY}" />
|
||||
|
||||
<meta-data android:name="io.branch.sdk.TestMode" android:value="false" />
|
||||
|
||||
|
||||
@@ -285,8 +285,8 @@ class Navigator(
|
||||
.navigateInFirstAttachedContext()
|
||||
}
|
||||
|
||||
override fun openSend(payload: SendPayload, initialRecipientAddress: String?) {
|
||||
val extras = SelectSendFragment.getBundle(payload, initialRecipientAddress)
|
||||
override fun openSend(payload: SendPayload, initialRecipientAddress: String?, initialAmount: Double?) {
|
||||
val extras = SelectSendFragment.getBundle(payload, initialRecipientAddress, initialAmount)
|
||||
|
||||
navigationBuilder().cases()
|
||||
.addCase(R.id.sendFlowFragment, R.id.action_sendFlow_to_send)
|
||||
@@ -412,7 +412,9 @@ class Navigator(
|
||||
}
|
||||
|
||||
override fun openSendFlow() {
|
||||
navigationBuilder().action(R.id.action_mainFragment_to_sendFlow)
|
||||
navigationBuilder().cases()
|
||||
.addCase(R.id.mainFragment, R.id.action_mainFragment_to_sendFlow)
|
||||
.addCase(R.id.bridgeFragment, R.id.action_bridge_to_sendFlow)
|
||||
.navigateInFirstAttachedContext()
|
||||
}
|
||||
|
||||
@@ -431,6 +433,11 @@ class Navigator(
|
||||
.navigateInFirstAttachedContext()
|
||||
}
|
||||
|
||||
override fun openBridgeFlow() {
|
||||
navigationBuilder().action(R.id.action_mainFragment_to_bridgeFlow)
|
||||
.navigateInFirstAttachedContext()
|
||||
}
|
||||
|
||||
override fun openSelectGiftAmount(assetPayload: AssetPayload) {
|
||||
navigationBuilder().action(R.id.action_selectGiftAmount)
|
||||
.setArgs(SelectGiftAmountFragment.createPayload(SelectGiftAmountPayload(assetPayload)))
|
||||
|
||||
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 1012 B After Width: | Height: | Size: 177 B |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 830 B After Width: | Height: | Size: 172 B |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 180 B |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 187 B |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 197 B |
|
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 36 KiB |
@@ -635,6 +635,14 @@
|
||||
app:popEnterAnim="@anim/fragment_close_enter"
|
||||
app:popExitAnim="@anim/fragment_close_exit" />
|
||||
|
||||
<action
|
||||
android:id="@+id/action_mainFragment_to_bridgeFlow"
|
||||
app:destination="@id/bridgeFragment"
|
||||
app:enterAnim="@anim/fragment_open_enter"
|
||||
app:exitAnim="@anim/fragment_open_exit"
|
||||
app:popEnterAnim="@anim/fragment_close_enter"
|
||||
app:popExitAnim="@anim/fragment_close_exit" />
|
||||
|
||||
<action
|
||||
android:id="@+id/action_mainFragment_to_swapFlow"
|
||||
app:destination="@id/select_swap_token_nav_graph"
|
||||
@@ -1180,6 +1188,21 @@
|
||||
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/bridgeFragment"
|
||||
android:name="io.novafoundation.nova.feature_assets.presentation.bridge.BridgeFragment"
|
||||
android:label="BridgeFragment">
|
||||
|
||||
<action
|
||||
android:id="@+id/action_bridge_to_sendFlow"
|
||||
app:destination="@id/sendFlowFragment"
|
||||
app:enterAnim="@anim/fragment_open_enter"
|
||||
app:exitAnim="@anim/fragment_open_exit"
|
||||
app:popEnterAnim="@anim/fragment_close_enter"
|
||||
app:popExitAnim="@anim/fragment_close_exit" />
|
||||
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/tradeProvidersFragment"
|
||||
android:name="io.novafoundation.nova.feature_assets.presentation.trade.provider.TradeProviderListFragment"
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "783787781434",
|
||||
"project_id": "pezkuwi-wallet",
|
||||
"storage_bucket": "pezkuwi-wallet.firebasestorage.app"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:783787781434:android:3645395a1f99c11c53b403",
|
||||
"android_client_info": {
|
||||
"package_name": "io.pezkuwichain.wallet"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "783787781434-6tn9gh3ko4u73ckjjbv336bbmdk4eefv.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyDK_P0TE_QyomWlO1BN79qY4xUAKcei12g"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "783787781434-6tn9gh3ko4u73ckjjbv336bbmdk4eefv.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@mipmap/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 177 B |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 172 B |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 180 B |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 187 B |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 197 B |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 36 KiB |
@@ -15,7 +15,8 @@ hydra-dx-math = { git = "https://github.com/galacticcouncil/HydraDX-node", versi
|
||||
jni = { version = "0.17.0", default-features = false }
|
||||
|
||||
[profile.release]
|
||||
strip = true
|
||||
strip = false
|
||||
debug = 2
|
||||
lto = true
|
||||
opt-level = "s"
|
||||
|
||||
|
||||
@@ -14,7 +14,8 @@ frame-metadata = { version = "16.0.0", features = [ "current" ] }
|
||||
codec = { package = "parity-scale-codec", version = "3.6.9", features = [ "derive" ] }
|
||||
|
||||
[profile.release]
|
||||
strip = true
|
||||
strip = false
|
||||
debug = 2
|
||||
lto = true
|
||||
opt-level = "s"
|
||||
|
||||
|
||||
@@ -11,7 +11,8 @@ jni = { version = "0.21", default-features = false }
|
||||
zeroize = "1.7"
|
||||
|
||||
[profile.release]
|
||||
strip = true
|
||||
strip = false
|
||||
debug = 2
|
||||
lto = true
|
||||
opt-level = "s"
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc_fingerprint":947953012485338828,"outputs":{"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.91.1 (ed61e7d7e 2025-11-07)\nbinary: rustc\ncommit-hash: ed61e7d7e242494fb7057f2657300d9e77bb4fcb\ncommit-date: 2025-11-07\nhost: x86_64-unknown-linux-gnu\nrelease: 1.91.1\nLLVM version: 21.1.2\n","stderr":""},"4004168384107719125":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/mamostehp/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"ssse3\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"android\"\ntarget_pointer_width=\"32\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"8677832667160982921":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/mamostehp/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"eabi\"\ntarget_arch=\"arm\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"android\"\ntarget_pointer_width=\"32\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"3586398789307949181":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/mamostehp/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"aarch64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"neon\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"android\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/mamostehp/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"4581980744397837174":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/mamostehp/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"popcnt\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"sse4.1\"\ntarget_feature=\"ssse3\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"android\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}}
|
||||
@@ -1,3 +0,0 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by cargo.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
@@ -1,3 +0,0 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by cargo.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
b1f9669410b1dacf
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":4826714390000139368,"features":"[]","declared_features":"[]","target":14855336370480542997,"profile":9543526985319441559,"path":12353749080186086568,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"aarch64-linux-android/release/.fingerprint/arrayref-a9b7d8ef855a2e2b/dep-lib-arrayref","checksum":false}}],"rustflags":[],"config":919189206985233260,"compile_kind":6373778340919622063}
|
||||
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
1954b7b37d0f8214
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":4826714390000139368,"features":"[]","declared_features":"[\"borsh\", \"default\", \"serde\", \"std\", \"zeroize\"]","target":12564975964323158710,"profile":9543526985319441559,"path":1724913712469643321,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"aarch64-linux-android/release/.fingerprint/arrayvec-322676fb79f1f7b6/dep-lib-arrayvec","checksum":false}}],"rustflags":[],"config":919189206985233260,"compile_kind":6373778340919622063}
|
||||
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
5400b9a7b43c65b2
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":4826714390000139368,"features":"[]","declared_features":"[]","target":4098124618827574291,"profile":9543526985319441559,"path":12534702432912567667,"deps":[[10520923840501062997,"generic_array",false,4330921556552244557]],"local":[{"CheckDepInfo":{"dep_info":"aarch64-linux-android/release/.fingerprint/block-buffer-2f25abd1b92445cb/dep-lib-block_buffer","checksum":false}}],"rustflags":[],"config":919189206985233260,"compile_kind":6373778340919622063}
|
||||
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
b953a8dbf4a69848
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":4826714390000139368,"features":"[]","declared_features":"[\"default\", \"i128\", \"std\"]","target":8344828840634961491,"profile":9543526985319441559,"path":4250400978350000770,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"aarch64-linux-android/release/.fingerprint/byteorder-7f29c8117d257097/dep-lib-byteorder","checksum":false}}],"rustflags":[],"config":919189206985233260,"compile_kind":6373778340919622063}
|
||||
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
9d1e3124ca0d0980
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":4826714390000139368,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"extra-platforms\", \"serde\", \"std\"]","target":11402411492164584411,"profile":1366226183757803652,"path":11243253845427179361,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"aarch64-linux-android/release/.fingerprint/bytes-90d66cd49f71777f/dep-lib-bytes","checksum":false}}],"rustflags":[],"config":919189206985233260,"compile_kind":6373778340919622063}
|
||||
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
e92568ff99ebdb7b
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":4826714390000139368,"features":"[]","declared_features":"[\"unstable\"]","target":18397703399226382178,"profile":9543526985319441559,"path":14842312227340866347,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"aarch64-linux-android/release/.fingerprint/cesu8-607ed38c91714364/dep-lib-cesu8","checksum":false}}],"rustflags":[],"config":919189206985233260,"compile_kind":6373778340919622063}
|
||||
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
9d077295398e6d37
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":4826714390000139368,"features":"[]","declared_features":"[\"core\", \"rustc-dep-of-std\"]","target":13840298032947503755,"profile":9543526985319441559,"path":8008196845016587709,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"aarch64-linux-android/release/.fingerprint/cfg-if-5c5dcbb7c6b2e158/dep-lib-cfg_if","checksum":false}}],"rustflags":[],"config":919189206985233260,"compile_kind":6373778340919622063}
|
||||