Quellcode durchsuchen

node: configurable module for BridgeRegisterChain

Change-Id: If2685e9fee4997c80a00895c244793c52f30214c
Leo vor 4 Jahren
Ursprung
Commit
8979ccbeae

+ 4 - 3
node/cmd/guardiand/adminserver.go

@@ -94,7 +94,7 @@ func adminContractUpgradeToVAA(req *nodev1.ContractUpgrade, guardianSetIndex uin
 
 // tokenBridgeRegisterChain converts a nodev1.TokenBridgeRegisterChain message to its canonical VAA representation.
 // Returns an error if the data is invalid.
-func tokenBridgeRegisterChain(req *nodev1.TokenBridgeRegisterChain, guardianSetIndex uint32, nonce uint32, sequence uint64) (*vaa.VAA, error) {
+func tokenBridgeRegisterChain(req *nodev1.BridgeRegisterChain, guardianSetIndex uint32, nonce uint32, sequence uint64) (*vaa.VAA, error) {
 	if req.ChainId > math.MaxUint8 {
 		return nil, errors.New("invalid chain_id")
 	}
@@ -113,6 +113,7 @@ func tokenBridgeRegisterChain(req *nodev1.TokenBridgeRegisterChain, guardianSetI
 
 	v := vaa.CreateGovernanceVAA(nonce, sequence, guardianSetIndex,
 		vaa.BodyTokenBridgeRegisterChain{
+			Module:         req.Module,
 			ChainID:        vaa.ChainID(req.ChainId),
 			EmitterAddress: emitterAddress,
 		}.Serialize())
@@ -132,8 +133,8 @@ func (s *nodePrivilegedService) InjectGovernanceVAA(ctx context.Context, req *no
 		v, err = adminGuardianSetUpdateToVAA(payload.GuardianSet, req.CurrentSetIndex, req.Nonce, req.Sequence)
 	case *nodev1.InjectGovernanceVAARequest_ContractUpgrade:
 		v, err = adminContractUpgradeToVAA(payload.ContractUpgrade, req.CurrentSetIndex, req.Nonce, req.Sequence)
-	case *nodev1.InjectGovernanceVAARequest_TokenBridgeRegisterChain:
-		v, err = tokenBridgeRegisterChain(payload.TokenBridgeRegisterChain, req.CurrentSetIndex, req.Nonce, req.Sequence)
+	case *nodev1.InjectGovernanceVAARequest_BridgeRegisterChain:
+		v, err = tokenBridgeRegisterChain(payload.BridgeRegisterChain, req.CurrentSetIndex, req.Nonce, req.Sequence)
 	default:
 		panic(fmt.Sprintf("unsupported VAA type: %T", payload))
 	}

+ 9 - 8
node/cmd/guardiand/admintemplate.go

@@ -67,8 +67,8 @@ func runGuardianSetTemplate(cmd *cobra.Command, args []string) {
 
 	m := &nodev1.InjectGovernanceVAARequest{
 		CurrentSetIndex: uint32(*templateGuardianIndex),
-		Sequence: 1234,
-		Nonce: rand.Uint32(),
+		Sequence:        1234,
+		Nonce:           rand.Uint32(),
 		Payload: &nodev1.InjectGovernanceVAARequest_GuardianSet{
 			GuardianSet: &nodev1.GuardianSetUpdate{Guardians: guardians},
 		},
@@ -90,8 +90,8 @@ func runContractUpgradeTemplate(cmd *cobra.Command, args []string) {
 
 	m := &nodev1.InjectGovernanceVAARequest{
 		CurrentSetIndex: uint32(*templateGuardianIndex),
-		Sequence: 1234,
-		Nonce: rand.Uint32(),
+		Sequence:        1234,
+		Nonce:           rand.Uint32(),
 		Payload: &nodev1.InjectGovernanceVAARequest_ContractUpgrade{
 			ContractUpgrade: &nodev1.ContractUpgrade{
 				ChainId:     1,
@@ -115,10 +115,11 @@ func runTokenBridgeRegisterChainTemplate(cmd *cobra.Command, args []string) {
 
 	m := &nodev1.InjectGovernanceVAARequest{
 		CurrentSetIndex: uint32(*templateGuardianIndex),
-		Sequence: rand.Uint64(),
-		Nonce: rand.Uint32(),
-		Payload: &nodev1.InjectGovernanceVAARequest_TokenBridgeRegisterChain{
-			TokenBridgeRegisterChain: &nodev1.TokenBridgeRegisterChain{
+		Sequence:        rand.Uint64(),
+		Nonce:           rand.Uint32(),
+		Payload: &nodev1.InjectGovernanceVAARequest_BridgeRegisterChain{
+			BridgeRegisterChain: &nodev1.BridgeRegisterChain{
+				Module:         "TokenBridge",
 				ChainId:        5,
 				EmitterAddress: "0000000000000000000000000290FB167208Af455bB137780163b7B7a9a10C16",
 			},

+ 2 - 2
node/cmd/guardiand/adminverify.go

@@ -42,8 +42,8 @@ func runGovernanceVAAVerify(cmd *cobra.Command, args []string) {
 		v, err = adminGuardianSetUpdateToVAA(payload.GuardianSet, msg.CurrentSetIndex, msg.Nonce, msg.Sequence)
 	case *nodev1.InjectGovernanceVAARequest_ContractUpgrade:
 		v, err = adminContractUpgradeToVAA(payload.ContractUpgrade, msg.CurrentSetIndex, msg.Nonce, msg.Sequence)
-	case *nodev1.InjectGovernanceVAARequest_TokenBridgeRegisterChain:
-		v, err = tokenBridgeRegisterChain(payload.TokenBridgeRegisterChain, msg.CurrentSetIndex, msg.Nonce, msg.Sequence)
+	case *nodev1.InjectGovernanceVAARequest_BridgeRegisterChain:
+		v, err = tokenBridgeRegisterChain(payload.BridgeRegisterChain, msg.CurrentSetIndex, msg.Nonce, msg.Sequence)
 	default:
 		panic(fmt.Sprintf("unsupported VAA type: %T", payload))
 	}

+ 9 - 4
node/pkg/vaa/payloads.go

@@ -9,9 +9,6 @@ import (
 // CoreModule is the identifier of the Core module (which is used for governance messages)
 var CoreModule = []byte{00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 0x43, 0x6f, 0x72, 0x65}
 
-// TokenBridgeModule is the identifier of the token bridge module ("TokenBridge")
-var TokenBridgeModule = []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65}
-
 type (
 	// BodyContractUpgrade is a governance message to perform a contract upgrade of the core module
 	BodyContractUpgrade struct {
@@ -27,6 +24,7 @@ type (
 
 	// BodyTokenBridgeRegisterChain is a governance message to register a chain on the token bridge
 	BodyTokenBridgeRegisterChain struct {
+		Module         string
 		ChainID        ChainID
 		EmitterAddress Address
 	}
@@ -67,10 +65,17 @@ func (b BodyGuardianSetUpdate) Serialize() []byte {
 }
 
 func (r BodyTokenBridgeRegisterChain) Serialize() []byte {
+	if len(r.Module) > 32 {
+		panic("module longer than 32 byte")
+	}
+
 	buf := &bytes.Buffer{}
 
 	// Write token bridge header
-	buf.Write(TokenBridgeModule)
+	for i := 0; i < (32 - len(r.Module)); i++ {
+		buf.WriteByte(0x00)
+	}
+	buf.Write([]byte(r.Module))
 	// Write action ID
 	MustWrite(buf, binary.BigEndian, uint8(1))
 	// Write target chain (0 = universal)

+ 12 - 4
proto/node/v1/node.proto

@@ -31,9 +31,14 @@ message InjectGovernanceVAARequest {
   uint32 nonce = 3;
 
   oneof payload{
+    // Core module
+
     GuardianSetUpdate guardian_set = 10;
     ContractUpgrade contract_upgrade = 11;
-    TokenBridgeRegisterChain token_bridge_register_chain = 12;
+
+    // Token bridge and NFT module
+
+    BridgeRegisterChain bridge_register_chain = 12;
   }
 }
 
@@ -65,12 +70,15 @@ message GuardianKey {
   bool unsafe_deterministic_key = 2;
 }
 
-message TokenBridgeRegisterChain {
+message BridgeRegisterChain {
+  // Module identifier of the token or NFT bridge (typically "TokenBridge" or "NFTBridge")
+  string module = 1;
+
   // ID of the chain to be registered.
-  uint32 chain_id = 1;
+  uint32 chain_id = 2;
 
   // Hex-encoded emitter address to be registered (without leading 0x).
-  string emitter_address = 2;
+  string emitter_address = 3;
 }
 
 // ContractUpgrade represents a Wormhole contract update to be submitted to and signed by the node.