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
@@ -6,7 +6,7 @@ import io.novafoundation.nova.common.utils.voterListName
import io.novafoundation.nova.feature_staking_api.domain.model.RewardDestination
import io.novafoundation.nova.feature_staking_impl.data.network.blockhain.bindings.bindRewardDestination
import io.novasama.substrate_sdk_android.runtime.AccountId
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.call
import java.math.BigInteger
@@ -110,7 +110,7 @@ fun ExtrinsicBuilder.rebag(dislocated: AccountId): ExtrinsicBuilder {
moduleName = runtime.metadata.voterListName(),
callName = "rebag",
arguments = mapOf(
"dislocated" to AddressInstanceConstructor.constructInstance(runtime.typeRegistry, dislocated)
"dislocated" to PezkuwiAddressConstructor.constructInstance(runtime.typeRegistry, dislocated)
)
)
}
@@ -6,7 +6,7 @@ import io.novafoundation.nova.feature_staking_impl.data.nominationPools.network.
import io.novafoundation.nova.feature_wallet_api.data.network.blockhain.types.Balance
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.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.call
import java.math.BigInteger
@@ -47,7 +47,7 @@ fun NominationPoolsCalls.unbond(unbondAccount: AccountId, unbondPoints: PoolPoin
moduleName = Modules.NOMINATION_POOLS,
callName = "unbond",
arguments = mapOf(
"member_account" to AddressInstanceConstructor.constructInstance(extrinsicBuilder.runtime.typeRegistry, unbondAccount),
"member_account" to PezkuwiAddressConstructor.constructInstance(extrinsicBuilder.runtime.typeRegistry, unbondAccount),
"unbonding_points" to unbondPoints.value
)
)
@@ -58,7 +58,7 @@ fun NominationPoolsCalls.withdrawUnbonded(memberAccount: AccountId, numberOfSlas
moduleName = Modules.NOMINATION_POOLS,
callName = "withdraw_unbonded",
arguments = mapOf(
"member_account" to AddressInstanceConstructor.constructInstance(extrinsicBuilder.runtime.typeRegistry, memberAccount),
"member_account" to PezkuwiAddressConstructor.constructInstance(extrinsicBuilder.runtime.typeRegistry, memberAccount),
"num_slashing_spans" to numberOfSlashingSpans
)
)
@@ -77,7 +77,7 @@ fun NominationPoolsCalls.migrateDelegation(memberAccount: AccountId) {
moduleName = Modules.NOMINATION_POOLS,
callName = "migrate_delegation",
arguments = mapOf(
"member_account" to AddressInstanceConstructor.constructInstance(extrinsicBuilder.runtime.typeRegistry, memberAccount),
"member_account" to PezkuwiAddressConstructor.constructInstance(extrinsicBuilder.runtime.typeRegistry, memberAccount),
)
)
}