@@ -170,8 +170,10 @@ var rpcHandlersBeforeInit = map[string]commandHandler{
170
170
"getrawtransaction" : handleGetRawTransaction ,
171
171
"gettxout" : handleGetTxOut ,
172
172
"help" : handleHelp ,
173
+ "invalidateblock" : handleInvalidateBlock ,
173
174
"node" : handleNode ,
174
175
"ping" : handlePing ,
176
+ "reconsiderblock" : handleReconsiderBlock ,
175
177
"searchrawtransactions" : handleSearchRawTransactions ,
176
178
"sendrawtransaction" : handleSendRawTransaction ,
177
179
"setgenerate" : handleSetGenerate ,
@@ -241,9 +243,7 @@ var rpcUnimplemented = map[string]struct{}{
241
243
"getmempoolentry" : {},
242
244
"getnetworkinfo" : {},
243
245
"getwork" : {},
244
- "invalidateblock" : {},
245
246
"preciousblock" : {},
246
- "reconsiderblock" : {},
247
247
}
248
248
249
249
// Commands that are available to a limited user
@@ -284,6 +284,8 @@ var rpcLimited = map[string]struct{}{
284
284
"getrawmempool" : {},
285
285
"getrawtransaction" : {},
286
286
"gettxout" : {},
287
+ "invalidateblock" : {},
288
+ "reconsiderblock" : {},
287
289
"searchrawtransactions" : {},
288
290
"sendrawtransaction" : {},
289
291
"submitblock" : {},
@@ -2850,6 +2852,23 @@ func handleGetTxOut(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (i
2850
2852
return txOutReply , nil
2851
2853
}
2852
2854
2855
+ // handleInvalidateBlock implements the invalidateblock command.
2856
+ func handleInvalidateBlock (s * rpcServer , cmd interface {}, closeChan <- chan struct {}) (interface {}, error ) {
2857
+ c := cmd .(* btcjson.InvalidateBlockCmd )
2858
+
2859
+ invalidateHash , err := chainhash .NewHashFromStr (c .BlockHash )
2860
+ if err != nil {
2861
+ return nil , & btcjson.RPCError {
2862
+ Code : btcjson .ErrRPCDeserialization ,
2863
+ Message : fmt .Sprintf ("Failed to deserialize blockhash from string of %s" ,
2864
+ invalidateHash ),
2865
+ }
2866
+ }
2867
+
2868
+ err = s .cfg .Chain .InvalidateBlock (invalidateHash )
2869
+ return nil , err
2870
+ }
2871
+
2853
2872
// handleHelp implements the help command.
2854
2873
func handleHelp (s * rpcServer , cmd interface {}, closeChan <- chan struct {}) (interface {}, error ) {
2855
2874
c := cmd .(* btcjson.HelpCmd )
@@ -3123,6 +3142,23 @@ func fetchMempoolTxnsForAddress(s *rpcServer, addr btcutil.Address, numToSkip, n
3123
3142
return mpTxns [numToSkip :rangeEnd ], numToSkip
3124
3143
}
3125
3144
3145
+ // handleReconsiderBlock implements the reconsiderblock command.
3146
+ func handleReconsiderBlock (s * rpcServer , cmd interface {}, closeChan <- chan struct {}) (interface {}, error ) {
3147
+ c := cmd .(* btcjson.ReconsiderBlockCmd )
3148
+
3149
+ reconsiderHash , err := chainhash .NewHashFromStr (c .BlockHash )
3150
+ if err != nil {
3151
+ return nil , & btcjson.RPCError {
3152
+ Code : btcjson .ErrRPCDeserialization ,
3153
+ Message : fmt .Sprintf ("Failed to deserialize blockhash from string of %s" ,
3154
+ reconsiderHash ),
3155
+ }
3156
+ }
3157
+
3158
+ err = s .cfg .Chain .ReconsiderBlock (reconsiderHash )
3159
+ return nil , err
3160
+ }
3161
+
3126
3162
// handleSearchRawTransactions implements the searchrawtransactions command.
3127
3163
func handleSearchRawTransactions (s * rpcServer , cmd interface {}, closeChan <- chan struct {}) (interface {}, error ) {
3128
3164
// Respond with an error if the address index is not enabled.
0 commit comments