initial commit
This commit is contained in:
157
electrum/transaction.go
Normal file
157
electrum/transaction.go
Normal file
@@ -0,0 +1,157 @@
|
||||
package electrum
|
||||
|
||||
import "context"
|
||||
|
||||
// BroadcastTransaction sends a raw transaction to the remote server to
|
||||
// be broadcasted on the server network.
|
||||
// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-broadcast
|
||||
func (s *Client) BroadcastTransaction(ctx context.Context, rawTx string) (string, error) {
|
||||
resp := &basicResp{}
|
||||
err := s.request(ctx, "blockchain.transaction.broadcast", []interface{}{rawTx}, &resp)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return resp.Result, nil
|
||||
}
|
||||
|
||||
// GetTransactionResp represents the response to GetTransaction().
|
||||
type GetTransactionResp struct {
|
||||
Result *GetTransactionResult `json:"result"`
|
||||
}
|
||||
|
||||
// GetTransactionResult represents the content of the result field in the response to GetTransaction().
|
||||
type GetTransactionResult struct {
|
||||
Blockhash string `json:"blockhash"`
|
||||
Blocktime uint64 `json:"blocktime"`
|
||||
Confirmations int32 `json:"confirmations"`
|
||||
Hash string `json:"hash"`
|
||||
Hex string `json:"hex"`
|
||||
Locktime uint32 `json:"locktime"`
|
||||
Size uint32 `json:"size"`
|
||||
Time uint64 `json:"time"`
|
||||
Version uint32 `json:"version"`
|
||||
Vin []Vin `json:"vin"`
|
||||
Vout []Vout `json:"vout"`
|
||||
Merkle GetMerkleProofResult `json:"merkle,omitempty"` // For protocol v1.5 and up.
|
||||
}
|
||||
|
||||
// Vin represents the input side of a transaction.
|
||||
type Vin struct {
|
||||
Coinbase string `json:"coinbase"`
|
||||
ScriptSig *ScriptSig `json:"scriptsig"`
|
||||
Sequence uint32 `json:"sequence"`
|
||||
TxID string `json:"txid"`
|
||||
Vout uint32 `json:"vout"`
|
||||
}
|
||||
|
||||
// ScriptSig represents the signature script for that transaction input.
|
||||
type ScriptSig struct {
|
||||
Asm string `json:"asm"`
|
||||
Hex string `json:"hex"`
|
||||
}
|
||||
|
||||
// Vout represents the output side of a transaction.
|
||||
type Vout struct {
|
||||
N uint32 `json:"n"`
|
||||
ScriptPubkey ScriptPubkey `json:"scriptpubkey"`
|
||||
Value float64 `json:"value"`
|
||||
}
|
||||
|
||||
// ScriptPubkey represents the script of that transaction output.
|
||||
type ScriptPubkey struct {
|
||||
Addresses []string `json:"addresses,omitempty"`
|
||||
Asm string `json:"asm"`
|
||||
Hex string `json:"hex,omitempty"`
|
||||
ReqSigs uint32 `json:"reqsigs,omitempty"`
|
||||
Type string `json:"type"`
|
||||
}
|
||||
|
||||
// GetTransaction gets the detailed information for a transaction.
|
||||
// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get
|
||||
func (s *Client) GetTransaction(ctx context.Context, txHash string) (*GetTransactionResult, error) {
|
||||
var resp GetTransactionResp
|
||||
|
||||
err := s.request(ctx, "blockchain.transaction.get", []interface{}{txHash, true}, &resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.Result, nil
|
||||
}
|
||||
|
||||
// GetRawTransaction gets a raw encoded transaction.
|
||||
// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get
|
||||
func (s *Client) GetRawTransaction(ctx context.Context, txHash string) (string, error) {
|
||||
var resp basicResp
|
||||
|
||||
err := s.request(ctx, "blockchain.transaction.get", []interface{}{txHash, false}, &resp)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return resp.Result, nil
|
||||
}
|
||||
|
||||
// GetMerkleProofResp represents the response to GetMerkleProof().
|
||||
type GetMerkleProofResp struct {
|
||||
Result *GetMerkleProofResult `json:"result"`
|
||||
}
|
||||
|
||||
// GetMerkleProofResult represents the content of the result field in the response to GetMerkleProof().
|
||||
type GetMerkleProofResult struct {
|
||||
Merkle []string `json:"merkle"`
|
||||
Height uint32 `json:"block_height"`
|
||||
Position uint32 `json:"pos"`
|
||||
}
|
||||
|
||||
// GetMerkleProof returns the merkle proof for a confirmed transaction.
|
||||
// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle
|
||||
func (s *Client) GetMerkleProof(ctx context.Context, txHash string, height uint32) (*GetMerkleProofResult, error) {
|
||||
var resp GetMerkleProofResp
|
||||
|
||||
err := s.request(ctx, "blockchain.transaction.get_merkle", []interface{}{txHash, height}, &resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.Result, err
|
||||
}
|
||||
|
||||
// GetHashFromPosition returns the transaction hash for a specific position in a block.
|
||||
// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-id-from-pos
|
||||
func (s *Client) GetHashFromPosition(ctx context.Context, height, position uint32) (string, error) {
|
||||
var resp basicResp
|
||||
|
||||
err := s.request(ctx, "blockchain.transaction.id_from_pos", []interface{}{height, position, false}, &resp)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return resp.Result, err
|
||||
}
|
||||
|
||||
// GetMerkleProofFromPosResp represents the response to GetMerkleProofFromPosition().
|
||||
type GetMerkleProofFromPosResp struct {
|
||||
Result *GetMerkleProofFromPosResult `json:"result"`
|
||||
}
|
||||
|
||||
// GetMerkleProofFromPosResult represents the content of the result field in the response
|
||||
// to GetMerkleProofFromPosition().
|
||||
type GetMerkleProofFromPosResult struct {
|
||||
Hash string `json:"tx_hash"`
|
||||
Merkle []string `json:"merkle"`
|
||||
}
|
||||
|
||||
// GetMerkleProofFromPosition returns the merkle proof for a specific position in a block.
|
||||
// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-id-from-pos
|
||||
func (s *Client) GetMerkleProofFromPosition(ctx context.Context, height, position uint32) (*GetMerkleProofFromPosResult, error) {
|
||||
var resp GetMerkleProofFromPosResp
|
||||
|
||||
err := s.request(ctx, "blockchain.transaction.id_from_pos", []interface{}{height, position, true}, &resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.Result, err
|
||||
}
|
Reference in New Issue
Block a user