From e09b7a4eee4255cbaa03a37733fe56e191c97b3a Mon Sep 17 00:00:00 2001 From: Igor Artamonov Date: Mon, 30 Nov 2020 19:02:55 -0500 Subject: [PATCH] solution: support rinkeby and ropsten testnets fix: #64 --- docs/reference-configuration.adoc | 2 +- .../kotlin/io/emeraldpay/dshackle/BlockchainType.kt | 8 +++++++- .../dshackle/startup/ConfiguredUpstreams.kt | 4 ++++ .../upstream/calls/DefaultEthereumMethods.kt | 12 ++++++++++++ .../io/emeraldpay/dshackle/BlockchainTypeSpec.groovy | 2 +- .../dshackle/config/MainConfigReaderSpec.groovy | 6 +++++- .../upstream/calls/DefaultEthereumMethodsSpec.groovy | 4 +++- src/test/resources/dshackle-full.yaml | 2 ++ 8 files changed, 35 insertions(+), 5 deletions(-) diff --git a/docs/reference-configuration.adoc b/docs/reference-configuration.adoc index 35f618b9..3d992060 100644 --- a/docs/reference-configuration.adoc +++ b/docs/reference-configuration.adoc @@ -440,7 +440,7 @@ Fallback role mean that the upstream is used only after other upstreams failed o | yes | Blockchain which is the provided by the upstream. Cluster may have multiple upstreams for a single blockchain. -Accepted types: `bitcoin`, `bitcoin-testnet`, `ethereum`, `ethereum-classic`, `kovan`, or `goerli` +Accepted types: `bitcoin`, `bitcoin-testnet`, `ethereum`, `ethereum-classic`, `kovan-testnet`, `rinkeby-testnet`, `ropsten-testnet`, or `goerli-testnet` | `labels` | no diff --git a/src/main/kotlin/io/emeraldpay/dshackle/BlockchainType.kt b/src/main/kotlin/io/emeraldpay/dshackle/BlockchainType.kt index b71eb79e..0dc1207b 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/BlockchainType.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/BlockchainType.kt @@ -30,7 +30,13 @@ enum class BlockchainType { companion object { @JvmStatic fun fromBlockchain(blockchain: Chain): BlockchainType { - if (blockchain == Chain.ETHEREUM || blockchain == Chain.ETHEREUM_CLASSIC || blockchain == Chain.TESTNET_KOVAN || blockchain == Chain.TESTNET_MORDEN || blockchain == Chain.TESTNET_GOERLI) { + if (blockchain == Chain.ETHEREUM + || blockchain == Chain.ETHEREUM_CLASSIC + || blockchain == Chain.TESTNET_KOVAN + || blockchain == Chain.TESTNET_ROPSTEN + || blockchain == Chain.TESTNET_RINKEBY + || blockchain == Chain.TESTNET_MORDEN + || blockchain == Chain.TESTNET_GOERLI) { return ETHEREUM } if (blockchain == Chain.BITCOIN || blockchain == Chain.TESTNET_BITCOIN) { diff --git a/src/main/kotlin/io/emeraldpay/dshackle/startup/ConfiguredUpstreams.kt b/src/main/kotlin/io/emeraldpay/dshackle/startup/ConfiguredUpstreams.kt index e3f54418..3802150a 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/startup/ConfiguredUpstreams.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/startup/ConfiguredUpstreams.kt @@ -63,6 +63,10 @@ open class ConfiguredUpstreams( "kovan-testnet" to Chain.TESTNET_KOVAN, "goerli" to Chain.TESTNET_GOERLI, "goerli-testnet" to Chain.TESTNET_GOERLI, + "rinkeby" to Chain.TESTNET_RINKEBY, + "rinkeby-testnet" to Chain.TESTNET_RINKEBY, + "ropsten" to Chain.TESTNET_ROPSTEN, + "ropsten-testnet" to Chain.TESTNET_ROPSTEN, "bitcoin" to Chain.BITCOIN, "bitcoin-testnet" to Chain.TESTNET_BITCOIN ) diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultEthereumMethods.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultEthereumMethods.kt index 919248d9..78ee36a1 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultEthereumMethods.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultEthereumMethods.kt @@ -122,6 +122,12 @@ class DefaultEthereumMethods( Chain.TESTNET_MORDEN == chain -> { "\"2\"" } + Chain.TESTNET_ROPSTEN == chain -> { + "\"3\"" + } + Chain.TESTNET_RINKEBY == chain -> { + "\"4\"" + } Chain.TESTNET_KOVAN == chain -> { "\"42\"" } @@ -136,6 +142,12 @@ class DefaultEthereumMethods( Chain.ETHEREUM == chain -> { "\"0x1\"" } + Chain.TESTNET_ROPSTEN == chain -> { + "\"0x3\"" + } + Chain.TESTNET_RINKEBY == chain -> { + "\"0x4\"" + } Chain.ETHEREUM_CLASSIC == chain -> { "\"0x3d\"" } diff --git a/src/test/groovy/io/emeraldpay/dshackle/BlockchainTypeSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/BlockchainTypeSpec.groovy index a82f8560..77c1e7e6 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/BlockchainTypeSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/BlockchainTypeSpec.groovy @@ -24,7 +24,7 @@ class BlockchainTypeSpec extends Specification { expect: BlockchainType.fromBlockchain(chain) == BlockchainType.ETHEREUM where: - chain << [Chain.ETHEREUM, Chain.ETHEREUM_CLASSIC, Chain.TESTNET_KOVAN, Chain.TESTNET_GOERLI, Chain.TESTNET_MORDEN] + chain << [Chain.ETHEREUM, Chain.ETHEREUM_CLASSIC, Chain.TESTNET_KOVAN, Chain.TESTNET_GOERLI, Chain.TESTNET_MORDEN, Chain.TESTNET_RINKEBY, Chain.TESTNET_ROPSTEN] } def "Correct type for bitcoin"() { diff --git a/src/test/groovy/io/emeraldpay/dshackle/config/MainConfigReaderSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/config/MainConfigReaderSpec.groovy index 5af51f84..b790e348 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/config/MainConfigReaderSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/config/MainConfigReaderSpec.groovy @@ -51,7 +51,7 @@ class MainConfigReaderSpec extends Specification { port == 8082 tls != null routes != null - routes.size() == 4 + routes.size() == 5 with(routes[0]) { id == "eth" blockchain == Chain.ETHEREUM @@ -68,6 +68,10 @@ class MainConfigReaderSpec extends Specification { id == "goerli" blockchain == Chain.TESTNET_GOERLI } + with(routes[4]) { + id == "rinkeby" + blockchain == Chain.TESTNET_RINKEBY + } } act.upstreams != null with(act.upstreams) { diff --git a/src/test/groovy/io/emeraldpay/dshackle/upstream/calls/DefaultEthereumMethodsSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/upstream/calls/DefaultEthereumMethodsSpec.groovy index 917a9723..46cb5211 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/upstream/calls/DefaultEthereumMethodsSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/upstream/calls/DefaultEthereumMethodsSpec.groovy @@ -22,6 +22,8 @@ class DefaultEthereumMethodsSpec extends Specification { Chain.ETHEREUM | '"0x1"' Chain.ETHEREUM_CLASSIC | '"0x3d"' Chain.TESTNET_KOVAN | '"0x2a"' - Chain.TESTNET_GOERLI | '"0x5"' + Chain.TESTNET_GOERLI | '"0x5"' + Chain.TESTNET_RINKEBY | '"0x4"' + Chain.TESTNET_ROPSTEN | '"0x3"' } } diff --git a/src/test/resources/dshackle-full.yaml b/src/test/resources/dshackle-full.yaml index d042984b..e16ccde9 100644 --- a/src/test/resources/dshackle-full.yaml +++ b/src/test/resources/dshackle-full.yaml @@ -35,6 +35,8 @@ proxy: blockchain: kovan - id: goerli blockchain: goerli + - id: rinkeby + blockchain: rinkeby cluster: defaults: