OSDN Git Service

add submit
authorChengcheng Zhang <943420582@qq.com>
Sun, 29 Sep 2019 12:30:13 +0000 (20:30 +0800)
committerChengcheng Zhang <943420582@qq.com>
Sun, 29 Sep 2019 12:30:13 +0000 (20:30 +0800)
cmd/swap/commands.go
cmd/swap/main.go
swap/transaction.go
swap/transaction_test.go

index bf1fccf..2be5657 100644 (file)
@@ -67,6 +67,14 @@ func init() {
        // build deploy contract tx
        buildTxCmd.PersistentFlags().StringVar(&ip, "ip", "127.0.0.1", "network address")
        buildTxCmd.PersistentFlags().StringVar(&port, "port", "3000", "network port")
+
+       // submit tx
+       submitPaymentCmd.PersistentFlags().StringVar(&spendUTXOSig, "spendUTXOSig", "", "spend UTXO Signature")
+       submitPaymentCmd.PersistentFlags().StringVar(&spendUTXOPublicKey, "spendUTXOPublicKey", "", "spend UTXO PublicKey")
+       submitPaymentCmd.PersistentFlags().StringVar(&spendWalletSig, "spendWalletSig", "", "spend Wallet Signature")
+       submitPaymentCmd.PersistentFlags().StringVar(&preimage, "preimage", "", "preimage")
+       submitPaymentCmd.PersistentFlags().StringVar(&ip, "ip", "127.0.0.1", "network address")
+       submitPaymentCmd.PersistentFlags().StringVar(&port, "port", "3000", "network port")
 }
 
 var (
@@ -87,6 +95,11 @@ var (
        // unlock contract paramenters
        contractUTXOID = ""
        buyer          = ""
+
+       //
+       spendUTXOSig       = ""
+       spendUTXOPublicKey = ""
+       spendWalletSig     = ""
 )
 
 var (
@@ -215,7 +228,7 @@ var buildTxCmd = &cobra.Command{
 }
 
 var signMessageCmd = &cobra.Command{
-       Use:   "sign [xprv] [message]",
+       Use:   "sign <xprv> <message>",
        Short: "sign message",
        Args:  cobra.ExactArgs(2),
        Run: func(cmd *cobra.Command, args []string) {
@@ -245,6 +258,67 @@ var signMessageCmd = &cobra.Command{
        },
 }
 
+var submitPaymentCmd = &cobra.Command{
+       Use:   "submit <action> <guid> <rawTx> [spend parameters] [URL flags(ip and port)]",
+       Short: "submit a payment",
+       Args:  cobra.ExactArgs(3),
+       Run: func(cmd *cobra.Command, args []string) {
+               action := args[0]
+               guid := args[1]
+               if len(guid) == 0 {
+                       fmt.Println("The part field of guid is invalid:", guid)
+                       os.Exit(0)
+               }
+
+               rawTx := args[2]
+               if _, err := hex.DecodeString(rawTx); err != nil {
+                       fmt.Println("The part field of rawTx is invalid:", rawTx)
+                       os.Exit(0)
+               }
+
+               spendUTXOSignatures := []string{}
+               spendWalletSignatures := []string{}
+               sigs := [][]string{}
+               switch action {
+               case "deployHTLC":
+                       if _, err := hex.DecodeString(spendUTXOSig); err != nil || len(spendUTXOSig) != 128 {
+                               fmt.Println("The part field of spendUTXOSig is invalid:", spendUTXOSig)
+                               os.Exit(0)
+                       }
+
+                       if _, err := hex.DecodeString(spendUTXOPublicKey); err != nil || len(spendUTXOPublicKey) != 64 {
+                               fmt.Println("The part field of spendUTXOPublicKey is invalid:", spendUTXOPublicKey)
+                               os.Exit(0)
+                       }
+
+                       if _, err := hex.DecodeString(spendWalletSig); err != nil || len(spendWalletSig) != 128 {
+                               fmt.Println("The part field of spendWalletSig is invalid:", spendWalletSig)
+                               os.Exit(0)
+                       }
+
+                       spendUTXOSignatures = append(spendUTXOSignatures, spendUTXOSig, spendUTXOPublicKey)
+
+               default:
+                       fmt.Println("action is invalid:", action)
+                       os.Exit(0)
+               }
+               spendWalletSignatures = append(spendWalletSignatures, spendWalletSig)
+               sigs = append(sigs, spendUTXOSignatures, spendWalletSignatures)
+
+               server := &swap.Server{
+                       IP:   ip,
+                       Port: port,
+               }
+               res, err := swap.SubmitPayment(server, guid, rawTx, "", sigs)
+               if err != nil {
+                       fmt.Println("submit tx err:", err)
+                       os.Exit(0)
+               }
+
+               fmt.Printf("submit %s tx result: %s\n", action, res)
+       },
+}
+
 var callTradeoffCmd = &cobra.Command{
        Use:   "callTradeoff <accountID> <password> <buyer-program> <contractUTXOID> [txFee flag] [URL flags(ip and port)]",
        Short: "call tradeoff contract for asset swapping",
index db2d0fc..68c70dd 100644 (file)
@@ -27,6 +27,7 @@ func main() {
        swapCmd.AddCommand(equityCmd)
        swapCmd.AddCommand(buildTxCmd)
        swapCmd.AddCommand(signMessageCmd)
+       swapCmd.AddCommand(submitPaymentCmd)
        if err := swapCmd.Execute(); err != nil {
                os.Exit(0)
        }
index 13a5e26..d6264ef 100644 (file)
@@ -164,8 +164,8 @@ type submitPaymentResp struct {
        TxID string `json:"transaction_hash"`
 }
 
-// submitPayment submit raw transaction and return transaction ID.
-func submitPayment(s *Server, guid, rawTx, memo string, sigs [][]string) (string, error) {
+// SubmitPayment submit raw transaction and return transaction ID.
+func SubmitPayment(s *Server, guid, rawTx, memo string, sigs [][]string) (string, error) {
        payload, err := json.Marshal(submitPaymentReq{
                GUID:       guid,
                RawTx:      rawTx,
index 9bddfbd..23e264c 100644 (file)
@@ -88,7 +88,7 @@ func TestSubmitPayment(t *testing.T) {
        spendUTXOSignatures := append([]string{}, spendUTXOSig, spendUTXOPublicKey)
        spendWalletSignatures := append([]string{}, spendWalletSig)
        sigs := append([][]string{}, spendUTXOSignatures, spendWalletSignatures)
-       txID, err := submitPayment(server, guid, rawTx, memo, sigs)
+       txID, err := SubmitPayment(server, guid, rawTx, memo, sigs)
        if err != nil {
                fmt.Println(err)
        }
@@ -106,7 +106,7 @@ func TestSubmitUnlockedHTLCPayment(t *testing.T) {
        spendUTXOSignatures := append([]string{}, preimage, spendUTXOSig, "")
        spendWalletSignatures := append([]string{}, spendWalletSig)
        sigs := append([][]string{}, spendUTXOSignatures, spendWalletSignatures)
-       txID, err := submitPayment(server, guid, rawTx, memo, sigs)
+       txID, err := SubmitPayment(server, guid, rawTx, memo, sigs)
        if err != nil {
                fmt.Println(err)
        }
@@ -123,7 +123,7 @@ func TestSubmitCancelHTLCPayment(t *testing.T) {
        spendUTXOSignatures := append([]string{}, spendUTXOSig)
        spendWalletSignatures := append([]string{}, spendWalletSig)
        sigs := append([][]string{}, spendUTXOSignatures, spendWalletSignatures)
-       txID, err := submitPayment(server, guid, rawTx, memo, sigs)
+       txID, err := SubmitPayment(server, guid, rawTx, memo, sigs)
        if err != nil {
                fmt.Println(err)
        }
@@ -139,7 +139,7 @@ func TestSubmitTradeoffPayment(t *testing.T) {
        spendUTXOSignatures := append([]string{}, spendUTXOSig)
        spendWalletSignatures := append([]string{}, spendWalletSig)
        sigs := append([][]string{}, spendUTXOSignatures, spendWalletSignatures)
-       txID, err := submitPayment(server, guid, rawTx, memo, sigs)
+       txID, err := SubmitPayment(server, guid, rawTx, memo, sigs)
        if err != nil {
                fmt.Println(err)
        }
@@ -157,7 +157,7 @@ func TestSubmitCallTradeoffPayment(t *testing.T) {
        spendWalletSignaturesForFee := append([]string{}, spendWalletSigForFee)
        spendWalletSignaturesForContract := append([]string{}, spendWalletSigForContract)
        sigs := append([][]string{}, spendUTXOSignatures, spendWalletSignaturesForFee, spendWalletSignaturesForContract)
-       txID, err := submitPayment(server, guid, rawTx, memo, sigs)
+       txID, err := SubmitPayment(server, guid, rawTx, memo, sigs)
        if err != nil {
                fmt.Println(err)
        }