Skip to content

Commit b310d99

Browse files
committed
fix: event listening changes
1 parent 61f4140 commit b310d99

File tree

22 files changed

+1250
-232
lines changed

22 files changed

+1250
-232
lines changed

cmd/tss/dataprovider.go

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"context"
54
"fmt"
65
"os"
76
"path/filepath"
@@ -11,9 +10,40 @@ import (
1110

1211
"github.com/rs/zerolog"
1312

13+
"github.com/pushchain/push-chain-node/universalClient/pushcore"
1414
"github.com/pushchain/push-chain-node/x/uvalidator/types"
1515
)
1616

17+
// PushCoreDataProvider implements DataProvider using pushcore.Client to connect to the blockchain.
18+
type PushCoreDataProvider struct {
19+
client *pushcore.Client
20+
logger zerolog.Logger
21+
}
22+
23+
// NewPushCoreDataProvider creates a new data provider using an existing pushcore.Client.
24+
// The caller is responsible for closing the client.
25+
func NewPushCoreDataProvider(client *pushcore.Client, logger zerolog.Logger) *PushCoreDataProvider {
26+
return &PushCoreDataProvider{
27+
client: client,
28+
logger: logger,
29+
}
30+
}
31+
32+
// GetLatestBlockNum returns the latest block number from the blockchain.
33+
func (p *PushCoreDataProvider) GetLatestBlockNum() (uint64, error) {
34+
return p.client.GetLatestBlockNum()
35+
}
36+
37+
// GetUniversalValidators returns all universal validators from the blockchain.
38+
func (p *PushCoreDataProvider) GetUniversalValidators() ([]*types.UniversalValidator, error) {
39+
return p.client.GetUniversalValidators()
40+
}
41+
42+
// GetCurrentTSSKeyId returns the current TSS key ID from the blockchain.
43+
func (p *PushCoreDataProvider) GetCurrentTSSKeyId() (string, error) {
44+
return p.client.GetCurrentTSSKeyId()
45+
}
46+
1747
// StaticPushChainDataProvider implements PushChainDataProvider for demo/testing.
1848
// It reads validator information from the shared node registry file.
1949
type StaticPushChainDataProvider struct {
@@ -32,13 +62,13 @@ func NewStaticPushChainDataProvider(validatorAddress string, logger zerolog.Logg
3262
// GetLatestBlockNum returns the latest block number.
3363
// For demo purposes, we return current time + 11 to ensure events created with current time
3464
// are immediately eligible for processing (GetPendingEvents requires events to be 10 blocks behind).
35-
func (p *StaticPushChainDataProvider) GetLatestBlockNum(ctx context.Context) (uint64, error) {
65+
func (p *StaticPushChainDataProvider) GetLatestBlockNum() (uint64, error) {
3666
return uint64(time.Now().Unix()) + 11, nil
3767
}
3868

3969
// GetUniversalValidators returns all universal validators.
40-
func (p *StaticPushChainDataProvider) GetUniversalValidators(ctx context.Context) ([]*types.UniversalValidator, error) {
41-
// Read nodes from shared registry file - already returns UniversalValidator
70+
func (p *StaticPushChainDataProvider) GetUniversalValidators() ([]*types.UniversalValidator, error) {
71+
// Read nodes from shared registry file
4272
nodes, err := readNodeRegistry(p.logger)
4373
if err != nil {
4474
return nil, fmt.Errorf("failed to read node registry: %w", err)
@@ -68,7 +98,7 @@ func (p *StaticPushChainDataProvider) GetUniversalValidators(ctx context.Context
6898
// GetCurrentTSSKeyId returns the current TSS key ID.
6999
// Checks the latest created keyshare file across all valid nodes.
70100
// New nodes might not have a keyId yet, so we check all nodes and return the latest one found.
71-
func (p *StaticPushChainDataProvider) GetCurrentTSSKeyId(ctx context.Context) (string, error) {
101+
func (p *StaticPushChainDataProvider) GetCurrentTSSKeyId() (string, error) {
72102
// Read all nodes from registry
73103
nodes, err := readNodeRegistry(p.logger)
74104
if err != nil {

cmd/tss/main.go

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,13 @@ import (
1818
"gorm.io/driver/sqlite"
1919
"gorm.io/gorm"
2020

21+
"github.com/pushchain/push-chain-node/universalClient/chains/push"
2122
"github.com/pushchain/push-chain-node/universalClient/db"
23+
"github.com/pushchain/push-chain-node/universalClient/pushcore"
2224
"github.com/pushchain/push-chain-node/universalClient/store"
2325
"github.com/pushchain/push-chain-node/universalClient/tss"
26+
"github.com/pushchain/push-chain-node/universalClient/tss/coordinator"
27+
"github.com/pushchain/push-chain-node/universalClient/tss/eventstore"
2428
"github.com/pushchain/push-chain-node/x/uvalidator/types"
2529
)
2630

@@ -173,6 +177,7 @@ func runNode() {
173177
homeDir = flag.String("home", "", "directory for keyshare storage (defaults to ./tss-data/tss-<validator>)")
174178
password = flag.String("password", "demo-password", "encryption password for keyshares")
175179
dbPath = flag.String("db", "", "database file path (defaults to ./tss-data/tss-<validator>/uv.db)")
180+
grpcURL = flag.String("grpc", "", "Push Chain gRPC URL (e.g., localhost:9090). If not provided, uses static demo provider")
176181
)
177182
flag.Parse()
178183

@@ -228,8 +233,35 @@ func runNode() {
228233
}
229234
defer database.Close()
230235

231-
// Create simple data provider for demo
232-
dataProvider := NewStaticPushChainDataProvider(*validatorAddr, logger)
236+
// Create data provider - use PushCoreDataProvider if gRPC URL is provided
237+
var dataProvider coordinator.DataProvider
238+
var tssListener *push.PushTSSEventListener
239+
if *grpcURL != "" {
240+
// Create pushcore client directly
241+
pushClient, err := pushcore.New([]string{*grpcURL}, logger)
242+
if err != nil {
243+
logger.Fatal().Err(err).Str("grpc_url", *grpcURL).Msg("failed to create pushcore client")
244+
}
245+
defer pushClient.Close()
246+
247+
// Create data provider using the client
248+
dataProvider = NewPushCoreDataProvider(pushClient, logger)
249+
logger.Info().Str("grpc_url", *grpcURL).Msg("using pushcore data provider (connected to blockchain)")
250+
251+
// Create event store from database
252+
evtStore := eventstore.NewStore(database.Client(), logger)
253+
254+
// Create and start the PushTSSEventListener to poll blockchain events
255+
tssListener = push.NewPushTSSEventListener(pushClient, evtStore, logger)
256+
if err := tssListener.Start(ctx); err != nil {
257+
logger.Fatal().Err(err).Msg("failed to start TSS event listener")
258+
}
259+
defer tssListener.Stop()
260+
logger.Info().Msg("started Push TSS event listener")
261+
} else {
262+
dataProvider = NewStaticPushChainDataProvider(*validatorAddr, logger)
263+
logger.Info().Msg("using static data provider (demo mode)")
264+
}
233265

234266
// Initialize TSS node
235267
tssNode, err := tss.NewNode(ctx, tss.Config{

go.mod

Lines changed: 64 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
module github.com/pushchain/push-chain-node
22

3-
go 1.23.8
4-
5-
toolchain go1.24.3
3+
go 1.24.6
64

75
// overrides
86
replace (
@@ -77,7 +75,7 @@ require (
7775
github.com/mr-tron/base58 v1.2.0
7876
github.com/near/borsh-go v0.3.1
7977
github.com/pkg/errors v0.9.1
80-
github.com/prometheus/client_golang v1.22.0
78+
github.com/prometheus/client_golang v1.23.2
8179
github.com/rs/zerolog v1.34.0
8280
github.com/spf13/cast v1.9.2
8381
github.com/spf13/cobra v1.10.1
@@ -86,16 +84,16 @@ require (
8684
github.com/stretchr/testify v1.11.1
8785
google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7
8886
google.golang.org/grpc v1.75.0
89-
google.golang.org/protobuf v1.36.8
87+
google.golang.org/protobuf v1.36.9
9088
gopkg.in/yaml.v2 v2.4.0
9189
gorm.io/driver/sqlite v1.6.0
9290
gorm.io/gorm v1.30.1
9391
)
9492

9593
require (
9694
github.com/CosmWasm/wasmvm/v2 v2.2.4
97-
github.com/libp2p/go-libp2p v0.32.0
98-
github.com/multiformats/go-multiaddr v0.12.0
95+
github.com/libp2p/go-libp2p v0.45.0
96+
github.com/multiformats/go-multiaddr v0.16.1
9997
go-wrapper v0.0.0-00010101000000-000000000000
10098
)
10199

@@ -107,71 +105,78 @@ require (
107105
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect
108106
github.com/benbjohnson/clock v1.3.5 // indirect
109107
github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect
110-
github.com/containerd/cgroups v1.1.0 // indirect
111-
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
112108
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
113109
github.com/dgraph-io/ristretto/v2 v2.1.0 // indirect
114-
github.com/docker/go-units v0.5.0 // indirect
115-
github.com/elastic/gosigar v0.14.2 // indirect
116110
github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect
117111
github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect
118-
github.com/flynn/noise v1.0.0 // indirect
112+
github.com/filecoin-project/go-clock v0.1.0 // indirect
113+
github.com/flynn/noise v1.1.0 // indirect
119114
github.com/francoispqt/gojay v1.2.13 // indirect
120115
github.com/go-jose/go-jose/v4 v4.1.1 // indirect
121-
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
122-
github.com/godbus/dbus/v5 v5.1.0 // indirect
123-
github.com/google/gopacket v1.1.19 // indirect
124-
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect
125-
github.com/ipfs/go-cid v0.4.1 // indirect
126-
github.com/ipfs/go-log/v2 v2.5.1 // indirect
116+
github.com/ipfs/go-cid v0.5.0 // indirect
127117
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
128-
github.com/koron/go-ssdp v0.0.4 // indirect
118+
github.com/koron/go-ssdp v0.0.6 // indirect
129119
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
130-
github.com/libp2p/go-cidranger v1.1.0 // indirect
131-
github.com/libp2p/go-flow-metrics v0.1.0 // indirect
132-
github.com/libp2p/go-libp2p-asn-util v0.3.0 // indirect
120+
github.com/libp2p/go-flow-metrics v0.3.0 // indirect
121+
github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect
133122
github.com/libp2p/go-msgio v0.3.0 // indirect
134-
github.com/libp2p/go-nat v0.2.0 // indirect
135-
github.com/libp2p/go-netroute v0.2.1 // indirect
123+
github.com/libp2p/go-netroute v0.3.0 // indirect
136124
github.com/libp2p/go-reuseport v0.4.0 // indirect
137-
github.com/libp2p/go-yamux/v4 v4.0.1 // indirect
125+
github.com/libp2p/go-yamux/v5 v5.0.1 // indirect
138126
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
139-
github.com/miekg/dns v1.1.56 // indirect
127+
github.com/miekg/dns v1.1.68 // indirect
140128
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect
141129
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
142130
github.com/minio/sha256-simd v1.0.1 // indirect
143131
github.com/multiformats/go-base32 v0.1.0 // indirect
144132
github.com/multiformats/go-base36 v0.2.0 // indirect
145-
github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect
133+
github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect
146134
github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect
147135
github.com/multiformats/go-multibase v0.2.0 // indirect
148-
github.com/multiformats/go-multicodec v0.9.0 // indirect
136+
github.com/multiformats/go-multicodec v0.9.2 // indirect
149137
github.com/multiformats/go-multihash v0.2.3 // indirect
150-
github.com/multiformats/go-multistream v0.5.0 // indirect
151-
github.com/multiformats/go-varint v0.0.7 // indirect
152-
github.com/onsi/ginkgo/v2 v2.22.2 // indirect
153-
github.com/opencontainers/runtime-spec v1.1.0 // indirect
138+
github.com/multiformats/go-multistream v0.6.1 // indirect
139+
github.com/multiformats/go-varint v0.1.0 // indirect
154140
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
141+
github.com/pion/datachannel v1.5.10 // indirect
142+
github.com/pion/dtls/v2 v2.2.12 // indirect
143+
github.com/pion/dtls/v3 v3.0.6 // indirect
144+
github.com/pion/ice/v4 v4.0.10 // indirect
145+
github.com/pion/interceptor v0.1.40 // indirect
146+
github.com/pion/logging v0.2.3 // indirect
147+
github.com/pion/mdns/v2 v2.0.7 // indirect
148+
github.com/pion/randutil v0.1.0 // indirect
149+
github.com/pion/rtcp v1.2.15 // indirect
150+
github.com/pion/rtp v1.8.19 // indirect
151+
github.com/pion/sctp v1.8.39 // indirect
152+
github.com/pion/sdp/v3 v3.0.13 // indirect
153+
github.com/pion/srtp/v3 v3.0.6 // indirect
154+
github.com/pion/stun v0.6.1 // indirect
155+
github.com/pion/stun/v3 v3.0.0 // indirect
156+
github.com/pion/transport/v2 v2.2.10 // indirect
157+
github.com/pion/transport/v3 v3.0.7 // indirect
158+
github.com/pion/turn/v4 v4.0.2 // indirect
159+
github.com/pion/webrtc/v4 v4.1.2 // indirect
155160
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
156-
github.com/quic-go/qpack v0.4.0 // indirect
157-
github.com/quic-go/qtls-go1-20 v0.3.4 // indirect
158-
github.com/quic-go/quic-go v0.39.3 // indirect
159-
github.com/quic-go/webtransport-go v0.6.0 // indirect
160-
github.com/raulk/go-watchdog v1.3.0 // indirect
161+
github.com/quic-go/qpack v0.5.1 // indirect
162+
github.com/quic-go/quic-go v0.55.0 // indirect
163+
github.com/quic-go/webtransport-go v0.9.0 // indirect
161164
github.com/shamaton/msgpack/v2 v2.2.0 // indirect
162165
github.com/spaolacci/murmur3 v1.1.0 // indirect
163166
github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect
167+
github.com/wlynxg/anet v0.0.5 // indirect
164168
github.com/zeebo/errs v1.4.0 // indirect
165169
go.opentelemetry.io/contrib/detectors/gcp v1.36.0 // indirect
166170
go.opentelemetry.io/otel/sdk v1.37.0 // indirect
167171
go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect
168-
go.uber.org/dig v1.17.1 // indirect
169-
go.uber.org/fx v1.20.1 // indirect
172+
go.uber.org/dig v1.19.0 // indirect
173+
go.uber.org/fx v1.24.0 // indirect
170174
go.uber.org/mock v0.5.2 // indirect
171-
go.yaml.in/yaml/v2 v2.4.2 // indirect
172-
golang.org/x/mod v0.25.0 // indirect
173-
golang.org/x/tools v0.33.0 // indirect
174-
lukechampine.com/blake3 v1.2.1 // indirect
175+
go.yaml.in/yaml/v2 v2.4.3 // indirect
176+
golang.org/x/mod v0.28.0 // indirect
177+
golang.org/x/telemetry v0.0.0-20250908211612-aef8a434d053 // indirect
178+
golang.org/x/tools v0.37.0 // indirect
179+
lukechampine.com/blake3 v1.4.1 // indirect
175180
)
176181

177182
require (
@@ -296,7 +301,7 @@ require (
296301
github.com/jmhodges/levigo v1.0.0 // indirect
297302
github.com/json-iterator/go v1.1.12 // indirect
298303
github.com/klauspost/compress v1.18.0 // indirect
299-
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
304+
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
300305
github.com/kr/pretty v0.3.1 // indirect
301306
github.com/kr/text v0.2.0 // indirect
302307
github.com/lib/pq v1.10.9 // indirect
@@ -325,8 +330,8 @@ require (
325330
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect
326331
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
327332
github.com/prometheus/client_model v0.6.2 // indirect
328-
github.com/prometheus/common v0.64.0 // indirect
329-
github.com/prometheus/procfs v0.16.1 // indirect
333+
github.com/prometheus/common v0.66.1 // indirect
334+
github.com/prometheus/procfs v0.17.0 // indirect
330335
github.com/prometheus/tsdb v0.10.0 // indirect
331336
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
332337
github.com/rivo/uniseg v0.2.0 // indirect
@@ -361,25 +366,25 @@ require (
361366
go.etcd.io/bbolt v1.4.0 // indirect
362367
go.mongodb.org/mongo-driver v1.12.2 // indirect
363368
go.opencensus.io v0.24.0 // indirect
364-
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
369+
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
365370
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 // indirect
366371
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect
367-
go.opentelemetry.io/otel v1.37.0 // indirect
368-
go.opentelemetry.io/otel/metric v1.37.0 // indirect
369-
go.opentelemetry.io/otel/trace v1.37.0 // indirect
372+
go.opentelemetry.io/otel v1.38.0 // indirect
373+
go.opentelemetry.io/otel/metric v1.38.0 // indirect
374+
go.opentelemetry.io/otel/trace v1.38.0 // indirect
370375
go.uber.org/multierr v1.11.0 // indirect
371376
go.uber.org/ratelimit v0.2.0 // indirect
372-
go.uber.org/zap v1.26.0 // indirect
377+
go.uber.org/zap v1.27.0 // indirect
373378
golang.org/x/arch v0.17.0 // indirect
374-
golang.org/x/crypto v0.39.0
375-
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
376-
golang.org/x/net v0.41.0 // indirect
379+
golang.org/x/crypto v0.42.0
380+
golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect
381+
golang.org/x/net v0.44.0 // indirect
377382
golang.org/x/oauth2 v0.30.0 // indirect
378-
golang.org/x/sync v0.15.0 // indirect
379-
golang.org/x/sys v0.33.0 // indirect
380-
golang.org/x/term v0.32.0 // indirect
381-
golang.org/x/text v0.26.0 // indirect
382-
golang.org/x/time v0.10.0 // indirect
383+
golang.org/x/sync v0.17.0 // indirect
384+
golang.org/x/sys v0.36.0 // indirect
385+
golang.org/x/term v0.35.0 // indirect
386+
golang.org/x/text v0.29.0 // indirect
387+
golang.org/x/time v0.12.0 // indirect
383388
google.golang.org/api v0.222.0 // indirect
384389
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect
385390
google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect

0 commit comments

Comments
 (0)