1// Copyright (c) 2014-2017 The btcsuite developers
2// Copyright (c) 2015-2017 The Decred developers
3// Use of this source code is governed by an ISC
4// license that can be found in the LICENSE file.
5
6// NOTE: This file is intended to house the RPC commands that are supported by
7// a chain server, but are only available via websockets.
8
9package btcjson
10
11// AuthenticateCmd defines the authenticate JSON-RPC command.
12type AuthenticateCmd struct {
13	Username   string
14	Passphrase string
15}
16
17// NewAuthenticateCmd returns a new instance which can be used to issue an
18// authenticate JSON-RPC command.
19func NewAuthenticateCmd(username, passphrase string) *AuthenticateCmd {
20	return &AuthenticateCmd{
21		Username:   username,
22		Passphrase: passphrase,
23	}
24}
25
26// NotifyBlocksCmd defines the notifyblocks JSON-RPC command.
27type NotifyBlocksCmd struct{}
28
29// NewNotifyBlocksCmd returns a new instance which can be used to issue a
30// notifyblocks JSON-RPC command.
31func NewNotifyBlocksCmd() *NotifyBlocksCmd {
32	return &NotifyBlocksCmd{}
33}
34
35// StopNotifyBlocksCmd defines the stopnotifyblocks JSON-RPC command.
36type StopNotifyBlocksCmd struct{}
37
38// NewStopNotifyBlocksCmd returns a new instance which can be used to issue a
39// stopnotifyblocks JSON-RPC command.
40func NewStopNotifyBlocksCmd() *StopNotifyBlocksCmd {
41	return &StopNotifyBlocksCmd{}
42}
43
44// NotifyNewTransactionsCmd defines the notifynewtransactions JSON-RPC command.
45type NotifyNewTransactionsCmd struct {
46	Verbose *bool `jsonrpcdefault:"false"`
47}
48
49// NewNotifyNewTransactionsCmd returns a new instance which can be used to issue
50// a notifynewtransactions JSON-RPC command.
51//
52// The parameters which are pointers indicate they are optional.  Passing nil
53// for optional parameters will use the default value.
54func NewNotifyNewTransactionsCmd(verbose *bool) *NotifyNewTransactionsCmd {
55	return &NotifyNewTransactionsCmd{
56		Verbose: verbose,
57	}
58}
59
60// SessionCmd defines the session JSON-RPC command.
61type SessionCmd struct{}
62
63// NewSessionCmd returns a new instance which can be used to issue a session
64// JSON-RPC command.
65func NewSessionCmd() *SessionCmd {
66	return &SessionCmd{}
67}
68
69// StopNotifyNewTransactionsCmd defines the stopnotifynewtransactions JSON-RPC command.
70type StopNotifyNewTransactionsCmd struct{}
71
72// NewStopNotifyNewTransactionsCmd returns a new instance which can be used to issue
73// a stopnotifynewtransactions JSON-RPC command.
74//
75// The parameters which are pointers indicate they are optional.  Passing nil
76// for optional parameters will use the default value.
77func NewStopNotifyNewTransactionsCmd() *StopNotifyNewTransactionsCmd {
78	return &StopNotifyNewTransactionsCmd{}
79}
80
81// NotifyReceivedCmd defines the notifyreceived JSON-RPC command.
82//
83// Deprecated: Use LoadTxFilterCmd instead.
84type NotifyReceivedCmd struct {
85	Addresses []string
86}
87
88// NewNotifyReceivedCmd returns a new instance which can be used to issue a
89// notifyreceived JSON-RPC command.
90//
91// Deprecated: Use NewLoadTxFilterCmd instead.
92func NewNotifyReceivedCmd(addresses []string) *NotifyReceivedCmd {
93	return &NotifyReceivedCmd{
94		Addresses: addresses,
95	}
96}
97
98// OutPoint describes a transaction outpoint that will be marshalled to and
99// from JSON.
100type OutPoint struct {
101	Hash  string `json:"hash"`
102	Index uint32 `json:"index"`
103}
104
105// LoadTxFilterCmd defines the loadtxfilter request parameters to load or
106// reload a transaction filter.
107//
108// NOTE: This is a btcd extension ported from github.com/decred/dcrd/dcrjson
109// and requires a websocket connection.
110type LoadTxFilterCmd struct {
111	Reload    bool
112	Addresses []string
113	OutPoints []OutPoint
114}
115
116// NewLoadTxFilterCmd returns a new instance which can be used to issue a
117// loadtxfilter JSON-RPC command.
118//
119// NOTE: This is a btcd extension ported from github.com/decred/dcrd/dcrjson
120// and requires a websocket connection.
121func NewLoadTxFilterCmd(reload bool, addresses []string, outPoints []OutPoint) *LoadTxFilterCmd {
122	return &LoadTxFilterCmd{
123		Reload:    reload,
124		Addresses: addresses,
125		OutPoints: outPoints,
126	}
127}
128
129// NotifySpentCmd defines the notifyspent JSON-RPC command.
130//
131// Deprecated: Use LoadTxFilterCmd instead.
132type NotifySpentCmd struct {
133	OutPoints []OutPoint
134}
135
136// NewNotifySpentCmd returns a new instance which can be used to issue a
137// notifyspent JSON-RPC command.
138//
139// Deprecated: Use NewLoadTxFilterCmd instead.
140func NewNotifySpentCmd(outPoints []OutPoint) *NotifySpentCmd {
141	return &NotifySpentCmd{
142		OutPoints: outPoints,
143	}
144}
145
146// StopNotifyReceivedCmd defines the stopnotifyreceived JSON-RPC command.
147//
148// Deprecated: Use LoadTxFilterCmd instead.
149type StopNotifyReceivedCmd struct {
150	Addresses []string
151}
152
153// NewStopNotifyReceivedCmd returns a new instance which can be used to issue a
154// stopnotifyreceived JSON-RPC command.
155//
156// Deprecated: Use NewLoadTxFilterCmd instead.
157func NewStopNotifyReceivedCmd(addresses []string) *StopNotifyReceivedCmd {
158	return &StopNotifyReceivedCmd{
159		Addresses: addresses,
160	}
161}
162
163// StopNotifySpentCmd defines the stopnotifyspent JSON-RPC command.
164//
165// Deprecated: Use LoadTxFilterCmd instead.
166type StopNotifySpentCmd struct {
167	OutPoints []OutPoint
168}
169
170// NewStopNotifySpentCmd returns a new instance which can be used to issue a
171// stopnotifyspent JSON-RPC command.
172//
173// Deprecated: Use NewLoadTxFilterCmd instead.
174func NewStopNotifySpentCmd(outPoints []OutPoint) *StopNotifySpentCmd {
175	return &StopNotifySpentCmd{
176		OutPoints: outPoints,
177	}
178}
179
180// RescanCmd defines the rescan JSON-RPC command.
181//
182// Deprecated: Use RescanBlocksCmd instead.
183type RescanCmd struct {
184	BeginBlock string
185	Addresses  []string
186	OutPoints  []OutPoint
187	EndBlock   *string
188}
189
190// NewRescanCmd returns a new instance which can be used to issue a rescan
191// JSON-RPC command.
192//
193// The parameters which are pointers indicate they are optional.  Passing nil
194// for optional parameters will use the default value.
195//
196// Deprecated: Use NewRescanBlocksCmd instead.
197func NewRescanCmd(beginBlock string, addresses []string, outPoints []OutPoint, endBlock *string) *RescanCmd {
198	return &RescanCmd{
199		BeginBlock: beginBlock,
200		Addresses:  addresses,
201		OutPoints:  outPoints,
202		EndBlock:   endBlock,
203	}
204}
205
206// RescanBlocksCmd defines the rescan JSON-RPC command.
207//
208// NOTE: This is a btcd extension ported from github.com/decred/dcrd/dcrjson
209// and requires a websocket connection.
210type RescanBlocksCmd struct {
211	// Block hashes as a string array.
212	BlockHashes []string
213}
214
215// NewRescanBlocksCmd returns a new instance which can be used to issue a rescan
216// JSON-RPC command.
217//
218// NOTE: This is a btcd extension ported from github.com/decred/dcrd/dcrjson
219// and requires a websocket connection.
220func NewRescanBlocksCmd(blockHashes []string) *RescanBlocksCmd {
221	return &RescanBlocksCmd{BlockHashes: blockHashes}
222}
223
224func init() {
225	// The commands in this file are only usable by websockets.
226	flags := UFWebsocketOnly
227
228	MustRegisterCmd("authenticate", (*AuthenticateCmd)(nil), flags)
229	MustRegisterCmd("loadtxfilter", (*LoadTxFilterCmd)(nil), flags)
230	MustRegisterCmd("notifyblocks", (*NotifyBlocksCmd)(nil), flags)
231	MustRegisterCmd("notifynewtransactions", (*NotifyNewTransactionsCmd)(nil), flags)
232	MustRegisterCmd("notifyreceived", (*NotifyReceivedCmd)(nil), flags)
233	MustRegisterCmd("notifyspent", (*NotifySpentCmd)(nil), flags)
234	MustRegisterCmd("session", (*SessionCmd)(nil), flags)
235	MustRegisterCmd("stopnotifyblocks", (*StopNotifyBlocksCmd)(nil), flags)
236	MustRegisterCmd("stopnotifynewtransactions", (*StopNotifyNewTransactionsCmd)(nil), flags)
237	MustRegisterCmd("stopnotifyspent", (*StopNotifySpentCmd)(nil), flags)
238	MustRegisterCmd("stopnotifyreceived", (*StopNotifyReceivedCmd)(nil), flags)
239	MustRegisterCmd("rescan", (*RescanCmd)(nil), flags)
240	MustRegisterCmd("rescanblocks", (*RescanBlocksCmd)(nil), flags)
241}
242