diff --git a/app/build.gradle b/app/build.gradle index 47c5186f19..2af7f8df9b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -92,8 +92,6 @@ android { versionNameSuffix '-github' applicationIdSuffix '.github' - buildConfigField "String", "APP_UPDATE_SOURCE_LINK", "\"https://github.com/novasamatech/nova-wallet-android/releases\"" - buildConfigField "String", "BuildType", "\"releaseGithub\"" } develop { diff --git a/build.gradle b/build.gradle index aad099365e..feb498a264 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,8 @@ buildscript { ext { // App version - versionName = '9.1.0' - versionCode = 163 + versionName = '9.1.1' + versionCode = 166 applicationId = "io.novafoundation.nova" releaseApplicationSuffix = "market" diff --git a/common/build.gradle b/common/build.gradle index fa5059f0cb..d1703b00c1 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -55,6 +55,12 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + + releaseGithub { + initWith buildTypes.release + matchingFallbacks = ['release'] + buildConfigField "String", "APP_UPDATE_SOURCE_LINK", "\"https://github.com/novasamatech/nova-wallet-android/releases\"" + } } compileOptions { diff --git a/common/src/main/java/io/novafoundation/nova/common/utils/FearlessLibExt.kt b/common/src/main/java/io/novafoundation/nova/common/utils/FearlessLibExt.kt index 6a03e3b440..e1101a41a5 100644 --- a/common/src/main/java/io/novafoundation/nova/common/utils/FearlessLibExt.kt +++ b/common/src/main/java/io/novafoundation/nova/common/utils/FearlessLibExt.kt @@ -308,6 +308,14 @@ fun RuntimeMetadata.firstExistingModuleName(vararg options: String): String { return options.first(::hasModule) } +fun RuntimeMetadata.firstExistingCall(vararg options: Pair): MetadataFunction { + val result = options.tryFindNonNull { (moduleName, functionName) -> + moduleOrNull(moduleName)?.callOrNull(functionName) + } + + return requireNotNull(result) +} + fun RuntimeMetadata.firstExistingModuleOrNull(vararg options: String): Module? { return options.tryFindNonNull { moduleOrNull(it) } } diff --git a/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/network/blockchain/assets/transfers/orml/OrmlAssetTransfers.kt b/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/network/blockchain/assets/transfers/orml/OrmlAssetTransfers.kt index b4ac0db37f..ae402b8928 100644 --- a/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/network/blockchain/assets/transfers/orml/OrmlAssetTransfers.kt +++ b/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/network/blockchain/assets/transfers/orml/OrmlAssetTransfers.kt @@ -1,7 +1,7 @@ package io.novafoundation.nova.feature_wallet_impl.data.network.blockchain.assets.transfers.orml import io.novafoundation.nova.common.utils.Modules -import io.novafoundation.nova.common.utils.firstExistingModuleName +import io.novafoundation.nova.common.utils.firstExistingCall import io.novafoundation.nova.feature_account_api.data.extrinsic.ExtrinsicService import io.novafoundation.nova.feature_wallet_api.data.network.blockhain.assets.AssetSourceRegistry import io.novafoundation.nova.feature_wallet_api.data.network.blockhain.assets.tranfers.AssetTransfer @@ -50,10 +50,15 @@ class OrmlAssetTransfers( target: AccountId, amount: BigInteger ) { + val (moduleIndex, callIndex) = runtime.metadata.firstExistingCall( + Modules.TOKENS to "transfer", + Modules.CURRENCIES to "transfer" + ).index + call( - moduleName = runtime.metadata.firstExistingModuleName(Modules.CURRENCIES, Modules.TOKENS), - callName = "transfer", - arguments = mapOf( + moduleIndex = moduleIndex, + callIndex = callIndex, + args = mapOf( "dest" to AddressInstanceConstructor.constructInstance(runtime.typeRegistry, target), "currency_id" to chainAsset.ormlCurrencyId(runtime), "amount" to amount diff --git a/runtime/src/main/java/io/novafoundation/nova/runtime/network/rpc/RpcCalls.kt b/runtime/src/main/java/io/novafoundation/nova/runtime/network/rpc/RpcCalls.kt index 1b6b5cab23..1c500c45e2 100644 --- a/runtime/src/main/java/io/novafoundation/nova/runtime/network/rpc/RpcCalls.kt +++ b/runtime/src/main/java/io/novafoundation/nova/runtime/network/rpc/RpcCalls.kt @@ -33,6 +33,9 @@ import io.novafoundation.nova.runtime.multiNetwork.getRuntime import io.novafoundation.nova.runtime.multiNetwork.getSocket import io.novasama.substrate_sdk_android.runtime.RuntimeSnapshot import io.novasama.substrate_sdk_android.runtime.extrinsic.signer.SendableExtrinsic +import io.novasama.substrate_sdk_android.runtime.metadata.RuntimeMetadata +import io.novasama.substrate_sdk_android.runtime.metadata.methodOrNull +import io.novasama.substrate_sdk_android.runtime.metadata.runtimeApiOrNull import io.novasama.substrate_sdk_android.scale.dataType.DataType import io.novasama.substrate_sdk_android.wsrpc.SocketService import io.novasama.substrate_sdk_android.wsrpc.executeAsync @@ -64,7 +67,7 @@ class RpcCalls( val runtime = chainRegistry.getRuntime(chainId) return when { - chain.additional.feeViaRuntimeCall() && runtime.metadata.hasRuntimeApisMetadata() -> queryFeeViaRuntimeApiV15(chainId, extrinsic) + chain.additional.feeViaRuntimeCall() && runtime.metadata.hasDetectedPaymentApi() -> queryFeeViaRuntimeApiV15(chainId, extrinsic) chain.additional.feeViaRuntimeCall() && runtime.hasFeeDecodeType() -> queryFeeViaRuntimeApiPreV15(chainId, extrinsic) @@ -146,6 +149,10 @@ class RpcCalls( return socketFor(chainId).executeAsync(GetStorageSize(storageKey)).result?.asGsonParsedNumber().orZero() } + private fun RuntimeMetadata.hasDetectedPaymentApi(): Boolean { + return hasRuntimeApisMetadata() && runtimeApiOrNull("TransactionPaymentApi")?.methodOrNull("query_info") != null + } + private suspend fun socketFor(chainId: ChainId) = chainRegistry.getSocket(chainId) private suspend fun queryFeeViaRpcCall(chainId: ChainId, extrinsic: SendableExtrinsic): FeeResponse {