10 "github.com/spf13/cobra"
11 cmn "github.com/tendermint/tmlibs/common"
13 "github.com/vapor/common"
14 "github.com/vapor/consensus"
15 "github.com/vapor/crypto"
16 "github.com/vapor/crypto/ed25519/chainkd"
17 chainjson "github.com/vapor/encoding/json"
18 "github.com/vapor/equity/pegin_contract"
19 "github.com/vapor/util"
29 var runCmd = &cobra.Command{
31 Short: "pegin contract tool",
36 //runCmd.PersistentFlags().Uint64Var(&startHeight, "start_height", 0, "Start monitoring block height for transactions")
37 runCmd.PersistentFlags().StringVar(&fedpegXPubs, "fedpeg_xpubs", "", "Change federated peg to use a different xpub.Use Comma Delimiters.")
38 runCmd.PersistentFlags().StringVar(&fedpegXPrv, "xprv", "", "Generates one of the private keys corresponding to the payment contract address.")
39 runCmd.PersistentFlags().Uint16Var(&mode, "mode", 0, "0: generates the contract address for the payment 1: generate the private key corresponding to the payment contract address.")
40 runCmd.PersistentFlags().StringVar(&claimScriptStr, "claim_script", "", "Redemption of the script.")
43 func run(cmd *cobra.Command, args []string) {
45 if fedpegXPubs == "" {
46 cmn.Exit(cmn.Fmt("OH GOD WHAT DID YOU DO? fedpeg_xpubs is empty."))
48 var federationRedeemXPubs []chainkd.XPub
49 fedpegXPubs := strings.Split(fedpegXPubs, ",")
50 for _, xpubStr := range fedpegXPubs {
52 xpub.UnmarshalText([]byte(xpubStr))
53 federationRedeemXPubs = append(federationRedeemXPubs, xpub)
55 consensus.ActiveNetParams.FedpegXPubs = federationRedeemXPubs
56 if claimScriptStr == "" {
57 cmn.Exit(cmn.Fmt("OH GOD WHAT DID YOU DO? claim_script is empty."))
59 var claimScript chainjson.HexBytes
60 claimScript.UnmarshalText([]byte(claimScriptStr))
61 peginContractPrograms, err := pegin_contract.GetPeginContractPrograms(claimScript)
63 cmn.Exit(cmn.Fmt("GetPeginContractPrograms returns an error, %v", err))
65 scriptHash := crypto.Sha256(peginContractPrograms)
66 address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams)
68 cmn.Exit(cmn.Fmt("NewPeginAddressWitnessScriptHash returns an error, %v", err))
70 fmt.Println("contract address:", address.EncodeAddress())
71 fmt.Println("claim_script:", claimScriptStr)
75 cmn.Exit(cmn.Fmt("OH GOD WHAT DID YOU DO? xprv is empty."))
77 if claimScriptStr == "" {
78 cmn.Exit(cmn.Fmt("OH GOD WHAT DID YOU DO? claim_script is empty."))
80 var claimScript chainjson.HexBytes
81 claimScript.UnmarshalText([]byte(claimScriptStr))
84 xprv.UnmarshalText([]byte(fedpegXPrv))
86 // pub + scriptPubKey 生成一个随机数A
88 h := hmac.New(sha256.New, xpub[:])
90 tweak := h.Sum(tmp[:])
91 // pub + A 生成一个新的公钥pub_new
92 privateKey := xprv.Child(tweak, false)
93 fmt.Println("New secret key: ", privateKey.String())
94 fmt.Println("claim_script:", claimScriptStr)
96 cmn.Exit(cmn.Fmt("OH GOD WHAT DID YOU DO?"))
101 if _, err := runCmd.ExecuteC(); err != nil {
102 os.Exit(util.ErrLocalExe)