feat: Add Pezkuwi chain support with custom signed extensions

- Add PezkuwiAddressConstructor for custom address type handling
- Add custom signed extensions (CheckNonZeroSender, CheckWeight, WeightReclaim, PezkuwiCheckMortality)
- Add pezkuwi.json type definitions
- Update RuntimeSnapshotExt for multiple address type lookups
- Update CHAINS_URL to use GitHub-hosted chains.json with types config
- Add feeViaRuntimeCall support for Pezkuwi chains
- Add debug diagnostics for runtime type issues (to be cleaned before production)
- Add CHANGELOG_PEZKUWI.md documenting all changes
This commit is contained in:
2026-02-03 05:41:52 +03:00
parent bb189aeb8a
commit 032cbde2d6
29 changed files with 662 additions and 55 deletions
@@ -20,7 +20,9 @@ internal class RealFeePaymentProviderRegistry(
val chain = chainRegistry.getChain(chainId)
return when (chainId) {
Chain.Geneses.POLKADOT_ASSET_HUB -> assetHubFactory.create(chain)
Chain.Geneses.PEZKUWI_ASSET_HUB,
Chain.Geneses.POLKADOT_ASSET_HUB,
Chain.Geneses.KUSAMA_ASSET_HUB -> assetHubFactory.create(chain)
Chain.Geneses.HYDRA_DX -> hydrationFactory.create(chain)
else -> DefaultFeePaymentProvider(chain)
}
@@ -30,7 +30,7 @@ import io.novafoundation.nova.runtime.multiNetwork.chain.model.Chain
import io.novasama.substrate_sdk_android.runtime.AccountId
import io.novasama.substrate_sdk_android.runtime.definitions.types.composite.DictEnum
import io.novasama.substrate_sdk_android.runtime.definitions.types.generics.GenericCall
import io.novasama.substrate_sdk_android.runtime.definitions.types.instances.AddressInstanceConstructor
import io.novafoundation.nova.common.utils.PezkuwiAddressConstructor
import io.novasama.substrate_sdk_android.runtime.extrinsic.builder.ExtrinsicBuilder
import io.novasama.substrate_sdk_android.runtime.extrinsic.signer.SignedRaw
import io.novasama.substrate_sdk_android.runtime.extrinsic.signer.SignerPayloadRaw
@@ -205,7 +205,7 @@ class ProxiedSigner(
moduleName = Modules.PROXY,
callName = "proxy",
arguments = mapOf(
"real" to AddressInstanceConstructor.constructInstance(runtime.typeRegistry, proxiedAccountId),
"real" to PezkuwiAddressConstructor.constructInstance(runtime.typeRegistry, proxiedAccountId),
"force_proxy_type" to DictEnum.Entry(proxyType.name, null),
"call" to proxiedCall
)