From e1a010b779493d289c7971f38b0761b6d71a9622 Mon Sep 17 00:00:00 2001 From: Satoshi Qazi Muhammed Date: Fri, 17 Jul 2026 10:40:01 -0700 Subject: [PATCH] Fix: keep net.i2p.crypto.eddsa classes from being stripped by R8 Signer.kt/SignatureVerifier.kt in substrate-sdk-android look up the "EdDSA" JCA provider by name at runtime (Signature.getInstance(..., "EdDSA")), backed by net.i2p.crypto:eddsa's EdDSASecurityProvider. With no keep rule, R8 stripped/renamed its classes in the minified release build, so the provider's own registered service implementation could no longer be found - "class configured for Signature (provider: EdDSA) cannot be found", reproduced on-device sending SOL (every Solana transaction signs with Ed25519, so this path is always hit). --- app/proguard-rules.pro | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index d0f00f24..cc79acc6 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -77,6 +77,16 @@ -keep class org.bouncycastle.** { *; } -dontwarn org.bouncycastle.** +# ============================================================ +# EdDSA (net.i2p.crypto:eddsa, pulled in transitively by substrate-sdk-android) +# ============================================================ +# Signer.kt/SignatureVerifier.kt look up this JCA provider by name at runtime +# (Signature.getInstance(..., "EdDSA")) - every Ed25519 signature (all Solana +# transactions, and any Substrate account using CryptoType.ED25519) goes +# through this provider, so its classes must survive obfuscation intact. +-keep class net.i2p.crypto.eddsa.** { *; } +-dontwarn net.i2p.crypto.eddsa.** + # ============================================================ # Native JNI Bindings (Rust) # ============================================================