From 008b4c51d26bb64e0c6c1c37a7ac7a2fcb8c46f2 Mon Sep 17 00:00:00 2001 From: a10zn8 Date: Wed, 24 Jul 2024 13:43:36 +0300 Subject: [PATCH] support avail network (#530) --- .../dshackle/upstream/CallTargetsHolder.kt | 2 +- .../upstream/calls/DefaultPolkadotMethods.kt | 29 +++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/CallTargetsHolder.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/CallTargetsHolder.kt index b17a9637..dcb1d249 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/CallTargetsHolder.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/CallTargetsHolder.kt @@ -32,7 +32,7 @@ class CallTargetsHolder { BITCOIN -> DefaultBitcoinMethods() ETHEREUM -> DefaultEthereumMethods(chain, hasLogsOracle) STARKNET -> DefaultStarknetMethods(chain) - POLKADOT -> DefaultPolkadotMethods() + POLKADOT -> DefaultPolkadotMethods(chain) SOLANA -> DefaultSolanaMethods() NEAR -> DefaultNearMethods() ETHEREUM_BEACON_CHAIN -> DefaultBeaconChainMethods() diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultPolkadotMethods.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultPolkadotMethods.kt index 32367d7e..566b810c 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultPolkadotMethods.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultPolkadotMethods.kt @@ -16,6 +16,7 @@ */ package io.emeraldpay.dshackle.upstream.calls +import io.emeraldpay.dshackle.Chain import io.emeraldpay.dshackle.quorum.AlwaysQuorum import io.emeraldpay.dshackle.quorum.BroadcastQuorum import io.emeraldpay.dshackle.quorum.CallQuorum @@ -25,7 +26,9 @@ import io.emeraldpay.dshackle.upstream.ethereum.rpc.RpcException * Default configuration for Ethereum based RPC. Defines optimal Quorum strategies for different methods, and provides * hardcoded results for base methods, such as `net_version`, `web3_clientVersion` and similar */ -class DefaultPolkadotMethods : CallMethods { +class DefaultPolkadotMethods( + val chain: Chain, +) : CallMethods { companion object { val subs = setOf( @@ -142,11 +145,33 @@ class DefaultPolkadotMethods : CallMethods { "system_version", ) + private val availMethods = setOf( + "chainSpec_v1_chainName", + "chainSpec_v1_genesisHash", + "chainSpec_v1_properties", + "kate_blockLength", + "kate_queryDataProof", + "kate_queryProof", + "kate_queryRows", + "mmr_generateProof", + "mmr_root", + "mmr_verifyProof", + "mmr_verifyProofStateless", + ) + private val add = setOf( "author_submitExtrinsic", ) - private val allowedMethods: Set = all + add + private val allowedMethods: Set = all + add + specificMethods() + + private fun specificMethods(): Set { + return if (chain == Chain.AVAIL__MAINNET || chain == Chain.AVAIL__TESTNET) { + availMethods + } else { + emptySet() + } + } override fun createQuorumFor(method: String): CallQuorum { return when {