Documentation ¶
Index ¶
- Variables
- func GetChainParams(chain string) *chaincfg.Params
- func IsErrBlockNotFound(err *bchain.RPCError) bool
- func IsMissingTx(err *bchain.RPCError) bool
- func NewBitcoinRPC(config json.RawMessage, pushHandler func(bchain.NotificationType)) (bchain.BlockChain, error)
- func TryParseOPReturn(script []byte) string
- type BitcoinParser
- func (p *BitcoinParser) DerivationBasePath(xpub string) (string, error)
- func (p *BitcoinParser) DeriveAddressDescriptors(xpub string, change uint32, indexes []uint32) ([]bchain.AddressDescriptor, error)
- func (p *BitcoinParser) DeriveAddressDescriptorsFromTo(xpub string, change uint32, fromIndex uint32, toIndex uint32) ([]bchain.AddressDescriptor, error)
- func (p *BitcoinParser) GetAddrDescFromAddress(address string) (bchain.AddressDescriptor, error)
- func (p *BitcoinParser) GetAddrDescFromVout(output *bchain.Vout) (bchain.AddressDescriptor, error)
- func (p *BitcoinParser) GetAddressesFromAddrDesc(addrDesc bchain.AddressDescriptor) ([]string, bool, error)
- func (p *BitcoinParser) GetScriptFromAddrDesc(addrDesc bchain.AddressDescriptor) ([]byte, error)
- func (p *BitcoinParser) PackTx(tx *bchain.Tx, height uint32, blockTime int64) ([]byte, error)
- func (p *BitcoinParser) ParseBlock(b []byte) (*bchain.Block, error)
- func (p *BitcoinParser) ParseTx(b []byte) (*bchain.Tx, error)
- func (p *BitcoinParser) TxFromMsgTx(t *wire.MsgTx, parseAddresses bool) bchain.Tx
- func (p *BitcoinParser) UnpackTx(buf []byte) (*bchain.Tx, uint32, error)
- type BitcoinRPC
- func (b *BitcoinRPC) Call(req interface{}, res interface{}) error
- func (b *BitcoinRPC) EstimateFee(blocks int) (big.Int, error)
- func (b *BitcoinRPC) EstimateSmartFee(blocks int, conservative bool) (big.Int, error)
- func (b *BitcoinRPC) GetBestBlockHash() (string, error)
- func (b *BitcoinRPC) GetBestBlockHeight() (uint32, error)
- func (b *BitcoinRPC) GetBlock(hash string, height uint32) (*bchain.Block, error)
- func (b *BitcoinRPC) GetBlockFull(hash string) (*bchain.Block, error)
- func (b *BitcoinRPC) GetBlockHash(height uint32) (string, error)
- func (b *BitcoinRPC) GetBlockHeader(hash string) (*bchain.BlockHeader, error)
- func (b *BitcoinRPC) GetBlockInfo(hash string) (*bchain.BlockInfo, error)
- func (b *BitcoinRPC) GetBlockRaw(hash string) ([]byte, error)
- func (b *BitcoinRPC) GetBlockWithoutHeader(hash string, height uint32) (*bchain.Block, error)
- func (b *BitcoinRPC) GetChainInfo() (*bchain.ChainInfo, error)
- func (b *BitcoinRPC) GetChainInfoAndInitializeMempool(bc bchain.BlockChain) (string, error)
- func (b *BitcoinRPC) GetCoinName() string
- func (b *BitcoinRPC) GetMempool() ([]string, error)
- func (b *BitcoinRPC) GetMempoolEntry(txid string) (*bchain.MempoolEntry, error)
- func (b *BitcoinRPC) GetMempoolTransactions(address string) ([]bchain.Outpoint, error)
- func (b *BitcoinRPC) GetMempoolTransactionsForAddrDesc(addrDesc bchain.AddressDescriptor) ([]bchain.Outpoint, error)
- func (b *BitcoinRPC) GetSubversion() string
- func (b *BitcoinRPC) GetTransaction(txid string) (*bchain.Tx, error)
- func (b *BitcoinRPC) GetTransactionForMempool(txid string) (*bchain.Tx, error)
- func (b *BitcoinRPC) GetTransactionSpecific(tx *bchain.Tx) (json.RawMessage, error)
- func (b *BitcoinRPC) Initialize() error
- func (b *BitcoinRPC) ResyncMempool(onNewTxAddr bchain.OnNewTxAddrFunc) (int, error)
- func (b *BitcoinRPC) SendRawTransaction(tx string) (string, error)
- func (b *BitcoinRPC) Shutdown(ctx context.Context) error
- type BlockThin
- type CmdEstimateFee
- type CmdEstimateSmartFee
- type CmdGetBestBlockHash
- type CmdGetBlock
- type CmdGetBlockChainInfo
- type CmdGetBlockCount
- type CmdGetBlockHash
- type CmdGetBlockHeader
- type CmdGetMempool
- type CmdGetMempoolEntry
- type CmdGetNetworkInfo
- type CmdGetRawTransaction
- type CmdSendRawTransaction
- type Configuration
- type JSONMarshalerV1
- type JSONMarshalerV2
- type OutputScriptToAddressesFunc
- type RPCMarshaler
- type ResEstimateFee
- type ResEstimateSmartFee
- type ResGetBestBlockHash
- type ResGetBlockChainInfo
- type ResGetBlockCount
- type ResGetBlockFull
- type ResGetBlockHash
- type ResGetBlockHeader
- type ResGetBlockInfo
- type ResGetBlockRaw
- type ResGetBlockThin
- type ResGetMempool
- type ResGetMempoolEntry
- type ResGetNetworkInfo
- type ResGetRawTransaction
- type ResGetRawTransactionNonverbose
- type ResSendRawTransaction
Constants ¶
This section is empty.
Variables ¶
var ErrInvalidValue = errors.New("Invalid value to marshal")
ErrInvalidValue is error returned by JSONMarshalerV1.Marshal if the passed structure contains invalid value
Functions ¶
func GetChainParams ¶
GetChainParams contains network parameters for the main Bitcoin network, the regression test Bitcoin network, the test Bitcoin network and the simulation test Bitcoin network, in this order
func IsErrBlockNotFound ¶ added in v0.2.0
func IsMissingTx ¶ added in v0.2.0
func NewBitcoinRPC ¶
func NewBitcoinRPC(config json.RawMessage, pushHandler func(bchain.NotificationType)) (bchain.BlockChain, error)
NewBitcoinRPC returns new BitcoinRPC instance.
func TryParseOPReturn ¶ added in v0.1.0
TryParseOPReturn tries to process OP_RETURN script and return its string representation
Types ¶
type BitcoinParser ¶
type BitcoinParser struct { *bchain.BaseParser Params *chaincfg.Params OutputScriptToAddressesFunc OutputScriptToAddressesFunc XPubMagic uint32 XPubMagicSegwitP2sh uint32 XPubMagicSegwitNative uint32 Slip44 uint32 }
BitcoinParser handle
func NewBitcoinParser ¶
func NewBitcoinParser(params *chaincfg.Params, c *Configuration) *BitcoinParser
NewBitcoinParser returns new BitcoinParser instance
func (*BitcoinParser) DerivationBasePath ¶ added in v0.2.1
func (p *BitcoinParser) DerivationBasePath(xpub string) (string, error)
DerivationBasePath returns base path of xpub
func (*BitcoinParser) DeriveAddressDescriptors ¶ added in v0.2.1
func (p *BitcoinParser) DeriveAddressDescriptors(xpub string, change uint32, indexes []uint32) ([]bchain.AddressDescriptor, error)
DeriveAddressDescriptors derives address descriptors from given xpub for listed indexes
func (*BitcoinParser) DeriveAddressDescriptorsFromTo ¶ added in v0.2.1
func (p *BitcoinParser) DeriveAddressDescriptorsFromTo(xpub string, change uint32, fromIndex uint32, toIndex uint32) ([]bchain.AddressDescriptor, error)
DeriveAddressDescriptorsFromTo derives address descriptors from given xpub for addresses in index range
func (*BitcoinParser) GetAddrDescFromAddress ¶ added in v0.1.0
func (p *BitcoinParser) GetAddrDescFromAddress(address string) (bchain.AddressDescriptor, error)
GetAddrDescFromAddress returns internal address representation (descriptor) of given address
func (*BitcoinParser) GetAddrDescFromVout ¶ added in v0.1.0
func (p *BitcoinParser) GetAddrDescFromVout(output *bchain.Vout) (bchain.AddressDescriptor, error)
GetAddrDescFromVout returns internal address representation (descriptor) of given transaction output
func (*BitcoinParser) GetAddressesFromAddrDesc ¶ added in v0.1.0
func (p *BitcoinParser) GetAddressesFromAddrDesc(addrDesc bchain.AddressDescriptor) ([]string, bool, error)
GetAddressesFromAddrDesc returns addresses for given address descriptor with flag if the addresses are searchable
func (*BitcoinParser) GetScriptFromAddrDesc ¶ added in v0.1.0
func (p *BitcoinParser) GetScriptFromAddrDesc(addrDesc bchain.AddressDescriptor) ([]byte, error)
GetScriptFromAddrDesc returns output script for given address descriptor
func (*BitcoinParser) ParseBlock ¶
func (p *BitcoinParser) ParseBlock(b []byte) (*bchain.Block, error)
ParseBlock parses raw block to our Block struct
func (*BitcoinParser) ParseTx ¶
func (p *BitcoinParser) ParseTx(b []byte) (*bchain.Tx, error)
ParseTx parses byte array containing transaction and returns Tx struct
func (*BitcoinParser) TxFromMsgTx ¶
TxFromMsgTx converts bitcoin wire Tx to bchain.Tx
type BitcoinRPC ¶
type BitcoinRPC struct { *bchain.BaseChain Mempool *bchain.MempoolBitcoinType ParseBlocks bool ChainConfig *Configuration RPCMarshaler RPCMarshaler // contains filtered or unexported fields }
BitcoinRPC is an interface to JSON-RPC bitcoind service.
func (*BitcoinRPC) Call ¶
func (b *BitcoinRPC) Call(req interface{}, res interface{}) error
Call calls Backend RPC interface, using RPCMarshaler interface to marshall the request
func (*BitcoinRPC) EstimateFee ¶
func (b *BitcoinRPC) EstimateFee(blocks int) (big.Int, error)
EstimateFee returns fee estimation.
func (*BitcoinRPC) EstimateSmartFee ¶
EstimateSmartFee returns fee estimation
func (*BitcoinRPC) GetBestBlockHash ¶
func (b *BitcoinRPC) GetBestBlockHash() (string, error)
GetBestBlockHash returns hash of the tip of the best-block-chain.
func (*BitcoinRPC) GetBestBlockHeight ¶
func (b *BitcoinRPC) GetBestBlockHeight() (uint32, error)
GetBestBlockHeight returns height of the tip of the best-block-chain.
func (*BitcoinRPC) GetBlockFull ¶
func (b *BitcoinRPC) GetBlockFull(hash string) (*bchain.Block, error)
GetBlockFull returns block with given hash
func (*BitcoinRPC) GetBlockHash ¶
func (b *BitcoinRPC) GetBlockHash(height uint32) (string, error)
GetBlockHash returns hash of block in best-block-chain at given height.
func (*BitcoinRPC) GetBlockHeader ¶
func (b *BitcoinRPC) GetBlockHeader(hash string) (*bchain.BlockHeader, error)
GetBlockHeader returns header of block with given hash.
func (*BitcoinRPC) GetBlockInfo ¶ added in v0.1.0
func (b *BitcoinRPC) GetBlockInfo(hash string) (*bchain.BlockInfo, error)
GetBlockInfo returns extended header (more info than in bchain.BlockHeader) with a list of txids
func (*BitcoinRPC) GetBlockRaw ¶
func (b *BitcoinRPC) GetBlockRaw(hash string) ([]byte, error)
GetBlockRaw returns block with given hash as bytes
func (*BitcoinRPC) GetBlockWithoutHeader ¶
GetBlockWithoutHeader is an optimization - it does not call GetBlockHeader to get prev, next hashes instead it sets to header only block hash and height passed in parameters
func (*BitcoinRPC) GetChainInfo ¶ added in v0.1.0
func (b *BitcoinRPC) GetChainInfo() (*bchain.ChainInfo, error)
GetChainInfo returns information about the connected backend
func (*BitcoinRPC) GetChainInfoAndInitializeMempool ¶
func (b *BitcoinRPC) GetChainInfoAndInitializeMempool(bc bchain.BlockChain) (string, error)
GetChainInfoAndInitializeMempool is called by Initialize and reused by other coins it contacts the blockchain rpc interface for the first time and if successful it connects to ZeroMQ and creates mempool handler
func (*BitcoinRPC) GetCoinName ¶
func (b *BitcoinRPC) GetCoinName() string
func (*BitcoinRPC) GetMempool ¶
func (b *BitcoinRPC) GetMempool() ([]string, error)
GetMempool returns transactions in mempool
func (*BitcoinRPC) GetMempoolEntry ¶
func (b *BitcoinRPC) GetMempoolEntry(txid string) (*bchain.MempoolEntry, error)
GetMempoolEntry returns mempool data for given transaction
func (*BitcoinRPC) GetMempoolTransactions ¶
func (b *BitcoinRPC) GetMempoolTransactions(address string) ([]bchain.Outpoint, error)
GetMempoolTransactions returns slice of mempool transactions for given address
func (*BitcoinRPC) GetMempoolTransactionsForAddrDesc ¶ added in v0.1.0
func (b *BitcoinRPC) GetMempoolTransactionsForAddrDesc(addrDesc bchain.AddressDescriptor) ([]bchain.Outpoint, error)
GetMempoolTransactionsForAddrDesc returns slice of mempool transactions for given address descriptor
func (*BitcoinRPC) GetSubversion ¶
func (b *BitcoinRPC) GetSubversion() string
func (*BitcoinRPC) GetTransaction ¶
func (b *BitcoinRPC) GetTransaction(txid string) (*bchain.Tx, error)
GetTransaction returns a transaction by the transaction ID
func (*BitcoinRPC) GetTransactionForMempool ¶
func (b *BitcoinRPC) GetTransactionForMempool(txid string) (*bchain.Tx, error)
GetTransactionForMempool returns a transaction by the transaction ID It could be optimized for mempool, i.e. without block time and confirmations
func (*BitcoinRPC) GetTransactionSpecific ¶ added in v0.1.1
func (b *BitcoinRPC) GetTransactionSpecific(tx *bchain.Tx) (json.RawMessage, error)
GetTransactionSpecific returns json as returned by backend, with all coin specific data
func (*BitcoinRPC) Initialize ¶
func (b *BitcoinRPC) Initialize() error
Initialize initializes BitcoinRPC instance.
func (*BitcoinRPC) ResyncMempool ¶
func (b *BitcoinRPC) ResyncMempool(onNewTxAddr bchain.OnNewTxAddrFunc) (int, error)
ResyncMempool gets mempool transactions and maps output scripts to transactions. ResyncMempool is not reentrant, it should be called from a single thread. Return value is number of transactions in mempool
func (*BitcoinRPC) SendRawTransaction ¶
func (b *BitcoinRPC) SendRawTransaction(tx string) (string, error)
SendRawTransaction sends raw transaction.
type BlockThin ¶ added in v0.1.0
type BlockThin struct { bchain.BlockHeader Txids []string `json:"tx"` }
type CmdEstimateFee ¶
type CmdEstimateSmartFee ¶
type CmdGetBestBlockHash ¶
type CmdGetBestBlockHash struct {
Method string `json:"method"`
}
type CmdGetBlock ¶
type CmdGetBlockChainInfo ¶
type CmdGetBlockChainInfo struct {
Method string `json:"method"`
}
type CmdGetBlockCount ¶
type CmdGetBlockCount struct {
Method string `json:"method"`
}
type CmdGetBlockHash ¶
type CmdGetBlockHeader ¶
type CmdGetMempool ¶
type CmdGetMempool struct {
Method string `json:"method"`
}
type CmdGetMempoolEntry ¶
type CmdGetNetworkInfo ¶ added in v0.1.0
type CmdGetNetworkInfo struct {
Method string `json:"method"`
}
type CmdGetRawTransaction ¶
type CmdSendRawTransaction ¶
type Configuration ¶
type Configuration struct { CoinName string `json:"coin_name"` CoinShortcut string `json:"coin_shortcut"` RPCURL string `json:"rpc_url"` RPCUser string `json:"rpc_user"` RPCPass string `json:"rpc_pass"` RPCTimeout int `json:"rpc_timeout"` Parse bool `json:"parse"` MessageQueueBinding string `json:"message_queue_binding"` Subversion string `json:"subversion"` BlockAddressesToKeep int `json:"block_addresses_to_keep"` MempoolWorkers int `json:"mempool_workers"` MempoolSubWorkers int `json:"mempool_sub_workers"` AddressFormat string `json:"address_format"` SupportsEstimateFee bool `json:"supports_estimate_fee"` SupportsEstimateSmartFee bool `json:"supports_estimate_smart_fee"` XPubMagic uint32 `json:"xpub_magic,omitempty"` XPubMagicSegwitP2sh uint32 `json:"xpub_magic_segwit_p2sh,omitempty"` XPubMagicSegwitNative uint32 `json:"xpub_magic_segwit_native,omitempty"` Slip44 uint32 `json:"slip44,omitempty"` }
Configuration represents json config file
type JSONMarshalerV1 ¶
type JSONMarshalerV1 struct{}
JSONMarshalerV1 is used for marshalling requests to legacy Bitcoin Type RPC interfaces
func (JSONMarshalerV1) Marshal ¶
func (JSONMarshalerV1) Marshal(v interface{}) ([]byte, error)
Marshal converts struct passed by parameter to JSON
type JSONMarshalerV2 ¶
type JSONMarshalerV2 struct{}
JSONMarshalerV2 is used for marshalling requests to newer Bitcoin Type RPC interfaces
func (JSONMarshalerV2) Marshal ¶
func (JSONMarshalerV2) Marshal(v interface{}) ([]byte, error)
Marshal converts struct passed by parameter to JSON
type OutputScriptToAddressesFunc ¶
OutputScriptToAddressesFunc converts ScriptPubKey to bitcoin addresses
type RPCMarshaler ¶
RPCMarshaler is used for marshalling requests to Bitcoin Type RPC interfaces
type ResEstimateFee ¶
type ResEstimateSmartFee ¶
type ResGetBestBlockHash ¶
type ResGetBlockChainInfo ¶
type ResGetBlockChainInfo struct { Error *bchain.RPCError `json:"error"` Result struct { Chain string `json:"chain"` Blocks int `json:"blocks"` Headers int `json:"headers"` Bestblockhash string `json:"bestblockhash"` Difficulty json.Number `json:"difficulty"` SizeOnDisk int64 `json:"size_on_disk"` Warnings string `json:"warnings"` } `json:"result"` }
type ResGetBlockCount ¶
type ResGetBlockFull ¶
type ResGetBlockHash ¶
type ResGetBlockHeader ¶
type ResGetBlockHeader struct { Error *bchain.RPCError `json:"error"` Result bchain.BlockHeader `json:"result"` }
type ResGetBlockInfo ¶ added in v0.1.0
type ResGetBlockRaw ¶
type ResGetBlockThin ¶
type ResGetMempool ¶
type ResGetMempoolEntry ¶
type ResGetMempoolEntry struct { Error *bchain.RPCError `json:"error"` Result *bchain.MempoolEntry `json:"result"` }
type ResGetNetworkInfo ¶ added in v0.1.0
type ResGetNetworkInfo struct { Error *bchain.RPCError `json:"error"` Result struct { Version json.Number `json:"version"` Subversion json.Number `json:"subversion"` ProtocolVersion json.Number `json:"protocolversion"` Timeoffset float64 `json:"timeoffset"` Warnings string `json:"warnings"` } `json:"result"` }
type ResGetRawTransaction ¶
type ResGetRawTransaction struct { Error *bchain.RPCError `json:"error"` Result json.RawMessage `json:"result"` }