65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
|
package electrum
|
||
|
|
||
|
import "context"
|
||
|
|
||
|
type basicResp struct {
|
||
|
Result string `json:"result"`
|
||
|
}
|
||
|
|
||
|
// GetFeeResp represents the response to GetFee().
|
||
|
type GetFeeResp struct {
|
||
|
Result float32 `json:"result"`
|
||
|
}
|
||
|
|
||
|
// GetFee returns the estimated transaction fee per kilobytes for a transaction
|
||
|
// to be confirmed within a target number of blocks.
|
||
|
// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-estimatefee
|
||
|
func (s *Client) GetFee(ctx context.Context, target uint32) (float32, error) {
|
||
|
var resp GetFeeResp
|
||
|
|
||
|
err := s.request(ctx, "blockchain.estimatefee", []interface{}{target}, &resp)
|
||
|
if err != nil {
|
||
|
return -1, err
|
||
|
}
|
||
|
|
||
|
return resp.Result, err
|
||
|
}
|
||
|
|
||
|
// GetRelayFee returns the minimum fee a transaction must pay to be accepted into the
|
||
|
// remote server memory pool.
|
||
|
// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-relayfee
|
||
|
func (s *Client) GetRelayFee(ctx context.Context) (float32, error) {
|
||
|
var resp GetFeeResp
|
||
|
|
||
|
err := s.request(ctx, "blockchain.relayfee", []interface{}{}, &resp)
|
||
|
if err != nil {
|
||
|
return -1, err
|
||
|
}
|
||
|
|
||
|
return resp.Result, err
|
||
|
}
|
||
|
|
||
|
// GetFeeHistogramResp represents the response to GetFee().
|
||
|
type getFeeHistogramResp struct {
|
||
|
Result [][2]uint64 `json:"result"`
|
||
|
}
|
||
|
|
||
|
// GetFeeHistogram returns a histogram of the fee rates paid by transactions in the
|
||
|
// memory pool, weighted by transacation size.
|
||
|
// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#mempool-get-fee-histogram
|
||
|
func (s *Client) GetFeeHistogram(ctx context.Context) (map[uint32]uint64, error) {
|
||
|
var resp getFeeHistogramResp
|
||
|
|
||
|
err := s.request(ctx, "mempool.get_fee_histogram", []interface{}{}, &resp)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
feeMap := make(map[uint32]uint64)
|
||
|
for i := 0; i < len(resp.Result); i++ {
|
||
|
feeMap[uint32(resp.Result[i][0])] = resp.Result[i][1]
|
||
|
}
|
||
|
|
||
|
return feeMap, err
|
||
|
}
|