diff --git a/feature-crowdloan-impl/src/main/java/io/novafoundation/nova/feature_crowdloan_impl/data/CrowdloanSharedState.kt b/feature-crowdloan-impl/src/main/java/io/novafoundation/nova/feature_crowdloan_impl/data/CrowdloanSharedState.kt
index cb7195f..1fec549 100644
--- a/feature-crowdloan-impl/src/main/java/io/novafoundation/nova/feature_crowdloan_impl/data/CrowdloanSharedState.kt
+++ b/feature-crowdloan-impl/src/main/java/io/novafoundation/nova/feature_crowdloan_impl/data/CrowdloanSharedState.kt
@@ -8,6 +8,7 @@ import io.novafoundation.nova.runtime.state.NothingAdditional
import io.novafoundation.nova.runtime.state.uniqueOption
private const val CROWDLOAN_SHARED_STATE = "CROWDLOAN_SHARED_STATE"
+private const val PEZKUWI_RELAY_CHAIN_ID = "1aa94987791a5544e9667ec249d2cef1b8fdd6083c85b93fc37892d54a1156ca"
class CrowdloanSharedState(
chainRegistry: ChainRegistry,
@@ -16,5 +17,6 @@ class CrowdloanSharedState(
preferences = preferences,
chainRegistry = chainRegistry,
supportedOptions = uniqueOption { chain, chainAsset -> chain.hasCrowdloans and chainAsset.isUtilityAsset },
- preferencesKey = CROWDLOAN_SHARED_STATE
+ preferencesKey = CROWDLOAN_SHARED_STATE,
+ preferredChainId = PEZKUWI_RELAY_CHAIN_ID
)
diff --git a/feature-governance-impl/src/main/java/io/novafoundation/nova/feature_governance_impl/data/GovernanceSharedState.kt b/feature-governance-impl/src/main/java/io/novafoundation/nova/feature_governance_impl/data/GovernanceSharedState.kt
index 07312c2..029f7cd 100644
--- a/feature-governance-impl/src/main/java/io/novafoundation/nova/feature_governance_impl/data/GovernanceSharedState.kt
+++ b/feature-governance-impl/src/main/java/io/novafoundation/nova/feature_governance_impl/data/GovernanceSharedState.kt
@@ -12,6 +12,7 @@ import io.novafoundation.nova.runtime.multiNetwork.chain.model.ChainId
import io.novafoundation.nova.runtime.state.SelectableSingleAssetSharedState
private const val GOVERNANCE_SHARED_STATE = "GOVERNANCE_SHARED_STATE"
+private const val PEZKUWI_RELAY_CHAIN_ID = "1aa94987791a5544e9667ec249d2cef1b8fdd6083c85b93fc37892d54a1156ca"
class GovernanceSharedState(
chainRegistry: ChainRegistry,
@@ -27,7 +28,8 @@ class GovernanceSharedState(
emptyList()
}
},
- preferencesKey = GOVERNANCE_SHARED_STATE
+ preferencesKey = GOVERNANCE_SHARED_STATE,
+ preferredChainId = PEZKUWI_RELAY_CHAIN_ID
),
MutableGovernanceState {
diff --git a/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/types/custom/vote/SiVoteTypeMapping.kt b/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/types/custom/vote/SiVoteTypeMapping.kt
index 7551ebc..225539c 100644
--- a/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/types/custom/vote/SiVoteTypeMapping.kt
+++ b/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/types/custom/vote/SiVoteTypeMapping.kt
@@ -7,6 +7,8 @@ fun SiVoteTypeMapping(): ReplaceTypesSiTypeMapping {
return ReplaceTypesSiTypeMapping(
"pallet_democracy.vote.Vote" to voteType,
- "pallet_conviction_voting.vote.Vote" to voteType
+ "pallet_conviction_voting.vote.Vote" to voteType,
+ "pezpallet_democracy.vote.Vote" to voteType,
+ "pezpallet_conviction_voting.vote.Vote" to voteType
)
}
diff --git a/runtime/src/main/java/io/novafoundation/nova/runtime/state/SelectableSingleAssetSharedState.kt b/runtime/src/main/java/io/novafoundation/nova/runtime/state/SelectableSingleAssetSharedState.kt
index 7434e25..33cf281 100644
--- a/runtime/src/main/java/io/novafoundation/nova/runtime/state/SelectableSingleAssetSharedState.kt
+++ b/runtime/src/main/java/io/novafoundation/nova/runtime/state/SelectableSingleAssetSharedState.kt
@@ -32,13 +32,17 @@ abstract class SelectableSingleAssetSharedState,
- private val preferences: Preferences
+ private val preferences: Preferences,
+ private val preferredChainId: ChainId? = null
) : SelectedAssetOptionSharedState {
override val selectedOption: Flow> = preferences.stringFlow(
field = preferencesKey,
initialValueProducer = {
- val option = availableToSelect().first()
+ val options = availableToSelect()
+ val option = preferredChainId?.let { preferred ->
+ options.firstOrNull { it.assetWithChain.chain.id == preferred }
+ } ?: options.first()
val chainAsset = option.assetWithChain.asset
val additional = option.additional
@@ -74,6 +78,12 @@ abstract class SelectableSingleAssetSharedState>): SupportedAssetOption {
+ return preferredChainId?.let { preferred ->
+ options.firstOrNull { it.assetWithChain.chain.id == preferred }
+ } ?: options.first()
+ }
+
private suspend fun getChainWithAssetOrFallback(chainId: ChainId, chainAssetId: Int, additionalIdentifier: String?): SupportedAssetOption {
val optionalChainAndAsset = chainRegistry.enabledChainWithAssetOrNull(chainId, chainAssetId)
val supportedOptions = optionalChainAndAsset?.let {
@@ -82,10 +92,10 @@ abstract class SelectableSingleAssetSharedState fallback to default
- optionalChainAndAsset == null -> availableToSelect().first()
+ optionalChainAndAsset == null -> preferredOrFirst(availableToSelect())
// previously supported option is no longer supported -> fallback to default
- supportedOptions.isEmpty() -> availableToSelect().first()
+ supportedOptions.isEmpty() -> preferredOrFirst(availableToSelect())
// there is no particular additional option specified -> select first one
additionalIdentifier == null -> SupportedAssetOption(optionalChainAndAsset, additional = supportedOptions.first())