Skip to content

Commit f24a372

Browse files
fix tests and rebase
1 parent dd8a4dc commit f24a372

File tree

10 files changed

+146
-245
lines changed

10 files changed

+146
-245
lines changed

Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ generate:
3535
mockery --dir=storage --name=TransactionIndexer --output=storage/mocks
3636
mockery --dir=storage --name=TraceIndexer --output=storage/mocks
3737
mockery --all --dir=services/ingestion --output=services/ingestion/mocks
38-
mockery --dir=models --name=Engine --output=models/mocks
3938

4039
.PHONY: ci
4140
ci: check-tidy test e2e-test

api/server.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818
"strings"
1919
"time"
2020

21+
"github.com/onflow/go-ethereum/core"
22+
2123
"github.com/onflow/flow-go/module/component"
2224
"github.com/onflow/flow-go/module/irrecoverable"
2325

bootstrap/bootstrap.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"github.com/hashicorp/go-multierror"
1919
"github.com/onflow/flow-evm-gateway/api"
2020
"github.com/onflow/flow-evm-gateway/config"
21-
"github.com/onflow/flow-go-sdk/crypto"
2221
"github.com/onflow/flow-go/cmd"
2322
"github.com/onflow/flow-go/fvm/environment"
2423
"github.com/onflow/flow-go/fvm/evm"
@@ -34,7 +33,6 @@ import (
3433
errs "github.com/onflow/flow-evm-gateway/models/errors"
3534
"github.com/onflow/flow-evm-gateway/services/ingestion"
3635
"github.com/onflow/flow-evm-gateway/services/replayer"
37-
"github.com/onflow/flow-evm-gateway/services/signer"
3836
pebble2 "github.com/onflow/flow-evm-gateway/storage/pebble"
3937
)
4038

@@ -92,8 +90,8 @@ type EVMGatewayNodeBuilder struct {
9290
Client *requester.CrossSporkClient
9391
Storages *Storages
9492
// Signer is used for signing flow transactions
95-
Signer crypto.Signer
9693
Publishers *Publishers
94+
Keystore *requester.KeyStoreComponent
9795
}
9896

9997
func (fnb *EVMGatewayNodeBuilder) Build() (cmd.Node, error) {
@@ -209,7 +207,7 @@ func (fnb *EVMGatewayNodeBuilder) Initialize() error {
209207
func (fnb *EVMGatewayNodeBuilder) LoadComponentsAndModules() {
210208
fnb.initPublishers()
211209

212-
fnb.Component("Transaction Signer", fnb.initSigner)
210+
fnb.Component("Key Store", fnb.initKeyStore)
213211
fnb.Component("API Server", fnb.apiServerComponent)
214212
fnb.Component("Event Ingestion Engine", fnb.eventIngestionEngineComponent)
215213
fnb.Component("Metrics Server", fnb.metricsServerComponent)
@@ -238,6 +236,7 @@ func (fnb *EVMGatewayNodeBuilder) apiServerComponent(cfg config.Config) (module.
238236
fnb.Client,
239237
fnb.Publishers.Transaction,
240238
log,
239+
cfg,
241240
)
242241

243242
blocksProvider := replayer.NewBlocksProvider(
@@ -251,11 +250,11 @@ func (fnb *EVMGatewayNodeBuilder) apiServerComponent(cfg config.Config) (module.
251250
blocksProvider,
252251
fnb.Client,
253252
cfg,
254-
fnb.Signer,
255253
log,
256254
fnb.Storages.Blocks,
257255
txPool,
258256
fnb.Metrics,
257+
fnb.Keystore.KeyStore,
259258
)
260259
if err != nil {
261260
return nil, fmt.Errorf("failed to create EVM requester: %w", err)
@@ -393,6 +392,7 @@ func (fnb *EVMGatewayNodeBuilder) eventIngestionEngineComponent(cfg config.Confi
393392
fnb.Logger,
394393
fnb.Client,
395394
chainID,
395+
fnb.Keystore,
396396
latestCadenceHeight,
397397
)
398398

@@ -542,10 +542,12 @@ func (fnb *EVMGatewayNodeBuilder) initStorage() error {
542542

543543
return nil
544544
}
545-
func (fnb *EVMGatewayNodeBuilder) initSigner(config config.Config) (module.ReadyDoneAware, error) {
546-
sig := signer.NewSigner(fnb.Logger, config)
547-
fnb.Signer = sig
548-
return sig, nil
545+
func (fnb *EVMGatewayNodeBuilder) initKeyStore(cfg config.Config) (module.ReadyDoneAware, error) {
546+
keystore := requester.NewKeyStoreComponent(fnb.Logger, cfg, fnb.Client)
547+
548+
fnb.Keystore = keystore
549+
550+
return keystore, nil
549551
}
550552

551553
func (fnb *EVMGatewayNodeBuilder) initPublishers() {

bootstrap/utils.go

Lines changed: 0 additions & 40 deletions
This file was deleted.

cmd/run/cmd.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package run
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"math/big"
76
"os"

models/mocks/Engine.go

Lines changed: 0 additions & 91 deletions
This file was deleted.

services/ingestion/engine_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ func TestSerialBlockIngestion(t *testing.T) {
6969
return eventsChan
7070
})
7171

72+
blocksPublisher := models.NewPublisher[*models.Block](zerolog.Nop())
73+
blocksPublisher.Start(ictx)
74+
logsPublisher := models.NewPublisher[[]*gethTypes.Log](zerolog.Nop())
75+
logsPublisher.Start(ictx)
76+
7277
engine := NewEventIngestionEngine(
7378
subscriber,
7479
replayer.NewBlocksProvider(blocks, flowGo.Emulator, nil),
@@ -78,8 +83,8 @@ func TestSerialBlockIngestion(t *testing.T) {
7883
receipts,
7984
transactions,
8085
traces,
81-
models.NewPublisher[*models.Block](zerolog.Nop()),
82-
models.NewPublisher[[]*gethTypes.Log](zerolog.Nop()),
86+
blocksPublisher,
87+
logsPublisher,
8388
zerolog.Nop(),
8489
metrics.NopCollector,
8590
defaultReplayerConfig(),
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package requester
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/onflow/flow-evm-gateway/config"
8+
"github.com/onflow/flow-go-sdk/access"
9+
"github.com/onflow/flow-go-sdk/crypto"
10+
"github.com/onflow/flow-go/module/component"
11+
"github.com/onflow/flow-go/module/irrecoverable"
12+
"github.com/rs/zerolog"
13+
)
14+
15+
type KeyStoreComponent struct {
16+
*KeyStore
17+
18+
log zerolog.Logger
19+
config config.Config
20+
client access.Client
21+
startupCompleted chan struct{}
22+
}
23+
24+
var _ component.Component = (*KeyStoreComponent)(nil)
25+
26+
func NewKeyStoreComponent(log zerolog.Logger, config config.Config, client access.Client) *KeyStoreComponent {
27+
ks := &KeyStoreComponent{
28+
log: log,
29+
config: config,
30+
client: client,
31+
startupCompleted: make(chan struct{}),
32+
}
33+
34+
return ks
35+
}
36+
37+
func (k *KeyStoreComponent) Start(ctx irrecoverable.SignalerContext) {
38+
defer close(k.startupCompleted)
39+
40+
k.log.Info().Msg("starting key store component")
41+
42+
accountKeys := make([]*AccountKey, 0)
43+
account, err := k.client.GetAccount(ctx, k.config.COAAddress)
44+
if err != nil {
45+
ctx.Throw(fmt.Errorf(
46+
"failed to get signer info account for address: %s, with: %w",
47+
k.config.COAAddress,
48+
err,
49+
))
50+
51+
return
52+
}
53+
signer, err := createSigner(ctx, k.config, k.log)
54+
55+
if err != nil {
56+
ctx.Throw(err)
57+
58+
return
59+
}
60+
for _, key := range account.Keys {
61+
accountKeys = append(accountKeys, &AccountKey{
62+
AccountKey: *key,
63+
Address: k.config.COAAddress,
64+
Signer: signer,
65+
})
66+
}
67+
68+
k.KeyStore = NewKeyStore(accountKeys)
69+
70+
}
71+
72+
func (k *KeyStoreComponent) Ready() <-chan struct{} {
73+
ready := make(chan struct{})
74+
75+
go func() {
76+
<-k.startupCompleted
77+
close(ready)
78+
}()
79+
80+
return ready
81+
}
82+
83+
func (k *KeyStoreComponent) Done() <-chan struct{} {
84+
done := make(chan struct{})
85+
86+
go func() {
87+
<-k.startupCompleted
88+
89+
// This is where we would close the KMS client connection,
90+
// but it currently does not have a close method
91+
92+
close(done)
93+
}()
94+
95+
return done
96+
}
97+
98+
// createSigner creates the signer based on either a single coa key being
99+
// provided and using a simple in-memory signer, or a Cloud KMS key being
100+
// provided and using a Cloud KMS signer.
101+
func createSigner(
102+
ctx context.Context,
103+
config config.Config,
104+
logger zerolog.Logger,
105+
) (crypto.Signer, error) {
106+
var signer crypto.Signer
107+
var err error
108+
switch {
109+
case config.COAKey != nil:
110+
signer, err = crypto.NewInMemorySigner(config.COAKey, crypto.SHA3_256)
111+
case config.COACloudKMSKey != nil:
112+
signer, err = NewKMSKeySigner(
113+
ctx,
114+
*config.COACloudKMSKey,
115+
logger,
116+
)
117+
default:
118+
return nil, fmt.Errorf("must provide either single COA / Cloud KMS key")
119+
}
120+
if err != nil {
121+
return nil, fmt.Errorf("failed to create a COA signer: %w", err)
122+
}
123+
124+
return signer, nil
125+
}

0 commit comments

Comments
 (0)