mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-10-31 14:27:40 +00:00 
			
		
		
		
	add prover pause cmd
This commit is contained in:
		
							parent
							
								
									763cf6d2ca
								
							
						
					
					
						commit
						aec21504bc
					
				
							
								
								
									
										139
									
								
								client/cmd/proverPause.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								client/cmd/proverPause.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,139 @@ | ||||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/hex" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"github.com/iden3/go-iden3-crypto/poseidon" | ||||
| 	"github.com/libp2p/go-libp2p/core/crypto" | ||||
| 	"github.com/pkg/errors" | ||||
| 	"github.com/spf13/cobra" | ||||
| 	"go.uber.org/zap" | ||||
| 	"google.golang.org/protobuf/proto" | ||||
| 	"google.golang.org/protobuf/types/known/anypb" | ||||
| 	"source.quilibrium.com/quilibrium/monorepo/go-libp2p-blossomsub/pb" | ||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/token/application" | ||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/p2p" | ||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/protobufs" | ||||
| ) | ||||
| 
 | ||||
| var proverPauseCmd = &cobra.Command{ | ||||
| 	Use:   "pause", | ||||
| 	Short: "Pauses a prover", | ||||
| 	Long: `Pauses a prover (use in emergency when a worker isn't coming back online): | ||||
| 	 | ||||
| 	pause <Filter> | ||||
| 	 | ||||
| 	Filter – the hex bitstring of the filter to pause for | ||||
| 	`, | ||||
| 	Run: func(cmd *cobra.Command, args []string) { | ||||
| 		if len(args) != 1 { | ||||
| 			panic("invalid arguments") | ||||
| 		} | ||||
| 
 | ||||
| 		logger, err := zap.NewProduction() | ||||
| 		pubsub := p2p.NewBlossomSub(NodeConfig.P2P, logger) | ||||
| 		intrinsicFilter := p2p.GetBloomFilter(application.TOKEN_ADDRESS, 256, 3) | ||||
| 		pubsub.Subscribe( | ||||
| 			intrinsicFilter, | ||||
| 			func(message *pb.Message) error { return nil }, | ||||
| 		) | ||||
| 		key, err := GetPrivKeyFromConfig(NodeConfig) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 
 | ||||
| 		payload := []byte("pause") | ||||
| 		filterHex, _ := strings.CutPrefix(args[0], "0x") | ||||
| 		filter, err := hex.DecodeString(filterHex) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 
 | ||||
| 		payload = append(payload, filter...) | ||||
| 
 | ||||
| 		sig, err := key.Sign(payload) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 
 | ||||
| 		pub, err := key.GetPublic().Raw() | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 
 | ||||
| 		err = publishMessage( | ||||
| 			key, | ||||
| 			pubsub, | ||||
| 			intrinsicFilter, | ||||
| 			&protobufs.AnnounceProverPause{ | ||||
| 				Filter: filter, | ||||
| 				PublicKeySignatureEd448: &protobufs.Ed448Signature{ | ||||
| 					Signature: sig, | ||||
| 					PublicKey: &protobufs.Ed448PublicKey{ | ||||
| 						KeyValue: pub, | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| func publishMessage( | ||||
| 	key crypto.PrivKey, | ||||
| 	pubsub p2p.PubSub, | ||||
| 	filter []byte, | ||||
| 	message proto.Message, | ||||
| ) error { | ||||
| 	any := &anypb.Any{} | ||||
| 	if err := any.MarshalFrom(message); err != nil { | ||||
| 		return errors.Wrap(err, "publish message") | ||||
| 	} | ||||
| 
 | ||||
| 	any.TypeUrl = strings.Replace( | ||||
| 		any.TypeUrl, | ||||
| 		"type.googleapis.com", | ||||
| 		"types.quilibrium.com", | ||||
| 		1, | ||||
| 	) | ||||
| 
 | ||||
| 	payload, err := proto.Marshal(any) | ||||
| 	if err != nil { | ||||
| 		return errors.Wrap(err, "publish message") | ||||
| 	} | ||||
| 
 | ||||
| 	h, err := poseidon.HashBytes(payload) | ||||
| 	if err != nil { | ||||
| 		return errors.Wrap(err, "publish message") | ||||
| 	} | ||||
| 
 | ||||
| 	pub, err := key.GetPublic().Raw() | ||||
| 	if err != nil { | ||||
| 		return errors.Wrap(err, "publish message") | ||||
| 	} | ||||
| 
 | ||||
| 	pbi, err := poseidon.HashBytes(pub) | ||||
| 	if err != nil { | ||||
| 		return errors.Wrap(err, "publish message") | ||||
| 	} | ||||
| 
 | ||||
| 	provingKeyAddress := pbi.FillBytes(make([]byte, 32)) | ||||
| 
 | ||||
| 	msg := &protobufs.Message{ | ||||
| 		Hash:    h.Bytes(), | ||||
| 		Address: provingKeyAddress, | ||||
| 		Payload: payload, | ||||
| 	} | ||||
| 	data, err := proto.Marshal(msg) | ||||
| 	if err != nil { | ||||
| 		return errors.Wrap(err, "publish message") | ||||
| 	} | ||||
| 	return pubsub.PublishToBitmask(filter, data) | ||||
| } | ||||
| 
 | ||||
| func init() { | ||||
| 	proverCmd.AddCommand(proverPauseCmd) | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Cassandra Heart
						Cassandra Heart