diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 2ad0105a..69a81f12 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -434,6 +434,24 @@ func NewGetTxOutCmd(txHash string, vout uint32, includeMempool *bool) *GetTxOutC } } +// GetTxOutProofCmd defines the gettxoutproof JSON-RPC command. +type GetTxOutProofCmd struct { + TxIDs []string + BlockHash *string +} + +// NewGetTxOutProofCmd returns a new instance which can be used to issue a +// gettxoutproof JSON-RPC command. +// +// The parameters which are pointers indicate they are optional. Passing nil +// for optional parameters will use the default value. +func NewGetTxOutProofCmd(txIDs []string, blockHash *string) *GetTxOutProofCmd { + return &GetTxOutProofCmd{ + TxIDs: txIDs, + BlockHash: blockHash, + } +} + // GetTxOutSetInfoCmd defines the gettxoutsetinfo JSON-RPC command. type GetTxOutSetInfoCmd struct{} @@ -650,6 +668,19 @@ func NewVerifyMessageCmd(address, signature, message string) *VerifyMessageCmd { } } +// VerifyTxOutProofCmd defines the verifytxoutproof JSON-RPC command. +type VerifyTxOutProofCmd struct { + Proof string +} + +// NewVerifyTxOutProofCmd returns a new instance which can be used to issue a +// verifytxoutproof JSON-RPC command. +func NewVerifyTxOutProofCmd(proof string) *VerifyTxOutProofCmd { + return &VerifyTxOutProofCmd{ + Proof: proof, + } +} + func init() { // No special flags for commands in this file. flags := UsageFlag(0) @@ -680,6 +711,7 @@ func init() { MustRegisterCmd("getrawmempool", (*GetRawMempoolCmd)(nil), flags) MustRegisterCmd("getrawtransaction", (*GetRawTransactionCmd)(nil), flags) MustRegisterCmd("gettxout", (*GetTxOutCmd)(nil), flags) + MustRegisterCmd("gettxoutproof", (*GetTxOutProofCmd)(nil), flags) MustRegisterCmd("gettxoutsetinfo", (*GetTxOutSetInfoCmd)(nil), flags) MustRegisterCmd("getwork", (*GetWorkCmd)(nil), flags) MustRegisterCmd("help", (*HelpCmd)(nil), flags) @@ -694,4 +726,5 @@ func init() { MustRegisterCmd("validateaddress", (*ValidateAddressCmd)(nil), flags) MustRegisterCmd("verifychain", (*VerifyChainCmd)(nil), flags) MustRegisterCmd("verifymessage", (*VerifyMessageCmd)(nil), flags) + MustRegisterCmd("verifytxoutproof", (*VerifyTxOutProofCmd)(nil), flags) } diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index def48934..38021524 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -529,6 +529,36 @@ func TestChainSvrCmds(t *testing.T) { IncludeMempool: btcjson.Bool(true), }, }, + { + name: "gettxoutproof", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("gettxoutproof", []string{"123", "456"}) + }, + staticCmd: func() interface{} { + return btcjson.NewGetTxOutProofCmd([]string{"123", "456"}, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"gettxoutproof","params":[["123","456"]],"id":1}`, + unmarshalled: &btcjson.GetTxOutProofCmd{ + TxIDs: []string{"123", "456"}, + }, + }, + { + name: "gettxoutproof optional", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("gettxoutproof", []string{"123", "456"}, + btcjson.String("000000000000034a7dedef4a161fa058a2d67a173a90155f3a2fe6fc132e0ebf")) + }, + staticCmd: func() interface{} { + return btcjson.NewGetTxOutProofCmd([]string{"123", "456"}, + btcjson.String("000000000000034a7dedef4a161fa058a2d67a173a90155f3a2fe6fc132e0ebf")) + }, + marshalled: `{"jsonrpc":"1.0","method":"gettxoutproof","params":[["123","456"],` + + `"000000000000034a7dedef4a161fa058a2d67a173a90155f3a2fe6fc132e0ebf"],"id":1}`, + unmarshalled: &btcjson.GetTxOutProofCmd{ + TxIDs: []string{"123", "456"}, + BlockHash: btcjson.String("000000000000034a7dedef4a161fa058a2d67a173a90155f3a2fe6fc132e0ebf"), + }, + }, { name: "gettxoutsetinfo", newCmd: func() (interface{}, error) { @@ -866,6 +896,19 @@ func TestChainSvrCmds(t *testing.T) { Message: "test", }, }, + { + name: "verifytxoutproof", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("verifytxoutproof", "test") + }, + staticCmd: func() interface{} { + return btcjson.NewVerifyTxOutProofCmd("test") + }, + marshalled: `{"jsonrpc":"1.0","method":"verifytxoutproof","params":["test"],"id":1}`, + unmarshalled: &btcjson.VerifyTxOutProofCmd{ + Proof: "test", + }, + }, } t.Logf("Running %d tests", len(tests))