From 16427654ae4e410edeb5a3341d5de262dd289bd4 Mon Sep 17 00:00:00 2001 From: Satoshi Qazi Muhammed Date: Fri, 17 Jul 2026 08:13:51 -0700 Subject: [PATCH] Remove CHANGELOG_PEZKUWI.md dev-notes file, not app source/APK-related Was a context-recovery scratch doc from the initial rebrand port (Feb 2026): self-contradicted (top says debug cleanup done, bottom checklist still unchecked), and its only non-obvious content (SDK/runtime type-lookup gotchas) is already explained in the actual source docstrings (PezkuwiCheckMortality.kt, PezkuwiAddressConstructor.kt) or preserved in memory for future reference. --- CHANGELOG_PEZKUWI.md | 412 ------------------------------------------- 1 file changed, 412 deletions(-) delete mode 100644 CHANGELOG_PEZKUWI.md diff --git a/CHANGELOG_PEZKUWI.md b/CHANGELOG_PEZKUWI.md deleted file mode 100644 index 5c93a6e2..00000000 --- a/CHANGELOG_PEZKUWI.md +++ /dev/null @@ -1,412 +0,0 @@ -# PezWallet Android - Pezkuwi Uyumluluk Değişiklikleri - -Bu dosya, Pezkuwi chain uyumluluğu için yapılan tüm değişiklikleri takip eder. -Context sıfırlanması durumunda referans olarak kullanılmalıdır. - ---- - -## v1.1.1 — Dashboard & action-row screen redesign (2026-06-15) - -Screen-level brand-book alignment (foundation landed in v1.1.0): -- **Pezkuwi dashboard card:** blue/indigo gradient → frosted dark-navy surface with - a small Newroz-flame icon; brand buttons (Approve = kesk, Sign = sor, Share = - frosted-dark — the old yellow Share button removed); zer/positive accents. -- **Balance action row:** flat icon+label → circular buttons (Send on a kesk-green - circle, Receive/Swap/Buy/Gift on frosted-dark circles with labels below). - -## v1.1.0 — Brand-book UI redesign (2026-06-15) - -Görsel kimlik Pezkuwi marka kitabına hizalandı; iş mantığına dokunulmadı. - -- **Renkler:** colors.xml'deki yasak magenta/mor değerleri marka renkleriyle değiştirildi - (isimler korundu). Raster illustration'lardaki pembe/mor pikseller (siri, networks - banner, no-added-networks, hardware import, tinder-gov, crowdloan) kesk/teal'e retint - edildi. Üçüncü-taraf OAK logosuna dokunulmadı. -- **Tipografi:** Public Sans → Space Grotesk (display) + Plus Jakarta Sans (gövde) + - JetBrains Mono (adres/hash). TR + Kurmancî glifleri doğrulandı. -- **Splash:** Kurdistan-haritalı logo → Newroz alevi marka işareti. -- **Onboarding:** welcome hero → "Global United States of Pezkuwi" infografiği (tam/kırpılmadan). -- **Hijyen:** production-öncesi debug kodları kaldırıldı (FeeLoader user-facing DEBUG mesajı, - RuntimeFactory diagnostics). Brand kuralları için `BRAND.md` eklendi. - ---- - -## DEBUG KODLARI — ✅ TEMİZLENDİ (2026-06-15, v1.1.0 öncesi) - -> Aşağıdaki tüm debug kodları production'a çıkmadan kaldırıldı: -> #1 FeeLoaderV2Provider (kullanıcıya görünen DEBUG hata mesajı) ve #2 RuntimeFactory -> (`lastDiagnostics` + test referansı) bu sürümde temizlendi; #3–#6 zaten kaldırılmıştı. -> Doğrulama: repoda `"DEBUG:` literali / `lastDiagnostics` referansı kalmadı. -> (Aşağıdaki kayıtlar tarihsel referans içindir.) - -### 1. FeeLoaderV2Provider.kt - Hata mesajı gösterimi -**Dosya:** `feature-wallet-api/src/main/java/io/novafoundation/nova/feature_wallet_api/presentation/mixin/fee/v2/FeeLoaderV2Provider.kt` -**Değişiklik:** -```kotlin -// ÖNCE: -message = resourceManager.getString(R.string.choose_amount_error_fee), - -// SONRA (DEBUG): -message = "DEBUG: $errorMsg | Runtime: $diagnostics", -``` -**Temizleme:** -- `"DEBUG: $errorMsg | Runtime: $diagnostics"` → `resourceManager.getString(R.string.choose_amount_error_fee)` olarak geri al -- `val diagnostics = try { ... }` bloğunu kaldır - ---- - -### 2. RuntimeFactory.kt - Diagnostic değişken ve log'lar -**Dosya:** `runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/RuntimeFactory.kt` -**Eklenenler:** -```kotlin -// Companion object içinde: -companion object { - @Volatile - var lastDiagnostics: String = "not yet initialized" -} - -// constructRuntimeInternal içinde: -lastDiagnostics = "typesUsage=$typesUsage, ExtrinsicSig=$hasExtrinsicSignature, MultiSig=$hasMultiSignature, typeCount=${types.size}" - -// Log satırları: -Log.d("RuntimeFactory", "DEBUG: TypesUsage for chain $chainId = $typesUsage") -Log.d("RuntimeFactory", "DEBUG: Loading BASE types for $chainId") -Log.d("RuntimeFactory", "DEBUG: BASE types loaded, hash=$baseHash, typeCount=${types.size}") -Log.d("RuntimeFactory", "DEBUG: Chain $chainId - ExtrinsicSignature=$hasExtrinsicSignature, MultiSignature=$hasMultiSignature, typesUsage=$typesUsage, typeCount=${types.size}") -Log.d("RuntimeFactory", "DEBUG: BaseTypes loaded, length=${baseTypesRaw.length}, contains ExtrinsicSignature=${baseTypesRaw.contains("ExtrinsicSignature")}") -Log.e("RuntimeFactory", "DEBUG: BaseTypes NOT in cache!") -``` -**Temizleme:** -- `companion object { ... }` bloğunu kaldır -- `lastDiagnostics = ...` satırını kaldır -- Tüm `Log.d/Log.e("RuntimeFactory", "DEBUG: ...")` satırlarını kaldır - ---- - -### 3. CustomTransactionExtensions.kt - Log satırları -**Dosya:** `runtime/src/main/java/io/novafoundation/nova/runtime/extrinsic/CustomTransactionExtensions.kt` -**Temizlenecek:** Tüm `Log.d(TAG, ...)` satırları ve `private const val TAG` tanımı - ---- - -### 4. ExtrinsicBuilderFactory.kt - Log satırları -**Dosya:** `runtime/src/main/java/io/novafoundation/nova/runtime/extrinsic/ExtrinsicBuilderFactory.kt` -**Temizlenecek:** Tüm `Log.d(TAG, ...)` satırları ve `private const val TAG` tanımı - ---- - -### 5. PezkuwiAddressConstructor.kt - Log satırları -**Dosya:** `common/src/main/java/io/novafoundation/nova/common/utils/PezkuwiAddressConstructor.kt` -**Temizlenecek:** Tüm `Log.d(TAG, ...)` satırları ve `private const val TAG` tanımı - ---- - -### 6. RealExtrinsicService.kt - Extrinsic build hata log'u -**Dosya:** `feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/data/extrinsic/RealExtrinsicService.kt` -**Eklenen:** -```kotlin -val extrinsic = try { - extrinsicBuilder.buildExtrinsic() -} catch (e: Exception) { - Log.e("RealExtrinsicService", "Failed to build extrinsic for chain ${chain.name}", e) - Log.e("RealExtrinsicService", "SigningMode: $signingMode, Chain: ${chain.id}") - throw e -} -``` -**Temizleme:** try-catch bloğunu kaldır, sadece `extrinsicBuilder.buildExtrinsic()` bırak - ---- - -## FEATURE DEĞİŞİKLİKLERİ (Kalıcı) - -### 1. PezkuwiAddressConstructor.kt - YENİ DOSYA -**Dosya:** `common/src/main/java/io/novafoundation/nova/common/utils/PezkuwiAddressConstructor.kt` -**Açıklama:** Pezkuwi chain'leri için özel address constructor. SDK'nın AddressInstanceConstructor'ı "Address" type'ını ararken, Pezkuwi "pezsp_runtime::multiaddress::MultiAddress" kullanıyor. - ---- - -### 2. RuntimeSnapshotExt.kt - Address type lookup -**Dosya:** `runtime/src/main/java/io/novafoundation/nova/runtime/util/RuntimeSnapshotExt.kt` -**Değişiklik:** Birden fazla address type ismi deneniyor: -```kotlin -val addressType = typeRegistry["Address"] - ?: typeRegistry["MultiAddress"] - ?: typeRegistry["sp_runtime::multiaddress::MultiAddress"] - ?: typeRegistry["pezsp_runtime::multiaddress::MultiAddress"] - ?: return false -``` - ---- - -### 3. Signed Extension Dosyaları - YENİ DOSYALAR -**Dosyalar:** -- `runtime/src/main/java/io/novafoundation/nova/runtime/extrinsic/extensions/AuthorizeCall.kt` -- `runtime/src/main/java/io/novafoundation/nova/runtime/extrinsic/extensions/CheckNonZeroSender.kt` -- `runtime/src/main/java/io/novafoundation/nova/runtime/extrinsic/extensions/CheckWeight.kt` -- `runtime/src/main/java/io/novafoundation/nova/runtime/extrinsic/extensions/WeightReclaim.kt` -- `runtime/src/main/java/io/novafoundation/nova/runtime/extrinsic/extensions/PezkuwiCheckMortality.kt` - -**Açıklama:** Pezkuwi chain'leri için özel signed extension'lar - ---- - -### 3.1. PezkuwiCheckMortality.kt - YENİ DOSYA -**Dosya:** `runtime/src/main/java/io/novafoundation/nova/runtime/extrinsic/extensions/PezkuwiCheckMortality.kt` -**Açıklama:** SDK'nın CheckMortality'si metadata type lookup yaparak encode ediyor ve Pezkuwi'de bu başarısız oluyordu ("failed to encode extension CheckMortality" hatası). Bu custom extension, Era ve blockHash'i doğrudan encode ediyor. -**Neden gerekli:** SDK CheckMortality, Era type'ını metadata'dan arıyor. Pezkuwi metadata'sında Era type'ı `pezsp_runtime.generic.era.Era` DictEnum olarak tanımlı ve SDK bunu handle edemiyor. - -**Kod:** -```kotlin -class PezkuwiCheckMortality( - era: Era.Mortal, - blockHash: ByteArray -) : FixedValueTransactionExtension( - name = "CheckMortality", - implicit = blockHash, // blockHash goes into signer payload - explicit = createEraEntry(era) // Era as DictEnum.Entry -) -``` - ---- - -### 4. CustomTransactionExtensions.kt - Pezkuwi extension logic -**Dosya:** `runtime/src/main/java/io/novafoundation/nova/runtime/extrinsic/CustomTransactionExtensions.kt` -**Değişiklik:** `isPezkuwiChain()` fonksiyonu eklendi, Pezkuwi için farklı extension'lar kullanılıyor - ---- - -### 5. Address encoding yaklaşımı değişikliği -**Eski yaklaşım:** `AddressInstanceConstructor` veya `PezkuwiAddressConstructor` ile type ismine göre tahmin -**Yeni yaklaşım:** `argumentType("dest").constructAccountLookupInstance(accountId)` ile metadata'dan gerçek type alınıyor - -**Güncellenen dosyalar:** -1. `feature-wallet-api/.../ExtrinsicBuilderExt.kt` - **YENİ YAKLAŞIM**: metadata'dan type alıyor -2. `feature-governance-impl/.../ExtrinsicBuilderExt.kt` - Zaten doğru yaklaşımı kullanıyordu -3. Diğer dosyalar hala PezkuwiAddressConstructor kullanıyor (gerekirse güncellenecek): - - `feature-staking-impl/.../ExtrinsicBuilderExt.kt` - - `feature-staking-impl/.../NominationPoolsCalls.kt` - - `feature-proxy-api/.../ExtrinsicBuilderExt.kt` - - `feature-wallet-impl/.../StatemineAssetTransfers.kt` - - `feature-wallet-impl/.../OrmlAssetTransfers.kt` - - `feature-wallet-impl/.../NativeAssetIssuer.kt` - - `feature-wallet-impl/.../OrmlAssetIssuer.kt` - - `feature-wallet-impl/.../StatemineAssetIssuer.kt` - - `feature-account-impl/.../ProxiedSigner.kt` - ---- - -### 6. CHAINS_URL - GitHub'a yönlendirme -**Dosya:** `runtime/build.gradle` -**Değişiklik:** -```gradle -// ÖNCE: -buildConfigField "String", "CHAINS_URL", "\"https://wallet.pezkuwichain.io/chains.json\"" - -// SONRA: -buildConfigField "String", "CHAINS_URL", "\"https://raw.githubusercontent.com/pezkuwichain/pezkuwi-wallet-utils/master/chains/v22/android/chains.json\"" -``` -**Neden:** wallet.pezkuwichain.io/chains.json Telegram miniapp için kullanılıyor ve `"types": null`. Android için ayrı chains.json gerekli. - ---- - -### 7. chains/v22/android/chains.json - Android-specific chains -**Repo:** `pezkuwi-wallet-utils` -**Dosya:** `chains/v22/android/chains.json` -**Açıklama:** Android uygulama için özel chains.json. wallet.pezkuwichain.io'dan kopyalandı ve şu değişiklikler yapıldı: -- `"types": { "overridesCommon": false }` eklendi (TypesUsage.BASE için) -- `"feeViaRuntimeCall": true` eklendi -**Etkilenen chain'ler:** -- Pezkuwi Mainnet (bb4a61ab0c4b8c12f5eab71d0c86c482e03a275ecdafee678dea712474d33d75) -- Pezkuwi Asset Hub (00d0e1d0581c3cd5c5768652d52f4520184018b44f56a2ae1e0dc9d65c00c948) -- Pezkuwi People Chain (58269e9c184f721e0309332d90cafc410df1519a5dc27a5fd9b3bf5fd2d129f8) -- Zagros Testnet (96eb58af1bb7288115b5e4ff1590422533e749293f231974536dc6672417d06f) - ---- - -### 8. default.json - MultiAddress inline tanımı -**Repo:** `pezkuwi-wallet-utils` -**Dosya:** `chains/types/default.json` -**Değişiklik:** MultiAddress artık GenericMultiAddress'e referans vermiyor, inline enum olarak tanımlı: -```json -"MultiAddress": { - "type": "enum", - "type_mapping": [ - ["Id", "AccountId"], - ["Index", "Compact"], - ["Raw", "Bytes"], - ["Address32", "H256"], - ["Address20", "H160"] - ] -} -``` -**Neden:** v14Preset() GenericMultiAddress içermiyor, bu yüzden type çözümlenemiyordu. - ---- - -### 9. PezkuwiIntegrationTest.kt - YENİ DOSYA -**Dosya:** `app/src/androidTest/java/io/novafoundation/nova/PezkuwiIntegrationTest.kt` -**Açıklama:** Pezkuwi chain'leri için integration testleri: -- Runtime type kontrolü (ExtrinsicSignature, MultiSignature, Address, MultiAddress) -- ExtrinsicBuilder oluşturma -- Transfer call yapısı kontrolü -- Signed extensions kontrolü -- Utility asset kontrolü -**Çalıştırma:** -```bash -./gradlew :app:connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=io.novafoundation.nova.PezkuwiIntegrationTest -``` - ---- - -### 10. GitHub Actions - Branch senkronizasyonu -**Dosya:** `.github/workflows/sync-branches.yml` -**Açıklama:** main ve master branch'lerini otomatik senkronize eder. -- main'e push → master güncellenir -- master'a push → main güncellenir - ---- - -### 7. pezkuwi.json - Chain-specific types (ASSETS) -**Dosya:** `runtime/src/main/assets/types/pezkuwi.json` -**Açıklama:** Pezkuwi chain'leri için özel type tanımları -```json -{ - "types": { - "ExtrinsicSignature": "MultiSignature", - "Address": "pezsp_runtime::multiaddress::MultiAddress", - "LookupSource": "pezsp_runtime::multiaddress::MultiAddress" - }, - "typesAlias": { - "pezsp_runtime::multiaddress::MultiAddress": "MultiAddress", - "pezsp_runtime::MultiSignature": "MultiSignature", - "pezsp_runtime.generic.era.Era": "Era" - } -} -``` -**NOT:** Bu dosya şu anda kullanılmıyor çünkü TypesUsage.BASE kullanılıyor. TypesUsage.BOTH veya OWN için chains.json'da URL eklenebilir. - ---- - -## SORUN GEÇMİŞİ - -1. **"Network not responding"** - Fee hesaplama hatası - - Çözüm: feeViaRuntimeCall eklendi, custom signed extension'lar eklendi - -2. **"IllegalStateException: Type Address was not found"** - Address type lookup hatası - - Çözüm: RuntimeSnapshotExt.kt'de birden fazla type ismi deneniyor - -3. **"EncodeDecodeException: is not a valid instance"** - Address encoding hatası - - Çözüm: `argumentType("dest").constructAccountLookupInstance(accountId)` ile metadata'dan gerçek type alınıyor (ExtrinsicBuilderExt.kt) - -4. **"failed to encode extension CheckMortality"** - CheckMortality encoding hatası - - SDK'nın CheckMortality'si metadata type lookup yaparak Era'yı encode etmeye çalışıyor - - Pezkuwi Era type'ı `pezsp_runtime.generic.era.Era` DictEnum olarak tanımlı - - Çözüm: `PezkuwiCheckMortality` custom extension'ı oluşturuldu, Era'yı `DictEnum.Entry("MortalX", secondByte)` olarak veriyor - -5. **"IllegalStateException: Type ExtrinsicSignature was not found"** - ExtrinsicSignature type hatası ✅ ÇÖZÜLDÜ - - SDK "ExtrinsicSignature" type'ını arıyor ama Pezkuwi chain'leri `"types": null` kullanıyordu - - `TypesUsage.NONE` olduğu için base types (default.json) yüklenmiyordu - - **Çözüm:** - - `runtime/build.gradle` içinde CHAINS_URL GitHub'a yönlendirildi - - `pezkuwi-wallet-utils/chains/v22/android/chains.json` oluşturuldu (`"types": { "overridesCommon": false }`) - - Artık `TypesUsage.BASE` kullanılıyor ve default.json yükleniyor - -6. **"IllegalStateException: Type Address was not found"** - Address type hatası ✅ ÇÖZÜLDÜ - - v14Preset() `GenericMultiAddress` içermiyor - - default.json'da `"MultiAddress": "GenericMultiAddress"` tanımlıydı ama GenericMultiAddress çözümlenemiyordu - - **Çözüm:** default.json'da MultiAddress inline enum olarak tanımlandı: - ```json - "MultiAddress": { - "type": "enum", - "type_mapping": [ - ["Id", "AccountId"], - ["Index", "Compact"], - ["Raw", "Bytes"], - ["Address32", "H256"], - ["Address20", "H160"] - ] - } - ``` - -7. **"TypeReference is null"** - Transfer onaylama hatası (DEVAM EDİYOR) - - Fee hesaplama çalışıyor ✅ - - Transfer onaylama sırasında hata oluşuyor - - Muhtemelen signing sırasında bir type çözümlenemiyor - - Debug logging eklendi: `RealExtrinsicService.kt` - - Stack trace bekleniyor - ---- - -## ÇALIŞAN İMPLEMENTASYONLAR (Referans) - -### 1. pezkuwi-extension (Browser Extension) -**Konum:** `/home/mamostehp/pezkuwi-extension/` -**Nasıl çalışıyor:** -- `@pezkuwi/types` (polkadot.js fork) kullanıyor -- `TypeRegistry` ile dynamic type handling -- Custom user extensions: -```javascript -const PEZKUWI_USER_EXTENSIONS = { - AuthorizeCall: { - extrinsic: {}, - payload: {} - } -}; -``` -- `registry.setSignedExtensions(payload.signedExtensions, PEZKUWI_USER_EXTENSIONS)` ile extension'lar ekleniyor -- Metadata'dan registry oluşturuluyor: `metadataExpand(metadata, false)` - -### 2. pezkuwi-subxt (Rust) -**Konum:** `/home/mamostehp/pezkuwi-sdk/vendor/pezkuwi-subxt/` -**Nasıl çalışıyor:** -- Rust'ta compile-time type generation -- Metadata'dan otomatik type oluşturma - -### 3. Telegram Miniapp -- Web tabanlı, polkadot.js kullanıyor -- `"types": null` ile çalışıyor çünkü metadata v14+ self-contained - ---- - -## TEMİZLEME KONTROL LİSTESİ - -Production release öncesi yapılacaklar: - -- [ ] FeeLoaderV2Provider.kt - DEBUG mesajını ve diagnostics'i kaldır -- [ ] RuntimeFactory.kt - companion object ve debug log'ları kaldır -- [ ] CustomTransactionExtensions.kt - Log satırlarını kaldır -- [ ] ExtrinsicBuilderFactory.kt - Log satırlarını kaldır -- [ ] PezkuwiAddressConstructor.kt - Log satırlarını kaldır (varsa) -- [ ] RealExtrinsicService.kt - try-catch debug bloğunu kaldır -- [x] Test et: Fee hesaplama çalışıyor mu? ✅ -- [ ] Test et: Transfer işlemi çalışıyor mu? (TypeReference hatası devam ediyor) - ---- - -## TYPE LOADING AKIŞI (Referans) - -``` -chains.json - ↓ -"types": { "overridesCommon": false } → TypesUsage.BASE -"types": { "url": "...", "overridesCommon": false } → TypesUsage.BOTH -"types": { "url": "...", "overridesCommon": true } → TypesUsage.OWN -"types": null → TypesUsage.NONE - ↓ -RuntimeFactory.constructRuntime() - ↓ -TypesUsage.BASE → constructBaseTypes() → fetch from DEFAULT_TYPES_URL -TypesUsage.BOTH → constructBaseTypes() + constructOwnTypes() -TypesUsage.OWN → constructOwnTypes() only -TypesUsage.NONE → use v14Preset() only - ↓ -TypeRegistry - ↓ -RuntimeSnapshot -``` - -**DEFAULT_TYPES_URL:** `https://raw.githubusercontent.com/pezkuwichain/pezkuwi-wallet-utils/master/chains/types/default.json` - ---- - -*Son güncelleme: 2026-02-03 06:30 (CHAINS_URL GitHub'a yönlendirildi, MultiAddress inline tanımlandı, Integration test eklendi, TypeReference hatası araştırılıyor)*