Skip to content

Commit adab4dd

Browse files
add baseline rewards to event (#5)
* add baseline rewards to event * pass flag to process on different chains * add abis * store chain and only most recently processed block * updated postgres * pass chains in settings, update config to store all chain-related info * move event definition * WIP process chains simultaneously, write events to same topic * all for single shutdown command across all channels * indicate chain in logs * add chain id to blocks table * use error groups * sql fix * fix migration to drop unneeded rows * set chain id to polygon * types * One chain per process. Extreme Helm configuration * Fix some Helm references --------- Co-authored-by: Dylan Moreland <[email protected]>
1 parent 5c160f6 commit adab4dd

28 files changed

+7896
-155
lines changed

abi/baseline_rewards.json

+636
Large diffs are not rendered by default.

abi/tokenMainnet.json

+732
Large diffs are not rendered by default.

abi/tokenMumbai.json

+1,075
Large diffs are not rendered by default.

abi/tokenPolygon.json

+1,089
Large diffs are not rendered by default.

charts/contract-event-processor/abi/Ethereum_Dimo.json

+732
Large diffs are not rendered by default.

charts/contract-event-processor/abi/Mumbai_OmidV2.json

+1,075
Large diffs are not rendered by default.

charts/contract-event-processor/abi/Polygon_Dimo.json

+1,089
Large diffs are not rendered by default.

charts/contract-event-processor/abi/VehicleId.json

+1,117
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: {{ include "contract-event-processor.fullname" . }}-abi-config-map
5+
namespace: {{ .Release.Namespace }}
6+
labels:
7+
{{- include "contract-event-processor.labels" . | nindent 4 }}
8+
data:
9+
{{ tpl (.Files.Glob "abi/*").AsConfig $ | indent 2 }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: {{ include "contract-event-processor.fullname" . }}-config-config-map
5+
namespace: {{ .Release.Namespace }}
6+
labels:
7+
{{ include "contract-event-processor.fullname" . | indent 4 }}
8+
data:
9+
config.yaml: {{ .Values.config | toYaml | quote }}

charts/contract-event-processor/templates/deployment.yaml

+13
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,19 @@ spec:
7070
port: mon-http
7171
resources:
7272
{{- toYaml .Values.resources | nindent 12 }}
73+
volumeMounts:
74+
- name: abi
75+
mountPath: /abi
76+
- name: config
77+
mountPath: /config.yaml
78+
subPath: config.yaml
79+
volumes:
80+
- name: abi
81+
configMap:
82+
name: {{ include "contract-event-processor.fullname" . }}-abi-config-map
83+
- name: config
84+
configMap:
85+
name: {{ include "contract-event-processor.fullname" . }}-config-config-map
7386
{{- with .Values.nodeSelector }}
7487
nodeSelector:
7588
{{- toYaml . | nindent 8 }}

charts/contract-event-processor/templates/secret.yaml

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ spec:
1717
- remoteRef:
1818
key: {{ .Release.Namespace }}/contract_event/db/pass
1919
secretKey: DB_PASSWORD
20+
- remoteRef:
21+
key: {{ .Release.Namespace }}/contract_event/rpc_url/{{ .Values.config.chain }}
22+
secretKey: BLOCKCHAIN_RPC_URL
2023
secretStoreRef:
2124
kind: ClusterSecretStore
2225
name: aws-secretsmanager-secret-store

charts/contract-event-processor/values-prod.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ env:
99
ENVIRONMENT: prod
1010
KAFKA_BROKERS: kafka-prod-dimo-kafka-kafka-brokers:9092
1111
BLOCK_CONFIRMATIONS: 5
12+
config:
13+
chain: polygon
14+
contracts:
15+
- address: '0xe261d618a959afffd53168cd07d12e37b26761db'
16+
abi: Polygon_Dimo.json
17+
- address: '0xba5738a18d83d41847dffbdc6101d37c69c9b0cf'
18+
abi: VehicleId.json
1219
ingress:
1320
enabled: false
1421
resources:

charts/contract-event-processor/values.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ securityContext:
2323
cronJob:
2424
enabled: false
2525
schedule: 0 0 * * 0
26+
config:
27+
chain: mumbai
28+
contracts:
29+
- address: '0x80ee7ec4493a1d7975ab900f94db25ba7c688201'
30+
abi: Mumbai_OmidV2.json
31+
- address: '0x90c4d6113ec88dd4bdf12f26db2b3998fd13a144'
32+
abi: VehicleId.json
2633
env:
2734
ENVIRONMENT: dev
2835
MONITORING_PORT: 8888

cmd/contract-event-processor/main.go

+33-23
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package main
22

33
import (
4-
"fmt"
4+
"context"
5+
"flag"
56
"log"
67
"math/big"
78
"os"
8-
"strconv"
9+
"os/signal"
10+
"syscall"
911

1012
"github.com/DIMO-Network/contract-event-processor/internal/config"
1113
"github.com/DIMO-Network/contract-event-processor/internal/services"
14+
"golang.org/x/sync/errgroup"
1215

1316
"github.com/DIMO-Network/shared"
1417
"github.com/Shopify/sarama"
@@ -19,13 +22,18 @@ import (
1922
)
2023

2124
func main() {
22-
logger := zerolog.New(os.Stdout).With().Timestamp().Str("app", "event-stream-processor").Logger()
25+
logger := zerolog.New(os.Stdout).With().Timestamp().Str("app", "contract-stream-processor").Logger()
2326
settings, err := shared.LoadConfig[config.Settings]("settings.yaml")
2427
if err != nil {
25-
logger.Fatal().Err(err)
28+
logger.Fatal().Err(err).Msg("couldn't load settings")
2629
}
2730

28-
var blockNum *big.Int
31+
ctx, cancel := context.WithCancel(context.Background())
32+
var group errgroup.Group
33+
34+
limit := flag.Int("limit", -1, "limit number of block iterations during development")
35+
flag.Parse()
36+
2937
if len(os.Args) > 1 {
3038
switch subCommand := os.Args[1]; subCommand {
3139
case "migrate":
@@ -38,19 +46,10 @@ func main() {
3846
}
3947
migrateDatabase(logger, &settings, command)
4048
return
41-
case "override":
42-
if len(os.Args) > 2 {
43-
n, err := strconv.Atoi(os.Args[2])
44-
if err != nil {
45-
logger.Fatal().Err(err)
46-
}
47-
blockNum = big.NewInt(int64(n))
48-
49-
}
5049
}
5150
}
5251

53-
monApp := serveMonitoring(settings.MonitoringPort, &logger)
52+
group.Go(func() error { return serveMonitoring(ctx, settings.MonitoringPort, &logger) })
5453

5554
kafkaClient, err := services.StartKafkaStream(settings)
5655
if err != nil {
@@ -63,19 +62,29 @@ func main() {
6362
log.Fatal(err)
6463
}
6564

66-
listener, err := services.NewBlockListener(settings, logger, producer)
65+
listener, err := services.NewBlockListener(settings, logger, producer, "config.yaml")
6766
if err != nil {
68-
log.Fatal(err)
67+
logger.Fatal().Err(err).Msg("Failed creating block listener.")
6968
}
7069

71-
listener.CompileRegistryMap(fmt.Sprintf("config-%s.yaml", settings.Environment))
72-
listener.ChainIndexer(blockNum)
70+
listener.Limit = *limit
71+
if listener.Limit > 0 {
72+
listener.DevTest = true
73+
}
74+
75+
chainChan := make(chan *big.Int)
76+
group.Go(func() error { return listener.PollNewBlocks(ctx, listener.StartBlock, chainChan) })
77+
group.Go(func() error { return listener.ProcessBlocks(ctx, chainChan) })
78+
79+
sc := make(chan os.Signal, 1)
80+
signal.Notify(sc, os.Interrupt, syscall.SIGTERM)
81+
<-sc
82+
cancel()
83+
_ = group.Wait()
7384

74-
// TODO(elffjs): Log this.
75-
_ = monApp.Shutdown()
7685
}
7786

78-
func serveMonitoring(port string, logger *zerolog.Logger) *fiber.App {
87+
func serveMonitoring(ctx context.Context, port string, logger *zerolog.Logger) error {
7988
monApp := fiber.New(fiber.Config{DisableStartupMessage: true})
8089

8190
// Health check.
@@ -89,6 +98,7 @@ func serveMonitoring(port string, logger *zerolog.Logger) *fiber.App {
8998
}()
9099

91100
logger.Info().Str("port", port).Msg("Started monitoring web server.")
101+
<-ctx.Done()
92102

93-
return monApp
103+
return monApp.Shutdown()
94104
}

config-dev.yaml

+32
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,35 @@
11
contracts:
22
- address: 0x90C4D6113Ec88dd4BDf12f26DB2b3998fd13A144
3+
chain: polygon
34
abi: abi/VehicleId.json
5+
- address: 0xE261D618a959aFfFd53168Cd07D12E37B26761db
6+
chain: polygon
7+
abi: abi/tokenPolygon.json
8+
- address: 0x5fab9761d60419c9eeebe3915a8fa1ed7e8d2e1b
9+
chain: ethereum
10+
abi: abi/tokenMainnet.json
11+
- address: 0x80Ee7ec4493A1d7975ab900F94dB25ba7C688201
12+
chain: mumbai
13+
abi: abi/tokenMumbai.json
14+
15+
chains:
16+
- chain: polygon
17+
rpc_url: wss://polygon-mainnet.g.alchemy.com/v2/
18+
startBlock:
19+
contracts:
20+
- address: 0x90C4D6113Ec88dd4BDf12f26DB2b3998fd13A144
21+
abi: abi/VehicleId.json
22+
- address: 0xE261D618a959aFfFd53168Cd07D12E37B26761db
23+
abi: abi/tokenPolygon.json
24+
- chain: ethereum
25+
rpc_url: wss://eth-mainnet.ws.alchemyapi.io/v2/
26+
startBlock:
27+
contracts:
28+
- address: 0x5fab9761d60419c9eeebe3915a8fa1ed7e8d2e1b
29+
abi: abi/tokenMainnet.json
30+
- chain: mumbai
31+
rpc_url: wss://polygon-mumbai.g.alchemy.com/v2/
32+
startBlock:
33+
contracts:
34+
- address: 0x80Ee7ec4493A1d7975ab900F94dB25ba7C688201
35+
abi: abi/tokenMumbai.json

config-prod.yaml

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
11
contracts:
2-
- address: 0xbA5738a18d83D41847dfFbDC6101d37C69c9B0cF
2+
- address: 0x90C4D6113Ec88dd4BDf12f26DB2b3998fd13A144
33
abi: abi/VehicleId.json
4+
- address: 0xE261D618a959aFfFd53168Cd07D12E37B26761db
5+
chain: polygon
6+
abi: abi/tokenPolygon.json
7+
- address: 0x5fab9761d60419c9eeebe3915a8fa1ed7e8d2e1b
8+
chain: ethereum
9+
abi: abi/tokenMainnet.json
10+
- address: 0x80Ee7ec4493A1d7975ab900F94dB25ba7C688201
11+
chain: mumbai
12+
abi: abi/tokenMumbai.json

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ require (
1313
github.com/volatiletech/null/v8 v8.1.2
1414
github.com/volatiletech/sqlboiler/v4 v4.14.0
1515
github.com/volatiletech/strmangle v0.0.4
16+
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4
1617
gopkg.in/yaml.v3 v3.0.1
1718
)
1819

internal/config/settings.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@ package config
33
import "github.com/DIMO-Network/shared/db"
44

55
type Settings struct {
6-
Environment string `yaml:"ENVIRONMENT"`
7-
EthereumRPCURL string `yaml:"ETHEREUM_RPC_URL"`
8-
BlockConfirmations int `yaml:"BLOCK_CONFIRMATIONS"`
6+
Environment string `yaml:"ENVIRONMENT"`
7+
8+
BlockConfirmations int64 `yaml:"BLOCK_CONFIRMATIONS"`
99
ContractEventTopic string `yaml:"CONTRACT_EVENT_TOPIC"`
1010

1111
KafkaBrokers string `yaml:"KAFKA_BROKERS"`
1212

1313
DB db.Settings `yaml:"DB"`
1414

1515
MonitoringPort string `yaml:"MONITORING_PORT"`
16+
17+
BlockchainRPCURL string `yaml:"BLOCKCHAIN_RPC_URL"`
18+
19+
APIKey string `yaml:"ALCHEMY_API_KEY"`
1620
}

0 commit comments

Comments
 (0)