diff --git a/emerald-grpc b/emerald-grpc index 8e74176f..37a356fd 160000 --- a/emerald-grpc +++ b/emerald-grpc @@ -1 +1 @@ -Subproject commit 8e74176fd289c67d9f878733a855485f0ddcd0ad +Subproject commit 37a356fdee02abbca383e83d3bb40177eba31922 diff --git a/src/main/kotlin/io/emeraldpay/dshackle/BlockchainType.kt b/src/main/kotlin/io/emeraldpay/dshackle/BlockchainType.kt index 26f51209..c518a6bd 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/BlockchainType.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/BlockchainType.kt @@ -9,15 +9,17 @@ enum class BlockchainType { if (chain == Chain.TESTNET_ROPSTEN || chain == Chain.POLYGON || chain == Chain.OPTIMISM || + chain == Chain.ARBITRUM || chain == Chain.BSC || chain == Chain.TESTNET_GOERLI || chain == Chain.ETHEREUM || - chain == Chain.TESTNET_SEPOLIA + chain == Chain.TESTNET_SEPOLIA || + chain == Chain.TESTNET_ARBITRUM || + chain == Chain.TESTNET_OPTIMISM ) { return EVM_POS } if (chain == Chain.ETHEREUM_CLASSIC || - chain == Chain.ARBITRUM || chain == Chain.FANTOM || chain == Chain.RSK || chain == Chain.TESTNET_KOVAN || diff --git a/src/main/kotlin/io/emeraldpay/dshackle/Chain.kt b/src/main/kotlin/io/emeraldpay/dshackle/Chain.kt index e6bf1c5f..1e182072 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/Chain.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/Chain.kt @@ -50,7 +50,13 @@ enum class Chain(val id: Int, val chainCode: String, val chainName: String) { "Ropsten Testnet" ), TESTNET_RINKEBY(10007, "RINKEBY", "Rinkeby Testnet"), - TESTNET_SEPOLIA(10008, "SEPOLIA", "Sepolia Testnet"); + TESTNET_SEPOLIA(10008, "SEPOLIA", "Sepolia Testnet"), + TESTNET_ARBITRUM( + 10009, + "ARBITRUM_TESTNET", + "Arbitrum Testnet" + ), + TESTNET_OPTIMISM(10010, "OPTIMISM_TESTNET", "Optimism Testnet"); companion object { fun byId(id: Int): Chain { diff --git a/src/main/kotlin/io/emeraldpay/dshackle/Global.kt b/src/main/kotlin/io/emeraldpay/dshackle/Global.kt index 5c456b66..b9dd407b 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/Global.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/Global.kt @@ -67,6 +67,8 @@ class Global { "bitcoin-testnet" to Chain.TESTNET_BITCOIN, "sepolia" to Chain.TESTNET_SEPOLIA, "sepolia-testnet" to Chain.TESTNET_SEPOLIA, + "optimism-testnet" to Chain.TESTNET_OPTIMISM, + "optimism-arbitrum" to Chain.TESTNET_OPTIMISM, ) fun chainById(id: String?): Chain { 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 65ad6d24..f4006d6e 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultEthereumMethods.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultEthereumMethods.kt @@ -229,6 +229,22 @@ class DefaultEthereumMethods( "\"11155111\"" } + Chain.ARBITRUM == chain -> { + "\"42161\"" + } + + Chain.OPTIMISM == chain -> { + "\"10\"" + } + + Chain.TESTNET_ARBITRUM == chain -> { + "\"421613\"" + } + + Chain.TESTNET_OPTIMISM == chain -> { + "\"420\"" + } + else -> throw RpcException(-32602, "Invalid chain") } } @@ -271,6 +287,22 @@ class DefaultEthereumMethods( "\"0xaa36a7\"" } + Chain.ARBITRUM == chain -> { + "\"0xa4b1\"" + } + + Chain.OPTIMISM == chain -> { + "\"0xa\"" + } + + Chain.TESTNET_ARBITRUM == chain -> { + "\"0x66eed\"" + } + + Chain.TESTNET_OPTIMISM == chain -> { + "\"0x1A4\"" + } + else -> throw RpcException(-32602, "Invalid chain") } } diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/EthereumMultistream.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/EthereumMultistream.kt index 7ff40bdd..f36d728b 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/EthereumMultistream.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/EthereumMultistream.kt @@ -69,7 +69,11 @@ open class EthereumMultistream( private var subscribe = EthereumEgressSubscription(this, NoPendingTxes()) private val supportsEIP1559 = when (chain) { - Chain.ETHEREUM, Chain.TESTNET_ROPSTEN, Chain.TESTNET_GOERLI, Chain.TESTNET_RINKEBY, Chain.TESTNET_SEPOLIA -> true + Chain.ETHEREUM, Chain.TESTNET_ROPSTEN, + Chain.TESTNET_GOERLI, Chain.TESTNET_RINKEBY, + Chain.TESTNET_SEPOLIA, Chain.ARBITRUM, + Chain.OPTIMISM, Chain.TESTNET_ARBITRUM, + Chain.TESTNET_OPTIMISM -> true else -> false } private val feeEstimation = if (supportsEIP1559) EthereumPriorityFees(this, reader, 256)