Add Stellar Service plumbing and GetLedgerEntries,GetLatestLedger#1990
Add Stellar Service plumbing and GetLedgerEntries,GetLatestLedger#1990
Conversation
|
There was a problem hiding this comment.
Pull request overview
This PR adds first-class Stellar support to the relayer plumbing by introducing Stellar domain types, gRPC/proto definitions + converters, and wiring Stellar through the LOOP relayer/relayerset clients and servers.
Changes:
- Add
types.StellarServiceand expose it viaRelayer.Stellar()(plus unimplemented stubs/mocks). - Introduce Stellar domain request/response types and a new
stellar.protogRPC service with helper converters. - Wire Stellar through LOOP relayer + relayerset client/server plumbing and add round-trip + relayerset integration tests.
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| pkg/types/relayer.go | Adds StellarService, Relayer.Stellar(), and an unimplemented Stellar service stub. |
| pkg/types/core/relayerset.go | Extends core relayer interface with Stellar(). |
| pkg/types/core/mocks/relayer.go | Adds mock support for Relayer.Stellar(). |
| pkg/types/chains/stellar/stellar.go | Introduces Stellar domain types and a minimal Stellar RPC client interface. |
| pkg/loop/internal/relayerset/stellar.go | Adds relayerset-level Stellar gRPC routing (client wrapper + server). |
| pkg/loop/internal/relayerset/server.go | Registers Stellar server within relayerset server plumbing. |
| pkg/loop/internal/relayerset/relayerset_test.go | Adds relayerset integration tests for Stellar service. |
| pkg/loop/internal/relayerset/relayer.go | Exposes Stellar() on relayerset relayer wrapper. |
| pkg/loop/internal/relayerset/client.go | Adds Stellar client plumbing to relayerset client. |
| pkg/loop/internal/relayer/stellar.go | Adds relayer-level Stellar gRPC client/server adapters. |
| pkg/loop/internal/relayer/stellar_test.go | Adds gRPC round-trip tests for Stellar domain types. |
| pkg/loop/internal/relayer/relayer.go | Registers Stellar service on plugin relayer server and exposes client method. |
| pkg/loop/internal/pb/relayerset/helper.go | Registers Stellar server as a relayerset dependant service. |
| pkg/chains/stellar/stellar.proto | Adds Stellar gRPC service + messages. |
| pkg/chains/stellar/stellar.pb.go | Generated proto Go types for Stellar. |
| pkg/chains/stellar/stellar_grpc.pb.go | Generated gRPC Go stubs for Stellar. |
| pkg/chains/stellar/proto_helpers.go | Domain↔proto conversion helpers for Stellar types. |
| pkg/chains/stellar/generate.go | Adds go:generate hook for Stellar proto generation. |
| pkg/chains/stellar/generate/main.go | Adds protoc generation entrypoint for Stellar. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
92f5751 to
b29dd60
Compare
| // XDR is a base64-encoded XDR-serialized value (envelope, data, result, key, etc.). | ||
| type XDR string | ||
|
|
||
| // LedgerHash is the hex-encoded SHA-256 hash of a Stellar ledger. | ||
| type LedgerHash string |
There was a problem hiding this comment.
Is it important for these to be independent types? I think the extra conversions could be avoided, even just with aliases:
| // XDR is a base64-encoded XDR-serialized value (envelope, data, result, key, etc.). | |
| type XDR string | |
| // LedgerHash is the hex-encoded SHA-256 hash of a Stellar ledger. | |
| type LedgerHash string | |
| // XDR is a base64-encoded XDR-serialized value (envelope, data, result, key, etc.). | |
| type XDR = string | |
| // LedgerHash is the hex-encoded SHA-256 hash of a Stellar ledger. | |
| type LedgerHash = string |
| // xdrToBytes base64-decodes a domain XDR string to raw binary. | ||
| func xdrToBytes(x stellar.XDR) ([]byte, error) { | ||
| b, err := base64.StdEncoding.DecodeString(string(x)) | ||
| if err != nil { | ||
| return nil, fmt.Errorf("invalid base64 XDR %q: %w", x, err) | ||
| } | ||
| return b, nil | ||
| } | ||
|
|
||
| // bytesToXDR base64-encodes raw binary XDR to the domain type. | ||
| func bytesToXDR(b []byte) stellar.XDR { | ||
| return stellar.XDR(base64.StdEncoding.EncodeToString(b)) | ||
| } |
There was a problem hiding this comment.
Would it be cleaner to define these in package stellar? e.g. XDR) ToBytes() ([]byte, error) and stellar.ParseXDR([]byte) 🤷
Requires
Supports