Improve Klaytn support + revise some other ethereum methods
This commit is contained in:
@@ -61,6 +61,17 @@ class DefaultEthereumMethods(
|
|||||||
"trace_transaction",
|
"trace_transaction",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var arbitrumTraceMethods = listOf(
|
||||||
|
"arbtrace_call",
|
||||||
|
"arbtrace_callMany",
|
||||||
|
"arbtrace_replayBlockTransactions",
|
||||||
|
"arbtrace_replayTransaction",
|
||||||
|
"arbtrace_block",
|
||||||
|
"arbtrace_filter",
|
||||||
|
"arbtrace_get",
|
||||||
|
"arbtrace_transaction",
|
||||||
|
)
|
||||||
|
|
||||||
val debugMethods = listOf(
|
val debugMethods = listOf(
|
||||||
"debug_storageRangeAt",
|
"debug_storageRangeAt",
|
||||||
"debug_traceBlock",
|
"debug_traceBlock",
|
||||||
@@ -118,6 +129,30 @@ class DefaultEthereumMethods(
|
|||||||
"hmyv2_getCXReceiptByHash",
|
"hmyv2_getCXReceiptByHash",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private val klayPossibleNotIndexedMethods = listOf(
|
||||||
|
"klay_blockNumber",
|
||||||
|
"klay_getBlockByHash",
|
||||||
|
"klay_getBlockReceipts",
|
||||||
|
"klay_getBlockTransactionCountByNumber",
|
||||||
|
"klay_getBlockWithConsensusInfoByNumber",
|
||||||
|
"klay_getBlockByNumber",
|
||||||
|
"klay_getBlockTransactionCountByHash",
|
||||||
|
"klay_getHeaderByNumber",
|
||||||
|
"klay_getHeaderByHash",
|
||||||
|
"klay_getBlockWithConsensusInfoByNumberRange",
|
||||||
|
"klay_getBlockWithConsensusInfoByHash",
|
||||||
|
"klay_getDecodedAnchoringTransactionByHash",
|
||||||
|
"klay_getRawTransactionByBlockNumberAndIndex",
|
||||||
|
"klay_getRawTransactionByBlockHashAndIndex",
|
||||||
|
"klay_getRawTransactionByHash",
|
||||||
|
"klay_getTransactionByBlockNumberAndIndex",
|
||||||
|
"klay_getTransactionBySenderTxHash",
|
||||||
|
"klay_getTransactionByBlockHashAndIndex",
|
||||||
|
"klay_getTransactionByHash",
|
||||||
|
"klay_getTransactionReceipt",
|
||||||
|
"klay_getTransactionReceiptBySenderTxHash",
|
||||||
|
)
|
||||||
|
|
||||||
private val firstValueMethods = listOf(
|
private val firstValueMethods = listOf(
|
||||||
"eth_call",
|
"eth_call",
|
||||||
"eth_getStorageAt",
|
"eth_getStorageAt",
|
||||||
@@ -141,6 +176,11 @@ class DefaultEthereumMethods(
|
|||||||
"hmy_getTransactionCount",
|
"hmy_getTransactionCount",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private val klaySpecialMethods = listOf(
|
||||||
|
"klay_sendRawTransaction",
|
||||||
|
"klay_getTransactionCount",
|
||||||
|
)
|
||||||
|
|
||||||
private val headVerifiedMethods = listOf(
|
private val headVerifiedMethods = listOf(
|
||||||
"eth_getBlockTransactionCountByNumber",
|
"eth_getBlockTransactionCountByNumber",
|
||||||
"eth_getUncleCountByBlockNumber",
|
"eth_getUncleCountByBlockNumber",
|
||||||
@@ -164,6 +204,71 @@ class DefaultEthereumMethods(
|
|||||||
"eth_chainId",
|
"eth_chainId",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private val klayMethods = listOf(
|
||||||
|
"klay_accountCreated",
|
||||||
|
"klay_accounts",
|
||||||
|
"klay_decodeAccountKey",
|
||||||
|
"klay_getAccountKey",
|
||||||
|
"klay_getCode",
|
||||||
|
"klay_encodeAccountKey",
|
||||||
|
"klay_getAccount",
|
||||||
|
"klay_getAccount",
|
||||||
|
"klay_sign",
|
||||||
|
"klay_isContractAccount",
|
||||||
|
|
||||||
|
"klay_getCommittee",
|
||||||
|
"klay_getCommitteeSize",
|
||||||
|
"klay_getCouncil",
|
||||||
|
"klay_getCouncilSize",
|
||||||
|
|
||||||
|
"klay_getRewards",
|
||||||
|
"klay_getStorageAt",
|
||||||
|
"klay_syncing",
|
||||||
|
|
||||||
|
"klay_call",
|
||||||
|
|
||||||
|
"klay_estimateGas",
|
||||||
|
|
||||||
|
"klay_estimateComputationCost",
|
||||||
|
"klay_pendingTransactions",
|
||||||
|
"klay_createAccessList",
|
||||||
|
|
||||||
|
"klay_resend",
|
||||||
|
|
||||||
|
"klay_chainID",
|
||||||
|
"klay_clientVersion",
|
||||||
|
"klay_gasPriceAt",
|
||||||
|
"klay_gasPrice",
|
||||||
|
"klay_protocolVersion",
|
||||||
|
"klay_getChainConfig",
|
||||||
|
"klay_forkStatus",
|
||||||
|
"klay_getFilterChanges",
|
||||||
|
"klay_getFilterLogs",
|
||||||
|
"klay_newBlockFilter",
|
||||||
|
"klay_newPendingTransactionFilter",
|
||||||
|
"klay_uninstallFilter",
|
||||||
|
"klay_unsubscribe",
|
||||||
|
"klay_getLogs",
|
||||||
|
"klay_subscribe",
|
||||||
|
"klay_newFilter",
|
||||||
|
|
||||||
|
"klay_feeHistory",
|
||||||
|
"klay_lowerBoundGasPrice",
|
||||||
|
"klay_upperBoundGasPrice",
|
||||||
|
"klay_maxPriorityFeePerGas",
|
||||||
|
|
||||||
|
"klay_getStakingInfo",
|
||||||
|
"klay_sha3",
|
||||||
|
"klay_recoverFromTransaction",
|
||||||
|
"klay_recoverFromMessage",
|
||||||
|
"klay_getProof",
|
||||||
|
"klay_nodeAddress",
|
||||||
|
|
||||||
|
// they exist, but i have doubts that we need to expose them
|
||||||
|
// "klay_rewardbase"
|
||||||
|
// "klay_isParallelDBWrite"
|
||||||
|
// "klay_isSenderTxHashIndexingEnabled"
|
||||||
|
)
|
||||||
private val harmonyMethods = listOf(
|
private val harmonyMethods = listOf(
|
||||||
"hmy_newFilter",
|
"hmy_newFilter",
|
||||||
"hmy_newBlockFilter",
|
"hmy_newBlockFilter",
|
||||||
@@ -239,11 +344,11 @@ class DefaultEthereumMethods(
|
|||||||
|
|
||||||
override fun createQuorumFor(method: String): CallQuorum {
|
override fun createQuorumFor(method: String): CallQuorum {
|
||||||
return when {
|
return when {
|
||||||
possibleNotIndexedMethods.contains(method) || harmonyPossibleNotIndexedMethods.contains(method) -> NotNullQuorum()
|
possibleNotIndexedMethods.contains(method) || harmonyPossibleNotIndexedMethods.contains(method) || klayPossibleNotIndexedMethods.contains(method) -> NotNullQuorum()
|
||||||
specialMethods.contains(method) || harmonySpecialMethods.contains(method) -> {
|
specialMethods.contains(method) || harmonySpecialMethods.contains(method) || klaySpecialMethods.contains(method) -> {
|
||||||
when (method) {
|
when (method) {
|
||||||
"eth_getTransactionCount", "hmy_getTransactionCount" -> MaximumValueQuorum()
|
"eth_getTransactionCount", "hmy_getTransactionCount", "klay_getTransactionCount" -> MaximumValueQuorum()
|
||||||
"eth_sendRawTransaction", "hmy_sendRawStakingTransaction", "hmy_sendRawTransaction" -> BroadcastQuorum()
|
"eth_sendRawTransaction", "hmy_sendRawStakingTransaction", "hmy_sendRawTransaction", "klay_sendRawTransaction" -> BroadcastQuorum()
|
||||||
else -> AlwaysQuorum()
|
else -> AlwaysQuorum()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -263,9 +368,26 @@ class DefaultEthereumMethods(
|
|||||||
|
|
||||||
private fun getChainSpecificMethods(chain: Chain): List<String> {
|
private fun getChainSpecificMethods(chain: Chain): List<String> {
|
||||||
return when (chain) {
|
return when (chain) {
|
||||||
Chain.OPTIMISM__MAINNET, Chain.MANTLE__MAINNET ->
|
Chain.OPTIMISM__MAINNET, Chain.OPTIMISM__SEPOLIA ->
|
||||||
|
listOf(
|
||||||
|
"optimism_outputAtBlock",
|
||||||
|
"optimism_syncStatus",
|
||||||
|
"optimism_rollupConfig",
|
||||||
|
"optimism_version",
|
||||||
|
"rollup_gasPrices",
|
||||||
|
)
|
||||||
|
Chain.SCROLL__MAINNET, Chain.SCROLL__SEPOLIA ->
|
||||||
|
listOf(
|
||||||
|
"scroll_estimateL1DataFee",
|
||||||
|
)
|
||||||
|
Chain.KLAYTN__MAINNET, Chain.KLAYTN__BAOBAB ->
|
||||||
|
klayMethods
|
||||||
|
.plus(klaySpecialMethods)
|
||||||
|
.plus(klayPossibleNotIndexedMethods)
|
||||||
|
Chain.MANTLE__MAINNET, Chain.MANTLE__SEPOLIA ->
|
||||||
listOf(
|
listOf(
|
||||||
"rollup_gasPrices",
|
"rollup_gasPrices",
|
||||||
|
"eth_getBlockRange",
|
||||||
)
|
)
|
||||||
Chain.POLYGON__MAINNET, Chain.POLYGON__MUMBAI -> listOf(
|
Chain.POLYGON__MAINNET, Chain.POLYGON__MUMBAI -> listOf(
|
||||||
"bor_getAuthor",
|
"bor_getAuthor",
|
||||||
@@ -276,7 +398,7 @@ class DefaultEthereumMethods(
|
|||||||
"eth_getRootHash",
|
"eth_getRootHash",
|
||||||
)
|
)
|
||||||
|
|
||||||
Chain.POLYGON_ZKEVM__MAINNET -> listOf(
|
Chain.POLYGON_ZKEVM__MAINNET, Chain.POLYGON_ZKEVM__CARDONA -> listOf(
|
||||||
"zkevm_consolidatedBlockNumber",
|
"zkevm_consolidatedBlockNumber",
|
||||||
"zkevm_isBlockConsolidated",
|
"zkevm_isBlockConsolidated",
|
||||||
"zkevm_isBlockVirtualized",
|
"zkevm_isBlockVirtualized",
|
||||||
@@ -288,7 +410,7 @@ class DefaultEthereumMethods(
|
|||||||
"zkevm_getBroadcastURI",
|
"zkevm_getBroadcastURI",
|
||||||
)
|
)
|
||||||
|
|
||||||
Chain.ZKSYNC__MAINNET -> listOf(
|
Chain.ZKSYNC__MAINNET, Chain.ZKSYNC__SEPOLIA -> listOf(
|
||||||
"zks_estimateFee",
|
"zks_estimateFee",
|
||||||
"zks_estimateGasL1ToL2",
|
"zks_estimateGasL1ToL2",
|
||||||
"zks_getAllAccountBalances",
|
"zks_getAllAccountBalances",
|
||||||
@@ -409,10 +531,21 @@ class DefaultEthereumMethods(
|
|||||||
return json.toByteArray()
|
return json.toByteArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Arbitrum note: all arbtrace_ methods can be used on blocks prior to 22207816,
|
||||||
|
while debug_trace methods can be used for blocks after 22207818.
|
||||||
|
Block 22207817 cannot be traced but is empty.
|
||||||
|
*/
|
||||||
|
private fun getTraceMethods(): List<String> {
|
||||||
|
return when (chain) {
|
||||||
|
Chain.ARBITRUM__MAINNET -> arbitrumTraceMethods
|
||||||
|
else -> traceMethods
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun getGroupMethods(groupName: String): Set<String> =
|
override fun getGroupMethods(groupName: String): Set<String> =
|
||||||
when (groupName) {
|
when (groupName) {
|
||||||
"filter" -> filterMethods
|
"filter" -> filterMethods
|
||||||
"trace" -> traceMethods
|
"trace" -> getTraceMethods()
|
||||||
"debug" -> debugMethods
|
"debug" -> debugMethods
|
||||||
"default" -> getSupportedMethods()
|
"default" -> getSupportedMethods()
|
||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
|
|||||||
Reference in New Issue
Block a user