mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-22 03:30:37 +00:00
Embed rpcdaemon: prepared direct clients (#3492)
This commit is contained in:
parent
aca755ab43
commit
479c7f3d9d
@ -10,12 +10,10 @@ import (
|
|||||||
"github.com/ledgerwatch/erigon-lib/gointerfaces"
|
"github.com/ledgerwatch/erigon-lib/gointerfaces"
|
||||||
proto_downloader "github.com/ledgerwatch/erigon-lib/gointerfaces/downloader"
|
proto_downloader "github.com/ledgerwatch/erigon-lib/gointerfaces/downloader"
|
||||||
prototypes "github.com/ledgerwatch/erigon-lib/gointerfaces/types"
|
prototypes "github.com/ledgerwatch/erigon-lib/gointerfaces/types"
|
||||||
"github.com/ledgerwatch/erigon/cmd/downloader/downloader"
|
|
||||||
"github.com/ledgerwatch/erigon/common"
|
"github.com/ledgerwatch/erigon/common"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"google.golang.org/grpc/backoff"
|
"google.golang.org/grpc/backoff"
|
||||||
"google.golang.org/grpc/keepalive"
|
"google.golang.org/grpc/keepalive"
|
||||||
"google.golang.org/protobuf/types/known/emptypb"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewClient(ctx context.Context, downloaderAddr string) (proto_downloader.DownloaderClient, error) {
|
func NewClient(ctx context.Context, downloaderAddr string) (proto_downloader.DownloaderClient, error) {
|
||||||
@ -64,18 +62,3 @@ func String2Proto(in string) *prototypes.H160 {
|
|||||||
copy(infoHash[:], common.FromHex(in))
|
copy(infoHash[:], common.FromHex(in))
|
||||||
return gointerfaces.ConvertAddressToH160(infoHash)
|
return gointerfaces.ConvertAddressToH160(infoHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
type ClientDirect struct {
|
|
||||||
server *downloader.GrpcServer
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewClientDirect(server *downloader.GrpcServer) *ClientDirect {
|
|
||||||
return &ClientDirect{server: server}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *ClientDirect) Download(ctx context.Context, in *proto_downloader.DownloadRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
|
|
||||||
return c.server.Download(ctx, in)
|
|
||||||
}
|
|
||||||
func (c *ClientDirect) Stats(ctx context.Context, in *proto_downloader.StatsRequest, opts ...grpc.CallOption) (*proto_downloader.StatsReply, error) {
|
|
||||||
return c.server.Stats(ctx, in)
|
|
||||||
}
|
|
||||||
|
@ -12,6 +12,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/ledgerwatch/erigon-lib/direct"
|
||||||
"github.com/ledgerwatch/erigon-lib/gointerfaces"
|
"github.com/ledgerwatch/erigon-lib/gointerfaces"
|
||||||
"github.com/ledgerwatch/erigon-lib/gointerfaces/grpcutil"
|
"github.com/ledgerwatch/erigon-lib/gointerfaces/grpcutil"
|
||||||
"github.com/ledgerwatch/erigon-lib/gointerfaces/remote"
|
"github.com/ledgerwatch/erigon-lib/gointerfaces/remote"
|
||||||
@ -21,6 +22,7 @@ import (
|
|||||||
kv2 "github.com/ledgerwatch/erigon-lib/kv/mdbx"
|
kv2 "github.com/ledgerwatch/erigon-lib/kv/mdbx"
|
||||||
"github.com/ledgerwatch/erigon-lib/kv/remotedb"
|
"github.com/ledgerwatch/erigon-lib/kv/remotedb"
|
||||||
"github.com/ledgerwatch/erigon-lib/kv/remotedbserver"
|
"github.com/ledgerwatch/erigon-lib/kv/remotedbserver"
|
||||||
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/filters"
|
||||||
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/health"
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/health"
|
||||||
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/interfaces"
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/interfaces"
|
||||||
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/services"
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/services"
|
||||||
@ -238,11 +240,36 @@ func checkDbCompatibility(ctx context.Context, db kv.RoDB) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func EmbeddedServices(ctx context.Context, erigonDB kv.RoDB, stateCacheCfg kvcache.CoherentConfig, blockReader interfaces.BlockAndTxnReader, ethBackendServer remote.ETHBACKENDServer,
|
||||||
|
txPoolServer txpool.TxpoolServer, miningServer txpool.MiningServer) (eth services.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, starknet *services.StarknetService, stateCache kvcache.Cache, ff *filters.Filters, err error) {
|
||||||
|
if stateCacheCfg.KeysLimit > 0 {
|
||||||
|
stateCache = kvcache.New(stateCacheCfg)
|
||||||
|
} else {
|
||||||
|
stateCache = kvcache.NewDummy()
|
||||||
|
}
|
||||||
|
kvRPC := remotedbserver.NewKvServer(ctx, erigonDB)
|
||||||
|
stateDiffClient := direct.NewStateDiffClientDirect(kvRPC)
|
||||||
|
subscribeToStateChangesLoop(ctx, stateDiffClient, stateCache)
|
||||||
|
|
||||||
|
directClient := direct.NewEthBackendClientDirect(ethBackendServer)
|
||||||
|
|
||||||
|
eth = services.NewRemoteBackend(directClient, erigonDB, blockReader)
|
||||||
|
txPool = direct.NewTxPoolClient(txPoolServer)
|
||||||
|
mining = direct.NewMiningClient(miningServer)
|
||||||
|
ff = filters.New(ctx, eth, txPool, mining)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// RemoteServices - use when RPCDaemon run as independent process. Still it can use --datadir flag to enable
|
// RemoteServices - use when RPCDaemon run as independent process. Still it can use --datadir flag to enable
|
||||||
// `cfg.SingleNodeMode` (mode when it on 1 machine with Erigon)
|
// `cfg.SingleNodeMode` (mode when it on 1 machine with Erigon)
|
||||||
func RemoteServices(ctx context.Context, cfg Flags, logger log.Logger, rootCancel context.CancelFunc) (db kv.RoDB, borDb kv.RoDB, eth services.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, starknet *services.StarknetService, stateCache kvcache.Cache, blockReader interfaces.BlockAndTxnReader, err error) {
|
func RemoteServices(ctx context.Context, cfg Flags, logger log.Logger, rootCancel context.CancelFunc) (
|
||||||
|
db kv.RoDB, borDb kv.RoDB,
|
||||||
|
eth services.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient,
|
||||||
|
starknet *services.StarknetService,
|
||||||
|
stateCache kvcache.Cache, blockReader interfaces.BlockAndTxnReader,
|
||||||
|
ff *filters.Filters, err error) {
|
||||||
if !cfg.SingleNodeMode && cfg.PrivateApiAddr == "" {
|
if !cfg.SingleNodeMode && cfg.PrivateApiAddr == "" {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, fmt.Errorf("either remote db or local db must be specified")
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, fmt.Errorf("either remote db or local db must be specified")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do not change the order of these checks. Chaindata needs to be checked first, because PrivateApiAddr has default value which is not ""
|
// Do not change the order of these checks. Chaindata needs to be checked first, because PrivateApiAddr has default value which is not ""
|
||||||
@ -252,10 +279,10 @@ func RemoteServices(ctx context.Context, cfg Flags, logger log.Logger, rootCance
|
|||||||
log.Trace("Creating chain db", "path", cfg.Chaindata)
|
log.Trace("Creating chain db", "path", cfg.Chaindata)
|
||||||
rwKv, err = kv2.NewMDBX(logger).Path(cfg.Chaindata).Readonly().Open()
|
rwKv, err = kv2.NewMDBX(logger).Path(cfg.Chaindata).Readonly().Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, err
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, err
|
||||||
}
|
}
|
||||||
if compatErr := checkDbCompatibility(ctx, rwKv); compatErr != nil {
|
if compatErr := checkDbCompatibility(ctx, rwKv); compatErr != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, compatErr
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, compatErr
|
||||||
}
|
}
|
||||||
db = rwKv
|
db = rwKv
|
||||||
stateCache = kvcache.NewDummy()
|
stateCache = kvcache.NewDummy()
|
||||||
@ -268,14 +295,14 @@ func RemoteServices(ctx context.Context, cfg Flags, logger log.Logger, rootCance
|
|||||||
// ensure db exist
|
// ensure db exist
|
||||||
tmpDb, err := kv2.NewMDBX(logger).Path(borDbPath).Label(kv.ConsensusDB).Open()
|
tmpDb, err := kv2.NewMDBX(logger).Path(borDbPath).Label(kv.ConsensusDB).Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, err
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, err
|
||||||
}
|
}
|
||||||
tmpDb.Close()
|
tmpDb.Close()
|
||||||
}
|
}
|
||||||
log.Trace("Creating consensus db", "path", borDbPath)
|
log.Trace("Creating consensus db", "path", borDbPath)
|
||||||
borKv, err = kv2.NewMDBX(logger).Path(borDbPath).Label(kv.ConsensusDB).Readonly().Open()
|
borKv, err = kv2.NewMDBX(logger).Path(borDbPath).Label(kv.ConsensusDB).Readonly().Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, err
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, err
|
||||||
}
|
}
|
||||||
// Skip the compatibility check, until we have a schema in erigon-lib
|
// Skip the compatibility check, until we have a schema in erigon-lib
|
||||||
borDb = borKv
|
borDb = borKv
|
||||||
@ -302,10 +329,10 @@ func RemoteServices(ctx context.Context, cfg Flags, logger log.Logger, rootCance
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, err
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, err
|
||||||
}
|
}
|
||||||
if cc == nil {
|
if cc == nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, fmt.Errorf("chain config not found in db. Need start erigon at least once on this db")
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, fmt.Errorf("chain config not found in db. Need start erigon at least once on this db")
|
||||||
}
|
}
|
||||||
|
|
||||||
allSnapshots := snapshotsync.NewAllSnapshots(cfg.Snapshot, path.Join(cfg.Datadir, "snapshots"))
|
allSnapshots := snapshotsync.NewAllSnapshots(cfg.Snapshot, path.Join(cfg.Datadir, "snapshots"))
|
||||||
@ -315,23 +342,20 @@ func RemoteServices(ctx context.Context, cfg Flags, logger log.Logger, rootCance
|
|||||||
blockReader = snapshotsync.NewBlockReader()
|
blockReader = snapshotsync.NewBlockReader()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if cfg.PrivateApiAddr == "" {
|
|
||||||
return db, borDb, eth, txPool, mining, starknet, stateCache, blockReader, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
creds, err := grpcutil.TLS(cfg.TLSCACert, cfg.TLSCertfile, cfg.TLSKeyFile)
|
creds, err := grpcutil.TLS(cfg.TLSCACert, cfg.TLSCertfile, cfg.TLSKeyFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, fmt.Errorf("open tls cert: %w", err)
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, fmt.Errorf("open tls cert: %w", err)
|
||||||
}
|
}
|
||||||
conn, err := grpcutil.Connect(creds, cfg.PrivateApiAddr)
|
conn, err := grpcutil.Connect(creds, cfg.PrivateApiAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, fmt.Errorf("could not connect to execution service privateApi: %w", err)
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, fmt.Errorf("could not connect to execution service privateApi: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
kvClient := remote.NewKVClient(conn)
|
kvClient := remote.NewKVClient(conn)
|
||||||
remoteKv, err := remotedb.NewRemote(gointerfaces.VersionFromProto(remotedbserver.KvServiceAPIVersion), logger, kvClient).Open()
|
remoteKv, err := remotedb.NewRemote(gointerfaces.VersionFromProto(remotedbserver.KvServiceAPIVersion), logger, kvClient).Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, fmt.Errorf("could not connect to remoteKv: %w", err)
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, fmt.Errorf("could not connect to remoteKv: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
subscribeToStateChangesLoop(ctx, kvClient, stateCache)
|
subscribeToStateChangesLoop(ctx, kvClient, stateCache)
|
||||||
@ -346,7 +370,7 @@ func RemoteServices(ctx context.Context, cfg Flags, logger log.Logger, rootCance
|
|||||||
if cfg.TxPoolApiAddr != cfg.PrivateApiAddr {
|
if cfg.TxPoolApiAddr != cfg.PrivateApiAddr {
|
||||||
txpoolConn, err = grpcutil.Connect(creds, cfg.TxPoolApiAddr)
|
txpoolConn, err = grpcutil.Connect(creds, cfg.TxPoolApiAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, fmt.Errorf("could not connect to txpool api: %w", err)
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, fmt.Errorf("could not connect to txpool api: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,12 +400,14 @@ func RemoteServices(ctx context.Context, cfg Flags, logger log.Logger, rootCance
|
|||||||
if cfg.StarknetGRPCAddress != "" {
|
if cfg.StarknetGRPCAddress != "" {
|
||||||
starknetConn, err := grpcutil.Connect(creds, cfg.StarknetGRPCAddress)
|
starknetConn, err := grpcutil.Connect(creds, cfg.StarknetGRPCAddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, nil, nil, nil, nil, fmt.Errorf("could not connect to starknet api: %w", err)
|
return nil, nil, nil, nil, nil, nil, nil, nil, ff, fmt.Errorf("could not connect to starknet api: %w", err)
|
||||||
}
|
}
|
||||||
starknet = services.NewStarknetService(starknetConn)
|
starknet = services.NewStarknetService(starknetConn)
|
||||||
}
|
}
|
||||||
|
|
||||||
return db, borDb, eth, txPool, mining, starknet, stateCache, blockReader, err
|
ff = filters.New(ctx, eth, txPool, mining)
|
||||||
|
|
||||||
|
return db, borDb, eth, txPool, mining, starknet, stateCache, blockReader, ff, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func StartRpcServer(ctx context.Context, cfg Flags, rpcAPI []rpc.API) error {
|
func StartRpcServer(ctx context.Context, cfg Flags, rpcAPI []rpc.API) error {
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package commands
|
package commands
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/ledgerwatch/erigon-lib/gointerfaces/starknet"
|
"github.com/ledgerwatch/erigon-lib/gointerfaces/starknet"
|
||||||
"github.com/ledgerwatch/erigon-lib/gointerfaces/txpool"
|
"github.com/ledgerwatch/erigon-lib/gointerfaces/txpool"
|
||||||
"github.com/ledgerwatch/erigon-lib/kv"
|
"github.com/ledgerwatch/erigon-lib/kv"
|
||||||
@ -15,11 +13,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// APIList describes the list of available RPC apis
|
// APIList describes the list of available RPC apis
|
||||||
func APIList(ctx context.Context, db kv.RoDB, borDb kv.RoDB,
|
func APIList(db kv.RoDB, borDb kv.RoDB, eth services.ApiBackend,
|
||||||
eth services.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient,
|
txPool txpool.TxpoolClient, mining txpool.MiningClient,
|
||||||
starknet starknet.CAIROVMClient, filters *filters.Filters,
|
starknet starknet.CAIROVMClient,
|
||||||
stateCache kvcache.Cache,
|
filters *filters.Filters, stateCache kvcache.Cache, blockReader interfaces.BlockAndTxnReader,
|
||||||
blockReader interfaces.BlockAndTxnReader,
|
|
||||||
cfg cli.Flags, customAPIList []rpc.API) []rpc.API {
|
cfg cli.Flags, customAPIList []rpc.API) []rpc.API {
|
||||||
var defaultAPIList []rpc.API
|
var defaultAPIList []rpc.API
|
||||||
|
|
||||||
|
@ -13,7 +13,6 @@ import (
|
|||||||
"github.com/ledgerwatch/erigon/core/rawdb"
|
"github.com/ledgerwatch/erigon/core/rawdb"
|
||||||
"github.com/ledgerwatch/erigon/core/state"
|
"github.com/ledgerwatch/erigon/core/state"
|
||||||
"github.com/ledgerwatch/erigon/core/types"
|
"github.com/ledgerwatch/erigon/core/types"
|
||||||
"github.com/ledgerwatch/erigon/eth"
|
|
||||||
"github.com/ledgerwatch/erigon/eth/stagedsync/stages"
|
"github.com/ledgerwatch/erigon/eth/stagedsync/stages"
|
||||||
"github.com/ledgerwatch/erigon/eth/tracers"
|
"github.com/ledgerwatch/erigon/eth/tracers"
|
||||||
"github.com/ledgerwatch/erigon/ethdb"
|
"github.com/ledgerwatch/erigon/ethdb"
|
||||||
@ -22,6 +21,9 @@ import (
|
|||||||
"github.com/ledgerwatch/erigon/turbo/transactions"
|
"github.com/ledgerwatch/erigon/turbo/transactions"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// AccountRangeMaxResults is the maximum number of results to be returned per call
|
||||||
|
const AccountRangeMaxResults = 256
|
||||||
|
|
||||||
// PrivateDebugAPI Exposed RPC endpoints for debugging use
|
// PrivateDebugAPI Exposed RPC endpoints for debugging use
|
||||||
type PrivateDebugAPI interface {
|
type PrivateDebugAPI interface {
|
||||||
StorageRangeAt(ctx context.Context, blockHash common.Hash, txIndex uint64, contractAddress common.Address, keyStart hexutil.Bytes, maxResult int) (StorageRangeResult, error)
|
StorageRangeAt(ctx context.Context, blockHash common.Hash, txIndex uint64, contractAddress common.Address, keyStart hexutil.Bytes, maxResult int) (StorageRangeResult, error)
|
||||||
@ -121,8 +123,8 @@ func (api *PrivateDebugAPIImpl) AccountRange(ctx context.Context, blockNrOrHash
|
|||||||
blockNumber = block.NumberU64()
|
blockNumber = block.NumberU64()
|
||||||
}
|
}
|
||||||
|
|
||||||
if maxResults > eth.AccountRangeMaxResults || maxResults <= 0 {
|
if maxResults > AccountRangeMaxResults || maxResults <= 0 {
|
||||||
maxResults = eth.AccountRangeMaxResults
|
maxResults = AccountRangeMaxResults
|
||||||
}
|
}
|
||||||
|
|
||||||
dumper := state.NewDumper(tx, blockNumber)
|
dumper := state.NewDumper(tx, blockNumber)
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"github.com/ledgerwatch/erigon-lib/common"
|
"github.com/ledgerwatch/erigon-lib/common"
|
||||||
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/cli"
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/cli"
|
||||||
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/commands"
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/commands"
|
||||||
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/filters"
|
|
||||||
"github.com/ledgerwatch/log/v3"
|
"github.com/ledgerwatch/log/v3"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
@ -15,22 +14,18 @@ func main() {
|
|||||||
cmd, cfg := cli.RootCommand()
|
cmd, cfg := cli.RootCommand()
|
||||||
rootCtx, rootCancel := common.RootContext()
|
rootCtx, rootCancel := common.RootContext()
|
||||||
cmd.RunE = func(cmd *cobra.Command, args []string) error {
|
cmd.RunE = func(cmd *cobra.Command, args []string) error {
|
||||||
|
ctx := cmd.Context()
|
||||||
logger := log.New()
|
logger := log.New()
|
||||||
db, borDb, backend, txPool, mining, starknet, stateCache, blockReader, err := cli.RemoteServices(cmd.Context(), *cfg, logger, rootCancel)
|
db, borDb, backend, txPool, mining, starknet, stateCache, blockReader, ff, err := cli.RemoteServices(ctx, *cfg, logger, rootCancel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Could not connect to DB", "error", err)
|
log.Error("Could not connect to DB", "error", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
defer borDb.Close()
|
||||||
|
|
||||||
var ff *filters.Filters
|
apiList := commands.APIList(db, borDb, backend, txPool, mining, starknet, ff, stateCache, blockReader, *cfg, nil)
|
||||||
if backend != nil {
|
if err := cli.StartRpcServer(ctx, *cfg, apiList); err != nil {
|
||||||
ff = filters.New(rootCtx, backend, txPool, mining)
|
|
||||||
} else {
|
|
||||||
log.Info("filters are not supported in chaindata mode")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cli.StartRpcServer(cmd.Context(), *cfg, commands.APIList(cmd.Context(), db, borDb, backend, txPool, mining, starknet, ff, stateCache, blockReader, *cfg, nil)); err != nil {
|
|
||||||
log.Error(err.Error())
|
log.Error(err.Error())
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,7 @@ func BorRLP(header *types.Header, c *params.BorConfig) []byte {
|
|||||||
type Bor struct {
|
type Bor struct {
|
||||||
chainConfig *params.ChainConfig // Chain config
|
chainConfig *params.ChainConfig // Chain config
|
||||||
config *params.BorConfig // Consensus engine configuration parameters for bor consensus
|
config *params.BorConfig // Consensus engine configuration parameters for bor consensus
|
||||||
db kv.RwDB // Database to store and retrieve snapshot checkpoints
|
DB kv.RwDB // Database to store and retrieve snapshot checkpoints
|
||||||
|
|
||||||
recents *lru.ARCCache // Snapshots for recent block to speed up reorgs
|
recents *lru.ARCCache // Snapshots for recent block to speed up reorgs
|
||||||
signatures *lru.ARCCache // Signatures of recent blocks to speed up mining
|
signatures *lru.ARCCache // Signatures of recent blocks to speed up mining
|
||||||
@ -253,7 +253,7 @@ func New(
|
|||||||
c := &Bor{
|
c := &Bor{
|
||||||
chainConfig: chainConfig,
|
chainConfig: chainConfig,
|
||||||
config: borConfig,
|
config: borConfig,
|
||||||
db: db,
|
DB: db,
|
||||||
recents: recents,
|
recents: recents,
|
||||||
signatures: signatures,
|
signatures: signatures,
|
||||||
validatorSetABI: vABI,
|
validatorSetABI: vABI,
|
||||||
@ -442,7 +442,7 @@ func (c *Bor) snapshot(chain consensus.ChainHeaderReader, number uint64, hash co
|
|||||||
|
|
||||||
// If an on-disk checkpoint snapshot can be found, use that
|
// If an on-disk checkpoint snapshot can be found, use that
|
||||||
if number%checkpointInterval == 0 {
|
if number%checkpointInterval == 0 {
|
||||||
if s, err := loadSnapshot(c.config, c.signatures, c.db, hash); err == nil {
|
if s, err := loadSnapshot(c.config, c.signatures, c.DB, hash); err == nil {
|
||||||
log.Trace("Loaded snapshot from disk", "number", number, "hash", hash)
|
log.Trace("Loaded snapshot from disk", "number", number, "hash", hash)
|
||||||
snap = s
|
snap = s
|
||||||
break
|
break
|
||||||
@ -468,7 +468,7 @@ func (c *Bor) snapshot(chain consensus.ChainHeaderReader, number uint64, hash co
|
|||||||
|
|
||||||
// new snap shot
|
// new snap shot
|
||||||
snap = newSnapshot(c.config, c.signatures, number, hash, validators)
|
snap = newSnapshot(c.config, c.signatures, number, hash, validators)
|
||||||
if err := snap.store(c.db); err != nil {
|
if err := snap.store(c.DB); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
log.Info("Stored checkpoint snapshot to disk", "number", number, "hash", hash)
|
log.Info("Stored checkpoint snapshot to disk", "number", number, "hash", hash)
|
||||||
@ -514,7 +514,7 @@ func (c *Bor) snapshot(chain consensus.ChainHeaderReader, number uint64, hash co
|
|||||||
|
|
||||||
// If we've generated a new checkpoint snapshot, save to disk
|
// If we've generated a new checkpoint snapshot, save to disk
|
||||||
if snap.Number%checkpointInterval == 0 && len(headers) > 0 {
|
if snap.Number%checkpointInterval == 0 && len(headers) > 0 {
|
||||||
if err = snap.store(c.db); err != nil {
|
if err = snap.store(c.DB); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
log.Trace("Stored snapshot to disk", "number", snap.Number, "hash", snap.Hash)
|
log.Trace("Stored snapshot to disk", "number", snap.Number, "hash", snap.Hash)
|
||||||
@ -908,6 +908,7 @@ func (c *Bor) APIs(chain consensus.ChainHeaderReader) []rpc.API {
|
|||||||
|
|
||||||
// Close implements consensus.Engine. It's a noop for bor as there are no background threads.
|
// Close implements consensus.Engine. It's a noop for bor as there are no background threads.
|
||||||
func (c *Bor) Close() error {
|
func (c *Bor) Close() error {
|
||||||
|
c.DB.Close()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,3 @@
|
|||||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
package eth
|
package eth
|
||||||
|
|
||||||
// AccountRangeMaxResults is the maximum number of results to be returned per call
|
|
||||||
const AccountRangeMaxResults = 256
|
|
||||||
|
@ -47,21 +47,18 @@ import (
|
|||||||
txpool2 "github.com/ledgerwatch/erigon-lib/txpool"
|
txpool2 "github.com/ledgerwatch/erigon-lib/txpool"
|
||||||
"github.com/ledgerwatch/erigon-lib/txpool/txpooluitl"
|
"github.com/ledgerwatch/erigon-lib/txpool/txpooluitl"
|
||||||
"github.com/ledgerwatch/erigon/cmd/downloader/downloader"
|
"github.com/ledgerwatch/erigon/cmd/downloader/downloader"
|
||||||
"github.com/ledgerwatch/erigon/turbo/snapshotsync/snapshotsynccli"
|
|
||||||
"github.com/ledgerwatch/log/v3"
|
|
||||||
"google.golang.org/grpc"
|
|
||||||
"google.golang.org/grpc/credentials"
|
|
||||||
|
|
||||||
"github.com/ledgerwatch/erigon/consensus/parlia"
|
|
||||||
|
|
||||||
"github.com/ledgerwatch/erigon/cmd/downloader/downloadergrpc"
|
"github.com/ledgerwatch/erigon/cmd/downloader/downloadergrpc"
|
||||||
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/cli"
|
||||||
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/commands"
|
||||||
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/interfaces"
|
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/interfaces"
|
||||||
"github.com/ledgerwatch/erigon/cmd/sentry/sentry"
|
"github.com/ledgerwatch/erigon/cmd/sentry/sentry"
|
||||||
"github.com/ledgerwatch/erigon/common"
|
"github.com/ledgerwatch/erigon/common"
|
||||||
"github.com/ledgerwatch/erigon/common/debug"
|
"github.com/ledgerwatch/erigon/common/debug"
|
||||||
"github.com/ledgerwatch/erigon/consensus"
|
"github.com/ledgerwatch/erigon/consensus"
|
||||||
|
"github.com/ledgerwatch/erigon/consensus/bor"
|
||||||
"github.com/ledgerwatch/erigon/consensus/clique"
|
"github.com/ledgerwatch/erigon/consensus/clique"
|
||||||
"github.com/ledgerwatch/erigon/consensus/ethash"
|
"github.com/ledgerwatch/erigon/consensus/ethash"
|
||||||
|
"github.com/ledgerwatch/erigon/consensus/parlia"
|
||||||
"github.com/ledgerwatch/erigon/core"
|
"github.com/ledgerwatch/erigon/core"
|
||||||
"github.com/ledgerwatch/erigon/core/rawdb"
|
"github.com/ledgerwatch/erigon/core/rawdb"
|
||||||
"github.com/ledgerwatch/erigon/core/types"
|
"github.com/ledgerwatch/erigon/core/types"
|
||||||
@ -81,7 +78,11 @@ import (
|
|||||||
"github.com/ledgerwatch/erigon/turbo/shards"
|
"github.com/ledgerwatch/erigon/turbo/shards"
|
||||||
"github.com/ledgerwatch/erigon/turbo/snapshotsync"
|
"github.com/ledgerwatch/erigon/turbo/snapshotsync"
|
||||||
"github.com/ledgerwatch/erigon/turbo/snapshotsync/snapshothashes"
|
"github.com/ledgerwatch/erigon/turbo/snapshotsync/snapshothashes"
|
||||||
|
"github.com/ledgerwatch/erigon/turbo/snapshotsync/snapshotsynccli"
|
||||||
stages2 "github.com/ledgerwatch/erigon/turbo/stages"
|
stages2 "github.com/ledgerwatch/erigon/turbo/stages"
|
||||||
|
"github.com/ledgerwatch/log/v3"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/credentials"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Config contains the configuration options of the ETH protocol.
|
// Config contains the configuration options of the ETH protocol.
|
||||||
@ -331,7 +332,7 @@ func New(stack *node.Node, config *ethconfig.Config, txpoolCfg txpool2.Config, l
|
|||||||
return nil, fmt.Errorf("new server: %w", err)
|
return nil, fmt.Errorf("new server: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
backend.downloaderClient = downloadergrpc.NewClientDirect(bittorrentServer)
|
backend.downloaderClient = direct.NewDownloaderClient(bittorrentServer)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -526,6 +527,31 @@ func New(stack *node.Node, config *ethconfig.Config, txpoolCfg txpool2.Config, l
|
|||||||
}
|
}
|
||||||
//eth.APIBackend.gpo = gasprice.NewOracle(eth.APIBackend, gpoParams)
|
//eth.APIBackend.gpo = gasprice.NewOracle(eth.APIBackend, gpoParams)
|
||||||
|
|
||||||
|
// start HTTP API
|
||||||
|
httpRpcCfg := cli.Flags{} // TODO: add rpcdaemon cli flags to Erigon and fill this struct (or break it to smaller config objects)
|
||||||
|
ethRpcClient, txPoolRpcClient, miningRpcClient, starkNetRpcClient, stateCache, ff, err := cli.EmbeddedServices(
|
||||||
|
ctx, chainKv, httpRpcCfg.StateCache, blockReader,
|
||||||
|
ethBackendRPC,
|
||||||
|
backend.txPool2GrpcServer,
|
||||||
|
miningRPC,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var borDb kv.RoDB
|
||||||
|
if casted, ok := backend.engine.(*bor.Bor); ok {
|
||||||
|
borDb = casted.DB
|
||||||
|
}
|
||||||
|
apiList := commands.APIList(chainKv, borDb, ethRpcClient, txPoolRpcClient, miningRpcClient, starkNetRpcClient, ff, stateCache, blockReader, httpRpcCfg, nil)
|
||||||
|
go func() {
|
||||||
|
_ = apiList
|
||||||
|
//if err := cli.StartRpcServer(ctx, httpRpcCfg, apiList); err != nil {
|
||||||
|
// log.Error(err.Error())
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
}()
|
||||||
|
|
||||||
// Register the backend on the node
|
// Register the backend on the node
|
||||||
stack.RegisterAPIs(backend.APIs())
|
stack.RegisterAPIs(backend.APIs())
|
||||||
stack.RegisterLifecycle(backend)
|
stack.RegisterLifecycle(backend)
|
||||||
|
2
go.mod
2
go.mod
@ -40,7 +40,7 @@ require (
|
|||||||
github.com/json-iterator/go v1.1.12
|
github.com/json-iterator/go v1.1.12
|
||||||
github.com/julienschmidt/httprouter v1.3.0
|
github.com/julienschmidt/httprouter v1.3.0
|
||||||
github.com/kevinburke/go-bindata v3.21.0+incompatible
|
github.com/kevinburke/go-bindata v3.21.0+incompatible
|
||||||
github.com/ledgerwatch/erigon-lib v0.0.0-20220212030730-fc0a90f3b518
|
github.com/ledgerwatch/erigon-lib v0.0.0-20220212114842-31982dacc8a5
|
||||||
github.com/ledgerwatch/log/v3 v3.4.0
|
github.com/ledgerwatch/log/v3 v3.4.0
|
||||||
github.com/ledgerwatch/secp256k1 v1.0.0
|
github.com/ledgerwatch/secp256k1 v1.0.0
|
||||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
|
||||||
|
4
go.sum
4
go.sum
@ -632,8 +632,8 @@ github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758 h1:0D5M2HQSGD3P
|
|||||||
github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
|
github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
|
||||||
github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c=
|
github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c=
|
||||||
github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
|
github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
|
||||||
github.com/ledgerwatch/erigon-lib v0.0.0-20220212030730-fc0a90f3b518 h1:4SPtNxvC6AkdD6e5oLdIhTa770CEIDoj8xyMfDm/T0M=
|
github.com/ledgerwatch/erigon-lib v0.0.0-20220212114842-31982dacc8a5 h1:P8LFJVTTfh3s+vjWa8g7tK8MyEF0fuIz+36Ksj1iAz8=
|
||||||
github.com/ledgerwatch/erigon-lib v0.0.0-20220212030730-fc0a90f3b518/go.mod h1:NzHpr5GGDbLM/hYSU4BWB0INU6ZALzMzaqX4i03R6i0=
|
github.com/ledgerwatch/erigon-lib v0.0.0-20220212114842-31982dacc8a5/go.mod h1:phuzMr8tLvqjo5cQVA9jj8odAso6eLyS4LFmUJrDFGw=
|
||||||
github.com/ledgerwatch/log/v3 v3.4.0 h1:SEIOcv5a2zkG3PmoT5jeTU9m/0nEUv0BJS5bzsjwKCI=
|
github.com/ledgerwatch/log/v3 v3.4.0 h1:SEIOcv5a2zkG3PmoT5jeTU9m/0nEUv0BJS5bzsjwKCI=
|
||||||
github.com/ledgerwatch/log/v3 v3.4.0/go.mod h1:VXcz6Ssn6XEeU92dCMc39/g1F0OYAjw1Mt+dGP5DjXY=
|
github.com/ledgerwatch/log/v3 v3.4.0/go.mod h1:VXcz6Ssn6XEeU92dCMc39/g1F0OYAjw1Mt+dGP5DjXY=
|
||||||
github.com/ledgerwatch/secp256k1 v1.0.0 h1:Usvz87YoTG0uePIV8woOof5cQnLXGYa162rFf3YnwaQ=
|
github.com/ledgerwatch/secp256k1 v1.0.0 h1:Usvz87YoTG0uePIV8woOof5cQnLXGYa162rFf3YnwaQ=
|
||||||
|
Loading…
Reference in New Issue
Block a user