findmissing.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package main
  2. import (
  3. "context"
  4. "flag"
  5. "fmt"
  6. "github.com/certusone/wormhole/node/pkg/common"
  7. nodev1 "github.com/certusone/wormhole/node/pkg/proto/node/v1"
  8. "github.com/certusone/wormhole/node/pkg/vaa"
  9. "google.golang.org/grpc"
  10. "log"
  11. )
  12. var (
  13. adminRPC = flag.String("adminRPC", "/run/guardiand/admin.socket", "Admin RPC address")
  14. shouldBackfill = flag.Bool("backfill", true, "Backfill missing sequences")
  15. onlyChain = flag.String("only", "", "Only check this chain")
  16. )
  17. func getAdminClient(ctx context.Context, addr string) (*grpc.ClientConn, error, nodev1.NodePrivilegedServiceClient) {
  18. conn, err := grpc.DialContext(ctx, fmt.Sprintf("unix:///%s", addr), grpc.WithInsecure())
  19. if err != nil {
  20. log.Fatalf("failed to connect to %s: %v", addr, err)
  21. }
  22. c := nodev1.NewNodePrivilegedServiceClient(conn)
  23. return conn, err, c
  24. }
  25. func main() {
  26. flag.Parse()
  27. ctx := context.Background()
  28. conn, err, admin := getAdminClient(ctx, *adminRPC)
  29. defer conn.Close()
  30. if err != nil {
  31. log.Fatalf("failed to get admin client: %v", err)
  32. }
  33. var only vaa.ChainID
  34. if *onlyChain != "" {
  35. only, err = vaa.ChainIDFromString(*onlyChain)
  36. if err != nil {
  37. log.Fatalf("failed to parse chain id: %v", err)
  38. }
  39. }
  40. for _, emitter := range common.KnownEmitters {
  41. if only != vaa.ChainIDUnset {
  42. if emitter.ChainID != only {
  43. continue
  44. }
  45. }
  46. log.Printf("requesting missing sequences for %v %s", emitter.ChainID, emitter.Emitter)
  47. msg := nodev1.FindMissingMessagesRequest{
  48. EmitterChain: uint32(emitter.ChainID),
  49. EmitterAddress: emitter.Emitter,
  50. RpcBackfill: *shouldBackfill,
  51. BackfillNodes: common.PublicRPCEndpoints,
  52. }
  53. resp, err := admin.FindMissingMessages(ctx, &msg)
  54. if err != nil {
  55. log.Fatalf("failed to run find FindMissingMessages RPC: %v", err)
  56. }
  57. for _, id := range resp.MissingMessages {
  58. fmt.Println(id)
  59. }
  60. }
  61. }