btc

package
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 12, 2018 License: AGPL-3.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var InvalidValue = errors.New("Invalid value to marshal")

Functions

func GetChainParams

func GetChainParams(chain string) *chaincfg.Params

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 NewBitcoinRPC

func NewBitcoinRPC(config json.RawMessage, pushHandler func(bchain.NotificationType)) (bchain.BlockChain, error)

NewBitcoinRPC returns new BitcoinRPC instance.

Types

type BitcoinParser

type BitcoinParser struct {
	*bchain.BaseParser
	Params                      *chaincfg.Params
	OutputScriptToAddressesFunc OutputScriptToAddressesFunc
}

BitcoinParser handle

func NewBitcoinParser

func NewBitcoinParser(params *chaincfg.Params, c *Configuration) *BitcoinParser

NewBitcoinParser returns new BitcoinParser instance

func (*BitcoinParser) AddressToOutputScript

func (p *BitcoinParser) AddressToOutputScript(address string) ([]byte, error)

AddressToOutputScript converts bitcoin address to ScriptPubKey

func (*BitcoinParser) GetAddrIDFromAddress

func (p *BitcoinParser) GetAddrIDFromAddress(address string) ([]byte, error)

GetAddrIDFromAddress returns internal address representation of given address

func (*BitcoinParser) GetAddrIDFromVout

func (p *BitcoinParser) GetAddrIDFromVout(output *bchain.Vout) ([]byte, error)

GetAddrIDFromVout returns internal address representation of given transaction output

func (*BitcoinParser) OutputScriptToAddresses

func (p *BitcoinParser) OutputScriptToAddresses(script []byte) ([]string, error)

OutputScriptToAddresses converts ScriptPubKey to bitcoin addresses

func (*BitcoinParser) PackTx

func (p *BitcoinParser) PackTx(tx *bchain.Tx, height uint32, blockTime int64) ([]byte, error)

PackTx packs transaction to byte array

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

func (p *BitcoinParser) TxFromMsgTx(t *wire.MsgTx, parseAddresses bool) bchain.Tx

func (*BitcoinParser) UnpackTx

func (p *BitcoinParser) UnpackTx(buf []byte) (*bchain.Tx, uint32, error)

UnpackTx unpacks transaction from byte array

type BitcoinRPC

type BitcoinRPC struct {
	Parser      bchain.BlockChainParser
	Testnet     bool
	Network     string
	Mempool     *bchain.UTXOMempool
	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

func (*BitcoinRPC) EstimateFee

func (b *BitcoinRPC) EstimateFee(blocks int) (float64, error)

EstimateFee returns fee estimation.

func (*BitcoinRPC) EstimateSmartFee

func (b *BitcoinRPC) EstimateSmartFee(blocks int, conservative bool) (float64, error)

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) GetBlock

func (b *BitcoinRPC) GetBlock(hash string, height uint32) (*bchain.Block, error)

GetBlock returns block with given hash.

func (*BitcoinRPC) GetBlockChainInfo

func (b *BitcoinRPC) GetBlockChainInfo() (string, error)

GetBlockChainInfo returns the name of the block chain: main/test/regtest.

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) GetBlockRaw

func (b *BitcoinRPC) GetBlockRaw(hash string) ([]byte, error)

GetBlockRaw returns block with given hash as bytes.

func (*BitcoinRPC) GetBlockWithoutHeader

func (b *BitcoinRPC) GetBlockWithoutHeader(hash string, height uint32) (*bchain.Block, error)

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) 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) GetChainParser

func (b *BitcoinRPC) GetChainParser() bchain.BlockChainParser

GetChainParser returns BlockChainParser

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) ([]string, error)

GetMempoolTransactions returns slice of mempool transactions for given address.

func (*BitcoinRPC) GetNetworkName

func (b *BitcoinRPC) GetNetworkName() string

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) Initialize

func (b *BitcoinRPC) Initialize() error

Initialize initializes BitcoinRPC instance.

func (*BitcoinRPC) IsTestnet

func (b *BitcoinRPC) IsTestnet() bool

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. It returns number of transactions in mempool

func (*BitcoinRPC) SendRawTransaction

func (b *BitcoinRPC) SendRawTransaction(tx string) (string, error)

SendRawTransaction sends raw transaction.

func (*BitcoinRPC) Shutdown

func (b *BitcoinRPC) Shutdown(ctx context.Context) error

type CmdEstimateFee

type CmdEstimateFee struct {
	Method string `json:"method"`
	Params struct {
		Blocks int `json:"nblocks"`
	} `json:"params"`
}

type CmdEstimateSmartFee

type CmdEstimateSmartFee struct {
	Method string `json:"method"`
	Params struct {
		ConfTarget   int    `json:"conf_target"`
		EstimateMode string `json:"estimate_mode"`
	} `json:"params"`
}

type CmdGetBestBlockHash

type CmdGetBestBlockHash struct {
	Method string `json:"method"`
}

type CmdGetBlock

type CmdGetBlock struct {
	Method string `json:"method"`
	Params struct {
		BlockHash string `json:"blockhash"`
		Verbosity int    `json:"verbosity"`
	} `json:"params"`
}

type CmdGetBlockChainInfo

type CmdGetBlockChainInfo struct {
	Method string `json:"method"`
}

type CmdGetBlockCount

type CmdGetBlockCount struct {
	Method string `json:"method"`
}

type CmdGetBlockHash

type CmdGetBlockHash struct {
	Method string `json:"method"`
	Params struct {
		Height uint32 `json:"height"`
	} `json:"params"`
}

type CmdGetBlockHeader

type CmdGetBlockHeader struct {
	Method string `json:"method"`
	Params struct {
		BlockHash string `json:"blockhash"`
		Verbose   bool   `json:"verbose"`
	} `json:"params"`
}

type CmdGetMempool

type CmdGetMempool struct {
	Method string `json:"method"`
}

type CmdGetMempoolEntry

type CmdGetMempoolEntry struct {
	Method string   `json:"method"`
	Params []string `json:"params"`
}

type CmdGetRawTransaction

type CmdGetRawTransaction struct {
	Method string `json:"method"`
	Params struct {
		Txid    string `json:"txid"`
		Verbose bool   `json:"verbose"`
	} `json:"params"`
}

type CmdSendRawTransaction

type CmdSendRawTransaction struct {
	Method string   `json:"method"`
	Params []string `json:"params"`
}

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"`
}

type JSONMarshalerV1

type JSONMarshalerV1 struct{}

func (JSONMarshalerV1) Marshal

func (JSONMarshalerV1) Marshal(v interface{}) ([]byte, error)

type JSONMarshalerV2

type JSONMarshalerV2 struct{}

func (JSONMarshalerV2) Marshal

func (JSONMarshalerV2) Marshal(v interface{}) ([]byte, error)

type OutputScriptToAddressesFunc

type OutputScriptToAddressesFunc func(script []byte, params *chaincfg.Params) ([]string, error)

OutputScriptToAddressesFunc converts ScriptPubKey to bitcoin addresses

type RPCMarshaler

type RPCMarshaler interface {
	Marshal(v interface{}) ([]byte, error)
}

type ResEstimateFee

type ResEstimateFee struct {
	Error  *bchain.RPCError `json:"error"`
	Result float64          `json:"result"`
}

type ResEstimateSmartFee

type ResEstimateSmartFee struct {
	Error  *bchain.RPCError `json:"error"`
	Result struct {
		Feerate float64 `json:"feerate"`
		Blocks  int     `json:"blocks"`
	} `json:"result"`
}

type ResGetBestBlockHash

type ResGetBestBlockHash struct {
	Error  *bchain.RPCError `json:"error"`
	Result string           `json:"result"`
}

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"`
	} `json:"result"`
}

type ResGetBlockCount

type ResGetBlockCount struct {
	Error  *bchain.RPCError `json:"error"`
	Result uint32           `json:"result"`
}

type ResGetBlockFull

type ResGetBlockFull struct {
	Error  *bchain.RPCError `json:"error"`
	Result bchain.Block     `json:"result"`
}

type ResGetBlockHash

type ResGetBlockHash struct {
	Error  *bchain.RPCError `json:"error"`
	Result string           `json:"result"`
}

type ResGetBlockHeader

type ResGetBlockHeader struct {
	Error  *bchain.RPCError   `json:"error"`
	Result bchain.BlockHeader `json:"result"`
}

type ResGetBlockRaw

type ResGetBlockRaw struct {
	Error  *bchain.RPCError `json:"error"`
	Result string           `json:"result"`
}

type ResGetBlockThin

type ResGetBlockThin struct {
	Error  *bchain.RPCError `json:"error"`
	Result bchain.ThinBlock `json:"result"`
}

type ResGetMempool

type ResGetMempool struct {
	Error  *bchain.RPCError `json:"error"`
	Result []string         `json:"result"`
}

type ResGetMempoolEntry

type ResGetMempoolEntry struct {
	Error  *bchain.RPCError     `json:"error"`
	Result *bchain.MempoolEntry `json:"result"`
}

type ResGetRawTransaction

type ResGetRawTransaction struct {
	Error  *bchain.RPCError `json:"error"`
	Result json.RawMessage  `json:"result"`
}

type ResGetRawTransactionNonverbose

type ResGetRawTransactionNonverbose struct {
	Error  *bchain.RPCError `json:"error"`
	Result string           `json:"result"`
}

type ResSendRawTransaction

type ResSendRawTransaction struct {
	Error  *bchain.RPCError `json:"error"`
	Result string           `json:"result"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL