305 lines
10 KiB
Go
305 lines
10 KiB
Go
|
// Copyright (c) 2014-2017 The btcsuite developers
|
||
|
// Copyright (c) 2015-2017 The Decred developers
|
||
|
// Use of this source code is governed by an ISC
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
// NOTE: This file is intended to house the RPC websocket notifications that are
|
||
|
// supported by a chain server.
|
||
|
|
||
|
package btcjson
|
||
|
|
||
|
const (
|
||
|
// BlockConnectedNtfnMethod is the legacy, deprecated method used for
|
||
|
// notifications from the chain server that a block has been connected.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use FilteredBlockConnectedNtfnMethod instead.
|
||
|
BlockConnectedNtfnMethod = "blockconnected"
|
||
|
|
||
|
// BlockDisconnectedNtfnMethod is the legacy, deprecated method used for
|
||
|
// notifications from the chain server that a block has been
|
||
|
// disconnected.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use FilteredBlockDisconnectedNtfnMethod instead.
|
||
|
BlockDisconnectedNtfnMethod = "blockdisconnected"
|
||
|
|
||
|
// FilteredBlockConnectedNtfnMethod is the new method used for
|
||
|
// notifications from the chain server that a block has been connected.
|
||
|
FilteredBlockConnectedNtfnMethod = "filteredblockconnected"
|
||
|
|
||
|
// FilteredBlockDisconnectedNtfnMethod is the new method used for
|
||
|
// notifications from the chain server that a block has been
|
||
|
// disconnected.
|
||
|
FilteredBlockDisconnectedNtfnMethod = "filteredblockdisconnected"
|
||
|
|
||
|
// RecvTxNtfnMethod is the legacy, deprecated method used for
|
||
|
// notifications from the chain server that a transaction which pays to
|
||
|
// a registered address has been processed.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use RelevantTxAcceptedNtfnMethod and
|
||
|
// FilteredBlockConnectedNtfnMethod instead.
|
||
|
RecvTxNtfnMethod = "recvtx"
|
||
|
|
||
|
// RedeemingTxNtfnMethod is the legacy, deprecated method used for
|
||
|
// notifications from the chain server that a transaction which spends a
|
||
|
// registered outpoint has been processed.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use RelevantTxAcceptedNtfnMethod and
|
||
|
// FilteredBlockConnectedNtfnMethod instead.
|
||
|
RedeemingTxNtfnMethod = "redeemingtx"
|
||
|
|
||
|
// RescanFinishedNtfnMethod is the legacy, deprecated method used for
|
||
|
// notifications from the chain server that a legacy, deprecated rescan
|
||
|
// operation has finished.
|
||
|
//
|
||
|
// NOTE: Deprecated. Not used with rescanblocks command.
|
||
|
RescanFinishedNtfnMethod = "rescanfinished"
|
||
|
|
||
|
// RescanProgressNtfnMethod is the legacy, deprecated method used for
|
||
|
// notifications from the chain server that a legacy, deprecated rescan
|
||
|
// operation this is underway has made progress.
|
||
|
//
|
||
|
// NOTE: Deprecated. Not used with rescanblocks command.
|
||
|
RescanProgressNtfnMethod = "rescanprogress"
|
||
|
|
||
|
// TxAcceptedNtfnMethod is the method used for notifications from the
|
||
|
// chain server that a transaction has been accepted into the mempool.
|
||
|
TxAcceptedNtfnMethod = "txaccepted"
|
||
|
|
||
|
// TxAcceptedVerboseNtfnMethod is the method used for notifications from
|
||
|
// the chain server that a transaction has been accepted into the
|
||
|
// mempool. This differs from TxAcceptedNtfnMethod in that it provides
|
||
|
// more details in the notification.
|
||
|
TxAcceptedVerboseNtfnMethod = "txacceptedverbose"
|
||
|
|
||
|
// RelevantTxAcceptedNtfnMethod is the new method used for notifications
|
||
|
// from the chain server that inform a client that a transaction that
|
||
|
// matches the loaded filter was accepted by the mempool.
|
||
|
RelevantTxAcceptedNtfnMethod = "relevanttxaccepted"
|
||
|
)
|
||
|
|
||
|
// BlockConnectedNtfn defines the blockconnected JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use FilteredBlockConnectedNtfn instead.
|
||
|
type BlockConnectedNtfn struct {
|
||
|
Hash string
|
||
|
Height int32
|
||
|
Time int64
|
||
|
}
|
||
|
|
||
|
// NewBlockConnectedNtfn returns a new instance which can be used to issue a
|
||
|
// blockconnected JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use NewFilteredBlockConnectedNtfn instead.
|
||
|
func NewBlockConnectedNtfn(hash string, height int32, time int64) *BlockConnectedNtfn {
|
||
|
return &BlockConnectedNtfn{
|
||
|
Hash: hash,
|
||
|
Height: height,
|
||
|
Time: time,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// BlockDisconnectedNtfn defines the blockdisconnected JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use FilteredBlockDisconnectedNtfn instead.
|
||
|
type BlockDisconnectedNtfn struct {
|
||
|
Hash string
|
||
|
Height int32
|
||
|
Time int64
|
||
|
}
|
||
|
|
||
|
// NewBlockDisconnectedNtfn returns a new instance which can be used to issue a
|
||
|
// blockdisconnected JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use NewFilteredBlockDisconnectedNtfn instead.
|
||
|
func NewBlockDisconnectedNtfn(hash string, height int32, time int64) *BlockDisconnectedNtfn {
|
||
|
return &BlockDisconnectedNtfn{
|
||
|
Hash: hash,
|
||
|
Height: height,
|
||
|
Time: time,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// FilteredBlockConnectedNtfn defines the filteredblockconnected JSON-RPC
|
||
|
// notification.
|
||
|
type FilteredBlockConnectedNtfn struct {
|
||
|
Height int32
|
||
|
Header string
|
||
|
SubscribedTxs []string
|
||
|
}
|
||
|
|
||
|
// NewFilteredBlockConnectedNtfn returns a new instance which can be used to
|
||
|
// issue a filteredblockconnected JSON-RPC notification.
|
||
|
func NewFilteredBlockConnectedNtfn(height int32, header string, subscribedTxs []string) *FilteredBlockConnectedNtfn {
|
||
|
return &FilteredBlockConnectedNtfn{
|
||
|
Height: height,
|
||
|
Header: header,
|
||
|
SubscribedTxs: subscribedTxs,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// FilteredBlockDisconnectedNtfn defines the filteredblockdisconnected JSON-RPC
|
||
|
// notification.
|
||
|
type FilteredBlockDisconnectedNtfn struct {
|
||
|
Height int32
|
||
|
Header string
|
||
|
}
|
||
|
|
||
|
// NewFilteredBlockDisconnectedNtfn returns a new instance which can be used to
|
||
|
// issue a filteredblockdisconnected JSON-RPC notification.
|
||
|
func NewFilteredBlockDisconnectedNtfn(height int32, header string) *FilteredBlockDisconnectedNtfn {
|
||
|
return &FilteredBlockDisconnectedNtfn{
|
||
|
Height: height,
|
||
|
Header: header,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// BlockDetails describes details of a tx in a block.
|
||
|
type BlockDetails struct {
|
||
|
Height int32 `json:"height"`
|
||
|
Hash string `json:"hash"`
|
||
|
Index int `json:"index"`
|
||
|
Time int64 `json:"time"`
|
||
|
}
|
||
|
|
||
|
// RecvTxNtfn defines the recvtx JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use RelevantTxAcceptedNtfn and FilteredBlockConnectedNtfn
|
||
|
// instead.
|
||
|
type RecvTxNtfn struct {
|
||
|
HexTx string
|
||
|
Block *BlockDetails
|
||
|
}
|
||
|
|
||
|
// NewRecvTxNtfn returns a new instance which can be used to issue a recvtx
|
||
|
// JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use NewRelevantTxAcceptedNtfn and
|
||
|
// NewFilteredBlockConnectedNtfn instead.
|
||
|
func NewRecvTxNtfn(hexTx string, block *BlockDetails) *RecvTxNtfn {
|
||
|
return &RecvTxNtfn{
|
||
|
HexTx: hexTx,
|
||
|
Block: block,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// RedeemingTxNtfn defines the redeemingtx JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use RelevantTxAcceptedNtfn and FilteredBlockConnectedNtfn
|
||
|
// instead.
|
||
|
type RedeemingTxNtfn struct {
|
||
|
HexTx string
|
||
|
Block *BlockDetails
|
||
|
}
|
||
|
|
||
|
// NewRedeemingTxNtfn returns a new instance which can be used to issue a
|
||
|
// redeemingtx JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Use NewRelevantTxAcceptedNtfn and
|
||
|
// NewFilteredBlockConnectedNtfn instead.
|
||
|
func NewRedeemingTxNtfn(hexTx string, block *BlockDetails) *RedeemingTxNtfn {
|
||
|
return &RedeemingTxNtfn{
|
||
|
HexTx: hexTx,
|
||
|
Block: block,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// RescanFinishedNtfn defines the rescanfinished JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Not used with rescanblocks command.
|
||
|
type RescanFinishedNtfn struct {
|
||
|
Hash string
|
||
|
Height int32
|
||
|
Time int64
|
||
|
}
|
||
|
|
||
|
// NewRescanFinishedNtfn returns a new instance which can be used to issue a
|
||
|
// rescanfinished JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Not used with rescanblocks command.
|
||
|
func NewRescanFinishedNtfn(hash string, height int32, time int64) *RescanFinishedNtfn {
|
||
|
return &RescanFinishedNtfn{
|
||
|
Hash: hash,
|
||
|
Height: height,
|
||
|
Time: time,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// RescanProgressNtfn defines the rescanprogress JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Not used with rescanblocks command.
|
||
|
type RescanProgressNtfn struct {
|
||
|
Hash string
|
||
|
Height int32
|
||
|
Time int64
|
||
|
}
|
||
|
|
||
|
// NewRescanProgressNtfn returns a new instance which can be used to issue a
|
||
|
// rescanprogress JSON-RPC notification.
|
||
|
//
|
||
|
// NOTE: Deprecated. Not used with rescanblocks command.
|
||
|
func NewRescanProgressNtfn(hash string, height int32, time int64) *RescanProgressNtfn {
|
||
|
return &RescanProgressNtfn{
|
||
|
Hash: hash,
|
||
|
Height: height,
|
||
|
Time: time,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// TxAcceptedNtfn defines the txaccepted JSON-RPC notification.
|
||
|
type TxAcceptedNtfn struct {
|
||
|
TxID string
|
||
|
Amount float64
|
||
|
}
|
||
|
|
||
|
// NewTxAcceptedNtfn returns a new instance which can be used to issue a
|
||
|
// txaccepted JSON-RPC notification.
|
||
|
func NewTxAcceptedNtfn(txHash string, amount float64) *TxAcceptedNtfn {
|
||
|
return &TxAcceptedNtfn{
|
||
|
TxID: txHash,
|
||
|
Amount: amount,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// TxAcceptedVerboseNtfn defines the txacceptedverbose JSON-RPC notification.
|
||
|
type TxAcceptedVerboseNtfn struct {
|
||
|
RawTx TxRawResult
|
||
|
}
|
||
|
|
||
|
// NewTxAcceptedVerboseNtfn returns a new instance which can be used to issue a
|
||
|
// txacceptedverbose JSON-RPC notification.
|
||
|
func NewTxAcceptedVerboseNtfn(rawTx TxRawResult) *TxAcceptedVerboseNtfn {
|
||
|
return &TxAcceptedVerboseNtfn{
|
||
|
RawTx: rawTx,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// RelevantTxAcceptedNtfn defines the parameters to the relevanttxaccepted
|
||
|
// JSON-RPC notification.
|
||
|
type RelevantTxAcceptedNtfn struct {
|
||
|
Transaction string `json:"transaction"`
|
||
|
}
|
||
|
|
||
|
// NewRelevantTxAcceptedNtfn returns a new instance which can be used to issue a
|
||
|
// relevantxaccepted JSON-RPC notification.
|
||
|
func NewRelevantTxAcceptedNtfn(txHex string) *RelevantTxAcceptedNtfn {
|
||
|
return &RelevantTxAcceptedNtfn{Transaction: txHex}
|
||
|
}
|
||
|
|
||
|
func init() {
|
||
|
// The commands in this file are only usable by websockets and are
|
||
|
// notifications.
|
||
|
flags := UFWebsocketOnly | UFNotification
|
||
|
|
||
|
MustRegisterCmd(BlockConnectedNtfnMethod, (*BlockConnectedNtfn)(nil), flags)
|
||
|
MustRegisterCmd(BlockDisconnectedNtfnMethod, (*BlockDisconnectedNtfn)(nil), flags)
|
||
|
MustRegisterCmd(FilteredBlockConnectedNtfnMethod, (*FilteredBlockConnectedNtfn)(nil), flags)
|
||
|
MustRegisterCmd(FilteredBlockDisconnectedNtfnMethod, (*FilteredBlockDisconnectedNtfn)(nil), flags)
|
||
|
MustRegisterCmd(RecvTxNtfnMethod, (*RecvTxNtfn)(nil), flags)
|
||
|
MustRegisterCmd(RedeemingTxNtfnMethod, (*RedeemingTxNtfn)(nil), flags)
|
||
|
MustRegisterCmd(RescanFinishedNtfnMethod, (*RescanFinishedNtfn)(nil), flags)
|
||
|
MustRegisterCmd(RescanProgressNtfnMethod, (*RescanProgressNtfn)(nil), flags)
|
||
|
MustRegisterCmd(TxAcceptedNtfnMethod, (*TxAcceptedNtfn)(nil), flags)
|
||
|
MustRegisterCmd(TxAcceptedVerboseNtfnMethod, (*TxAcceptedVerboseNtfn)(nil), flags)
|
||
|
MustRegisterCmd(RelevantTxAcceptedNtfnMethod, (*RelevantTxAcceptedNtfn)(nil), flags)
|
||
|
}
|