Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var HealthCheck = &cobra.Command{ Use: "ping", Short: "Ping DKG operators", RunE: func(cmd *cobra.Command, args []string) error { fmt.Println(` █████╗ ██╗ ██╗ ██████╗ ██╗███╗ ██╗██╗████████╗██╗ █████╗ ████████╗ ██████╗ ██████╗ ██╔══██╗██║ ██╔╝██╔════╝ ██║████╗ ██║██║╚══██╔══╝██║██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗ ██║ ██║█████╔╝ ██║ ███╗ ██║██╔██╗ ██║██║ ██║ ██║███████║ ██║ ██║ ██║██████╔╝ ██║ ██║██╔═██╗ ██║ ██║ ██║██║╚██╗██║██║ ██║ ██║██╔══██║ ██║ ██║ ██║██╔══██╗ ██████╔╝██║ ██╗╚██████╔╝ ██║██║ ╚████║██║ ██║ ██║██║ ██║ ██║ ╚██████╔╝██║ ██║ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝`) if err := logging.SetGlobalLogger("debug", "json", "capitalColor", nil); err != nil { return fmt.Errorf("logging.SetGlobalLogger: %w", err) } logger := zap.L().Named("dkg-initiator") logger.Info("🪛 Initiator`s", zap.String("Version", cmd.Version)) ips, err := cmd.Flags().GetStringSlice("ip") if err != nil { logger.Fatal("😥", zap.Error(err)) } dkgInitiator := initiator.New(nil, nil, logger, cmd.Version) err = dkgInitiator.Ping(ips) if err != nil { logger.Fatal("😥 Error: ", zap.Error(err)) } return nil }, }
View Source
var StartDKG = &cobra.Command{ Use: "init", Short: "Initiates a DKG protocol", RunE: func(cmd *cobra.Command, args []string) error { fmt.Println(` █████╗ ██╗ ██╗ ██████╗ ██╗███╗ ██╗██╗████████╗██╗ █████╗ ████████╗ ██████╗ ██████╗ ██╔══██╗██║ ██╔╝██╔════╝ ██║████╗ ██║██║╚══██╔══╝██║██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗ ██║ ██║█████╔╝ ██║ ███╗ ██║██╔██╗ ██║██║ ██║ ██║███████║ ██║ ██║ ██║██████╔╝ ██║ ██║██╔═██╗ ██║ ██║ ██║██║╚██╗██║██║ ██║ ██║██╔══██║ ██║ ██║ ██║██╔══██╗ ██████╔╝██║ ██╗╚██████╔╝ ██║██║ ╚████║██║ ██║ ██║██║ ██║ ██║ ╚██████╔╝██║ ██║ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝`) if err := cli_utils.SetViperConfig(cmd); err != nil { return err } if err := cli_utils.BindInitFlags(cmd); err != nil { return err } logger, err := cli_utils.SetGlobalLogger(cmd, "dkg-initiator") if err != nil { return err } defer logger.Sync() logger.Info("🪛 Initiator`s", zap.String("Version", cmd.Version)) operatorIDs, err := cli_utils.StingSliceToUintArray(cli_utils.OperatorIDs) if err != nil { logger.Fatal("😥 Failed to load participants: ", zap.Error(err)) } opMap, err := cli_utils.LoadOperators(logger) if err != nil { logger.Fatal("😥 Failed to load operators: ", zap.Error(err)) } logger.Info("🔑 opening initiator RSA private key file") privateKey, err := cli_utils.LoadInitiatorRSAPrivKey(cli_utils.GenerateInitiatorKeyIfNotExisting) if err != nil { logger.Fatal("😥 Failed to load private key: ", zap.Error(err)) } ethnetwork := e2m_core.MainNetwork if cli_utils.Network != "now_test_network" { ethnetwork = e2m_core.NetworkFromString(cli_utils.Network) } ctx := context.Background() pool := pool.NewWithResults[*Result]().WithContext(ctx).WithFirstError().WithMaxGoroutines(maxConcurrency) for i := 0; i < int(cli_utils.Validators); i++ { i := i pool.Go(func(ctx context.Context) (*Result, error) { dkgInitiator := initiator.New(privateKey, opMap.Clone(), logger, cmd.Version) id := crypto.NewID() nonce := cli_utils.Nonce + uint64(i) depositData, keyShares, ceremonySigs, err := dkgInitiator.StartDKG(id, cli_utils.WithdrawAddress.Bytes(), operatorIDs, ethnetwork, cli_utils.OwnerAddress, nonce) if err != nil { return nil, err } logger.Debug("DKG ceremony completed", zap.String("id", hex.EncodeToString(id[:])), zap.Uint64("nonce", nonce), zap.String("pubkey", depositData.PubKey), ) return &Result{ id: id, depositData: depositData, keyShares: keyShares, ceremonySigs: ceremonySigs, nonce: nonce, }, nil }) } results, err := pool.Wait() if err != nil { logger.Fatal("😥 Failed to initiate DKG ceremony: ", zap.Error(err)) } var depositDataArr []*initiator.DepositDataJson var keySharesArr []*initiator.KeyShares var ceremonySigsArr []*initiator.CeremonySigs var nonces []uint64 for _, res := range results { depositDataArr = append(depositDataArr, res.depositData) keySharesArr = append(keySharesArr, res.keyShares) ceremonySigsArr = append(ceremonySigsArr, res.ceremonySigs) nonces = append(nonces, res.nonce) } logger.Info("🎯 All data is validated.") cli_utils.WriteInitResults(depositDataArr, keySharesArr, nonces, ceremonySigsArr, logger) fmt.Println(` ▓█████▄ ██▓ ██████ ▄████▄ ██▓ ▄▄▄ ██▓ ███▄ ▄███▓▓█████ ██▀███ ▒██▀ ██▌▓██▒▒██ ▒ ▒██▀ ▀█ ▓██▒ ▒████▄ ▓██▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒ ░██ █▌▒██▒░ ▓██▄ ▒▓█ ▄ ▒██░ ▒██ ▀█▄ ▒██▒▓██ ▓██░▒███ ▓██ ░▄█ ▒ ░▓█▄ ▌░██░ ▒ ██▒▒▓▓▄ ▄██▒▒██░ ░██▄▄▄▄██ ░██░▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ░▒████▓ ░██░▒██████▒▒▒ ▓███▀ ░░██████▒▓█ ▓██▒░██░▒██▒ ░██▒░▒████▒░██▓ ▒██▒ ▒▒▓ ▒ ░▓ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░░ ▒░▓ ░▒▒ ▓▒█░░▓ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░ ░ ▒ ▒ ▒ ░░ ░▒ ░ ░ ░ ▒ ░ ░ ▒ ░ ▒ ▒▒ ░ ▒ ░░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░ ░ ▒ ▒ ░░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ This tool was not audited. When using distributed key generation you understand all the risks involved with experimental cryptography. `) return nil }, }
View Source
cobra.Command, args []string) error { fmt.Println(` ▓█████▄ ██ ▄█▀ ▄████ ██▀███ ▓█████ ██████ ██░ ██ ▄▄▄ ██▀███ ▓█████ ▒██▀ ██▌ ██▄█▒ ██▒ ▀█▒ ▓██ ▒ ██▒▓█ ▀ ▒██ ▒ ▓██░ ██▒▒████▄ ▓██ ▒ ██▒▓█ ▀ ░██ █▌▓███▄░ ▒██░▄▄▄░ ▓██ ░▄█ ▒▒███ ░ ▓██▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ░▄█ ▒▒███ ░▓█▄ ▌▓██ █▄ ░▓█ ██▓ ▒██▀▀█▄ ▒▓█ ▄ ▒ ██▒░▓█ ░██ ░██▄▄▄▄██ ▒██▀▀█▄ ▒▓█ ▄ ░▒████▓ ▒██▒ █▄░▒▓███▀▒ ░██▓ ▒██▒░▒████▒▒██████▒▒░▓█▒░██▓ ▓█ ▓██▒░██▓ ▒██▒░▒████▒ ▒▒▓ ▒ ▒ ▒▒ ▓▒ ░▒ ▒ ░ ▒▓ ░▒▓░░░ ▒░ ░▒ ▒▓▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒▓ ░▒▓░░░ ▒░ ░ ░ ▒ ▒ ░ ░▒ ▒░ ░ ░ ░▒ ░ ▒░ ░ ░ ░░ ░▒ ░ ░ ▒ ░▒░ ░ ▒ ▒▒ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░`) if err := cli_utils.SetViperConfig(cmd); err != nil { return err } if err := cli_utils.BindReshareFlags(cmd); err != nil { return err } logger, err := cli_utils.SetGlobalLogger(cmd, "dkg-initiator") if err != nil { return err } defer logger.Sync() logger.Info("🪛 Initiator`s", zap.String("Version", cmd.Version)) opMap, err := cli_utils.LoadOperators(logger) if err != nil { logger.Fatal("😥 Failed to load operators: ", zap.Error(err)) } newParts, err := cli_utils.StingSliceToUintArray(cli_utils.NewOperatorIDs) if err != nil { logger.Fatal("😥 Failed to load new participants: ", zap.Error(err)) } logger.Info("🔑 opening initiator RSA private key file") privateKey, err := cli_utils.LoadInitiatorRSAPrivKey(false) if err != nil { logger.Fatal("😥 Failed to load private key: ", zap.Error(err)) } dkgInitiator := initiator.New(privateKey, opMap, logger, cmd.Version) id := crypto.NewID() keyshares, err := os.ReadFile(cli_utils.KeysharesFilePath) if err != nil { logger.Fatal("😥 Failed to read keyshares json file:", zap.Error(err)) } ceremonySigs, err := os.ReadFile(cli_utils.CeremonySigsFilePath) if err != nil { logger.Fatal("😥 Failed to read ceremony signatures json file:", zap.Error(err)) } keyShares, ceremonySigsNew, err := dkgInitiator.StartReshare(id, newParts, keyshares, ceremonySigs, cli_utils.Nonce) if err != nil { logger.Fatal("😥 Failed to initiate DKG ceremony: ", zap.Error(err)) } logger.Info("💾 Writing keyshares payload to file") timestamp := time.Now().Format(time.RFC3339) dir := fmt.Sprintf("%s/ceremony-%s", cli_utils.OutputPath, timestamp) err = os.Mkdir(dir, os.ModePerm) if err != nil { return err } err = cli_utils.WriteKeysharesResult(keyShares, dir) if err != nil { logger.Fatal("😥 Failed to write new ceremony signatures: ", zap.Error(err)) } err = cli_utils.WriteCeremonySigs(ceremonySigsNew, dir) if err != nil { return err } fmt.Println(` ▓█████▄ ██▓ ██████ ▄████▄ ██▓ ▄▄▄ ██▓ ███▄ ▄███▓▓█████ ██▀███ ▒██▀ ██▌▓██▒▒██ ▒ ▒██▀ ▀█ ▓██▒ ▒████▄ ▓██▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒ ░██ █▌▒██▒░ ▓██▄ ▒▓█ ▄ ▒██░ ▒██ ▀█▄ ▒██▒▓██ ▓██░▒███ ▓██ ░▄█ ▒ ░▓█▄ ▌░██░ ▒ ██▒▒▓▓▄ ▄██▒▒██░ ░██▄▄▄▄██ ░██░▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ░▒████▓ ░██░▒██████▒▒▒ ▓███▀ ░░██████▒▓█ ▓██▒░██░▒██▒ ░██▒░▒████▒░██▓ ▒██▒ ▒▒▓ ▒ ░▓ ▒ ▒▓▒ ▒ ░░ ░▒ ▒ ░░ ▒░▓ ░▒▒ ▓▒█░░▓ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░ ░ ▒ ▒ ▒ ░░ ░▒ ░ ░ ░ ▒ ░ ░ ▒ ░ ▒ ▒▒ ░ ▒ ░░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░ ░ ▒ ▒ ░░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ This tool was not audited. When using distributed key generation you understand all the risks involved with experimental cryptography. `) return nil }, }Use: "reshare", Short: "Reshare an existing key to new operators", RunE: func(cmd *
Functions ¶
This section is empty.
Types ¶
Click to show internal directories.
Click to hide internal directories.