Skip to content

Commit 85dd665

Browse files
authored
Merge pull request #71 from helius-labs/preprocessed-support
Add Preprocessed Transaction Support
2 parents 33962d4 + 85358de commit 85dd665

35 files changed

+8722
-3811
lines changed

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,8 @@ build/
5353
out/
5454
go/test/remote-integrity-test.sh
5555

56-
ClAUDE.md
56+
ClAUDE.md
57+
58+
laserstream-core-proto-publish/
59+
laserstream-core-client-publish
60+
laserstream-core-proto-js
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"log"
6+
"os"
7+
"os/signal"
8+
"syscall"
9+
10+
laserstream "github.com/helius-labs/laserstream-sdk/go"
11+
pb "github.com/helius-labs/laserstream-sdk/go/proto"
12+
13+
"github.com/joho/godotenv"
14+
)
15+
16+
func main() {
17+
log.SetFlags(0)
18+
19+
godotenv.Load("../.env")
20+
21+
endpoint := os.Getenv("LASERSTREAM_ENDPOINT")
22+
if endpoint == "" {
23+
endpoint = "https://laserstream-mainnet-ewr.helius-rpc.com"
24+
}
25+
26+
apiKey := os.Getenv("LASERSTREAM_PRODUCTION_API_KEY")
27+
if apiKey == "" {
28+
log.Fatal("LASERSTREAM_PRODUCTION_API_KEY must be set")
29+
}
30+
31+
log.Println("Subscribing to preprocessed transactions...")
32+
33+
clientConfig := laserstream.LaserstreamConfig{
34+
Endpoint: endpoint,
35+
APIKey: apiKey,
36+
}
37+
38+
voteFilter := false
39+
subscriptionRequest := &pb.SubscribePreprocessedRequest{
40+
Transactions: map[string]*pb.SubscribePreprocessedRequestFilterTransactions{
41+
"preprocessed-filter": {
42+
Vote: &voteFilter,
43+
},
44+
},
45+
}
46+
47+
client := laserstream.NewPreprocessedClient(clientConfig)
48+
49+
dataCallback := func(data *pb.SubscribePreprocessedUpdate) {
50+
// Convert to JSON for pretty printing
51+
jsonData, err := json.MarshalIndent(data, "", " ")
52+
if err != nil {
53+
log.Printf("Failed to marshal data: %v", err)
54+
return
55+
}
56+
log.Println(string(jsonData))
57+
}
58+
59+
errorCallback := func(err error) {
60+
log.Printf("Error: %v", err)
61+
}
62+
63+
err := client.Subscribe(subscriptionRequest, dataCallback, errorCallback)
64+
if err != nil {
65+
log.Fatalf("Failed to subscribe: %v", err)
66+
}
67+
68+
log.Println("Successfully subscribed. Listening for preprocessed transactions...")
69+
log.Println("Press Ctrl+C to exit")
70+
71+
sigChan := make(chan os.Signal, 1)
72+
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
73+
<-sigChan
74+
75+
log.Println("\nShutting down...")
76+
client.Close()
77+
}

go/go.mod

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ go 1.25.1
55
require (
66
github.com/google/uuid v1.6.0
77
github.com/joho/godotenv v1.5.1
8-
github.com/rpcpool/yellowstone-grpc/examples/golang v0.0.0-20250409203454-bb3a44a2f723
9-
google.golang.org/grpc v1.71.1
10-
google.golang.org/protobuf v1.36.6
8+
github.com/rpcpool/yellowstone-grpc/examples/golang v0.0.0-20251203154737-ba20c0097d5c
9+
google.golang.org/grpc v1.75.0
10+
google.golang.org/protobuf v1.36.9
1111
)
1212

1313
require (
14-
golang.org/x/net v0.38.0 // indirect
15-
golang.org/x/sys v0.31.0 // indirect
16-
golang.org/x/text v0.23.0 // indirect
17-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect
14+
github.com/golang/protobuf v1.5.4 // indirect
15+
golang.org/x/net v0.43.0 // indirect
16+
golang.org/x/sys v0.35.0 // indirect
17+
golang.org/x/text v0.28.0 // indirect
18+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1 // indirect
1819
)

go/go.sum

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,40 @@
1-
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
2-
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
1+
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
2+
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
33
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
44
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
55
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
66
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
7-
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
8-
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
7+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
8+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
99
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
1010
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
1111
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
1212
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
13-
github.com/rpcpool/yellowstone-grpc/examples/golang v0.0.0-20250409203454-bb3a44a2f723 h1:sSDXdWLD34HleOrwv+zLEKZrAO1s5Yv+KxMmQixpWrw=
14-
github.com/rpcpool/yellowstone-grpc/examples/golang v0.0.0-20250409203454-bb3a44a2f723/go.mod h1:dDiynCK1mRAhOOqTVuWYd+MpR2TVq47yVHwGL/lR+iM=
13+
github.com/rpcpool/yellowstone-grpc/examples/golang v0.0.0-20251203154737-ba20c0097d5c h1:XBVqrcnn8tn6KvgId8pNNpmXrZw2CJl1tbD+K3tDZfY=
14+
github.com/rpcpool/yellowstone-grpc/examples/golang v0.0.0-20251203154737-ba20c0097d5c/go.mod h1:a/hJjot42ozHwGRbp293ODK8CWXqM/5FW1aG4zmI4EY=
1515
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
1616
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
17-
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
18-
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
19-
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
20-
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
21-
go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
22-
go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
23-
go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk=
24-
go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w=
25-
go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
26-
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
27-
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
28-
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
29-
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
30-
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
31-
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
32-
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
33-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI=
34-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
35-
google.golang.org/grpc v1.71.1 h1:ffsFWr7ygTUscGPI0KKK6TLrGz0476KUvvsbqWK0rPI=
36-
google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
37-
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
38-
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
17+
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
18+
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
19+
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
20+
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
21+
go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
22+
go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
23+
go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
24+
go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
25+
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
26+
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
27+
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
28+
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
29+
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
30+
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
31+
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
32+
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
33+
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
34+
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
35+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1 h1:pmJpJEvT846VzausCQ5d7KreSROcDqmO388w5YbnltA=
36+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1/go.mod h1:GmFNa4BdJZ2a8G+wCe9Bg3wwThLrJun751XstdJt5Og=
37+
google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
38+
google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
39+
google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
40+
google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=

go/laserstream.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"time"
1212

1313
"github.com/google/uuid"
14-
pb "github.com/rpcpool/yellowstone-grpc/examples/golang/proto"
14+
pb "github.com/helius-labs/laserstream-sdk/go/proto"
1515
"google.golang.org/grpc"
1616
"google.golang.org/grpc/backoff"
1717
"google.golang.org/grpc/codes"
@@ -33,7 +33,7 @@ const (
3333
// SDK metadata constants
3434
const (
3535
SDKName = "laserstream-go"
36-
SDKVersion = "0.0.9"
36+
SDKVersion = "0.1.0"
3737
)
3838

3939
// Commitment levels

0 commit comments

Comments
 (0)