adminverify.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package guardiand
  2. import (
  3. "fmt"
  4. "github.com/certusone/wormhole/node/pkg/vaa"
  5. "io/ioutil"
  6. "log"
  7. "github.com/davecgh/go-spew/spew"
  8. "github.com/spf13/cobra"
  9. "google.golang.org/protobuf/encoding/prototext"
  10. nodev1 "github.com/certusone/wormhole/node/pkg/proto/node/v1"
  11. )
  12. var AdminClientGovernanceVAAVerifyCmd = &cobra.Command{
  13. Use: "governance-vaa-verify [FILENAME]",
  14. Short: "Verify governance vaa in prototxt format (offline)",
  15. Run: runGovernanceVAAVerify,
  16. Args: cobra.ExactArgs(1),
  17. }
  18. func runGovernanceVAAVerify(cmd *cobra.Command, args []string) {
  19. path := args[0]
  20. b, err := ioutil.ReadFile(path)
  21. if err != nil {
  22. log.Fatalf("failed to read file: %v", err)
  23. }
  24. var msg nodev1.InjectGovernanceVAARequest
  25. err = prototext.Unmarshal(b, &msg)
  26. if err != nil {
  27. log.Fatalf("failed to deserialize: %v", err)
  28. }
  29. for _, message := range msg.Messages {
  30. var (
  31. v *vaa.VAA
  32. )
  33. switch payload := message.Payload.(type) {
  34. case *nodev1.GovernanceMessage_GuardianSet:
  35. v, err = adminGuardianSetUpdateToVAA(payload.GuardianSet, msg.CurrentSetIndex, message.Nonce, message.Sequence)
  36. case *nodev1.GovernanceMessage_ContractUpgrade:
  37. v, err = adminContractUpgradeToVAA(payload.ContractUpgrade, msg.CurrentSetIndex, message.Nonce, message.Sequence)
  38. case *nodev1.GovernanceMessage_BridgeRegisterChain:
  39. v, err = tokenBridgeRegisterChain(payload.BridgeRegisterChain, msg.CurrentSetIndex, message.Nonce, message.Sequence)
  40. case *nodev1.GovernanceMessage_BridgeContractUpgrade:
  41. v, err = tokenBridgeUpgradeContract(payload.BridgeContractUpgrade, msg.CurrentSetIndex, message.Nonce, message.Sequence)
  42. default:
  43. panic(fmt.Sprintf("unsupported VAA type: %T", payload))
  44. }
  45. if err != nil {
  46. log.Fatalf("invalid update: %v", err)
  47. }
  48. digest, err := v.SigningMsg()
  49. if err != nil {
  50. panic(err)
  51. }
  52. log.Printf("VAA with digest %s: %+v", digest.Hex(), spew.Sdump(v))
  53. }
  54. }