Skip to content

Commit d00343d

Browse files
Merge branch 'master' into jp/support-private-registry
2 parents 7c63aa0 + b4dac1e commit d00343d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2907
-629
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ generate-mocks: install-mock-generators
203203
mockery --name 'API' --dir="./engine/protocol" --case=underscore --output="./engine/protocol/mock" --outpkg="mock"
204204
mockery --name '.*' --dir="./engine/access/state_stream" --case=underscore --output="./engine/access/state_stream/mock" --outpkg="mock"
205205
mockery --name 'BlockTracker' --dir="./engine/access/subscription" --case=underscore --output="./engine/access/subscription/mock" --outpkg="mock"
206-
mockery --name 'DataProvider' --dir="./engine/access/rest/websockets/data_provider" --case=underscore --output="./engine/access/rest/websockets/data_provider/mock" --outpkg="mock"
206+
mockery --name 'DataProvider' --dir="./engine/access/rest/websockets/data_providers" --case=underscore --output="./engine/access/rest/websockets/data_providers/mock" --outpkg="mock"
207+
mockery --name 'DataProviderFactory' --dir="./engine/access/rest/websockets/data_providers" --case=underscore --output="./engine/access/rest/websockets/data_providers/mock" --outpkg="mock"
207208
mockery --name 'ExecutionDataTracker' --dir="./engine/access/subscription" --case=underscore --output="./engine/access/subscription/mock" --outpkg="mock"
208209
mockery --name 'ConnectionFactory' --dir="./engine/access/rpc/connection" --case=underscore --output="./engine/access/rpc/connection/mock" --outpkg="mock"
209210
mockery --name 'Communicator' --dir="./engine/access/rpc/backend" --case=underscore --output="./engine/access/rpc/backend/mock" --outpkg="mock"

access/handler.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,7 +1066,7 @@ func (h *Handler) SubscribeBlocksFromStartBlockID(request *access.SubscribeBlock
10661066
}
10671067

10681068
sub := h.api.SubscribeBlocksFromStartBlockID(stream.Context(), startBlockID, blockStatus)
1069-
return subscription.HandleSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
1069+
return subscription.HandleRPCSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
10701070
}
10711071

10721072
// SubscribeBlocksFromStartHeight handles subscription requests for blocks started from block height.
@@ -1093,7 +1093,7 @@ func (h *Handler) SubscribeBlocksFromStartHeight(request *access.SubscribeBlocks
10931093
}
10941094

10951095
sub := h.api.SubscribeBlocksFromStartHeight(stream.Context(), request.GetStartBlockHeight(), blockStatus)
1096-
return subscription.HandleSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
1096+
return subscription.HandleRPCSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
10971097
}
10981098

10991099
// SubscribeBlocksFromLatest handles subscription requests for blocks started from latest sealed block.
@@ -1120,7 +1120,7 @@ func (h *Handler) SubscribeBlocksFromLatest(request *access.SubscribeBlocksFromL
11201120
}
11211121

11221122
sub := h.api.SubscribeBlocksFromLatest(stream.Context(), blockStatus)
1123-
return subscription.HandleSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
1123+
return subscription.HandleRPCSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
11241124
}
11251125

11261126
// handleBlocksResponse handles the subscription to block updates and sends
@@ -1179,7 +1179,7 @@ func (h *Handler) SubscribeBlockHeadersFromStartBlockID(request *access.Subscrib
11791179
}
11801180

11811181
sub := h.api.SubscribeBlockHeadersFromStartBlockID(stream.Context(), startBlockID, blockStatus)
1182-
return subscription.HandleSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
1182+
return subscription.HandleRPCSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
11831183
}
11841184

11851185
// SubscribeBlockHeadersFromStartHeight handles subscription requests for block headers started from block height.
@@ -1206,7 +1206,7 @@ func (h *Handler) SubscribeBlockHeadersFromStartHeight(request *access.Subscribe
12061206
}
12071207

12081208
sub := h.api.SubscribeBlockHeadersFromStartHeight(stream.Context(), request.GetStartBlockHeight(), blockStatus)
1209-
return subscription.HandleSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
1209+
return subscription.HandleRPCSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
12101210
}
12111211

12121212
// SubscribeBlockHeadersFromLatest handles subscription requests for block headers started from latest sealed block.
@@ -1233,7 +1233,7 @@ func (h *Handler) SubscribeBlockHeadersFromLatest(request *access.SubscribeBlock
12331233
}
12341234

12351235
sub := h.api.SubscribeBlockHeadersFromLatest(stream.Context(), blockStatus)
1236-
return subscription.HandleSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
1236+
return subscription.HandleRPCSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
12371237
}
12381238

12391239
// handleBlockHeadersResponse handles the subscription to block updates and sends
@@ -1293,7 +1293,7 @@ func (h *Handler) SubscribeBlockDigestsFromStartBlockID(request *access.Subscrib
12931293
}
12941294

12951295
sub := h.api.SubscribeBlockDigestsFromStartBlockID(stream.Context(), startBlockID, blockStatus)
1296-
return subscription.HandleSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
1296+
return subscription.HandleRPCSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
12971297
}
12981298

12991299
// SubscribeBlockDigestsFromStartHeight handles subscription requests for lightweight blocks started from block height.
@@ -1320,7 +1320,7 @@ func (h *Handler) SubscribeBlockDigestsFromStartHeight(request *access.Subscribe
13201320
}
13211321

13221322
sub := h.api.SubscribeBlockDigestsFromStartHeight(stream.Context(), request.GetStartBlockHeight(), blockStatus)
1323-
return subscription.HandleSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
1323+
return subscription.HandleRPCSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
13241324
}
13251325

13261326
// SubscribeBlockDigestsFromLatest handles subscription requests for lightweight block started from latest sealed block.
@@ -1347,7 +1347,7 @@ func (h *Handler) SubscribeBlockDigestsFromLatest(request *access.SubscribeBlock
13471347
}
13481348

13491349
sub := h.api.SubscribeBlockDigestsFromLatest(stream.Context(), blockStatus)
1350-
return subscription.HandleSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
1350+
return subscription.HandleRPCSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
13511351
}
13521352

13531353
// handleBlockDigestsResponse handles the subscription to block updates and sends
@@ -1433,7 +1433,7 @@ func (h *Handler) SendAndSubscribeTransactionStatuses(
14331433
sub := h.api.SubscribeTransactionStatuses(ctx, &tx, request.GetEventEncodingVersion())
14341434

14351435
messageIndex := counters.NewMonotonousCounter(0)
1436-
return subscription.HandleSubscription(sub, func(txResults []*TransactionResult) error {
1436+
return subscription.HandleRPCSubscription(sub, func(txResults []*TransactionResult) error {
14371437
for i := range txResults {
14381438
index := messageIndex.Value()
14391439
if ok := messageIndex.Set(index + 1); !ok {

cmd/scaffold.go

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ import (
3333
"github.com/onflow/flow-go/cmd/build"
3434
"github.com/onflow/flow-go/config"
3535
"github.com/onflow/flow-go/consensus/hotstuff/persister"
36-
"github.com/onflow/flow-go/fvm"
37-
"github.com/onflow/flow-go/fvm/environment"
36+
"github.com/onflow/flow-go/fvm/initialize"
3837
"github.com/onflow/flow-go/model/flow"
3938
"github.com/onflow/flow-go/model/flow/filter"
4039
"github.com/onflow/flow-go/module"
@@ -1522,32 +1521,9 @@ func (fnb *FlowNodeBuilder) initLocal() error {
15221521
}
15231522

15241523
func (fnb *FlowNodeBuilder) initFvmOptions() {
1525-
blockFinder := environment.NewBlockFinder(fnb.Storage.Headers)
1526-
vmOpts := []fvm.Option{
1527-
fvm.WithChain(fnb.RootChainID.Chain()),
1528-
fvm.WithBlocks(blockFinder),
1529-
fvm.WithAccountStorageLimit(true),
1530-
}
1531-
switch fnb.RootChainID {
1532-
case flow.Testnet,
1533-
flow.Sandboxnet,
1534-
flow.Previewnet,
1535-
flow.Mainnet:
1536-
vmOpts = append(vmOpts,
1537-
fvm.WithTransactionFeesEnabled(true),
1538-
)
1539-
}
1540-
switch fnb.RootChainID {
1541-
case flow.Testnet,
1542-
flow.Sandboxnet,
1543-
flow.Previewnet,
1544-
flow.Localnet,
1545-
flow.Benchnet:
1546-
vmOpts = append(vmOpts,
1547-
fvm.WithContractDeploymentRestricted(false),
1548-
)
1549-
}
1550-
fnb.FvmOptions = vmOpts
1524+
fnb.FvmOptions = initialize.InitFvmOptions(
1525+
fnb.RootChainID, fnb.Storage.Headers,
1526+
)
15511527
}
15521528

15531529
// handleModules initializes the given module.

cmd/util/cmd/root.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ import (
4141
"github.com/onflow/flow-go/cmd/util/cmd/snapshot"
4242
system_addresses "github.com/onflow/flow-go/cmd/util/cmd/system-addresses"
4343
truncate_database "github.com/onflow/flow-go/cmd/util/cmd/truncate-database"
44+
verify_evm_offchain_replay "github.com/onflow/flow-go/cmd/util/cmd/verify-evm-offchain-replay"
45+
verify_execution_result "github.com/onflow/flow-go/cmd/util/cmd/verify_execution_result"
4446
"github.com/onflow/flow-go/cmd/util/cmd/version"
4547
"github.com/onflow/flow-go/module/profiler"
4648
)
@@ -126,6 +128,8 @@ func addCommands() {
126128
rootCmd.AddCommand(debug_script.Cmd)
127129
rootCmd.AddCommand(generate_authorization_fixes.Cmd)
128130
rootCmd.AddCommand(evm_state_exporter.Cmd)
131+
rootCmd.AddCommand(verify_execution_result.Cmd)
132+
rootCmd.AddCommand(verify_evm_offchain_replay.Cmd)
129133
}
130134

131135
func initConfig() {
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package verify
2+
3+
import (
4+
"fmt"
5+
"strconv"
6+
"strings"
7+
8+
"github.com/rs/zerolog/log"
9+
"github.com/spf13/cobra"
10+
11+
"github.com/onflow/flow-go/model/flow"
12+
)
13+
14+
var (
15+
flagDatadir string
16+
flagExecutionDataDir string
17+
flagEVMStateGobDir string
18+
flagChain string
19+
flagFromTo string
20+
flagSaveEveryNBlocks uint64
21+
)
22+
23+
// usage example
24+
//
25+
// ./util verify-evm-offchain-replay --chain flow-testnet --from_to 211176670-211177000
26+
// --datadir /var/flow/data/protocol --execution_data_dir /var/flow/data/execution_data
27+
var Cmd = &cobra.Command{
28+
Use: "verify-evm-offchain-replay",
29+
Short: "verify evm offchain replay with execution data",
30+
Run: run,
31+
}
32+
33+
func init() {
34+
Cmd.Flags().StringVar(&flagChain, "chain", "", "Chain name")
35+
_ = Cmd.MarkFlagRequired("chain")
36+
37+
Cmd.Flags().StringVar(&flagDatadir, "datadir", "/var/flow/data/protocol",
38+
"directory that stores the protocol state")
39+
40+
Cmd.Flags().StringVar(&flagExecutionDataDir, "execution_data_dir", "/var/flow/data/execution_data",
41+
"directory that stores the execution state")
42+
43+
Cmd.Flags().StringVar(&flagFromTo, "from_to", "",
44+
"the flow height range to verify blocks, i.e, 1-1000, 1000-2000, 2000-3000, etc.")
45+
46+
Cmd.Flags().StringVar(&flagEVMStateGobDir, "evm_state_gob_dir", "/var/flow/data/evm_state_gob",
47+
"directory that stores the evm state gob files as checkpoint")
48+
49+
Cmd.Flags().Uint64Var(&flagSaveEveryNBlocks, "save_every", uint64(1_000_000),
50+
"save the evm state gob files every N blocks")
51+
}
52+
53+
func run(*cobra.Command, []string) {
54+
chainID := flow.ChainID(flagChain)
55+
56+
from, to, err := parseFromTo(flagFromTo)
57+
if err != nil {
58+
log.Fatal().Err(err).Msg("could not parse from_to")
59+
}
60+
61+
err = Verify(log.Logger, from, to, chainID, flagDatadir, flagExecutionDataDir, flagEVMStateGobDir, flagSaveEveryNBlocks)
62+
if err != nil {
63+
log.Fatal().Err(err).Msg("could not verify height")
64+
}
65+
}
66+
67+
func parseFromTo(fromTo string) (from, to uint64, err error) {
68+
parts := strings.Split(fromTo, "-")
69+
if len(parts) != 2 {
70+
return 0, 0, fmt.Errorf("invalid format: expected 'from-to', got '%s'", fromTo)
71+
}
72+
73+
from, err = strconv.ParseUint(strings.TrimSpace(parts[0]), 10, 64)
74+
if err != nil {
75+
return 0, 0, fmt.Errorf("invalid 'from' value: %w", err)
76+
}
77+
78+
to, err = strconv.ParseUint(strings.TrimSpace(parts[1]), 10, 64)
79+
if err != nil {
80+
return 0, 0, fmt.Errorf("invalid 'to' value: %w", err)
81+
}
82+
83+
if from > to {
84+
return 0, 0, fmt.Errorf("'from' value (%d) must be less than or equal to 'to' value (%d)", from, to)
85+
}
86+
87+
return from, to, nil
88+
}

0 commit comments

Comments
 (0)