d068f5b331
* Problem: verbose logs display with FATAL option (fix #320) add my script increase amount for metamask add run amount ok hide log show info my logger hook log revive eth log tidy up use suplog log replace ok removed suplog tidy up tidy up fix compile remove sh tidy up tidy up * logger handler * fix * fix eth log override (#371) remove redundant log tidy up * log test * c++ Co-authored-by: jongwhan lee <jonghwan@crypto.com> Co-authored-by: Jongwhan Lee <51560997+leejw51crypto@users.noreply.github.com>
137 lines
3.5 KiB
Go
137 lines
3.5 KiB
Go
// Package rpc contains RPC handler methods and utilities to start
|
|
// Ethermint's Web3-compatibly JSON-RPC server.
|
|
package rpc
|
|
|
|
import (
|
|
"github.com/cosmos/cosmos-sdk/client"
|
|
"github.com/cosmos/cosmos-sdk/server"
|
|
|
|
"github.com/ethereum/go-ethereum/rpc"
|
|
|
|
"github.com/tharsis/ethermint/ethereum/rpc/backend"
|
|
"github.com/tharsis/ethermint/ethereum/rpc/namespaces/debug"
|
|
"github.com/tharsis/ethermint/ethereum/rpc/namespaces/eth"
|
|
"github.com/tharsis/ethermint/ethereum/rpc/namespaces/eth/filters"
|
|
"github.com/tharsis/ethermint/ethereum/rpc/namespaces/miner"
|
|
"github.com/tharsis/ethermint/ethereum/rpc/namespaces/net"
|
|
"github.com/tharsis/ethermint/ethereum/rpc/namespaces/personal"
|
|
"github.com/tharsis/ethermint/ethereum/rpc/namespaces/txpool"
|
|
"github.com/tharsis/ethermint/ethereum/rpc/namespaces/web3"
|
|
"github.com/tharsis/ethermint/ethereum/rpc/types"
|
|
|
|
rpcclient "github.com/tendermint/tendermint/rpc/jsonrpc/client"
|
|
)
|
|
|
|
// RPC namespaces and API version
|
|
const (
|
|
Web3Namespace = "web3"
|
|
EthNamespace = "eth"
|
|
PersonalNamespace = "personal"
|
|
NetNamespace = "net"
|
|
TxPoolNamespace = "txpool"
|
|
DebugNamespace = "debug"
|
|
MinerNamespace = "miner"
|
|
|
|
apiVersion = "1.0"
|
|
)
|
|
|
|
// GetRPCAPIs returns the list of all APIs
|
|
func GetRPCAPIs(ctx *server.Context, clientCtx client.Context, tmWSClient *rpcclient.WSClient, selectedAPIs []string) []rpc.API {
|
|
nonceLock := new(types.AddrLocker)
|
|
evmBackend := backend.NewEVMBackend(ctx, ctx.Logger, clientCtx)
|
|
|
|
var apis []rpc.API
|
|
// remove duplicates
|
|
selectedAPIs = unique(selectedAPIs)
|
|
|
|
for index := range selectedAPIs {
|
|
switch selectedAPIs[index] {
|
|
case EthNamespace:
|
|
apis = append(apis,
|
|
rpc.API{
|
|
Namespace: EthNamespace,
|
|
Version: apiVersion,
|
|
Service: eth.NewPublicAPI(ctx.Logger, clientCtx, evmBackend, nonceLock),
|
|
Public: true,
|
|
},
|
|
rpc.API{
|
|
Namespace: EthNamespace,
|
|
Version: apiVersion,
|
|
Service: filters.NewPublicAPI(ctx.Logger, tmWSClient, evmBackend),
|
|
Public: true,
|
|
},
|
|
)
|
|
case Web3Namespace:
|
|
apis = append(apis,
|
|
rpc.API{
|
|
Namespace: Web3Namespace,
|
|
Version: apiVersion,
|
|
Service: web3.NewPublicAPI(),
|
|
Public: true,
|
|
},
|
|
)
|
|
case NetNamespace:
|
|
apis = append(apis,
|
|
rpc.API{
|
|
Namespace: NetNamespace,
|
|
Version: apiVersion,
|
|
Service: net.NewPublicAPI(clientCtx),
|
|
Public: true,
|
|
},
|
|
)
|
|
case PersonalNamespace:
|
|
apis = append(apis,
|
|
rpc.API{
|
|
Namespace: PersonalNamespace,
|
|
Version: apiVersion,
|
|
Service: personal.NewAPI(ctx.Logger, clientCtx, evmBackend),
|
|
Public: true,
|
|
},
|
|
)
|
|
case TxPoolNamespace:
|
|
apis = append(apis,
|
|
rpc.API{
|
|
Namespace: TxPoolNamespace,
|
|
Version: apiVersion,
|
|
Service: txpool.NewPublicAPI(ctx.Logger),
|
|
Public: true,
|
|
},
|
|
)
|
|
case DebugNamespace:
|
|
apis = append(apis,
|
|
rpc.API{
|
|
Namespace: DebugNamespace,
|
|
Version: apiVersion,
|
|
Service: debug.NewInternalAPI(ctx),
|
|
Public: true,
|
|
},
|
|
)
|
|
case MinerNamespace:
|
|
apis = append(apis,
|
|
rpc.API{
|
|
Namespace: MinerNamespace,
|
|
Version: apiVersion,
|
|
Service: miner.NewMinerAPI(ctx, clientCtx, evmBackend),
|
|
Public: true,
|
|
},
|
|
)
|
|
default:
|
|
ctx.Logger.Error("invalid namespace value", "namespace", selectedAPIs[index])
|
|
}
|
|
}
|
|
|
|
return apis
|
|
}
|
|
|
|
func unique(intSlice []string) []string {
|
|
keys := make(map[string]bool)
|
|
var list []string
|
|
for _, entry := range intSlice {
|
|
if _, value := keys[entry]; !value {
|
|
keys[entry] = true
|
|
list = append(list, entry)
|
|
}
|
|
}
|
|
return list
|
|
}
|