mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2025-01-07 03:22:18 +00:00
ca3ad096e1
This fixes 2 related issues: * Now that the bor consensus engine is required for queries it can't be created based on the pretense of a db directory, but must be based on chain config read from the db. Using the DB presence causes Bor to get instantiated for non bor chains which breaks. * At the moment eth_calls on a remote daemon don't check Bor headers prior to calling the EVM code as it was just using a fake ETHash instance - which performs ETH header validation only. The current version is mostly working but needs adapting to perform lazy initialization of the engine.
159 lines
4.1 KiB
Go
159 lines
4.1 KiB
Go
package jsonrpc
|
|
|
|
import (
|
|
"github.com/ledgerwatch/erigon-lib/gointerfaces/txpool"
|
|
"github.com/ledgerwatch/erigon-lib/kv"
|
|
"github.com/ledgerwatch/erigon-lib/kv/kvcache"
|
|
libstate "github.com/ledgerwatch/erigon-lib/state"
|
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/cli/httpcfg"
|
|
"github.com/ledgerwatch/erigon/consensus"
|
|
"github.com/ledgerwatch/erigon/consensus/bor"
|
|
"github.com/ledgerwatch/erigon/consensus/clique"
|
|
"github.com/ledgerwatch/erigon/rpc"
|
|
"github.com/ledgerwatch/erigon/turbo/rpchelper"
|
|
"github.com/ledgerwatch/erigon/turbo/services"
|
|
"github.com/ledgerwatch/log/v3"
|
|
)
|
|
|
|
// APIList describes the list of available RPC apis
|
|
func APIList(db kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient,
|
|
filters *rpchelper.Filters, stateCache kvcache.Cache,
|
|
blockReader services.FullBlockReader, agg *libstate.AggregatorV3, cfg httpcfg.HttpCfg, engine consensus.EngineReader,
|
|
logger log.Logger,
|
|
) (list []rpc.API) {
|
|
base := NewBaseApi(filters, stateCache, blockReader, agg, cfg.WithDatadir, cfg.EvmCallTimeout, engine, cfg.Dirs)
|
|
ethImpl := NewEthAPI(base, db, eth, txPool, mining, cfg.Gascap, cfg.ReturnDataLimit, logger)
|
|
erigonImpl := NewErigonAPI(base, db, eth)
|
|
txpoolImpl := NewTxPoolAPI(base, db, txPool)
|
|
netImpl := NewNetAPIImpl(eth)
|
|
debugImpl := NewPrivateDebugAPI(base, db, cfg.Gascap)
|
|
traceImpl := NewTraceAPI(base, db, &cfg)
|
|
web3Impl := NewWeb3APIImpl(eth)
|
|
dbImpl := NewDBAPIImpl() /* deprecated */
|
|
adminImpl := NewAdminAPI(eth)
|
|
parityImpl := NewParityAPIImpl(base, db)
|
|
|
|
var borImpl *BorImpl
|
|
|
|
type lazy interface {
|
|
HasEngine() bool
|
|
Engine() consensus.EngineReader
|
|
}
|
|
|
|
switch engine := engine.(type) {
|
|
case *bor.Bor:
|
|
borImpl = NewBorAPI(base, db)
|
|
case lazy:
|
|
if _, ok := engine.Engine().(*bor.Bor); !engine.HasEngine() || ok {
|
|
borImpl = NewBorAPI(base, db)
|
|
}
|
|
}
|
|
|
|
otsImpl := NewOtterscanAPI(base, db, cfg.OtsMaxPageSize)
|
|
gqlImpl := NewGraphQLAPI(base, db)
|
|
|
|
if cfg.GraphQLEnabled {
|
|
list = append(list, rpc.API{
|
|
Namespace: "graphql",
|
|
Public: true,
|
|
Service: GraphQLAPI(gqlImpl),
|
|
Version: "1.0",
|
|
})
|
|
}
|
|
|
|
for _, enabledAPI := range cfg.API {
|
|
switch enabledAPI {
|
|
case "eth":
|
|
list = append(list, rpc.API{
|
|
Namespace: "eth",
|
|
Public: true,
|
|
Service: EthAPI(ethImpl),
|
|
Version: "1.0",
|
|
})
|
|
case "debug":
|
|
list = append(list, rpc.API{
|
|
Namespace: "debug",
|
|
Public: true,
|
|
Service: PrivateDebugAPI(debugImpl),
|
|
Version: "1.0",
|
|
})
|
|
case "net":
|
|
list = append(list, rpc.API{
|
|
Namespace: "net",
|
|
Public: true,
|
|
Service: NetAPI(netImpl),
|
|
Version: "1.0",
|
|
})
|
|
case "txpool":
|
|
list = append(list, rpc.API{
|
|
Namespace: "txpool",
|
|
Public: true,
|
|
Service: TxPoolAPI(txpoolImpl),
|
|
Version: "1.0",
|
|
})
|
|
case "web3":
|
|
list = append(list, rpc.API{
|
|
Namespace: "web3",
|
|
Public: true,
|
|
Service: Web3API(web3Impl),
|
|
Version: "1.0",
|
|
})
|
|
case "trace":
|
|
list = append(list, rpc.API{
|
|
Namespace: "trace",
|
|
Public: true,
|
|
Service: TraceAPI(traceImpl),
|
|
Version: "1.0",
|
|
})
|
|
case "db": /* Deprecated */
|
|
list = append(list, rpc.API{
|
|
Namespace: "db",
|
|
Public: true,
|
|
Service: DBAPI(dbImpl),
|
|
Version: "1.0",
|
|
})
|
|
case "erigon":
|
|
list = append(list, rpc.API{
|
|
Namespace: "erigon",
|
|
Public: true,
|
|
Service: ErigonAPI(erigonImpl),
|
|
Version: "1.0",
|
|
})
|
|
case "bor":
|
|
if borImpl != nil {
|
|
list = append(list, rpc.API{
|
|
Namespace: "bor",
|
|
Public: true,
|
|
Service: BorAPI(borImpl),
|
|
Version: "1.0",
|
|
})
|
|
}
|
|
case "admin":
|
|
list = append(list, rpc.API{
|
|
Namespace: "admin",
|
|
Public: false,
|
|
Service: AdminAPI(adminImpl),
|
|
Version: "1.0",
|
|
})
|
|
case "parity":
|
|
list = append(list, rpc.API{
|
|
Namespace: "parity",
|
|
Public: false,
|
|
Service: ParityAPI(parityImpl),
|
|
Version: "1.0",
|
|
})
|
|
case "ots":
|
|
list = append(list, rpc.API{
|
|
Namespace: "ots",
|
|
Public: true,
|
|
Service: OtterscanAPI(otsImpl),
|
|
Version: "1.0",
|
|
})
|
|
case "clique":
|
|
list = append(list, clique.NewCliqueAPI(db, engine, blockReader))
|
|
}
|
|
}
|
|
|
|
return list
|
|
}
|