From 24848da89530f05975f7d429a3d2716172ee90a9 Mon Sep 17 00:00:00 2001 From: biospb <42325079+biospb@users.noreply.github.com> Date: Fri, 3 Jun 2022 19:06:51 +0300 Subject: [PATCH] Wallet parse/send/create commands improvement (#2024) * Fix wallet parsing of multi tx data * Output wallet msgs to stderr when creating/signing tx * Fix go fmt Co-authored-by: Ori Newman --- cmd/kaspawallet/create_unsigned_tx.go | 4 +- cmd/kaspawallet/parse.go | 76 ++++++++++++++------------- cmd/kaspawallet/sign.go | 6 +-- 3 files changed, 45 insertions(+), 41 deletions(-) diff --git a/cmd/kaspawallet/create_unsigned_tx.go b/cmd/kaspawallet/create_unsigned_tx.go index 41be8fb26..e53f31c3e 100644 --- a/cmd/kaspawallet/create_unsigned_tx.go +++ b/cmd/kaspawallet/create_unsigned_tx.go @@ -3,6 +3,7 @@ package main import ( "context" "fmt" + "os" "github.com/kaspanet/kaspad/cmd/kaspawallet/daemon/client" "github.com/kaspanet/kaspad/cmd/kaspawallet/daemon/pb" @@ -29,7 +30,8 @@ func createUnsignedTransaction(conf *createUnsignedTransactionConfig) error { return err } - fmt.Println("Created unsigned transaction") + fmt.Fprintln(os.Stderr, "Created unsigned transaction") fmt.Println(encodeTransactionsToHex(response.UnsignedTransactions)) + return nil } diff --git a/cmd/kaspawallet/parse.go b/cmd/kaspawallet/parse.go index 37ce00c49..0e278e90f 100644 --- a/cmd/kaspawallet/parse.go +++ b/cmd/kaspawallet/parse.go @@ -29,55 +29,57 @@ func parse(conf *parseConfig) error { transactionHex = strings.TrimSpace(string(transactionHexBytes)) } - transaction, err := hex.DecodeString(transactionHex) + transactions, err := decodeTransactionsFromHex(transactionHex) if err != nil { return err } + for i, transaction := range transactions { - partiallySignedTransaction, err := serialization.DeserializePartiallySignedTransaction(transaction) - if err != nil { - return err - } - - fmt.Printf("Transaction ID: \t%s\n", consensushashing.TransactionID(partiallySignedTransaction.Tx)) - fmt.Println() - - allInputSompi := uint64(0) - for index, input := range partiallySignedTransaction.Tx.Inputs { - partiallySignedInput := partiallySignedTransaction.PartiallySignedInputs[index] - - if conf.Verbose { - fmt.Printf("Input %d: \tOutpoint: %s:%d \tAmount: %.2f Kaspa\n", index, input.PreviousOutpoint.TransactionID, - input.PreviousOutpoint.Index, float64(partiallySignedInput.PrevOutput.Value)/float64(constants.SompiPerKaspa)) - } - - allInputSompi += partiallySignedInput.PrevOutput.Value - } - if conf.Verbose { - fmt.Println() - } - - allOutputSompi := uint64(0) - for index, output := range partiallySignedTransaction.Tx.Outputs { - scriptPublicKeyType, scriptPublicKeyAddress, err := txscript.ExtractScriptPubKeyAddress(output.ScriptPublicKey, conf.ActiveNetParams) + partiallySignedTransaction, err := serialization.DeserializePartiallySignedTransaction(transaction) if err != nil { return err } - addressString := scriptPublicKeyAddress.EncodeAddress() - if scriptPublicKeyType == txscript.NonStandardTy { - scriptPublicKeyHex := hex.EncodeToString(output.ScriptPublicKey.Script) - addressString = fmt.Sprintf("", scriptPublicKeyHex) + fmt.Printf("Transaction #%d ID: \t%s\n", i+1, consensushashing.TransactionID(partiallySignedTransaction.Tx)) + fmt.Println() + + allInputSompi := uint64(0) + for index, input := range partiallySignedTransaction.Tx.Inputs { + partiallySignedInput := partiallySignedTransaction.PartiallySignedInputs[index] + + if conf.Verbose { + fmt.Printf("Input %d: \tOutpoint: %s:%d \tAmount: %.2f Kaspa\n", index, input.PreviousOutpoint.TransactionID, + input.PreviousOutpoint.Index, float64(partiallySignedInput.PrevOutput.Value)/float64(constants.SompiPerKaspa)) + } + + allInputSompi += partiallySignedInput.PrevOutput.Value + } + if conf.Verbose { + fmt.Println() } - fmt.Printf("Output %d: \tRecipient: %s \tAmount: %.2f Kaspa\n", - index, addressString, float64(output.Value)/float64(constants.SompiPerKaspa)) + allOutputSompi := uint64(0) + for index, output := range partiallySignedTransaction.Tx.Outputs { + scriptPublicKeyType, scriptPublicKeyAddress, err := txscript.ExtractScriptPubKeyAddress(output.ScriptPublicKey, conf.ActiveNetParams) + if err != nil { + return err + } - allOutputSompi += output.Value + addressString := scriptPublicKeyAddress.EncodeAddress() + if scriptPublicKeyType == txscript.NonStandardTy { + scriptPublicKeyHex := hex.EncodeToString(output.ScriptPublicKey.Script) + addressString = fmt.Sprintf("", scriptPublicKeyHex) + } + + fmt.Printf("Output %d: \tRecipient: %s \tAmount: %.2f Kaspa\n", + index, addressString, float64(output.Value)/float64(constants.SompiPerKaspa)) + + allOutputSompi += output.Value + } + fmt.Println() + + fmt.Printf("Fee:\t%d Sompi\n\n", allInputSompi-allOutputSompi) } - fmt.Println() - - fmt.Printf("Fee:\t%d Sompi\n", allInputSompi-allOutputSompi) return nil } diff --git a/cmd/kaspawallet/sign.go b/cmd/kaspawallet/sign.go index 579d200e2..c91f7043c 100644 --- a/cmd/kaspawallet/sign.go +++ b/cmd/kaspawallet/sign.go @@ -3,6 +3,7 @@ package main import ( "fmt" "io/ioutil" + "os" "strings" "github.com/kaspanet/kaspad/cmd/kaspawallet/keys" @@ -66,12 +67,11 @@ func sign(conf *signConfig) error { } if areAllTransactionsFullySigned { - fmt.Println("The transaction is signed and ready to broadcast") + fmt.Fprintln(os.Stderr, "The transaction is signed and ready to broadcast") } else { - fmt.Println("Successfully signed transaction") + fmt.Fprintln(os.Stderr, "Successfully signed transaction") } - fmt.Println("Transaction: ") fmt.Println(encodeTransactionsToHex(updatedPartiallySignedTransactions)) return nil }