diff --git a/cmdhelp.go b/cmdhelp.go index f0534f66..5b4a2643 100644 --- a/cmdhelp.go +++ b/cmdhelp.go @@ -652,7 +652,7 @@ getpeerinfo.`, "reconsiderblock": `reconsiderblock "hash" Remove invalid mark from block specified by "hash" so it is considered again.`, - "searchrawtransaction": `searchrawtransaction "address" (verbose=1 skip=0 count=100) + "searchrawtransactions": `searchrawtransactions "address" (verbose=1 skip=0 count=100) Returns raw tx data related to credits or debits to "address". Skip indicates the number of leading transactions to leave out of the final result. Count represents the max number of transactions to return. If verbose is false, a diff --git a/jsonapi.go b/jsonapi.go index 22119c4e..7d4693c9 100644 --- a/jsonapi.go +++ b/jsonapi.go @@ -619,7 +619,7 @@ func CreateMessageWithId(message string, id interface{}, args ...interface{}) ([ */ finalMessage, err = jsonWithArgs(message, id, []interface{}{args[0].(string), txList}) // one required string (address), one optional bool, two optional ints. - case "searchrawtransaction": + case "searchrawtransactions": if len(args) > 4 || len(args) == 0 { err = fmt.Errorf("wrong number of arguments for %s", message) return finalMessage, err @@ -629,7 +629,7 @@ func CreateMessageWithId(message string, id interface{}, args ...interface{}) ([ ok3 := true ok4 := true if len(args) >= 2 { - _, ok2 = args[1].(bool) + _, ok2 = args[1].(int) } if len(args) >= 3 { _, ok3 = args[2].(int) diff --git a/jsonapi_test.go b/jsonapi_test.go index 3ec97df5..bf91880b 100644 --- a/jsonapi_test.go +++ b/jsonapi_test.go @@ -181,12 +181,12 @@ var cmdtests = []struct { {"signrawtransaction", []interface{}{1.2, "test", "test2", "test3", "test4"}, false}, {"signrawtransaction", []interface{}{"hexstring", 1, "test2", "test3", "test4"}, false}, {"signrawtransaction", []interface{}{"hexstring", "test", "test2", 3, "test4"}, false}, - {"searchrawtransaction", []interface{}{"someaddr"}, true}, - {"searchrawtransaction", []interface{}{"someaddr", true}, true}, - {"searchrawtransaction", []interface{}{"someaddr", false, 1}, true}, - {"searchrawtransaction", []interface{}{"someaddr", true, 5, 500}, true}, - {"searchrawtransaction", []interface{}{"someaddr", true, 5, "test"}, false}, - {"searchrawtransaction", []interface{}{}, false}, + {"searchrawtransactions", []interface{}{"someaddr"}, true}, + {"searchrawtransactions", []interface{}{"someaddr", 1}, true}, + {"searchrawtransactions", []interface{}{"someaddr", 0, 1}, true}, + {"searchrawtransactions", []interface{}{"someaddr", 1, 5, 500}, true}, + {"searchrawtransactions", []interface{}{"someaddr", 1, 5, "test"}, false}, + {"searchrawtransactions", []interface{}{}, false}, {"listsinceblock", []interface{}{"test", "test"}, true}, {"listsinceblock", []interface{}{"test", "test", "test"}, false}, {"listsinceblock", []interface{}{"test"}, true}, diff --git a/jsoncmd.go b/jsoncmd.go index d98245b1..6241a1e2 100644 --- a/jsoncmd.go +++ b/jsoncmd.go @@ -286,8 +286,8 @@ func ParseMarshaledCmd(b []byte) (Cmd, error) { case "reconsiderblock": cmd = new(ReconsiderBlockCmd) - case "searchrawtransaction": - cmd = new(SearchRawTransactionCmd) + case "searchrawtransactions": + cmd = new(SearchRawTransactionsCmd) case "sendfrom": cmd = new(SendFromCmd) @@ -5322,21 +5322,21 @@ func (cmd *ReconsiderBlockCmd) UnmarshalJSON(b []byte) error { return nil } -// SearchRawTransactionCmd is a type handling custom marshaling and -// unmarshaling of sendrawtransaction JSON RPC commands. -type SearchRawTransactionCmd struct { +// SearchRawTransactionsCmd is a type handling custom marshaling and +// unmarshaling of sendrawtransactions JSON RPC commands. +type SearchRawTransactionsCmd struct { id interface{} Address string - Verbose bool + Verbose int Skip int Count int } -// NewSearchRawTransactionCmd creates a new SearchRawTransactionCmd. -func NewSearchRawTransactionCmd(id interface{}, address string, - optArgs ...interface{}) (*SearchRawTransactionCmd, error) { - verbose := true +// NewSearchRawTransactionsCmd creates a new SearchRawTransactionsCmd. +func NewSearchRawTransactionsCmd(id interface{}, address string, + optArgs ...interface{}) (*SearchRawTransactionsCmd, error) { var skip int + verbose := 1 count := 100 if len(optArgs) > 3 { @@ -5344,9 +5344,9 @@ func NewSearchRawTransactionCmd(id interface{}, address string, } if len(optArgs) > 0 { - v, ok := optArgs[0].(bool) + v, ok := optArgs[0].(int) if !ok { - return nil, errors.New("first optional argument verbose is not a bool") + return nil, errors.New("first optional argument verbose is not a int") } verbose = v @@ -5367,7 +5367,7 @@ func NewSearchRawTransactionCmd(id interface{}, address string, count = c } - return &SearchRawTransactionCmd{ + return &SearchRawTransactionsCmd{ id: id, Address: address, Verbose: verbose, @@ -5377,20 +5377,20 @@ func NewSearchRawTransactionCmd(id interface{}, address string, } // Id satisfies the Cmd interface by returning the id of the command. -func (cmd *SearchRawTransactionCmd) Id() interface{} { +func (cmd *SearchRawTransactionsCmd) Id() interface{} { return cmd.id } // Method satisfies the Cmd interface by returning the json method. -func (cmd *SearchRawTransactionCmd) Method() string { - return "searchrawtransaction" +func (cmd *SearchRawTransactionsCmd) Method() string { + return "searchrawtransactions" } // MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface. -func (cmd *SearchRawTransactionCmd) MarshalJSON() ([]byte, error) { +func (cmd *SearchRawTransactionsCmd) MarshalJSON() ([]byte, error) { params := make([]interface{}, 1, 4) params[0] = cmd.Address - if !cmd.Verbose || cmd.Skip != 0 || cmd.Count != 100 { + if cmd.Verbose != 1 || cmd.Skip != 0 || cmd.Count != 100 { params = append(params, cmd.Verbose) } if cmd.Skip != 0 || cmd.Count != 100 { @@ -5411,7 +5411,7 @@ func (cmd *SearchRawTransactionCmd) MarshalJSON() ([]byte, error) { // UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of // the Cmd interface. -func (cmd *SearchRawTransactionCmd) UnmarshalJSON(b []byte) error { +func (cmd *SearchRawTransactionsCmd) UnmarshalJSON(b []byte) error { // Unmarshal into a RawCmd var r RawCmd if err := json.Unmarshal(b, &r); err != nil { @@ -5429,9 +5429,9 @@ func (cmd *SearchRawTransactionCmd) UnmarshalJSON(b []byte) error { optArgs := make([]interface{}, 0, 3) if len(r.Params) > 1 { - var verbose bool + var verbose int if err := json.Unmarshal(r.Params[1], &verbose); err != nil { - return fmt.Errorf("second optional parameter 'verbose' must be an bool: %v", err) + return fmt.Errorf("second optional parameter 'verbose' must be an int: %v", err) } optArgs = append(optArgs, verbose) } @@ -5450,7 +5450,7 @@ func (cmd *SearchRawTransactionCmd) UnmarshalJSON(b []byte) error { optArgs = append(optArgs, count) } - newCmd, err := NewSearchRawTransactionCmd(r.Id, address, optArgs...) + newCmd, err := NewSearchRawTransactionsCmd(r.Id, address, optArgs...) if err != nil { return err } @@ -5459,8 +5459,8 @@ func (cmd *SearchRawTransactionCmd) UnmarshalJSON(b []byte) error { return nil } -// Enforce that SearchRawTransactionCmd satisifies the Cmd interface. -var _ Cmd = &SearchRawTransactionCmd{} +// Enforce that SearchRawTransactionsCmd satisifies the Cmd interface. +var _ Cmd = &SearchRawTransactionsCmd{} // SendFromCmd is a type handling custom marshaling and // unmarshaling of sendfrom JSON RPC commands. diff --git a/jsoncmd_test.go b/jsoncmd_test.go index fdaee830..bf719cb7 100644 --- a/jsoncmd_test.go +++ b/jsoncmd_test.go @@ -1210,15 +1210,15 @@ var jsoncmdtests = []struct { }, { name: "basic + optionals", - cmd: "searchrawtransaction", + cmd: "searchrawtransactions", f: func() (Cmd, error) { - return NewSearchRawTransactionCmd(testID, - "someaddr", true, 5, 200) + return NewSearchRawTransactionsCmd(testID, + "someaddr", 1, 5, 200) }, - result: &SearchRawTransactionCmd{ + result: &SearchRawTransactionsCmd{ id: testID, Address: "someaddr", - Verbose: true, + Verbose: 1, Skip: 5, Count: 200, }, @@ -1725,7 +1725,7 @@ func TestHelps(t *testing.T) { "move", "ping", "reconsiderblock", - "searchrawtransaction", + "searchrawtransactions", "sendfrom", "sendmany", "sendrawtransaction", diff --git a/jsonresults.go b/jsonresults.go index f8098e4c..b4f6f51d 100644 --- a/jsonresults.go +++ b/jsonresults.go @@ -690,8 +690,8 @@ func ReadResultCmd(cmd string, message []byte) (Reply, error) { result.Result = res } - case "searchrawtransaction": - // searchrawtransaction can either return a list of JSON objects + case "searchrawtransactions": + // searchrawtransactions can either return a list of JSON objects // or a list of hex-encoded strings depending on the verbose flag. // Choose the right form accordingly. if bytes.IndexByte(objmap["result"], '{') > -1 { diff --git a/jsonresults_test.go b/jsonresults_test.go index 1bac3196..83d7f07e 100644 --- a/jsonresults_test.go +++ b/jsonresults_test.go @@ -61,9 +61,9 @@ var resulttests = []struct { {"signrawtransaction", []byte(`{"error":null,"id":1,"result":{false}}`), false, false}, {"listunspent", []byte(`{"error":null,"id":1,"result":[{"txid":"something"}]}`), false, true}, {"listunspent", []byte(`{"error":null,"id":1,"result":[{"txid"}]}`), false, false}, - {"searchrawtransaction", []byte(`{"error":null,"id":1,"result":{"a":"b"}}`), false, false}, - {"searchrawtransaction", []byte(`{"error":null,"id":1,"result":["sometxhex"]}`), false, true}, - {"searchrawtransaction", []byte(`{"error":null,"id":1,"result":[{"hex":"somejunk","version":1}]}`), false, true}, + {"searchrawtransactions", []byte(`{"error":null,"id":1,"result":{"a":"b"}}`), false, false}, + {"searchrawtransactions", []byte(`{"error":null,"id":1,"result":["sometxhex"]}`), false, true}, + {"searchrawtransactions", []byte(`{"error":null,"id":1,"result":[{"hex":"somejunk","version":1}]}`), false, true}, } // TestReadResultCmd tests that readResultCmd can properly unmarshall the