From 73e2d1146e17b4aca6ce3b825e53f014ebda0884 Mon Sep 17 00:00:00 2001 From: ledgerwatch Date: Thu, 1 Sep 2022 16:44:37 +0100 Subject: [PATCH] Cleanup interfaces (#5254) Co-authored-by: Alexey Sharp --- cmd/devnettest/rpcdaemon/daemon.go | 4 +- cmd/rpcdaemon/README.md | 2 - cmd/rpcdaemon/cli/config.go | 40 ++--- cmd/rpcdaemon/commands/daemon.go | 11 +- cmd/rpcdaemon/commands/starknet_accounts.go | 39 ----- cmd/rpcdaemon/commands/starknet_api.go | 35 ----- cmd/rpcdaemon/commands/starknet_call.go | 97 ------------- .../commands/starknet_send_transaction.go | 51 ------- .../starknet_send_transaction_test.go | 83 ----------- cmd/rpcdaemon/main.go | 4 +- cmd/rpcdaemon/rpcdaemontest/test_util.go | 2 - cmd/rpcdaemon/rpcservices/eth_starknet.go | 31 ---- cmd/rpcdaemon22/README.md | 2 - cmd/rpcdaemon22/cli/config.go | 40 ++--- cmd/rpcdaemon22/commands/daemon.go | 11 +- cmd/rpcdaemon22/commands/starknet_accounts.go | 39 ----- cmd/rpcdaemon22/commands/starknet_api.go | 35 ----- cmd/rpcdaemon22/commands/starknet_call.go | 97 ------------- .../commands/starknet_send_transaction.go | 51 ------- .../starknet_send_transaction_test.go | 83 ----------- cmd/rpcdaemon22/main.go | 4 +- cmd/rpcdaemon22/rpcdaemontest/test_util.go | 2 - cmd/rpcdaemon22/rpcservices/eth_starknet.go | 31 ---- cmd/starknet/README.md | 26 ---- cmd/starknet/cmd/generate_raw_tx.go | 125 ---------------- cmd/starknet/cmd/root.go | 19 --- cmd/starknet/main.go | 7 - cmd/starknet/services/raw_tx_generator.go | 137 ------------------ .../services/raw_tx_generator_test.go | 98 ------------- cmd/utils/flags.go | 6 - eth/backend.go | 4 +- go.mod | 4 +- go.sum | 4 +- turbo/cli/default_flags.go | 1 - turbo/cli/flags.go | 1 - 35 files changed, 45 insertions(+), 1181 deletions(-) delete mode 100644 cmd/rpcdaemon/commands/starknet_accounts.go delete mode 100644 cmd/rpcdaemon/commands/starknet_api.go delete mode 100644 cmd/rpcdaemon/commands/starknet_call.go delete mode 100644 cmd/rpcdaemon/commands/starknet_send_transaction.go delete mode 100644 cmd/rpcdaemon/commands/starknet_send_transaction_test.go delete mode 100644 cmd/rpcdaemon/rpcservices/eth_starknet.go delete mode 100644 cmd/rpcdaemon22/commands/starknet_accounts.go delete mode 100644 cmd/rpcdaemon22/commands/starknet_api.go delete mode 100644 cmd/rpcdaemon22/commands/starknet_call.go delete mode 100644 cmd/rpcdaemon22/commands/starknet_send_transaction.go delete mode 100644 cmd/rpcdaemon22/commands/starknet_send_transaction_test.go delete mode 100644 cmd/rpcdaemon22/rpcservices/eth_starknet.go delete mode 100644 cmd/starknet/README.md delete mode 100644 cmd/starknet/cmd/generate_raw_tx.go delete mode 100644 cmd/starknet/cmd/root.go delete mode 100644 cmd/starknet/main.go delete mode 100644 cmd/starknet/services/raw_tx_generator.go delete mode 100644 cmd/starknet/services/raw_tx_generator_test.go diff --git a/cmd/devnettest/rpcdaemon/daemon.go b/cmd/devnettest/rpcdaemon/daemon.go index bc6f7b5eb3e..e749fe21bbd 100644 --- a/cmd/devnettest/rpcdaemon/daemon.go +++ b/cmd/devnettest/rpcdaemon/daemon.go @@ -20,7 +20,7 @@ func RunDaemon() { ctx := cmd.Context() logger := log.New() time.Sleep(100 * time.Millisecond) - db, borDb, backend, txPool, mining, starknet, stateCache, blockReader, ff, agg, txNums, err := cli.RemoteServices(ctx, *cfg, logger, rootCancel) + db, borDb, backend, txPool, mining, stateCache, blockReader, ff, agg, txNums, err := cli.RemoteServices(ctx, *cfg, logger, rootCancel) if err != nil { log.Error("Could not connect to DB", "err", err) return nil @@ -30,7 +30,7 @@ func RunDaemon() { defer borDb.Close() } - apiList := commands.APIList(db, borDb, backend, txPool, mining, starknet, ff, stateCache, blockReader, agg, txNums, *cfg) + apiList := commands.APIList(db, borDb, backend, txPool, mining, ff, stateCache, blockReader, agg, txNums, *cfg) if err := cli.StartRpcServer(ctx, *cfg, apiList, nil); err != nil { log.Error(err.Error()) return nil diff --git a/cmd/rpcdaemon/README.md b/cmd/rpcdaemon/README.md index 9b5feece1f6..5d684a3767e 100644 --- a/cmd/rpcdaemon/README.md +++ b/cmd/rpcdaemon/README.md @@ -312,8 +312,6 @@ The following table shows the current implementation status of Erigon's RPC daem | erigon_issuance | Yes | Erigon only | | erigon_GetBlockByTimestamp | Yes | Erigon only | | | | | -| starknet_call | Yes | Starknet only | -| | | | | bor_getSnapshot | Yes | Bor only | | bor_getAuthor | Yes | Bor only | | bor_getSnapshotAtHash | Yes | Bor only | diff --git a/cmd/rpcdaemon/cli/config.go b/cmd/rpcdaemon/cli/config.go index ab0eecf22df..53aaffc946f 100644 --- a/cmd/rpcdaemon/cli/config.go +++ b/cmd/rpcdaemon/cli/config.go @@ -74,7 +74,7 @@ func RootCommand() (*cobra.Command, *httpcfg.HttpCfg) { rootCmd.PersistentFlags().StringSliceVar(&cfg.HttpCORSDomain, "http.corsdomain", []string{}, "Comma separated list of domains from which to accept cross origin requests (browser enforced)") rootCmd.PersistentFlags().StringSliceVar(&cfg.HttpVirtualHost, "http.vhosts", nodecfg.DefaultConfig.HTTPVirtualHosts, "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.") rootCmd.PersistentFlags().BoolVar(&cfg.HttpCompression, "http.compression", true, "Disable http compression") - rootCmd.PersistentFlags().StringSliceVar(&cfg.API, "http.api", []string{"eth", "erigon"}, "API's offered over the HTTP-RPC interface: eth,erigon,web3,net,debug,trace,txpool,db,starknet. Supported methods: https://github.com/ledgerwatch/erigon/tree/devel/cmd/rpcdaemon") + rootCmd.PersistentFlags().StringSliceVar(&cfg.API, "http.api", []string{"eth", "erigon"}, "API's offered over the HTTP-RPC interface: eth,erigon,web3,net,debug,trace,txpool,db. Supported methods: https://github.com/ledgerwatch/erigon/tree/devel/cmd/rpcdaemon") rootCmd.PersistentFlags().Uint64Var(&cfg.Gascap, "rpc.gascap", 50000000, "Sets a cap on gas that can be used in eth_call/estimateGas") rootCmd.PersistentFlags().Uint64Var(&cfg.MaxTraces, "trace.maxtraces", 200, "Sets a limit on traces that can be returned in trace_filter") rootCmd.PersistentFlags().BoolVar(&cfg.WebsocketEnabled, "ws", false, "Enable Websockets") @@ -92,7 +92,6 @@ func RootCommand() (*cobra.Command, *httpcfg.HttpCfg) { rootCmd.PersistentFlags().StringVar(&cfg.GRPCListenAddress, "grpc.addr", nodecfg.DefaultGRPCHost, "GRPC server listening interface") rootCmd.PersistentFlags().IntVar(&cfg.GRPCPort, "grpc.port", nodecfg.DefaultGRPCPort, "GRPC server listening port") rootCmd.PersistentFlags().BoolVar(&cfg.GRPCHealthCheckEnabled, "grpc.healthcheck", false, "Enable GRPC health check") - rootCmd.PersistentFlags().StringVar(&cfg.StarknetGRPCAddress, "starknet.grpc.address", "127.0.0.1:6066", "Starknet GRPC address") rootCmd.PersistentFlags().BoolVar(&cfg.TraceRequests, utils.HTTPTraceFlag.Name, false, "Trace HTTP requests with INFO level") rootCmd.PersistentFlags().DurationVar(&cfg.HTTPTimeouts.ReadTimeout, "http.timeouts.read", rpccfg.DefaultHTTPTimeouts.ReadTimeout, "Maximum duration for reading the entire request, including the body.") rootCmd.PersistentFlags().DurationVar(&cfg.HTTPTimeouts.WriteTimeout, "http.timeouts.write", rpccfg.DefaultHTTPTimeouts.WriteTimeout, "Maximum duration before timing out writes of the response. It is reset whenever a new request's header is read") @@ -214,7 +213,7 @@ func EmbeddedServices(ctx context.Context, erigonDB kv.RoDB, stateCacheCfg kvcache.CoherentConfig, blockReader services.FullBlockReader, snapshots *snapshotsync.RoSnapshots, ethBackendServer remote.ETHBACKENDServer, txPoolServer txpool.TxpoolServer, miningServer txpool.MiningServer, -) (eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, starknet *rpcservices.StarknetService, stateCache kvcache.Cache, ff *rpchelper.Filters, txNums *exec22.TxNums, err error) { +) (eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, stateCache kvcache.Cache, ff *rpchelper.Filters, txNums *exec22.TxNums, err error) { if stateCacheCfg.KeysLimit > 0 { stateCache = kvcache.NewDummy() // notification about new blocks (state stream) doesn't work now inside erigon - because @@ -263,14 +262,13 @@ func EmbeddedServices(ctx context.Context, func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, rootCancel context.CancelFunc) ( db kv.RoDB, borDb kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, - starknet *rpcservices.StarknetService, stateCache kvcache.Cache, blockReader services.FullBlockReader, ff *rpchelper.Filters, agg *libstate.Aggregator22, txNums *exec22.TxNums, err error) { if !cfg.WithDatadir && cfg.PrivateApiAddr == "" { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("either remote db or local db must be specified") + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, 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 "" @@ -281,10 +279,10 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, limiter := semaphore.NewWeighted(int64(cfg.DBReadConcurrency)) rwKv, err = kv2.NewMDBX(logger).RoTxsLimiter(limiter).Path(cfg.Dirs.Chaindata).Readonly().Open() if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err } if compatErr := checkDbCompatibility(ctx, rwKv); compatErr != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, compatErr + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, compatErr } db = rwKv stateCache = kvcache.NewDummy() @@ -297,14 +295,14 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, // ensure db exist tmpDb, err := kv2.NewMDBX(logger).Path(borDbPath).Label(kv.ConsensusDB).Open() if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err } tmpDb.Close() } log.Trace("Creating consensus db", "path", borDbPath) borKv, err = kv2.NewMDBX(logger).Path(borDbPath).Label(kv.ConsensusDB).Readonly().Open() if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err } // Skip the compatibility check, until we have a schema in erigon-lib borDb = borKv @@ -338,27 +336,27 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, } return nil }); err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err } if cc == nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, 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, ff, nil, nil, fmt.Errorf("chain config not found in db. Need start erigon at least once on this db") } cfg.Snap.Enabled = cfg.Snap.Enabled || cfg.Sync.UseSnapshots } creds, err := grpcutil.TLS(cfg.TLSCACert, cfg.TLSCertfile, cfg.TLSKeyFile) if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("open tls cert: %w", err) + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("open tls cert: %w", err) } conn, err := grpcutil.Connect(creds, cfg.PrivateApiAddr) if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to execution service privateApi: %w", err) + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to execution service privateApi: %w", err) } kvClient := remote.NewKVClient(conn) remoteKv, err := remotedb.NewRemote(gointerfaces.VersionFromProto(remotedbserver.KvServiceAPIVersion), logger, kvClient).Open() if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to remoteKv: %w", err) + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to remoteKv: %w", err) } subscribeToStateChangesLoop(ctx, kvClient, stateCache) @@ -404,7 +402,7 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, if cfg.TxPoolApiAddr != cfg.PrivateApiAddr { txpoolConn, err = grpcutil.Connect(creds, cfg.TxPoolApiAddr) if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to txpool api: %w", err) + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to txpool api: %w", err) } } @@ -431,23 +429,15 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, } }() - if cfg.StarknetGRPCAddress != "" { - starknetConn, err := grpcutil.Connect(creds, cfg.StarknetGRPCAddress) - if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to starknet api: %w", err) - } - starknet = rpcservices.NewStarknetService(starknetConn) - } - ff = rpchelper.New(ctx, eth, txPool, mining, onNewSnapshot) if cfg.WithDatadir { e22Dir := filepath.Join(cfg.DataDir, "erigon22") dir.MustExist(e22Dir) if agg, err = libstate.NewAggregator22(e22Dir, ethconfig.HistoryV2AggregationStep); err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("create aggregator: %w", err) + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("create aggregator: %w", err) } } - return db, borDb, eth, txPool, mining, starknet, stateCache, blockReader, ff, agg, txNums, err + return db, borDb, eth, txPool, mining, stateCache, blockReader, ff, agg, txNums, err } func StartRpcServer(ctx context.Context, cfg httpcfg.HttpCfg, rpcAPI []rpc.API, authAPI []rpc.API) error { diff --git a/cmd/rpcdaemon/commands/daemon.go b/cmd/rpcdaemon/commands/daemon.go index f3477151a33..1fcfe147608 100644 --- a/cmd/rpcdaemon/commands/daemon.go +++ b/cmd/rpcdaemon/commands/daemon.go @@ -1,7 +1,6 @@ package commands import ( - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcache" @@ -15,7 +14,7 @@ import ( // APIList describes the list of available RPC apis func APIList(db kv.RoDB, borDb kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, - starknet starknet.CAIROVMClient, filters *rpchelper.Filters, stateCache kvcache.Cache, + filters *rpchelper.Filters, stateCache kvcache.Cache, blockReader services.FullBlockReader, agg *libstate.Aggregator22, txNums *exec22.TxNums, cfg httpcfg.HttpCfg) (list []rpc.API) { base := NewBaseApi(filters, stateCache, blockReader, agg, txNums, cfg.WithDatadir) @@ -24,7 +23,6 @@ func APIList(db kv.RoDB, borDb kv.RoDB, eth rpchelper.ApiBackend, txPool txpool. } ethImpl := NewEthAPI(base, db, eth, txPool, mining, cfg.Gascap) erigonImpl := NewErigonAPI(base, db, eth) - starknetImpl := NewStarknetAPI(base, db, starknet, txPool) txpoolImpl := NewTxPoolAPI(base, db, txPool) netImpl := NewNetAPIImpl(eth) debugImpl := NewPrivateDebugAPI(base, db, cfg.Gascap) @@ -93,13 +91,6 @@ func APIList(db kv.RoDB, borDb kv.RoDB, eth rpchelper.ApiBackend, txPool txpool. Service: ErigonAPI(erigonImpl), Version: "1.0", }) - case "starknet": - list = append(list, rpc.API{ - Namespace: "starknet", - Public: true, - Service: StarknetAPI(starknetImpl), - Version: "1.0", - }) case "bor": list = append(list, rpc.API{ Namespace: "bor", diff --git a/cmd/rpcdaemon/commands/starknet_accounts.go b/cmd/rpcdaemon/commands/starknet_accounts.go deleted file mode 100644 index abe0e5c7903..00000000000 --- a/cmd/rpcdaemon/commands/starknet_accounts.go +++ /dev/null @@ -1,39 +0,0 @@ -package commands - -import ( - "context" - "fmt" - - "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/common/hexutil" - "github.com/ledgerwatch/erigon/rpc" - "github.com/ledgerwatch/erigon/turbo/adapter" - "github.com/ledgerwatch/erigon/turbo/rpchelper" -) - -// GetCode implements starknet_getCode. Returns the byte code at a given address (if it's a smart contract). -func (api *StarknetImpl) GetCode(ctx context.Context, address common.Address, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) { - tx, err1 := api.db.BeginRo(ctx) - if err1 != nil { - return nil, fmt.Errorf("getCode cannot open tx: %w", err1) - } - defer tx.Rollback() - blockNumber, _, _, err := rpchelper.GetBlockNumber(blockNrOrHash, tx, api.filters) - if err != nil { - return nil, err - } - - reader := adapter.NewStateReader(tx, blockNumber) - acc, err := reader.ReadAccountData(address) - if acc == nil || err != nil { - return hexutil.Bytes(""), nil - } - res, err := reader.ReadAccountCode(address, acc.Incarnation, acc.CodeHash) - if res == nil || err != nil { - return hexutil.Bytes(""), nil - } - if res == nil { - return hexutil.Bytes(""), nil - } - return res, nil -} diff --git a/cmd/rpcdaemon/commands/starknet_api.go b/cmd/rpcdaemon/commands/starknet_api.go deleted file mode 100644 index ff05cc3419f..00000000000 --- a/cmd/rpcdaemon/commands/starknet_api.go +++ /dev/null @@ -1,35 +0,0 @@ -package commands - -import ( - "context" - - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" - "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" - "github.com/ledgerwatch/erigon/common/hexutil" - "github.com/ledgerwatch/erigon/rpc" - - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon/common" -) - -type StarknetAPI interface { - SendRawTransaction(ctx context.Context, encodedTx hexutil.Bytes) (common.Hash, error) - GetCode(ctx context.Context, address common.Address, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) - Call(ctx context.Context, request StarknetCallRequest, blockNrOrHash rpc.BlockNumberOrHash) ([]string, error) -} - -type StarknetImpl struct { - *BaseAPI - db kv.RoDB - client starknet.CAIROVMClient - txPool txpool.TxpoolClient -} - -func NewStarknetAPI(base *BaseAPI, db kv.RoDB, client starknet.CAIROVMClient, txPool txpool.TxpoolClient) *StarknetImpl { - return &StarknetImpl{ - BaseAPI: base, - db: db, - client: client, - txPool: txPool, - } -} diff --git a/cmd/rpcdaemon/commands/starknet_call.go b/cmd/rpcdaemon/commands/starknet_call.go deleted file mode 100644 index 56533bb72eb..00000000000 --- a/cmd/rpcdaemon/commands/starknet_call.go +++ /dev/null @@ -1,97 +0,0 @@ -package commands - -import ( - "context" - "reflect" - "strings" - - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" - "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/rpc" - "google.golang.org/protobuf/types/known/anypb" - "google.golang.org/protobuf/types/known/wrapperspb" -) - -type StarknetGrpcCallArgs struct { - Inputs string - Address string - Function string - Code string - BlockHash string - BlockNumber int64 - Network string -} - -type StarknetCallRequest struct { - ContractAddress common.Address32 - EntryPointSelector string - CallData []string -} - -func (s StarknetGrpcCallArgs) ToMapAny() (result map[string]*anypb.Any) { - result = make(map[string]*anypb.Any) - - v := reflect.ValueOf(s) - typeOfS := v.Type() - - for i := 0; i < v.NumField(); i++ { - fieldName := strings.ToLower(typeOfS.Field(i).Name) - switch v.Field(i).Kind() { - case reflect.Int64: - result[fieldName], _ = anypb.New(wrapperspb.Int64(v.Field(i).Interface().(int64))) - default: - result[fieldName], _ = anypb.New(wrapperspb.String(v.Field(i).Interface().(string))) - } - } - return result -} - -// Call implements starknet_call. -func (api *StarknetImpl) Call(ctx context.Context, request StarknetCallRequest, blockNrOrHash rpc.BlockNumberOrHash) ([]string, error) { - tx, err := api.db.BeginRo(ctx) - if err != nil { - return nil, err - } - defer tx.Rollback() - - code, err := api.GetCode(ctx, request.ContractAddress.ToCommonAddress(), blockNrOrHash) - if err != nil { - return nil, err - } - - requestParams := &StarknetGrpcCallArgs{ - Inputs: strings.Join(request.CallData, ","), - Address: request.ContractAddress.String(), - Function: request.EntryPointSelector, - Code: code.String(), - } - - if blockNrOrHash.BlockHash != nil { - requestParams.BlockHash = blockNrOrHash.BlockHash.String() - } - - if blockNrOrHash.BlockNumber != nil { - requestParams.BlockNumber = blockNrOrHash.BlockNumber.Int64() - } - - requestParamsMap := requestParams.ToMapAny() - - grpcRequest := &starknet.CallRequest{ - Method: "starknet_call", - Params: requestParamsMap, - } - - response, err := api.client.Call(ctx, grpcRequest) - if err != nil { - return nil, err - } - - result := make([]string, 0, len(response.Result)) - for _, v := range response.Result { - s := wrapperspb.String("") - v.UnmarshalTo(s) - result = append(result, s.GetValue()) - } - - return result, nil -} diff --git a/cmd/rpcdaemon/commands/starknet_send_transaction.go b/cmd/rpcdaemon/commands/starknet_send_transaction.go deleted file mode 100644 index 8bd4b305c34..00000000000 --- a/cmd/rpcdaemon/commands/starknet_send_transaction.go +++ /dev/null @@ -1,51 +0,0 @@ -package commands - -import ( - "bytes" - "context" - "errors" - "fmt" - - txPoolProto "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" - "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/common/hexutil" - "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/rlp" - "github.com/ledgerwatch/log/v3" -) - -var ( - ErrOnlyStarknetTx = errors.New("only support starknet transactions") - ErrOnlyContractDeploy = errors.New("only support contract creation") -) - -// SendRawTransaction deploy new cairo contract -func (api *StarknetImpl) SendRawTransaction(ctx context.Context, encodedTx hexutil.Bytes) (common.Hash, error) { - txn, err := types.DecodeTransaction(rlp.NewStream(bytes.NewReader(encodedTx), uint64(len(encodedTx)))) - - if err != nil { - return common.Hash{}, err - } - - if !txn.IsStarkNet() { - return common.Hash{}, ErrOnlyStarknetTx - } - - if !txn.IsContractDeploy() { - return common.Hash{}, ErrOnlyContractDeploy - } - - hash := txn.Hash() - res, err := api.txPool.Add(ctx, &txPoolProto.AddRequest{RlpTxs: [][]byte{encodedTx}}) - if err != nil { - return common.Hash{}, err - } - - if res.Imported[0] != txPoolProto.ImportResult_SUCCESS { - return hash, fmt.Errorf("%s: %s", txPoolProto.ImportResult_name[int32(res.Imported[0])], res.Errors[0]) - } - - log.Info("Submitted contract creation", "hash", txn.Hash().Hex(), "nonce", txn.GetNonce(), "value", txn.GetValue()) - - return txn.Hash(), nil -} diff --git a/cmd/rpcdaemon/commands/starknet_send_transaction_test.go b/cmd/rpcdaemon/commands/starknet_send_transaction_test.go deleted file mode 100644 index 91f91bda40d..00000000000 --- a/cmd/rpcdaemon/commands/starknet_send_transaction_test.go +++ /dev/null @@ -1,83 +0,0 @@ -package commands_test - -import ( - "bytes" - "testing" - - "github.com/holiman/uint256" - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" - "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" - "github.com/ledgerwatch/erigon-lib/kv/kvcache" - "github.com/ledgerwatch/erigon/cmd/rpcdaemon/commands" - "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" - "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/common/hexutil" - "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/turbo/rpchelper" - "github.com/ledgerwatch/erigon/turbo/snapshotsync" - "github.com/ledgerwatch/erigon/turbo/stages" - "github.com/stretchr/testify/require" -) - -func TestErrorStarknetSendRawTransaction(t *testing.T) { - var cases = []struct { - name string - tx string - error error - }{ - {name: "wrong tx type", tx: generateDynamicFeeTransaction(), error: commands.ErrOnlyStarknetTx}, - {name: "not contract creation", tx: generateStarknetTransaction(), error: commands.ErrOnlyContractDeploy}, - } - - m, require := stages.MockWithTxPool(t), require.New(t) - ctx, conn := rpcdaemontest.CreateTestGrpcConn(t, m) - txPool := txpool.NewTxpoolClient(conn) - starknetClient := starknet.NewCAIROVMClient(conn) - ff := rpchelper.New(ctx, nil, txPool, txpool.NewMiningClient(conn), func() {}) - stateCache := kvcache.New(kvcache.DefaultCoherentConfig) - - for _, tt := range cases { - api := commands.NewStarknetAPI(commands.NewBaseApi(ff, stateCache, snapshotsync.NewBlockReader(), nil, nil, false), m.DB, starknetClient, txPool) - - t.Run(tt.name, func(t *testing.T) { - hex, _ := hexutil.Decode(tt.tx) - - _, err := api.SendRawTransaction(ctx, hex) - - require.ErrorIs(err, tt.error) - }) - } -} - -func generateDynamicFeeTransaction() string { - buf := bytes.NewBuffer(nil) - types.DynamicFeeTransaction{ - CommonTx: types.CommonTx{ - ChainID: new(uint256.Int), - Nonce: 1, - Value: uint256.NewInt(1), - Gas: 1, - }, - Tip: new(uint256.Int), - FeeCap: new(uint256.Int), - }.MarshalBinary(buf) - - return hexutil.Encode(buf.Bytes()) -} - -func generateStarknetTransaction() string { - buf := bytes.NewBuffer(nil) - types.StarknetTransaction{ - CommonTx: types.CommonTx{ - ChainID: new(uint256.Int), - Nonce: 1, - Value: uint256.NewInt(1), - Gas: 1, - To: &common.Address{}, - }, - Tip: new(uint256.Int), - FeeCap: new(uint256.Int), - }.MarshalBinary(buf) - - return hexutil.Encode(buf.Bytes()) -} diff --git a/cmd/rpcdaemon/main.go b/cmd/rpcdaemon/main.go index 9b42fc53a90..8426d72903d 100644 --- a/cmd/rpcdaemon/main.go +++ b/cmd/rpcdaemon/main.go @@ -16,7 +16,7 @@ func main() { cmd.RunE = func(cmd *cobra.Command, args []string) error { ctx := cmd.Context() logger := log.New() - db, borDb, backend, txPool, mining, starknet, stateCache, blockReader, ff, agg, txNums, err := cli.RemoteServices(ctx, *cfg, logger, rootCancel) + db, borDb, backend, txPool, mining, stateCache, blockReader, ff, agg, txNums, err := cli.RemoteServices(ctx, *cfg, logger, rootCancel) if err != nil { log.Error("Could not connect to DB", "err", err) return nil @@ -26,7 +26,7 @@ func main() { defer borDb.Close() } - apiList := commands.APIList(db, borDb, backend, txPool, mining, starknet, ff, stateCache, blockReader, agg, txNums, *cfg) + apiList := commands.APIList(db, borDb, backend, txPool, mining, ff, stateCache, blockReader, agg, txNums, *cfg) if err := cli.StartRpcServer(ctx, *cfg, apiList, nil); err != nil { log.Error(err.Error()) return nil diff --git a/cmd/rpcdaemon/rpcdaemontest/test_util.go b/cmd/rpcdaemon/rpcdaemontest/test_util.go index 819c7979da0..45aaf35b2df 100644 --- a/cmd/rpcdaemon/rpcdaemontest/test_util.go +++ b/cmd/rpcdaemon/rpcdaemontest/test_util.go @@ -11,7 +11,6 @@ import ( "github.com/holiman/uint256" "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/accounts/abi/bind" @@ -296,7 +295,6 @@ func CreateTestGrpcConn(t *testing.T, m *stages.MockSentry) (context.Context, *g remote.RegisterETHBACKENDServer(server, privateapi.NewEthBackendServer(ctx, nil, m.DB, m.Notifications.Events, snapshotsync.NewBlockReader(), nil, nil, nil, false)) txpool.RegisterTxpoolServer(server, m.TxPoolGrpcServer) txpool.RegisterMiningServer(server, privateapi.NewMiningServer(ctx, &IsMiningMock{}, ethashApi)) - starknet.RegisterCAIROVMServer(server, &starknet.UnimplementedCAIROVMServer{}) listener := bufconn.Listen(1024 * 1024) dialer := func() func(context.Context, string) (net.Conn, error) { diff --git a/cmd/rpcdaemon/rpcservices/eth_starknet.go b/cmd/rpcdaemon/rpcservices/eth_starknet.go deleted file mode 100644 index 6dcc02d448d..00000000000 --- a/cmd/rpcdaemon/rpcservices/eth_starknet.go +++ /dev/null @@ -1,31 +0,0 @@ -package rpcservices - -import ( - "github.com/ledgerwatch/erigon-lib/gointerfaces" - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" - types2 "github.com/ledgerwatch/erigon-lib/gointerfaces/types" - "github.com/ledgerwatch/log/v3" - "google.golang.org/grpc" -) - -// StarknetAPIVersion -var StarknetAPIVersion = &types2.VersionReply{Major: 1, Minor: 0, Patch: 0} - -type StarknetService struct { - starknet.CAIROVMClient - log log.Logger - version gointerfaces.Version -} - -func NewStarknetService(cc grpc.ClientConnInterface) *StarknetService { - return &StarknetService{ - CAIROVMClient: starknet.NewCAIROVMClient(cc), - version: gointerfaces.VersionFromProto(StarknetAPIVersion), - log: log.New("remote_service", "starknet"), - } -} - -func (s *StarknetService) EnsureVersionCompatibility() bool { - //TODO: add version check - return true -} diff --git a/cmd/rpcdaemon22/README.md b/cmd/rpcdaemon22/README.md index 50ad1581831..a36ac947bb0 100644 --- a/cmd/rpcdaemon22/README.md +++ b/cmd/rpcdaemon22/README.md @@ -271,8 +271,6 @@ The following table shows the current implementation status of Erigon's RPC daem | erigon_issuance | Yes | Erigon only | | erigon_GetBlockByTimestamp | Yes | Erigon only | | | | | -| starknet_call | Yes | Starknet only | -| | | | | bor_getSnapshot | Yes | Bor only | | bor_getAuthor | Yes | Bor only | | bor_getSnapshotAtHash | Yes | Bor only | diff --git a/cmd/rpcdaemon22/cli/config.go b/cmd/rpcdaemon22/cli/config.go index ee8f21f4487..3ec14940e52 100644 --- a/cmd/rpcdaemon22/cli/config.go +++ b/cmd/rpcdaemon22/cli/config.go @@ -74,7 +74,7 @@ func RootCommand() (*cobra.Command, *httpcfg.HttpCfg) { rootCmd.PersistentFlags().StringSliceVar(&cfg.HttpCORSDomain, "http.corsdomain", []string{}, "Comma separated list of domains from which to accept cross origin requests (browser enforced)") rootCmd.PersistentFlags().StringSliceVar(&cfg.HttpVirtualHost, "http.vhosts", nodecfg.DefaultConfig.HTTPVirtualHosts, "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.") rootCmd.PersistentFlags().BoolVar(&cfg.HttpCompression, "http.compression", true, "Disable http compression") - rootCmd.PersistentFlags().StringSliceVar(&cfg.API, "http.api", []string{"eth", "erigon"}, "API's offered over the HTTP-RPC interface: eth,erigon,web3,net,debug,trace,txpool,db,starknet. Supported methods: https://github.com/ledgerwatch/erigon/tree/devel/cmd/rpcdaemon") + rootCmd.PersistentFlags().StringSliceVar(&cfg.API, "http.api", []string{"eth", "erigon"}, "API's offered over the HTTP-RPC interface: eth,erigon,web3,net,debug,trace,txpool,db. Supported methods: https://github.com/ledgerwatch/erigon/tree/devel/cmd/rpcdaemon") rootCmd.PersistentFlags().Uint64Var(&cfg.Gascap, "rpc.gascap", 50000000, "Sets a cap on gas that can be used in eth_call/estimateGas") rootCmd.PersistentFlags().Uint64Var(&cfg.MaxTraces, "trace.maxtraces", 200, "Sets a limit on traces that can be returned in trace_filter") rootCmd.PersistentFlags().BoolVar(&cfg.WebsocketEnabled, "ws", false, "Enable Websockets") @@ -92,7 +92,6 @@ func RootCommand() (*cobra.Command, *httpcfg.HttpCfg) { rootCmd.PersistentFlags().StringVar(&cfg.GRPCListenAddress, "grpc.addr", nodecfg.DefaultGRPCHost, "GRPC server listening interface") rootCmd.PersistentFlags().IntVar(&cfg.GRPCPort, "grpc.port", nodecfg.DefaultGRPCPort, "GRPC server listening port") rootCmd.PersistentFlags().BoolVar(&cfg.GRPCHealthCheckEnabled, "grpc.healthcheck", false, "Enable GRPC health check") - rootCmd.PersistentFlags().StringVar(&cfg.StarknetGRPCAddress, "starknet.grpc.address", "127.0.0.1:6066", "Starknet GRPC address") rootCmd.PersistentFlags().BoolVar(&cfg.TraceRequests, utils.HTTPTraceFlag.Name, false, "Trace HTTP requests with INFO level") rootCmd.PersistentFlags().DurationVar(&cfg.HTTPTimeouts.ReadTimeout, "http.timeouts.read", rpccfg.DefaultHTTPTimeouts.ReadTimeout, "Maximum duration for reading the entire request, including the body.") rootCmd.PersistentFlags().DurationVar(&cfg.HTTPTimeouts.WriteTimeout, "http.timeouts.write", rpccfg.DefaultHTTPTimeouts.WriteTimeout, "Maximum duration before timing out writes of the response. It is reset whenever a new request's header is read") @@ -213,7 +212,7 @@ func checkDbCompatibility(ctx context.Context, db kv.RoDB) error { func EmbeddedServices(ctx context.Context, erigonDB kv.RoDB, stateCacheCfg kvcache.CoherentConfig, blockReader services.FullBlockReader, snapshots remotedbserver.Snapsthots, ethBackendServer remote.ETHBACKENDServer, txPoolServer txpool.TxpoolServer, miningServer txpool.MiningServer, ) ( - eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, starknet *rpcservices.StarknetService, stateCache kvcache.Cache, ff *rpchelper.Filters, err error, + eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, stateCache kvcache.Cache, ff *rpchelper.Filters, err error, ) { if stateCacheCfg.KeysLimit > 0 { stateCache = kvcache.NewDummy() @@ -243,14 +242,13 @@ func EmbeddedServices(ctx context.Context, erigonDB kv.RoDB, stateCacheCfg kvcac func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, rootCancel context.CancelFunc) ( db kv.RoDB, borDb kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, - starknet *rpcservices.StarknetService, stateCache kvcache.Cache, blockReader services.FullBlockReader, ff *rpchelper.Filters, agg *libstate.Aggregator, txNums *exec22.TxNums, err error) { if !cfg.WithDatadir && cfg.PrivateApiAddr == "" { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("either remote db or local db must be specified") + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, 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 "" @@ -261,10 +259,10 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, limiter := semaphore.NewWeighted(int64(cfg.DBReadConcurrency)) rwKv, err = kv2.NewMDBX(logger).RoTxsLimiter(limiter).Path(cfg.Dirs.Chaindata).Readonly().Open() if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err } if compatErr := checkDbCompatibility(ctx, rwKv); compatErr != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, compatErr + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, compatErr } db = rwKv stateCache = kvcache.NewDummy() @@ -277,14 +275,14 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, // ensure db exist tmpDb, err := kv2.NewMDBX(logger).Path(borDbPath).Label(kv.ConsensusDB).Open() if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err } tmpDb.Close() } log.Trace("Creating consensus db", "path", borDbPath) borKv, err = kv2.NewMDBX(logger).Path(borDbPath).Label(kv.ConsensusDB).Readonly().Open() if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err } // Skip the compatibility check, until we have a schema in erigon-lib borDb = borKv @@ -318,27 +316,27 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, } return nil }); err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, err } if cc == nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, 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, ff, nil, nil, fmt.Errorf("chain config not found in db. Need start erigon at least once on this db") } cfg.Snap.Enabled = cfg.Snap.Enabled || cfg.Sync.UseSnapshots } creds, err := grpcutil.TLS(cfg.TLSCACert, cfg.TLSCertfile, cfg.TLSKeyFile) if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("open tls cert: %w", err) + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("open tls cert: %w", err) } conn, err := grpcutil.Connect(creds, cfg.PrivateApiAddr) if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to execution service privateApi: %w", err) + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to execution service privateApi: %w", err) } kvClient := remote.NewKVClient(conn) remoteKv, err := remotedb.NewRemote(gointerfaces.VersionFromProto(remotedbserver.KvServiceAPIVersion), logger, kvClient).Open() if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to remoteKv: %w", err) + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to remoteKv: %w", err) } subscribeToStateChangesLoop(ctx, kvClient, stateCache) @@ -380,7 +378,7 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, if cfg.TxPoolApiAddr != cfg.PrivateApiAddr { txpoolConn, err = grpcutil.Connect(creds, cfg.TxPoolApiAddr) if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to txpool api: %w", err) + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to txpool api: %w", err) } } @@ -407,23 +405,15 @@ func RemoteServices(ctx context.Context, cfg httpcfg.HttpCfg, logger log.Logger, } }() - if cfg.StarknetGRPCAddress != "" { - starknetConn, err := grpcutil.Connect(creds, cfg.StarknetGRPCAddress) - if err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("could not connect to starknet api: %w", err) - } - starknet = rpcservices.NewStarknetService(starknetConn) - } - ff = rpchelper.New(ctx, eth, txPool, mining, onNewSnapshot) if cfg.WithDatadir { e22Dir := filepath.Join(cfg.DataDir, "erigon22") dir.MustExist(e22Dir) if agg, err = libstate.NewAggregator(e22Dir, ethconfig.HistoryV2AggregationStep); err != nil { - return nil, nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("create aggregator: %w", err) + return nil, nil, nil, nil, nil, nil, nil, ff, nil, nil, fmt.Errorf("create aggregator: %w", err) } } - return db, borDb, eth, txPool, mining, starknet, stateCache, blockReader, ff, agg, txNums, err + return db, borDb, eth, txPool, mining, stateCache, blockReader, ff, agg, txNums, err } func StartRpcServer(ctx context.Context, cfg httpcfg.HttpCfg, rpcAPI []rpc.API, authAPI []rpc.API) error { diff --git a/cmd/rpcdaemon22/commands/daemon.go b/cmd/rpcdaemon22/commands/daemon.go index 32e308b27ad..c648bd309ae 100644 --- a/cmd/rpcdaemon22/commands/daemon.go +++ b/cmd/rpcdaemon22/commands/daemon.go @@ -1,7 +1,6 @@ package commands import ( - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcache" @@ -15,7 +14,7 @@ import ( // APIList describes the list of available RPC apis func APIList(db kv.RoDB, borDb kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, - starknet starknet.CAIROVMClient, filters *rpchelper.Filters, stateCache kvcache.Cache, + filters *rpchelper.Filters, stateCache kvcache.Cache, blockReader services.FullBlockReader, agg *libstate.Aggregator, txNums *exec22.TxNums, cfg httpcfg.HttpCfg) (list []rpc.API) { base := NewBaseApi(filters, stateCache, blockReader, agg, txNums, cfg.WithDatadir) @@ -24,7 +23,6 @@ func APIList(db kv.RoDB, borDb kv.RoDB, eth rpchelper.ApiBackend, txPool txpool. } ethImpl := NewEthAPI(base, db, eth, txPool, mining, cfg.Gascap) erigonImpl := NewErigonAPI(base, db, eth) - starknetImpl := NewStarknetAPI(base, db, starknet, txPool) txpoolImpl := NewTxPoolAPI(base, db, txPool) netImpl := NewNetAPIImpl(eth) debugImpl := NewPrivateDebugAPI(base, db, cfg.Gascap) @@ -93,13 +91,6 @@ func APIList(db kv.RoDB, borDb kv.RoDB, eth rpchelper.ApiBackend, txPool txpool. Service: ErigonAPI(erigonImpl), Version: "1.0", }) - case "starknet": - list = append(list, rpc.API{ - Namespace: "starknet", - Public: true, - Service: StarknetAPI(starknetImpl), - Version: "1.0", - }) case "bor": list = append(list, rpc.API{ Namespace: "bor", diff --git a/cmd/rpcdaemon22/commands/starknet_accounts.go b/cmd/rpcdaemon22/commands/starknet_accounts.go deleted file mode 100644 index abe0e5c7903..00000000000 --- a/cmd/rpcdaemon22/commands/starknet_accounts.go +++ /dev/null @@ -1,39 +0,0 @@ -package commands - -import ( - "context" - "fmt" - - "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/common/hexutil" - "github.com/ledgerwatch/erigon/rpc" - "github.com/ledgerwatch/erigon/turbo/adapter" - "github.com/ledgerwatch/erigon/turbo/rpchelper" -) - -// GetCode implements starknet_getCode. Returns the byte code at a given address (if it's a smart contract). -func (api *StarknetImpl) GetCode(ctx context.Context, address common.Address, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) { - tx, err1 := api.db.BeginRo(ctx) - if err1 != nil { - return nil, fmt.Errorf("getCode cannot open tx: %w", err1) - } - defer tx.Rollback() - blockNumber, _, _, err := rpchelper.GetBlockNumber(blockNrOrHash, tx, api.filters) - if err != nil { - return nil, err - } - - reader := adapter.NewStateReader(tx, blockNumber) - acc, err := reader.ReadAccountData(address) - if acc == nil || err != nil { - return hexutil.Bytes(""), nil - } - res, err := reader.ReadAccountCode(address, acc.Incarnation, acc.CodeHash) - if res == nil || err != nil { - return hexutil.Bytes(""), nil - } - if res == nil { - return hexutil.Bytes(""), nil - } - return res, nil -} diff --git a/cmd/rpcdaemon22/commands/starknet_api.go b/cmd/rpcdaemon22/commands/starknet_api.go deleted file mode 100644 index ff05cc3419f..00000000000 --- a/cmd/rpcdaemon22/commands/starknet_api.go +++ /dev/null @@ -1,35 +0,0 @@ -package commands - -import ( - "context" - - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" - "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" - "github.com/ledgerwatch/erigon/common/hexutil" - "github.com/ledgerwatch/erigon/rpc" - - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon/common" -) - -type StarknetAPI interface { - SendRawTransaction(ctx context.Context, encodedTx hexutil.Bytes) (common.Hash, error) - GetCode(ctx context.Context, address common.Address, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) - Call(ctx context.Context, request StarknetCallRequest, blockNrOrHash rpc.BlockNumberOrHash) ([]string, error) -} - -type StarknetImpl struct { - *BaseAPI - db kv.RoDB - client starknet.CAIROVMClient - txPool txpool.TxpoolClient -} - -func NewStarknetAPI(base *BaseAPI, db kv.RoDB, client starknet.CAIROVMClient, txPool txpool.TxpoolClient) *StarknetImpl { - return &StarknetImpl{ - BaseAPI: base, - db: db, - client: client, - txPool: txPool, - } -} diff --git a/cmd/rpcdaemon22/commands/starknet_call.go b/cmd/rpcdaemon22/commands/starknet_call.go deleted file mode 100644 index 56533bb72eb..00000000000 --- a/cmd/rpcdaemon22/commands/starknet_call.go +++ /dev/null @@ -1,97 +0,0 @@ -package commands - -import ( - "context" - "reflect" - "strings" - - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" - "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/rpc" - "google.golang.org/protobuf/types/known/anypb" - "google.golang.org/protobuf/types/known/wrapperspb" -) - -type StarknetGrpcCallArgs struct { - Inputs string - Address string - Function string - Code string - BlockHash string - BlockNumber int64 - Network string -} - -type StarknetCallRequest struct { - ContractAddress common.Address32 - EntryPointSelector string - CallData []string -} - -func (s StarknetGrpcCallArgs) ToMapAny() (result map[string]*anypb.Any) { - result = make(map[string]*anypb.Any) - - v := reflect.ValueOf(s) - typeOfS := v.Type() - - for i := 0; i < v.NumField(); i++ { - fieldName := strings.ToLower(typeOfS.Field(i).Name) - switch v.Field(i).Kind() { - case reflect.Int64: - result[fieldName], _ = anypb.New(wrapperspb.Int64(v.Field(i).Interface().(int64))) - default: - result[fieldName], _ = anypb.New(wrapperspb.String(v.Field(i).Interface().(string))) - } - } - return result -} - -// Call implements starknet_call. -func (api *StarknetImpl) Call(ctx context.Context, request StarknetCallRequest, blockNrOrHash rpc.BlockNumberOrHash) ([]string, error) { - tx, err := api.db.BeginRo(ctx) - if err != nil { - return nil, err - } - defer tx.Rollback() - - code, err := api.GetCode(ctx, request.ContractAddress.ToCommonAddress(), blockNrOrHash) - if err != nil { - return nil, err - } - - requestParams := &StarknetGrpcCallArgs{ - Inputs: strings.Join(request.CallData, ","), - Address: request.ContractAddress.String(), - Function: request.EntryPointSelector, - Code: code.String(), - } - - if blockNrOrHash.BlockHash != nil { - requestParams.BlockHash = blockNrOrHash.BlockHash.String() - } - - if blockNrOrHash.BlockNumber != nil { - requestParams.BlockNumber = blockNrOrHash.BlockNumber.Int64() - } - - requestParamsMap := requestParams.ToMapAny() - - grpcRequest := &starknet.CallRequest{ - Method: "starknet_call", - Params: requestParamsMap, - } - - response, err := api.client.Call(ctx, grpcRequest) - if err != nil { - return nil, err - } - - result := make([]string, 0, len(response.Result)) - for _, v := range response.Result { - s := wrapperspb.String("") - v.UnmarshalTo(s) - result = append(result, s.GetValue()) - } - - return result, nil -} diff --git a/cmd/rpcdaemon22/commands/starknet_send_transaction.go b/cmd/rpcdaemon22/commands/starknet_send_transaction.go deleted file mode 100644 index 8bd4b305c34..00000000000 --- a/cmd/rpcdaemon22/commands/starknet_send_transaction.go +++ /dev/null @@ -1,51 +0,0 @@ -package commands - -import ( - "bytes" - "context" - "errors" - "fmt" - - txPoolProto "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" - "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/common/hexutil" - "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/rlp" - "github.com/ledgerwatch/log/v3" -) - -var ( - ErrOnlyStarknetTx = errors.New("only support starknet transactions") - ErrOnlyContractDeploy = errors.New("only support contract creation") -) - -// SendRawTransaction deploy new cairo contract -func (api *StarknetImpl) SendRawTransaction(ctx context.Context, encodedTx hexutil.Bytes) (common.Hash, error) { - txn, err := types.DecodeTransaction(rlp.NewStream(bytes.NewReader(encodedTx), uint64(len(encodedTx)))) - - if err != nil { - return common.Hash{}, err - } - - if !txn.IsStarkNet() { - return common.Hash{}, ErrOnlyStarknetTx - } - - if !txn.IsContractDeploy() { - return common.Hash{}, ErrOnlyContractDeploy - } - - hash := txn.Hash() - res, err := api.txPool.Add(ctx, &txPoolProto.AddRequest{RlpTxs: [][]byte{encodedTx}}) - if err != nil { - return common.Hash{}, err - } - - if res.Imported[0] != txPoolProto.ImportResult_SUCCESS { - return hash, fmt.Errorf("%s: %s", txPoolProto.ImportResult_name[int32(res.Imported[0])], res.Errors[0]) - } - - log.Info("Submitted contract creation", "hash", txn.Hash().Hex(), "nonce", txn.GetNonce(), "value", txn.GetValue()) - - return txn.Hash(), nil -} diff --git a/cmd/rpcdaemon22/commands/starknet_send_transaction_test.go b/cmd/rpcdaemon22/commands/starknet_send_transaction_test.go deleted file mode 100644 index 4e8eb3979e5..00000000000 --- a/cmd/rpcdaemon22/commands/starknet_send_transaction_test.go +++ /dev/null @@ -1,83 +0,0 @@ -package commands_test - -import ( - "bytes" - "testing" - - "github.com/holiman/uint256" - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" - "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" - "github.com/ledgerwatch/erigon-lib/kv/kvcache" - "github.com/ledgerwatch/erigon/cmd/rpcdaemon22/commands" - "github.com/ledgerwatch/erigon/cmd/rpcdaemon22/rpcdaemontest" - "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/common/hexutil" - "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/turbo/rpchelper" - "github.com/ledgerwatch/erigon/turbo/snapshotsync" - "github.com/ledgerwatch/erigon/turbo/stages" - "github.com/stretchr/testify/require" -) - -func TestErrorStarknetSendRawTransaction(t *testing.T) { - var cases = []struct { - name string - tx string - error error - }{ - {name: "wrong tx type", tx: generateDynamicFeeTransaction(), error: commands.ErrOnlyStarknetTx}, - {name: "not contract creation", tx: generateStarknetTransaction(), error: commands.ErrOnlyContractDeploy}, - } - - m, require := stages.MockWithTxPool(t), require.New(t) - ctx, conn := rpcdaemontest.CreateTestGrpcConn(t, m) - txPool := txpool.NewTxpoolClient(conn) - starknetClient := starknet.NewCAIROVMClient(conn) - ff := rpchelper.New(ctx, nil, txPool, txpool.NewMiningClient(conn), func() {}) - stateCache := kvcache.New(kvcache.DefaultCoherentConfig) - - for _, tt := range cases { - api := commands.NewStarknetAPI(commands.NewBaseApi(ff, stateCache, snapshotsync.NewBlockReader(), nil, nil, false), m.DB, starknetClient, txPool) - - t.Run(tt.name, func(t *testing.T) { - hex, _ := hexutil.Decode(tt.tx) - - _, err := api.SendRawTransaction(ctx, hex) - - require.ErrorIs(err, tt.error) - }) - } -} - -func generateDynamicFeeTransaction() string { - buf := bytes.NewBuffer(nil) - types.DynamicFeeTransaction{ - CommonTx: types.CommonTx{ - ChainID: new(uint256.Int), - Nonce: 1, - Value: uint256.NewInt(1), - Gas: 1, - }, - Tip: new(uint256.Int), - FeeCap: new(uint256.Int), - }.MarshalBinary(buf) - - return hexutil.Encode(buf.Bytes()) -} - -func generateStarknetTransaction() string { - buf := bytes.NewBuffer(nil) - types.StarknetTransaction{ - CommonTx: types.CommonTx{ - ChainID: new(uint256.Int), - Nonce: 1, - Value: uint256.NewInt(1), - Gas: 1, - To: &common.Address{}, - }, - Tip: new(uint256.Int), - FeeCap: new(uint256.Int), - }.MarshalBinary(buf) - - return hexutil.Encode(buf.Bytes()) -} diff --git a/cmd/rpcdaemon22/main.go b/cmd/rpcdaemon22/main.go index bbb96273990..81279b0d00d 100644 --- a/cmd/rpcdaemon22/main.go +++ b/cmd/rpcdaemon22/main.go @@ -16,7 +16,7 @@ func main() { cmd.RunE = func(cmd *cobra.Command, args []string) error { ctx := cmd.Context() logger := log.New() - db, borDb, backend, txPool, mining, starknet, stateCache, blockReader, ff, agg, txNums, err := cli.RemoteServices(ctx, *cfg, logger, rootCancel) + db, borDb, backend, txPool, mining, stateCache, blockReader, ff, agg, txNums, err := cli.RemoteServices(ctx, *cfg, logger, rootCancel) if err != nil { log.Error("Could not connect to DB", "err", err) return nil @@ -26,7 +26,7 @@ func main() { defer borDb.Close() } - apiList := commands.APIList(db, borDb, backend, txPool, mining, starknet, ff, stateCache, blockReader, agg, txNums, *cfg) + apiList := commands.APIList(db, borDb, backend, txPool, mining, ff, stateCache, blockReader, agg, txNums, *cfg) if err := cli.StartRpcServer(ctx, *cfg, apiList, nil); err != nil { log.Error(err.Error()) return nil diff --git a/cmd/rpcdaemon22/rpcdaemontest/test_util.go b/cmd/rpcdaemon22/rpcdaemontest/test_util.go index e50dbc6817c..9b864d40f52 100644 --- a/cmd/rpcdaemon22/rpcdaemontest/test_util.go +++ b/cmd/rpcdaemon22/rpcdaemontest/test_util.go @@ -11,7 +11,6 @@ import ( "github.com/holiman/uint256" "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/accounts/abi/bind" @@ -296,7 +295,6 @@ func CreateTestGrpcConn(t *testing.T, m *stages.MockSentry) (context.Context, *g remote.RegisterETHBACKENDServer(server, privateapi.NewEthBackendServer(ctx, nil, m.DB, m.Notifications.Events, snapshotsync.NewBlockReader(), nil, nil, nil, false)) txpool.RegisterTxpoolServer(server, m.TxPoolGrpcServer) txpool.RegisterMiningServer(server, privateapi.NewMiningServer(ctx, &IsMiningMock{}, ethashApi)) - starknet.RegisterCAIROVMServer(server, &starknet.UnimplementedCAIROVMServer{}) listener := bufconn.Listen(1024 * 1024) dialer := func() func(context.Context, string) (net.Conn, error) { diff --git a/cmd/rpcdaemon22/rpcservices/eth_starknet.go b/cmd/rpcdaemon22/rpcservices/eth_starknet.go deleted file mode 100644 index 6dcc02d448d..00000000000 --- a/cmd/rpcdaemon22/rpcservices/eth_starknet.go +++ /dev/null @@ -1,31 +0,0 @@ -package rpcservices - -import ( - "github.com/ledgerwatch/erigon-lib/gointerfaces" - "github.com/ledgerwatch/erigon-lib/gointerfaces/starknet" - types2 "github.com/ledgerwatch/erigon-lib/gointerfaces/types" - "github.com/ledgerwatch/log/v3" - "google.golang.org/grpc" -) - -// StarknetAPIVersion -var StarknetAPIVersion = &types2.VersionReply{Major: 1, Minor: 0, Patch: 0} - -type StarknetService struct { - starknet.CAIROVMClient - log log.Logger - version gointerfaces.Version -} - -func NewStarknetService(cc grpc.ClientConnInterface) *StarknetService { - return &StarknetService{ - CAIROVMClient: starknet.NewCAIROVMClient(cc), - version: gointerfaces.VersionFromProto(StarknetAPIVersion), - log: log.New("remote_service", "starknet"), - } -} - -func (s *StarknetService) EnsureVersionCompatibility() bool { - //TODO: add version check - return true -} diff --git a/cmd/starknet/README.md b/cmd/starknet/README.md deleted file mode 100644 index c203f7cf519..00000000000 --- a/cmd/starknet/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# How to deploy cairo smart contract - -1. Compile cairo smart contract - - `starknet-compile contract.cairo --output contract_compiled.json --abi contract_abi.json` - - -2. Generate payload for `starknet_sendRawTransaction` PRC method - - ``` - go run ./cmd/starknet/main.go generateRawTx - -c ./cairo/contract.json - -o /cairo/send_raw_transaction - -s salt_test - -g 11452296 - -k b9a8b19ff082a7f4b943fcbe0da6cce6ce2c860090f05d031f463412ab534e95 - ``` - - Command syntax: `go run main.go generateRawTx --help` - - -3. Use command output in RPC call - -```json -"params":["0x03f86583127ed80180800180019637623232363136323639323233613230356235643764c080a0b44c2f4e18ca27e621171da5cf3a0c875c0749c7b998ec2759974280d987143aa04f01823122d972baa1a03b113535d9f9057fd9366fd8770e766b91f835b88ea6"], -``` diff --git a/cmd/starknet/cmd/generate_raw_tx.go b/cmd/starknet/cmd/generate_raw_tx.go deleted file mode 100644 index c74d384e9f6..00000000000 --- a/cmd/starknet/cmd/generate_raw_tx.go +++ /dev/null @@ -1,125 +0,0 @@ -package cmd - -import ( - "bytes" - "fmt" - "os" - "path/filepath" - "strings" - - "github.com/ledgerwatch/erigon-lib/kv" - kv2 "github.com/ledgerwatch/erigon-lib/kv/mdbx" - "github.com/ledgerwatch/erigon/cmd/starknet/services" - "github.com/ledgerwatch/erigon/common/paths" - "github.com/ledgerwatch/log/v3" - "github.com/spf13/cobra" -) - -const ( - DefaultGas = 11_000_000 - DefaultNonce = 0 -) - -type Flags struct { - Contract string - Salt string - Gas uint64 - Nonce uint64 - PrivateKey string - DataDir string - Chaindata string - Output string -} - -var generateRawTxCmd = &cobra.Command{ - Use: "generateRawTx", - Short: "Generate data for starknet_sendRawTransaction RPC method", -} - -func init() { - generateRawTxCmd, flags := config() - generateRawTxCmd.RunE = func(cmd *cobra.Command, args []string) error { - logger := log.New() - db, err := db(flags, logger) - if err != nil { - return err - } - defer db.Close() - - rawTxGenerator := services.NewRawTxGenerator(flags.PrivateKey) - - fs := os.DirFS("/") - buf := bytes.NewBuffer(nil) - - config := &services.Config{ - ContractFileName: strings.Trim(flags.Contract, "/"), - Salt: []byte(flags.Salt), - Gas: flags.Gas, - Nonce: flags.Nonce, - } - - err = rawTxGenerator.CreateFromFS(cmd.Context(), fs, db, config, buf) - if err != nil { - return err - } - - if flags.Output != "" { - outputFile, err := os.Create(flags.Output) - if err != nil { - return fmt.Errorf("could not create output file: %v", flags.Output) - } - defer outputFile.Close() - - _, err = outputFile.WriteString(buf.String()) - if err != nil { - return fmt.Errorf("could not write to output file: %v", flags.Output) - } - } else { - fmt.Println(buf.String()) - } - - return err - } - - rootCmd.AddCommand(generateRawTxCmd) -} - -func config() (*cobra.Command, *Flags) { - flags := &Flags{} - generateRawTxCmd.PersistentFlags().StringVar(&flags.Contract, "contract", "", "Path to compiled cairo contract in JSON format") - generateRawTxCmd.MarkPersistentFlagRequired("contract") - - generateRawTxCmd.PersistentFlags().StringVar(&flags.Salt, "salt", "", "Cairo contract address salt") - generateRawTxCmd.MarkPersistentFlagRequired("salt") - - generateRawTxCmd.PersistentFlags().Uint64Var(&flags.Gas, "gas", DefaultGas, "Gas") - - generateRawTxCmd.PersistentFlags().Uint64Var(&flags.Nonce, "nonce", DefaultNonce, "Nonce") - - generateRawTxCmd.PersistentFlags().StringVar(&flags.PrivateKey, "private_key", "", "Private key") - generateRawTxCmd.MarkPersistentFlagRequired("private_key") - - generateRawTxCmd.PersistentFlags().StringVar(&flags.DataDir, "datadir", "", "path to Erigon working directory") - - generateRawTxCmd.PersistentFlags().StringVarP(&flags.Output, "output", "o", "", "Path to file where sign transaction will be saved. Print to stdout if empty.") - - generateRawTxCmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) error { - if flags.DataDir == "" { - flags.DataDir = paths.DefaultDataDir() - } - if flags.Chaindata == "" { - flags.Chaindata = filepath.Join(flags.DataDir, "chaindata") - } - return nil - } - - return generateRawTxCmd, flags -} - -func db(flags *Flags, logger log.Logger) (kv.RoDB, error) { - rwKv, err := kv2.NewMDBX(logger).Path(flags.Chaindata).Readonly().Open() - if err != nil { - return nil, err - } - return rwKv, nil -} diff --git a/cmd/starknet/cmd/root.go b/cmd/starknet/cmd/root.go deleted file mode 100644 index a7d1d3ab357..00000000000 --- a/cmd/starknet/cmd/root.go +++ /dev/null @@ -1,19 +0,0 @@ -package cmd - -import ( - "github.com/spf13/cobra" -) - -// rootCmd represents the base command when called without any subcommands -var rootCmd = &cobra.Command{ - Use: "starknet", - Short: "Starknet cli commands", -} - -func Execute() { - cobra.CheckErr(rootCmd.Execute()) -} - -func init() { - cobra.OnInitialize() -} diff --git a/cmd/starknet/main.go b/cmd/starknet/main.go deleted file mode 100644 index 47a140a703e..00000000000 --- a/cmd/starknet/main.go +++ /dev/null @@ -1,7 +0,0 @@ -package main - -import "github.com/ledgerwatch/erigon/cmd/starknet/cmd" - -func main() { - cmd.Execute() -} diff --git a/cmd/starknet/services/raw_tx_generator.go b/cmd/starknet/services/raw_tx_generator.go deleted file mode 100644 index c637bcbf149..00000000000 --- a/cmd/starknet/services/raw_tx_generator.go +++ /dev/null @@ -1,137 +0,0 @@ -package services - -import ( - "bytes" - "context" - "crypto/ecdsa" - "encoding/hex" - "errors" - "fmt" - "io/fs" - - "github.com/holiman/uint256" - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/common/hexutil" - "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/crypto" - "github.com/ledgerwatch/erigon/eth/stagedsync/stages" - "github.com/ledgerwatch/erigon/params" - "github.com/ledgerwatch/erigon/rlp" - "github.com/ledgerwatch/erigon/turbo/adapter" -) - -var ( - ErrReadContract = errors.New("contract read error") - ErrInvalidPrivateKey = errors.New("invalid private key") -) - -type Config struct { - ContractFileName string - Salt []byte - Gas uint64 - Nonce uint64 -} - -func NewRawTxGenerator(privateKey string) *RawTxGenerator { - return &RawTxGenerator{ - privateKey: privateKey, - } -} - -type RawTxGenerator struct { - privateKey string -} - -func (g RawTxGenerator) CreateFromFS(ctx context.Context, fileSystem fs.FS, db kv.RoDB, config *Config, writer *bytes.Buffer) error { - privateKey, err := crypto.HexToECDSA(g.privateKey) - if err != nil { - return ErrInvalidPrivateKey - } - - address, err := addressFromPrivateKey(privateKey) - if err != nil { - return err - } - - nonce, err := getNonce(ctx, db, address, config.Nonce) - if err != nil { - return err - } - - contract, err := fs.ReadFile(fileSystem, config.ContractFileName) - if err != nil { - return ErrReadContract - } - - enc := make([]byte, hex.EncodedLen(len(contract))) - hex.Encode(enc, contract) - - tx := types.StarknetTransaction{ - CommonTx: types.CommonTx{ - Nonce: nonce + 1, - Value: uint256.NewInt(1), - Gas: config.Gas, - Data: enc, - }, - Salt: config.Salt, - FeeCap: uint256.NewInt(875000000), - Tip: uint256.NewInt(100000), - } - - sighash := tx.SigningHash(params.FermionChainConfig.ChainID) - - signature, _ := crypto.Sign(sighash[:], privateKey) - signer := types.MakeSigner(params.FermionChainConfig, 1) - - signedTx, err := tx.WithSignature(*signer, signature) - if err != nil { - return err - } - - err = signedTx.(rlp.Encoder).EncodeRLP(writer) - signedTxRlp := writer.Bytes() - writer.Reset() - writer.WriteString(hexutil.Encode(signedTxRlp)) - - if err != nil { - return errors.New("can not save signed tx") - } - - return nil -} - -func addressFromPrivateKey(privateKey *ecdsa.PrivateKey) (common.Address, error) { - publicKey := privateKey.Public() - publicKeyECDSA, _ := publicKey.(*ecdsa.PublicKey) - return crypto.PubkeyToAddress(*publicKeyECDSA), nil -} - -func getNonce(ctx context.Context, db kv.RoDB, address common.Address, configNonce uint64) (uint64, error) { - if configNonce != 0 { - return configNonce, nil - } - - var nonce uint64 = 0 - - tx, err := db.BeginRo(ctx) - if err != nil { - return nonce, fmt.Errorf("cannot open tx: %w", err) - } - defer tx.Rollback() - blockNumber, err := stages.GetStageProgress(tx, stages.Execution) - if err != nil { - return nonce, err - } - reader := adapter.NewStateReader(tx, blockNumber) - acc, err := reader.ReadAccountData(address) - if err != nil { - return nonce, err - } - - if acc == nil { - return 0, nil - } - - return acc.Nonce, nil -} diff --git a/cmd/starknet/services/raw_tx_generator_test.go b/cmd/starknet/services/raw_tx_generator_test.go deleted file mode 100644 index 89619e531ce..00000000000 --- a/cmd/starknet/services/raw_tx_generator_test.go +++ /dev/null @@ -1,98 +0,0 @@ -package services_test - -import ( - "bytes" - "context" - "encoding/hex" - "testing" - "testing/fstest" - - "github.com/ledgerwatch/erigon-lib/kv/memdb" - "github.com/ledgerwatch/erigon/cmd/starknet/services" - - "github.com/ledgerwatch/erigon/crypto" -) - -func TestCreate(t *testing.T) { - privateKey := "26e86e45f6fc45ec6e2ecd128cec80fa1d1505e5507dcd2ae58c3130a7a97b48" - - var cases = []struct { - name string - privateKey string - config *services.Config - want string - error error - }{ - {name: "invalid private key", privateKey: "abc", config: &services.Config{ - ContractFileName: "not_exist.json", - }, error: services.ErrInvalidPrivateKey}, - {name: "contract file not found", privateKey: generatePrivateKey(t), config: &services.Config{ - ContractFileName: "not_exist.json", - }, error: services.ErrReadContract}, - {name: "success", privateKey: privateKey, config: &services.Config{ - ContractFileName: "contract_test.json", - Salt: []byte("contract_address_salt"), - Gas: 1, - Nonce: 0, - }, want: "0xb88503f88283127ed801830186a084342770c0018001963762323236313632363932323361323035623564376495636f6e74726163745f616464726573735f73616c74c080a08b88467d0a9a6cba87ec6c2ad9e7399d12a1b6f7f5b951bdd2c5c2ea08b76134a0472e1b37ca5f87c9c38690718c6b2b9db1a3d5398dc664fc4e158ab60d02d64b"}, - } - - fs := fstest.MapFS{ - "contract_test.json": {Data: []byte("{\"abi\": []}")}, - } - - for _, tt := range cases { - t.Run(tt.name, func(t *testing.T) { - rawTxGenerator := services.NewRawTxGenerator(tt.privateKey) - - ctx := context.Background() - buf := bytes.NewBuffer(nil) - db := memdb.NewTestDB(t) - - err := rawTxGenerator.CreateFromFS(ctx, fs, db, tt.config, buf) - - if tt.error == nil { - assertNoError(t, err) - - got := buf.String() - - if got != tt.want { - t.Errorf("got %q not equals want %q", got, tt.want) - } - } else { - assertError(t, err, tt.error) - } - }) - } -} - -func generatePrivateKey(t testing.TB) string { - t.Helper() - - privateKey, err := crypto.GenerateKey() - if err != nil { - t.Error(err) - } - - return hex.EncodeToString(crypto.FromECDSA(privateKey)) -} - -func assertNoError(t testing.TB, got error) { - t.Helper() - - if got != nil { - t.Fatal("got an error but didn't want one") - } -} - -func assertError(t testing.TB, got error, want error) { - t.Helper() - - if got == nil { - t.Fatal("didn't get an error but wanted one") - } - - if got != want { - t.Errorf("got %q, want %q", got, want) - } -} diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index d6b35b86fab..ce3314a14c0 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -401,12 +401,6 @@ var ( Usage: "Bug for bug compatibility with OE for trace_ routines", } - StarknetGrpcAddressFlag = cli.StringFlag{ - Name: "starknet.grpc.address", - Usage: "Starknet GRPC address", - Value: "127.0.0.1:6066", - } - TevmFlag = cli.BoolFlag{ Name: "experimental.tevm", Usage: "Enables Transpiled EVM experiment", diff --git a/eth/backend.go b/eth/backend.go index 67ae8c2f9c7..847372a5a9b 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -583,7 +583,7 @@ func New(stack *node.Node, config *ethconfig.Config, logger log.Logger) (*Ethere } // start HTTP API httpRpcCfg := stack.Config().Http - ethRpcClient, txPoolRpcClient, miningRpcClient, starkNetRpcClient, stateCache, ff, txNums, err := cli.EmbeddedServices(ctx, chainKv, httpRpcCfg.StateCache, blockReader, allSnapshots, ethBackendRPC, backend.txPool2GrpcServer, miningRPC) + ethRpcClient, txPoolRpcClient, miningRpcClient, stateCache, ff, txNums, err := cli.EmbeddedServices(ctx, chainKv, httpRpcCfg.StateCache, blockReader, allSnapshots, ethBackendRPC, backend.txPool2GrpcServer, miningRPC) if err != nil { return nil, err } @@ -592,7 +592,7 @@ func New(stack *node.Node, config *ethconfig.Config, logger log.Logger) (*Ethere if casted, ok := backend.engine.(*bor.Bor); ok { borDb = casted.DB } - apiList := commands.APIList(chainKv, borDb, ethRpcClient, txPoolRpcClient, miningRpcClient, starkNetRpcClient, ff, stateCache, blockReader, agg, txNums, httpRpcCfg) + apiList := commands.APIList(chainKv, borDb, ethRpcClient, txPoolRpcClient, miningRpcClient, ff, stateCache, blockReader, agg, txNums, httpRpcCfg) authApiList := commands.AuthAPIList(chainKv, ethRpcClient, txPoolRpcClient, miningRpcClient, ff, stateCache, blockReader, httpRpcCfg) go func() { if err := cli.StartRpcServer(ctx, httpRpcCfg, apiList, authApiList); err != nil { diff --git a/go.mod b/go.mod index 38a45b7d5e5..d102cf48ac1 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,8 @@ module github.com/ledgerwatch/erigon go 1.18 require ( - github.com/ledgerwatch/erigon-lib v0.0.0-20220901132642-987fb4a7e183 + github.com/ledgerwatch/erigon-lib v0.0.0-20220901134100-d9648b4c6910 + github.com/ledgerwatch/erigon-snapshot v1.0.1-0.20220809023834-6309df4da4b1 github.com/ledgerwatch/log/v3 v3.4.1 github.com/ledgerwatch/secp256k1 v1.0.0 @@ -172,3 +173,4 @@ require ( modernc.org/strutil v1.1.1 // indirect modernc.org/token v1.0.0 // indirect ) + diff --git a/go.sum b/go.sum index 38564766265..4c4bd8f9306 100644 --- a/go.sum +++ b/go.sum @@ -394,8 +394,8 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758 h1:0D5M2HQSGD3PYPwICLl+/9oulQauOuETfgFvhBDffs0= 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/ledgerwatch/erigon-lib v0.0.0-20220901132642-987fb4a7e183 h1:lMZjBlO41w2sLzwjNrEIHvnZRGGPkbxcIkf/mWrYQZc= -github.com/ledgerwatch/erigon-lib v0.0.0-20220901132642-987fb4a7e183/go.mod h1:A7Z9E318VhlTpqQEYOzZd+NGYLZUr8O83Fr7gOtPOhA= +github.com/ledgerwatch/erigon-lib v0.0.0-20220901134100-d9648b4c6910 h1:pghubeS+pUb1IG+G4dPxjop8Hu+GNdwgVPe+IVjP+1Y= +github.com/ledgerwatch/erigon-lib v0.0.0-20220901134100-d9648b4c6910/go.mod h1:MDcgtsBGy246lbY/3UWjig9NRZ6Iiv5D7FPNZ4KHZEw= github.com/ledgerwatch/erigon-snapshot v1.0.1-0.20220809023834-6309df4da4b1 h1:qRIJu6cs6fbI8L52DSdPF27j3sOrEriXz1zQSuQvYpA= github.com/ledgerwatch/erigon-snapshot v1.0.1-0.20220809023834-6309df4da4b1/go.mod h1:3AuPxZc85jkehh/HA9h8gabv5MSi3kb/ddtzBsTVJFo= github.com/ledgerwatch/log/v3 v3.4.1 h1:/xGwlVulXnsO9Uq+tzaExc8OWmXXHU0dnLalpbnY5Bc= diff --git a/turbo/cli/default_flags.go b/turbo/cli/default_flags.go index 8caee7497b0..ca7de39585a 100644 --- a/turbo/cli/default_flags.go +++ b/turbo/cli/default_flags.go @@ -67,7 +67,6 @@ var DefaultFlags = []cli.Flag{ utils.RpcAccessListFlag, utils.RpcTraceCompatFlag, utils.RpcGasCapFlag, - utils.StarknetGrpcAddressFlag, utils.TevmFlag, utils.MemoryOverlayFlag, utils.TxpoolApiAddrFlag, diff --git a/turbo/cli/flags.go b/turbo/cli/flags.go index a69f416a8dc..b055d99ed4a 100644 --- a/turbo/cli/flags.go +++ b/turbo/cli/flags.go @@ -359,7 +359,6 @@ func setEmbeddedRpcDaemon(ctx *cli.Context, cfg *nodecfg.Config) { Gascap: ctx.GlobalUint64(utils.RpcGasCapFlag.Name), MaxTraces: ctx.GlobalUint64(utils.TraceMaxtracesFlag.Name), TraceCompatibility: ctx.GlobalBool(utils.RpcTraceCompatFlag.Name), - StarknetGRPCAddress: ctx.GlobalString(utils.StarknetGrpcAddressFlag.Name), TevmEnabled: ctx.GlobalBool(utils.TevmFlag.Name), TxPoolApiAddr: ctx.GlobalString(utils.TxpoolApiAddrFlag.Name),