horizonclient

package
v0.0.0-...-fb9541f Latest Latest
Warning

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

Go to latest
Published: Mar 27, 2020 License: Apache-2.0 Imports: 23 Imported by: 0

README

horizonclient

horizonclient is a Paydex Go SDK package that provides client access to a horizon server. It supports all endpoints exposed by the horizon API.

This project is maintained by the Paydex Development Foundation.

Getting Started

This library is aimed at developers building Go applications that interact with the Paydex network. It allows users to query the network and submit transactions to the network. The recommended transaction builder for Go programmers is txnbuild. Together, these two libraries provide a complete Paydex SDK.

Prerequisites
  • Go 1.12 or greater
  • Modules to manage dependencies
Installing
  • go get github.com/paydex-core/paydex-go/clients/horizonclient
Usage
    ...
    import hClient "github.com/paydex-core/paydex-go/clients/horizonclient"
    ...

    // Use the default pubnet client
    client := hClient.DefaultPublicNetClient

    // Create an account request
    accountRequest := hClient.AccountRequest{AccountID: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU"}

    // Load the account detail from the network
    account, err := client.AccountDetail(accountRequest)
    if err != nil {
        fmt.Println(err)
        return
    }
    // Account contains information about the paydex account
    fmt.Print(account)

For more examples, refer to the documentation.

Running the tests

Run the unit tests from the package directory: go test

Contributing

Please read Code of Conduct to understand this project's communication rules.

To submit improvements and fixes to this library, please see CONTRIBUTING.

License

This project is licensed under the Apache License - see the LICENSE file for details.

Documentation

Overview

Package horizonclient provides client access to a Horizon server, allowing an application to post transactions and look up ledger information.

This library provides an interface to the Paydex Horizon service. It supports the building of Go applications on top of the Paydex network (https://www.paydex.org/). Transactions may be constructed using the sister package to this one, txnbuild (https://github.com/paydex-core/paydex-go/tree/master/txnbuild), and then submitted with this client to any Horizon instance for processing onto the ledger. Together, these two libraries provide a complete Paydex SDK.

For more information and further examples, see https://www.paydex.org/developers/go/reference/index.html.

Index

Examples

Constants

View Source
const (
	// OrderAsc represents an ascending order parameter
	OrderAsc Order = "asc"
	// OrderDesc represents an descending order parameter
	OrderDesc Order = "desc"
	// AssetType4 represents an asset type that is 4 characters long
	AssetType4 AssetType = "credit_alphanum4"
	// AssetType12 represents an asset type that is 12 characters long
	AssetType12 AssetType = "credit_alphanum12"
	// AssetTypeNative represents the asset type for Paydex Lumens (XLM)
	AssetTypeNative AssetType = "native"
)

Variables

View Source
var (
	// ErrResultCodesNotPopulated is the error returned from a call to
	// ResultCodes() against a `Problem` value that doesn't have the
	// "result_codes" extra field populated when it is expected to be.
	ErrResultCodesNotPopulated = errors.New("result_codes not populated")

	// ErrEnvelopeNotPopulated is the error returned from a call to
	// Envelope() against a `Problem` value that doesn't have the
	// "envelope_xdr" extra field populated when it is expected to be.
	ErrEnvelopeNotPopulated = errors.New("envelope_xdr not populated")

	// ErrResultNotPopulated is the error returned from a call to
	// Result() against a `Problem` value that doesn't have the
	// "result_xdr" extra field populated when it is expected to be.
	ErrResultNotPopulated = errors.New("result_xdr not populated")

	// HorizonTimeOut is the default number of seconds before a request to horizon times out.
	HorizonTimeOut = time.Duration(60)

	// MinuteResolution represents 1 minute used as `resolution` parameter in trade aggregation
	MinuteResolution = time.Duration(1 * time.Minute)

	// FiveMinuteResolution represents 5 minutes used as `resolution` parameter in trade aggregation
	FiveMinuteResolution = time.Duration(5 * time.Minute)

	// FifteenMinuteResolution represents 15 minutes used as `resolution` parameter in trade aggregation
	FifteenMinuteResolution = time.Duration(15 * time.Minute)

	// HourResolution represents 1 hour used as `resolution` parameter in trade aggregation
	HourResolution = time.Duration(1 * time.Hour)

	// DayResolution represents 1 day used as `resolution` parameter in trade aggregation
	DayResolution = time.Duration(24 * time.Hour)

	// WeekResolution represents 1 week used as `resolution` parameter in trade aggregation
	WeekResolution = time.Duration(168 * time.Hour)
)
View Source
var DefaultPublicNetClient = &Client{
	HorizonURL:     "https://horizon.paydex.org/",
	HTTP:           http.DefaultClient,
	horizonTimeOut: HorizonTimeOut,
}

DefaultPublicNetClient is a default client to connect to public network.

View Source
var DefaultTestNetClient = &Client{
	HorizonURL:     "https://horizon-testnet.paydex.org/",
	HTTP:           http.DefaultClient,
	horizonTimeOut: HorizonTimeOut,
	isTestNet:      true,
}

DefaultTestNetClient is a default client to connect to test network.

View Source
var ServerTimeMap = make(map[string]ServerTimeRecord)

ServerTimeMap holds the ServerTimeRecord for different horizon instances.

Functions

This section is empty.

Types

type AccountRequest

type AccountRequest struct {
	AccountID string
	DataKey   string
}

AccountRequest struct contains data for making requests to the accounts endpoint of a horizon server. "AccountID" and "DataKey" fields should both be set when retrieving AccountData. When getting the AccountDetail, only "AccountID" needs to be set.

func (AccountRequest) BuildURL

func (ar AccountRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the AccountRequest struct. If only AccountID is present, then the endpoint for account details is returned. If both AccounId and DataKey are present, then the endpoint for getting account data is returned

type AssetRequest

type AssetRequest struct {
	ForAssetCode   string
	ForAssetIssuer string
	Order          Order
	Cursor         string
	Limit          uint
}

AssetRequest struct contains data for getting asset details from a horizon server. If "ForAssetCode" and "ForAssetIssuer" are not set, it returns all assets. The query parameters (Order, Cursor and Limit) are optional. All or none can be set.

func (AssetRequest) BuildURL

func (ar AssetRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the AssetRequest struct. If no data is set, it defaults to the build the URL for all assets

type AssetType

type AssetType string

AssetType represents `asset_type` param in queries

type Client

type Client struct {
	// URL of Horizon server to connect
	HorizonURL string

	// HTTP client to make requests with
	HTTP HTTP

	// AppName is the name of the application using the horizonclient package
	AppName string

	// AppVersion is the version of the application using the horizonclient package
	AppVersion string
	// contains filtered or unexported fields
}

Client struct contains data for creating a horizon client that connects to the paydex network.

func (*Client) AccountData

func (c *Client) AccountData(request AccountRequest) (accountData hProtocol.AccountData, err error)

AccountData returns a single data associated with a given account See https://www.paydex.org/developers/horizon/reference/endpoints/data-for-account.html

func (*Client) AccountDetail

func (c *Client) AccountDetail(request AccountRequest) (account hProtocol.Account, err error)

AccountDetail returns information for a single account. See https://www.paydex.org/developers/horizon/reference/endpoints/accounts-single.html

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	accountRequest := horizonclient.AccountRequest{AccountID: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU"}

	account, err := client.AccountDetail(accountRequest)
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Print(account)
}
Output:

func (*Client) Assets

func (c *Client) Assets(request AssetRequest) (assets hProtocol.AssetsPage, err error)

Assets returns asset information. See https://www.paydex.org/developers/horizon/reference/endpoints/assets-all.html

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// assets for asset issuer
	assetRequest := horizonclient.AssetRequest{ForAssetIssuer: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU"}
	asset, err := client.Assets(assetRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(asset)

	// all assets
	assetRequest = horizonclient.AssetRequest{}
	asset, err = client.Assets(assetRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(asset)
}
Output:

func (*Client) Effects

func (c *Client) Effects(request EffectRequest) (effects effects.EffectsPage, err error)

Effects returns effects(https://www.paydex.org/developers/horizon/reference/resources/effect.html) It can be used to return effects for an account, a ledger, an operation, a transaction and all effects on the network.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	"github.com/paydex-core/paydex-go/protocols/horizon/effects"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// effects for an account
	effectRequest := horizonclient.EffectRequest{ForAccount: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU"}
	effect, err := client.Effects(effectRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(effect)

	// all effects
	effectRequest = horizonclient.EffectRequest{}
	effect, err = client.Effects(effectRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	records := effect.Embedded.Records
	if records[0].GetType() == "account_created" {
		acc, ok := records[0].(effects.AccountCreated)
		if ok {
			fmt.Print(acc.Account)
			fmt.Print(acc.StartingBalance)
		}
	}
}
Output:

func (*Client) FeeStats

func (c *Client) FeeStats() (feestats hProtocol.FeeStats, err error)

FeeStats returns information about fees in the last 5 ledgers. See https://www.paydex.org/developers/horizon/reference/endpoints/fee-stats.html

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// horizon fees
	fees, err := client.FeeStats()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(fees)

}
Output:

func (*Client) FetchTimebounds

func (c *Client) FetchTimebounds(seconds int64) (txnbuild.Timebounds, error)

FetchTimebounds provides timebounds for N seconds from now using the server time of the horizon instance. It defaults to localtime when the server time is not available. Note that this will generate your timebounds when you init the transaction, not when you build or submit the transaction! So give yourself enough time to get the transaction built and signed before submitting.

func (*Client) Fund

func (c *Client) Fund(addr string) (txSuccess hProtocol.TransactionSuccess, err error)

Fund creates a new account funded from friendbot. It only works on test networks. See https://www.paydex.org/developers/guides/get-started/create-account.html for more information.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultTestNetClient
	// fund an account
	resp, err := client.Fund("GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(resp)
}
Output:

func (*Client) HomeDomainForAccount

func (c *Client) HomeDomainForAccount(aid string) (string, error)

HomeDomainForAccount returns the home domain for a single account.

func (*Client) HorizonTimeOut

func (c *Client) HorizonTimeOut() time.Duration

HorizonTimeOut returns the current timeout for a horizon client

func (*Client) LedgerDetail

func (c *Client) LedgerDetail(sequence uint32) (ledger hProtocol.Ledger, err error)

LedgerDetail returns information about a particular ledger for a given sequence number See https://www.paydex.org/developers/horizon/reference/endpoints/ledgers-single.html

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// details for a ledger
	sequence := uint32(12345)
	ledger, err := client.LedgerDetail(sequence)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(ledger)

}
Output:

func (*Client) Ledgers

func (c *Client) Ledgers(request LedgerRequest) (ledgers hProtocol.LedgersPage, err error)

Ledgers returns information about all ledgers. See https://www.paydex.org/developers/horizon/reference/endpoints/ledgers-all.html

func (*Client) Metrics

func (c *Client) Metrics() (metrics hProtocol.Metrics, err error)

Metrics returns monitoring information about a horizon server See https://www.paydex.org/developers/horizon/reference/endpoints/metrics.html

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// horizon metrics
	metrics, err := client.Metrics()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(metrics)
}
Output:

func (*Client) NextAssetsPage

func (c *Client) NextAssetsPage(page hProtocol.AssetsPage) (assets hProtocol.AssetsPage, err error)

NextAssetsPage returns the next page of assets.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// assets for asset issuer
	assetRequest := horizonclient.AssetRequest{ForAssetIssuer: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU",
		Limit: 20}
	asset, err := client.Assets(assetRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(asset)

	// all assets
	assetRequest = horizonclient.AssetRequest{}
	asset, err = client.Assets(assetRequest)
	if err != nil {
		fmt.Println(err)
		return
	}

	// next page
	nextPage, err := client.NextAssetsPage(asset)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(nextPage)
}
Output:

func (*Client) NextEffectsPage

func (c *Client) NextEffectsPage(page effects.EffectsPage) (efp effects.EffectsPage, err error)

NextEffectsPage returns the next page of effects.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all effects
	effectRequest := horizonclient.EffectRequest{Limit: 20}
	efp, err := client.Effects(effectRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(efp)

	// get next pages.
	recordsFound := false
	if len(efp.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := efp
	// get the next page of records if recordsFound is true
	for recordsFound {
		// next page
		nextPage, err := client.NextEffectsPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = nextPage
		if len(nextPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(nextPage)
	}
}
Output:

func (*Client) NextLedgersPage

func (c *Client) NextLedgersPage(page hProtocol.LedgersPage) (ledgers hProtocol.LedgersPage, err error)

NextLedgersPage returns the next page of ledgers.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all ledgers
	ledgerRequest := horizonclient.LedgerRequest{Limit: 20}
	ledgers, err := client.Ledgers(ledgerRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(ledgers)

	// get next pages.
	recordsFound := false
	if len(ledgers.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := ledgers
	// get the next page of records if recordsFound is true
	for recordsFound {
		// next page
		nextPage, err := client.NextLedgersPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = nextPage
		if len(nextPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(nextPage)
	}
}
Output:

func (*Client) NextOffersPage

func (c *Client) NextOffersPage(page hProtocol.OffersPage) (offers hProtocol.OffersPage, err error)

NextOffersPage returns the next page of offers.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all offers
	offerRequest := horizonclient.OfferRequest{ForAccount: "GAQHWQYBBW272OOXNQMMLCA5WY2XAZPODGB7Q3S5OKKIXVESKO55ZQ7C", Limit: 20}
	offers, err := client.Offers(offerRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(offers)

	// get next pages.
	recordsFound := false
	if len(offers.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := offers
	// get the next page of records if recordsFound is true
	for recordsFound {
		// next page
		nextPage, err := client.NextOffersPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = nextPage
		if len(nextPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(nextPage)
	}
}
Output:

func (*Client) NextOperationsPage

func (c *Client) NextOperationsPage(page operations.OperationsPage) (operations operations.OperationsPage, err error)

NextOperationsPage returns the next page of operations.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all operations
	operationRequest := horizonclient.OperationRequest{Limit: 20}
	ops, err := client.Operations(operationRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(ops)

	// get next pages.
	recordsFound := false
	if len(ops.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := ops
	// get the next page of records if recordsFound is true
	for recordsFound {
		// next page
		nextPage, err := client.NextOperationsPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = nextPage
		if len(nextPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(nextPage)
	}
}
Output:

func (*Client) NextPaymentsPage

func (c *Client) NextPaymentsPage(page operations.OperationsPage) (operations.OperationsPage, error)

NextPaymentsPage returns the next page of payments.

func (*Client) NextTradeAggregationsPage

func (c *Client) NextTradeAggregationsPage(page hProtocol.TradeAggregationsPage) (ta hProtocol.TradeAggregationsPage, err error)

NextTradeAggregationsPage returns the next page of trade aggregations from the current trade aggregations response.

Example
package main

import (
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	testTime := time.Unix(int64(1517521726), int64(0))
	// Find trade aggregations
	ta := horizonclient.TradeAggregationRequest{
		StartTime:          testTime,
		EndTime:            testTime,
		Resolution:         horizonclient.FiveMinuteResolution,
		BaseAssetType:      horizonclient.AssetTypeNative,
		CounterAssetType:   horizonclient.AssetType4,
		CounterAssetCode:   "SLT",
		CounterAssetIssuer: "GCKA6K5PCQ6PNF5RQBF7PQDJWRHO6UOGFMRLK3DYHDOI244V47XKQ4GP",
		Order:              horizonclient.OrderDesc,
	}
	tradeAggs, err := client.TradeAggregations(ta)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(tradeAggs)

	// get next pages.
	recordsFound := false
	if len(tradeAggs.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := tradeAggs
	// get the next page of records if recordsFound is true
	for recordsFound {
		// next page
		nextPage, err := client.NextTradeAggregationsPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = nextPage
		if len(nextPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(nextPage)
	}
}
Output:

func (*Client) NextTradesPage

func (c *Client) NextTradesPage(page hProtocol.TradesPage) (trades hProtocol.TradesPage, err error)

NextTradesPage returns the next page of trades.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all trades
	tradeRequest := horizonclient.TradeRequest{Cursor: "123456", Limit: 30, Order: horizonclient.OrderAsc}
	trades, err := client.Trades(tradeRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(trades)

	// get next pages.
	recordsFound := false
	if len(trades.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := trades
	// get the next page of records if recordsFound is true
	for recordsFound {
		// next page
		nextPage, err := client.NextTradesPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = nextPage
		if len(nextPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(nextPage)
	}
}
Output:

func (*Client) NextTransactionsPage

func (c *Client) NextTransactionsPage(page hProtocol.TransactionsPage) (transactions hProtocol.TransactionsPage, err error)

NextTransactionsPage returns the next page of transactions.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all transactions
	transactionRequest := horizonclient.TransactionRequest{Limit: 20}
	transactions, err := client.Transactions(transactionRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(transactions)

	// get next pages.
	recordsFound := false
	if len(transactions.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := transactions
	// get the next page of records if recordsFound is true
	for recordsFound {
		// next page
		nextPage, err := client.NextTransactionsPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = nextPage
		if len(nextPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(nextPage)
	}
}
Output:

func (*Client) Offers

func (c *Client) Offers(request OfferRequest) (offers hProtocol.OffersPage, err error)

Offers returns information about offers made on the SDEX. See https://www.paydex.org/developers/horizon/reference/endpoints/offers-for-account.html

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	offerRequest := horizonclient.OfferRequest{
		ForAccount: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU",
		Cursor:     "now",
		Order:      horizonclient.OrderDesc,
	}
	offers, err := client.Offers(offerRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(offers)
}
Output:

func (*Client) OperationDetail

func (c *Client) OperationDetail(id string) (ops operations.Operation, err error)

OperationDetail returns a single paydex operations (https://www.pyadex.org/developers/horizon/reference/resources/operation.html) for a given operation id

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	opID := "123456"
	// operation details for an id
	ops, err := client.OperationDetail(opID)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(ops)
}
Output:

func (*Client) Operations

func (c *Client) Operations(request OperationRequest) (ops operations.OperationsPage, err error)

Operations returns paydex operations (https://www.paydex.org/developers/horizon/reference/resources/operation.html) It can be used to return operations for an account, a ledger, a transaction and all operations on the network.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	"github.com/paydex-core/paydex-go/protocols/horizon/operations"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// operations for an account
	opRequest := horizonclient.OperationRequest{ForAccount: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU"}
	ops, err := client.Operations(opRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(ops)

	// all operations
	opRequest = horizonclient.OperationRequest{Cursor: "now"}
	ops, err = client.Operations(opRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(ops)
	records := ops.Embedded.Records

	for _, value := range records {
		// prints the type
		fmt.Print(value.GetType())
		// for example if the type is change_trust
		c, ok := value.(operations.ChangeTrust)
		if ok {
			// access ChangeTrust fields
			fmt.Print(c.Trustee)
		}

	}
}
Output:

func (*Client) OrderBook

func (c *Client) OrderBook(request OrderBookRequest) (obs hProtocol.OrderBookSummary, err error)

OrderBook returns the orderbook for an asset pair (https://www.paydex.org/developers/horizon/reference/resources/orderbook.html)

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// orderbook for an asset pair, e.g XLM/NGN
	obRequest := horizonclient.OrderBookRequest{
		BuyingAssetType:    horizonclient.AssetTypeNative,
		SellingAssetCode:   "USD",
		SellingAssetType:   horizonclient.AssetType4,
		SellingAssetIssuer: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU",
	}
	obs, err := client.OrderBook(obRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(obs)
}
Output:

func (*Client) Paths

func (c *Client) Paths(request PathsRequest) (paths hProtocol.PathsPage, err error)

Paths returns the available paths to make a payment. See https://www.paydex.org/developers/horizon/reference/endpoints/path-finding.html

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// Find paths for XLM->NGN
	pr := horizonclient.PathsRequest{
		DestinationAccount:     "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU",
		DestinationAmount:      "100",
		DestinationAssetCode:   "NGN",
		DestinationAssetIssuer: "GDZST3XVCDTUJ76ZAV2HA72KYQODXXZ5PTMAPZGDHZ6CS7RO7MGG3DBM",
		DestinationAssetType:   horizonclient.AssetType4,
		SourceAccount:          "GDZST3XVCDTUJ76ZAV2HA72KYQODXXZ5PTMAPZGDHZ6CS7RO7MGG3DBM",
	}
	paths, err := client.Paths(pr)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(paths)
}
Output:

func (*Client) Payments

func (c *Client) Payments(request OperationRequest) (ops operations.OperationsPage, err error)

Payments returns paydex account_merge, create_account, path payment and payment operations. It can be used to return payments for an account, a ledger, a transaction and all payments on the network.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	"github.com/paydex-core/paydex-go/protocols/horizon/operations"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// payments for an account
	opRequest := horizonclient.OperationRequest{ForAccount: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU"}
	ops, err := client.Payments(opRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(ops)

	// all payments
	opRequest = horizonclient.OperationRequest{Cursor: "now"}
	ops, err = client.Payments(opRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(ops)
	records := ops.Embedded.Records

	for _, value := range records {
		// prints the type
		fmt.Print(value.GetType())
		// for example if the type is create_account
		c, ok := value.(operations.CreateAccount)
		if ok {
			// access create_account fields
			fmt.Print(c.StartingBalance)
		}

	}
}
Output:

func (*Client) PrevAssetsPage

func (c *Client) PrevAssetsPage(page hProtocol.AssetsPage) (assets hProtocol.AssetsPage, err error)

PrevAssetsPage returns the previous page of assets.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// assets for asset issuer
	assetRequest := horizonclient.AssetRequest{ForAssetIssuer: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU",
		Limit: 20}
	asset, err := client.Assets(assetRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(asset)

	// all assets
	assetRequest = horizonclient.AssetRequest{}
	asset, err = client.Assets(assetRequest)
	if err != nil {
		fmt.Println(err)
		return
	}

	// next page
	prevPage, err := client.PrevAssetsPage(asset)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(prevPage)
}
Output:

func (*Client) PrevEffectsPage

func (c *Client) PrevEffectsPage(page effects.EffectsPage) (efp effects.EffectsPage, err error)

PrevEffectsPage returns the previous page of effects.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all effects
	effectRequest := horizonclient.EffectRequest{Limit: 20}
	efp, err := client.Effects(effectRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(efp)

	// get prev pages.
	recordsFound := false
	if len(efp.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := efp
	// get the prev page of records if recordsFound is true
	for recordsFound {
		// prev page
		prevPage, err := client.PrevEffectsPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = prevPage
		if len(prevPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(prevPage)
	}
}
Output:

func (*Client) PrevLedgersPage

func (c *Client) PrevLedgersPage(page hProtocol.LedgersPage) (ledgers hProtocol.LedgersPage, err error)

PrevLedgersPage returns the previous page of ledgers.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all ledgers
	ledgerRequest := horizonclient.LedgerRequest{Limit: 20}
	ledgers, err := client.Ledgers(ledgerRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(ledgers)

	// get prev pages.
	recordsFound := false
	if len(ledgers.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := ledgers
	// get the prev page of records if recordsFound is true
	for recordsFound {
		// prev page
		prevPage, err := client.PrevLedgersPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = prevPage
		if len(prevPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(prevPage)
	}
}
Output:

func (*Client) PrevOffersPage

func (c *Client) PrevOffersPage(page hProtocol.OffersPage) (offers hProtocol.OffersPage, err error)

PrevOffersPage returns the previous page of offers.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all offers
	offerRequest := horizonclient.OfferRequest{ForAccount: "GAQHWQYBBW272OOXNQMMLCA5WY2XAZPODGB7Q3S5OKKIXVESKO55ZQ7C", Limit: 20}
	offers, err := client.Offers(offerRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(offers)

	// get prev pages.
	recordsFound := false
	if len(offers.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := offers
	// get the prev page of records if recordsFound is true
	for recordsFound {
		// prev page
		prevPage, err := client.PrevOffersPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = prevPage
		if len(prevPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(prevPage)
	}
}
Output:

func (*Client) PrevOperationsPage

func (c *Client) PrevOperationsPage(page operations.OperationsPage) (operations operations.OperationsPage, err error)

PrevOperationsPage returns the previous page of operations.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all operations
	operationRequest := horizonclient.OperationRequest{Limit: 20}
	ops, err := client.Operations(operationRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(ops)

	// get prev pages.
	recordsFound := false
	if len(ops.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := ops
	// get the prev page of records if recordsFound is true
	for recordsFound {
		// prev page
		prevPage, err := client.PrevOperationsPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = prevPage
		if len(prevPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(prevPage)
	}
}
Output:

func (*Client) PrevPaymentsPage

func (c *Client) PrevPaymentsPage(page operations.OperationsPage) (operations.OperationsPage, error)

PrevPaymentsPage returns the previous page of payments.

func (*Client) PrevTradeAggregationsPage

func (c *Client) PrevTradeAggregationsPage(page hProtocol.TradeAggregationsPage) (ta hProtocol.TradeAggregationsPage, err error)

PrevTradeAggregationsPage returns the previous page of trade aggregations from the current trade aggregations response.

Example
package main

import (
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	testTime := time.Unix(int64(1517521726), int64(0))
	// Find trade aggregations
	ta := horizonclient.TradeAggregationRequest{
		StartTime:          testTime,
		EndTime:            testTime,
		Resolution:         horizonclient.FiveMinuteResolution,
		BaseAssetType:      horizonclient.AssetTypeNative,
		CounterAssetType:   horizonclient.AssetType4,
		CounterAssetCode:   "SLT",
		CounterAssetIssuer: "GCKA6K5PCQ6PNF5RQBF7PQDJWRHO6UOGFMRLK3DYHDOI244V47XKQ4GP",
		Order:              horizonclient.OrderDesc,
	}
	tradeAggs, err := client.TradeAggregations(ta)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(tradeAggs)

	// get prev pages.
	recordsFound := false
	if len(tradeAggs.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := tradeAggs
	// get the prev page of records if recordsFound is true
	for recordsFound {
		// prev page
		prevPage, err := client.PrevTradeAggregationsPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = prevPage
		if len(prevPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(prevPage)
	}
}
Output:

func (*Client) PrevTradesPage

func (c *Client) PrevTradesPage(page hProtocol.TradesPage) (trades hProtocol.TradesPage, err error)

PrevTradesPage returns the previous page of trades.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all trades
	tradeRequest := horizonclient.TradeRequest{Cursor: "123456", Limit: 30, Order: horizonclient.OrderAsc}
	trades, err := client.Trades(tradeRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(trades)

	// get prev pages.
	recordsFound := false
	if len(trades.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := trades
	// get the prev page of records if recordsFound is true
	for recordsFound {
		// prev page
		prevPage, err := client.PrevTradesPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = prevPage
		if len(prevPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(prevPage)
	}
}
Output:

func (*Client) PrevTransactionsPage

func (c *Client) PrevTransactionsPage(page hProtocol.TransactionsPage) (transactions hProtocol.TransactionsPage, err error)

PrevTransactionsPage returns the previous page of transactions.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// all transactions
	transactionRequest := horizonclient.TransactionRequest{Limit: 20}
	transactions, err := client.Transactions(transactionRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(transactions)

	// get prev pages.
	recordsFound := false
	if len(transactions.Embedded.Records) > 0 {
		recordsFound = true
	}
	page := transactions
	// get the prev page of records if recordsFound is true
	for recordsFound {
		// prev page
		prevPage, err := client.PrevTransactionsPage(page)
		if err != nil {
			fmt.Println(err)
			return
		}

		page = prevPage
		if len(prevPage.Embedded.Records) == 0 {
			recordsFound = false
		}
		fmt.Println(prevPage)
	}
}
Output:

func (*Client) Root

func (c *Client) Root() (root hProtocol.Root, err error)

Root loads the root endpoint of horizon

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultTestNetClient
	root, err := client.Root()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(root)
}
Output:

func (*Client) SetHorizonTimeOut

func (c *Client) SetHorizonTimeOut(t uint) *Client

SetHorizonTimeOut allows users to set the number of seconds before a horizon request is cancelled.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultTestNetClient

	// https://www.paydex.org/laboratory/#xdr-viewer?input=AAAAABB90WssODNIgi6BHveqzxTRmIpvAFRyVNM%2BHm2GVuCcAAAAZAAABD0AAuV%2FAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAyTBGxOgfSApppsTnb%2FYRr6gOR8WT0LZNrhLh4y3FCgoAAAAXSHboAAAAAAAAAAABhlbgnAAAAEAivKe977CQCxMOKTuj%2BcWTFqc2OOJU8qGr9afrgu2zDmQaX5Q0cNshc3PiBwe0qw%2F%2BD%2FqJk5QqM5dYeSUGeDQP&type=TransactionEnvelope&network=test
	txXdr := `AAAAABB90WssODNIgi6BHveqzxTRmIpvAFRyVNM+Hm2GVuCcAAAAZAAABD0AAuV/AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAyTBGxOgfSApppsTnb/YRr6gOR8WT0LZNrhLh4y3FCgoAAAAXSHboAAAAAAAAAAABhlbgnAAAAEAivKe977CQCxMOKTuj+cWTFqc2OOJU8qGr9afrgu2zDmQaX5Q0cNshc3PiBwe0qw/+D/qJk5QqM5dYeSUGeDQP`

	// test user timeout
	client = client.SetHorizonTimeOut(30)
	resp, err := client.SubmitTransactionXDR(txXdr)
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Print(resp)
}
Output:

func (*Client) StreamEffects

func (c *Client) StreamEffects(ctx context.Context, request EffectRequest, handler EffectHandler) error

StreamEffects streams horizon effects. It can be used to stream all effects or account specific effects. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. EffectHandler is a user-supplied function that is executed for each streamed transaction received.

Example
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	"github.com/paydex-core/paydex-go/protocols/horizon/effects"
)

func main() {
	client := horizonclient.DefaultTestNetClient
	// all effects
	effectRequest := horizonclient.EffectRequest{Cursor: "760209215489"}

	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		// Stop streaming after 60 seconds.
		time.Sleep(60 * time.Second)
		cancel()
	}()

	printHandler := func(e effects.Effect) {
		fmt.Println(e)
	}
	err := client.StreamEffects(ctx, effectRequest, printHandler)
	if err != nil {
		fmt.Println(err)
	}
}
Output:

func (*Client) StreamLedgers

func (c *Client) StreamLedgers(ctx context.Context, request LedgerRequest, handler LedgerHandler) error

StreamLedgers streams paydex ledgers. It can be used to stream all ledgers. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. LedgerHandler is a user-supplied function that is executed for each streamed ledger received.

Example
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	hProtocol "github.com/paydex-core/paydex-go/protocols/horizon"
)

func main() {
	client := horizonclient.DefaultTestNetClient
	// all ledgers from now
	ledgerRequest := horizonclient.LedgerRequest{}

	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		// Stop streaming after 60 seconds.
		time.Sleep(60 * time.Second)
		cancel()
	}()

	printHandler := func(ledger hProtocol.Ledger) {
		fmt.Println(ledger)
	}
	err := client.StreamLedgers(ctx, ledgerRequest, printHandler)
	if err != nil {
		fmt.Println(err)
	}
}
Output:

func (*Client) StreamOffers

func (c *Client) StreamOffers(ctx context.Context, request OfferRequest, handler OfferHandler) error

StreamOffers streams offers processed by the Paydex network for an account. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. OfferHandler is a user-supplied function that is executed for each streamed offer received.

Example
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	hProtocol "github.com/paydex-core/paydex-go/protocols/horizon"
)

func main() {
	client := horizonclient.DefaultTestNetClient
	// offers for account
	offerRequest := horizonclient.OfferRequest{ForAccount: "GAQHWQYBBW272OOXNQMMLCA5WY2XAZPODGB7Q3S5OKKIXVESKO55ZQ7C", Cursor: "1"}

	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		// Stop streaming after 60 seconds.
		time.Sleep(60 * time.Second)
		cancel()
	}()

	printHandler := func(offer hProtocol.Offer) {
		fmt.Println(offer)
	}
	err := client.StreamOffers(ctx, offerRequest, printHandler)
	if err != nil {
		fmt.Println(err)
	}
}
Output:

func (*Client) StreamOperations

func (c *Client) StreamOperations(ctx context.Context, request OperationRequest, handler OperationHandler) error

StreamOperations streams paydex operations. It can be used to stream all operations or operations for an account. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. OperationHandler is a user-supplied function that is executed for each streamed operation received.

Example
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	"github.com/paydex-core/paydex-go/protocols/horizon/operations"
)

func main() {
	client := horizonclient.DefaultTestNetClient
	// operations for an account
	opRequest := horizonclient.OperationRequest{ForAccount: "GAIH3ULLFQ4DGSECF2AR555KZ4KNDGEKN4AFI4SU2M7B43MGK3QJZNSR", Cursor: "760209215489"}

	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		// Stop streaming after 60 seconds.
		time.Sleep(60 * time.Second)
		cancel()
	}()

	printHandler := func(op operations.Operation) {
		fmt.Println(op)
	}
	err := client.StreamOperations(ctx, opRequest, printHandler)
	if err != nil {
		fmt.Println(err)
	}
}
Output:

func (*Client) StreamOrderBooks

func (c *Client) StreamOrderBooks(ctx context.Context, request OrderBookRequest, handler OrderBookHandler) error

StreamOrderBooks streams the orderbook for a given asset pair. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. OrderBookHandler is a user-supplied function that is executed for each streamed order received.

Example
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	hProtocol "github.com/paydex-core/paydex-go/protocols/horizon"
)

func main() {
	client := horizonclient.DefaultTestNetClient
	orderbookRequest := horizonclient.OrderBookRequest{
		SellingAssetType:  horizonclient.AssetTypeNative,
		BuyingAssetType:   horizonclient.AssetType4,
		BuyingAssetCode:   "ABC",
		BuyingAssetIssuer: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU",
	}

	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		// Stop streaming after 60 seconds.
		time.Sleep(60 * time.Second)
		cancel()
	}()

	printHandler := func(orderbook hProtocol.OrderBookSummary) {
		fmt.Println(orderbook)
	}
	err := client.StreamOrderBooks(ctx, orderbookRequest, printHandler)
	if err != nil {
		fmt.Println(err)
	}
}
Output:

func (*Client) StreamPayments

func (c *Client) StreamPayments(ctx context.Context, request OperationRequest, handler OperationHandler) error

StreamPayments streams paydex payments. It can be used to stream all payments or payments for an account. Payments include create_account, payment, path_payment and account_merge operations. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. OperationHandler is a user-supplied function that is executed for each streamed operation received.

Example
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	"github.com/paydex-core/paydex-go/protocols/horizon/operations"
)

func main() {
	client := horizonclient.DefaultTestNetClient
	// all payments
	opRequest := horizonclient.OperationRequest{Cursor: "760209215489"}

	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		// Stop streaming after 60 seconds.
		time.Sleep(60 * time.Second)
		cancel()
	}()

	printHandler := func(op operations.Operation) {
		fmt.Println(op)
	}
	err := client.StreamPayments(ctx, opRequest, printHandler)
	if err != nil {
		fmt.Println(err)
	}
}
Output:

func (*Client) StreamTrades

func (c *Client) StreamTrades(ctx context.Context, request TradeRequest, handler TradeHandler) (err error)

StreamTrades streams executed trades. It can be used to stream all trades, trades for an account and trades for an offer. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. TradeHandler is a user-supplied function that is executed for each streamed trade received.

Example
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	hProtocol "github.com/paydex-core/paydex-go/protocols/horizon"
)

func main() {
	client := horizonclient.DefaultTestNetClient
	// all trades
	tradeRequest := horizonclient.TradeRequest{Cursor: "760209215489"}

	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		// Stop streaming after 60 seconds.
		time.Sleep(60 * time.Second)
		cancel()
	}()

	printHandler := func(tr hProtocol.Trade) {
		fmt.Println(tr)
	}
	err := client.StreamTrades(ctx, tradeRequest, printHandler)

	if err != nil {
		fmt.Println(err)
	}
}
Output:

func (*Client) StreamTransactions

func (c *Client) StreamTransactions(ctx context.Context, request TransactionRequest, handler TransactionHandler) error

StreamTransactions streams processed transactions. It can be used to stream all transactions and transactions for an account. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. TransactionHandler is a user-supplied function that is executed for each streamed transaction received.

Example
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
	hProtocol "github.com/paydex-core/paydex-go/protocols/horizon"
)

func main() {
	client := horizonclient.DefaultTestNetClient
	// all transactions
	transactionRequest := horizonclient.TransactionRequest{Cursor: "760209215489"}

	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		// Stop streaming after 60 seconds.
		time.Sleep(60 * time.Second)
		cancel()
	}()

	printHandler := func(tr hProtocol.Transaction) {
		fmt.Println(tr)
	}
	err := client.StreamTransactions(ctx, transactionRequest, printHandler)
	if err != nil {
		fmt.Println(err)
	}
}
Output:

func (*Client) SubmitTransaction

func (c *Client) SubmitTransaction(transaction txnbuild.Transaction) (txSuccess hProtocol.TransactionSuccess,
	err error)

SubmitTransaction submits a transaction to the network. err can be either error object or horizon.Error object. See https://www.paydex.org/developers/horizon/reference/endpoints/transactions-create.html

func (*Client) SubmitTransactionXDR

func (c *Client) SubmitTransactionXDR(transactionXdr string) (txSuccess hProtocol.TransactionSuccess,
	err error)

SubmitTransactionXDR submits a transaction represented as a base64 XDR string to the network. err can be either error object or horizon.Error object. See https://www.paydex.org/developers/horizon/reference/endpoints/transactions-create.html

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// https://www.paydex.org/laboratory/#xdr-viewer?input=AAAAAOoS%2F5V%2BBiCPXRiVcz8YsnkDdODufq%2Bg7xdqTdIXN8vyAAAE4gFiW0YAAALxAAAAAQAAAAAAAAAAAAAAAFyuBUcAAAABAAAABzIyMjgyNDUAAAAAAQAAAAEAAAAALhsY%2FFdAHXllTmb025DtCVBw06WDSQjq6I9NrCQHOV8AAAABAAAAAHT8zKV7bRQzuGTpk9AO3gjWJ9jVxBXTgguFORkxHVIKAAAAAAAAAAAAOnDwAAAAAAAAAAIkBzlfAAAAQPefqlsOvni6xX1g3AqddvOp1GOM88JYzayGZodbzTfV5toyhxZvL1ZggY3prFsvrereugEpj1kyPJ67z6gcRg0XN8vyAAAAQGwmoTssW49gaze8iQkz%2FUA2E2N%2BBOo%2B6v7YdOSsvIcZnMc37KmXH920nLosKpDLqkNChVztSZFcbVUlHhjbQgA%3D&type=TransactionEnvelope&network=public
	txXdr := `AAAAAOoS/5V+BiCPXRiVcz8YsnkDdODufq+g7xdqTdIXN8vyAAAE4gFiW0YAAALxAAAAAQAAAAAAAAAAAAAAAFyuBUcAAAABAAAABzIyMjgyNDUAAAAAAQAAAAEAAAAALhsY/FdAHXllTmb025DtCVBw06WDSQjq6I9NrCQHOV8AAAABAAAAAHT8zKV7bRQzuGTpk9AO3gjWJ9jVxBXTgguFORkxHVIKAAAAAAAAAAAAOnDwAAAAAAAAAAIkBzlfAAAAQPefqlsOvni6xX1g3AqddvOp1GOM88JYzayGZodbzTfV5toyhxZvL1ZggY3prFsvrereugEpj1kyPJ67z6gcRg0XN8vyAAAAQGwmoTssW49gaze8iQkz/UA2E2N+BOo+6v7YdOSsvIcZnMc37KmXH920nLosKpDLqkNChVztSZFcbVUlHhjbQgA=`

	// submit transaction
	resp, err := client.SubmitTransactionXDR(txXdr)
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Print(resp)
}
Output:

{{{https://horizon.paydex.org/transactions/f8a09e8a17fc828a1b99814818ddc931876eec0fe9c203f5980d26d92641e1c2 false}} f8a09e8a17fc828a1b99814818ddc931876eec0fe9c203f5980d26d92641e1c2 23350654 AAAAAOoS/5V+BiCPXRiVcz8YsnkDdODufq+g7xdqTdIXN8vyAAAE4gFiW0YAAALxAAAAAQAAAAAAAAAAAAAAAFyuBUcAAAABAAAABzIyMjgyNDUAAAAAAQAAAAEAAAAALhsY/FdAHXllTmb025DtCVBw06WDSQjq6I9NrCQHOV8AAAABAAAAAHT8zKV7bRQzuGTpk9AO3gjWJ9jVxBXTgguFORkxHVIKAAAAAAAAAAAAOnDwAAAAAAAAAAIkBzlfAAAAQPefqlsOvni6xX1g3AqddvOp1GOM88JYzayGZodbzTfV5toyhxZvL1ZggY3prFsvrereugEpj1kyPJ67z6gcRg0XN8vyAAAAQGwmoTssW49gaze8iQkz/UA2E2N+BOo+6v7YdOSsvIcZnMc37KmXH920nLosKpDLqkNChVztSZFcbVUlHhjbQgA= AAAAAAAABOIAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA= AAAAAQAAAAIAAAADAWRNfgAAAAAAAAAA6hL/lX4GII9dGJVzPxiyeQN04O5+r6DvF2pN0hc3y/IAAAAAAuyTvgFiW0YAAALwAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAWRNfgAAAAAAAAAA6hL/lX4GII9dGJVzPxiyeQN04O5+r6DvF2pN0hc3y/IAAAAAAuyTvgFiW0YAAALxAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMBZE0IAAAAAAAAAAB0/Myle20UM7hk6ZPQDt4I1ifY1cQV04ILhTkZMR1SCgAAAbZToYkOAToKfwAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEBZE1+AAAAAAAAAAB0/Myle20UM7hk6ZPQDt4I1ifY1cQV04ILhTkZMR1SCgAAAbZT2/n+AToKfwAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAMBZE19AAAAAAAAAAAuGxj8V0AdeWVOZvTbkO0JUHDTpYNJCOroj02sJAc5XwAAAACrUfjvARGUKgAApRsAAAAAAAAAAAAAAAAAAAAObnlhbmRldi1pZC5vcmcAAAEAAAAAAAAAAAAAAAAAAAAAAAABAWRNfgAAAAAAAAAALhsY/FdAHXllTmb025DtCVBw06WDSQjq6I9NrCQHOV8AAAAAqxeH/wERlCoAAKUbAAAAAAAAAAAAAAAAAAAADm55YW5kZXYtaWQub3JnAAABAAAAAAAAAAAAAAAAAAAA}

func (*Client) TradeAggregations

func (c *Client) TradeAggregations(request TradeAggregationRequest) (tds hProtocol.TradeAggregationsPage, err error)

TradeAggregations returns paydex trade aggregations (https://www.paydex.org/developers/horizon/reference/resources/trade_aggregation.html)

Example
package main

import (
	"fmt"
	"time"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	testTime := time.Unix(int64(1517521726), int64(0))
	// Find trade aggregations
	ta := horizonclient.TradeAggregationRequest{
		StartTime:          testTime,
		EndTime:            testTime,
		Resolution:         horizonclient.FiveMinuteResolution,
		BaseAssetType:      horizonclient.AssetTypeNative,
		CounterAssetType:   horizonclient.AssetType4,
		CounterAssetCode:   "SLT",
		CounterAssetIssuer: "GCKA6K5PCQ6PNF5RQBF7PQDJWRHO6UOGFMRLK3DYHDOI244V47XKQ4GP",
		Order:              horizonclient.OrderDesc,
	}
	tradeAggs, err := client.TradeAggregations(ta)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(tradeAggs)
}
Output:

func (*Client) Trades

func (c *Client) Trades(request TradeRequest) (tds hProtocol.TradesPage, err error)

Trades returns paydex trades (https://www.paydex.org/developers/horizon/reference/resources/trade.html) It can be used to return trades for an account, an offer and all trades on the network.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// Find all trades
	tr := horizonclient.TradeRequest{Cursor: "123456", Limit: 30, Order: horizonclient.OrderAsc}
	trades, err := client.Trades(tr)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(trades)
}
Output:

func (*Client) TransactionDetail

func (c *Client) TransactionDetail(txHash string) (tx hProtocol.Transaction, err error)

TransactionDetail returns information about a particular transaction for a given transaction hash See https://www.paydex.org/developers/horizon/reference/endpoints/transactions-single.html

func (*Client) Transactions

func (c *Client) Transactions(request TransactionRequest) (txs hProtocol.TransactionsPage, err error)

Transactions returns paydex transactions (https://www.paydex.org/developers/horizon/reference/resources/transaction.html) It can be used to return transactions for an account, a ledger,and all transactions on the network.

Example
package main

import (
	"fmt"

	"github.com/paydex-core/paydex-go/clients/horizonclient"
)

func main() {
	client := horizonclient.DefaultPublicNetClient
	// transactions for an account
	txRequest := horizonclient.TransactionRequest{ForAccount: "GCLWGQPMKXQSPF776IU33AH4PZNOOWNAWGGKVTBQMIC5IMKUNP3E6NVU"}
	txs, err := client.Transactions(txRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(txs)

	// all transactions
	txRequest = horizonclient.TransactionRequest{Cursor: "now", Order: horizonclient.OrderDesc}
	txs, err = client.Transactions(txRequest)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Print(txs)
	records := txs.Embedded.Records

	for _, tx := range records {
		fmt.Print(tx)
	}
}
Output:

func (*Client) Version

func (c *Client) Version() string

Version returns the current version.

type ClientInterface

type ClientInterface interface {
	AccountDetail(request AccountRequest) (hProtocol.Account, error)
	AccountData(request AccountRequest) (hProtocol.AccountData, error)
	Effects(request EffectRequest) (effects.EffectsPage, error)
	Assets(request AssetRequest) (hProtocol.AssetsPage, error)
	Ledgers(request LedgerRequest) (hProtocol.LedgersPage, error)
	LedgerDetail(sequence uint32) (hProtocol.Ledger, error)
	Metrics() (hProtocol.Metrics, error)
	FeeStats() (hProtocol.FeeStats, error)
	Offers(request OfferRequest) (hProtocol.OffersPage, error)
	Operations(request OperationRequest) (operations.OperationsPage, error)
	OperationDetail(id string) (operations.Operation, error)
	SubmitTransactionXDR(transactionXdr string) (hProtocol.TransactionSuccess, error)
	SubmitTransaction(transactionXdr txnbuild.Transaction) (hProtocol.TransactionSuccess, error)
	Transactions(request TransactionRequest) (hProtocol.TransactionsPage, error)
	TransactionDetail(txHash string) (hProtocol.Transaction, error)
	OrderBook(request OrderBookRequest) (hProtocol.OrderBookSummary, error)
	Paths(request PathsRequest) (hProtocol.PathsPage, error)
	Payments(request OperationRequest) (operations.OperationsPage, error)
	TradeAggregations(request TradeAggregationRequest) (hProtocol.TradeAggregationsPage, error)
	Trades(request TradeRequest) (hProtocol.TradesPage, error)
	Fund(addr string) (hProtocol.TransactionSuccess, error)
	StreamTransactions(ctx context.Context, request TransactionRequest, handler TransactionHandler) error
	StreamTrades(ctx context.Context, request TradeRequest, handler TradeHandler) error
	StreamEffects(ctx context.Context, request EffectRequest, handler EffectHandler) error
	StreamOperations(ctx context.Context, request OperationRequest, handler OperationHandler) error
	StreamPayments(ctx context.Context, request OperationRequest, handler OperationHandler) error
	StreamOffers(ctx context.Context, request OfferRequest, handler OfferHandler) error
	StreamLedgers(ctx context.Context, request LedgerRequest, handler LedgerHandler) error
	StreamOrderBooks(ctx context.Context, request OrderBookRequest, handler OrderBookHandler) error
	Root() (hProtocol.Root, error)
	NextAssetsPage(hProtocol.AssetsPage) (hProtocol.AssetsPage, error)
	PrevAssetsPage(hProtocol.AssetsPage) (hProtocol.AssetsPage, error)
	NextLedgersPage(hProtocol.LedgersPage) (hProtocol.LedgersPage, error)
	PrevLedgersPage(hProtocol.LedgersPage) (hProtocol.LedgersPage, error)
	NextEffectsPage(effects.EffectsPage) (effects.EffectsPage, error)
	PrevEffectsPage(effects.EffectsPage) (effects.EffectsPage, error)
	NextTransactionsPage(hProtocol.TransactionsPage) (hProtocol.TransactionsPage, error)
	PrevTransactionsPage(hProtocol.TransactionsPage) (hProtocol.TransactionsPage, error)
	NextOperationsPage(operations.OperationsPage) (operations.OperationsPage, error)
	PrevOperationsPage(operations.OperationsPage) (operations.OperationsPage, error)
	NextPaymentsPage(operations.OperationsPage) (operations.OperationsPage, error)
	PrevPaymentsPage(operations.OperationsPage) (operations.OperationsPage, error)
	NextOffersPage(hProtocol.OffersPage) (hProtocol.OffersPage, error)
	PrevOffersPage(hProtocol.OffersPage) (hProtocol.OffersPage, error)
	NextTradesPage(hProtocol.TradesPage) (hProtocol.TradesPage, error)
	PrevTradesPage(hProtocol.TradesPage) (hProtocol.TradesPage, error)
	HomeDomainForAccount(aid string) (string, error)
	NextTradeAggregationsPage(hProtocol.TradeAggregationsPage) (hProtocol.TradeAggregationsPage, error)
	PrevTradeAggregationsPage(hProtocol.TradeAggregationsPage) (hProtocol.TradeAggregationsPage, error)
}

ClientInterface contains methods implemented by the horizon client

type EffectHandler

type EffectHandler func(effects.Effect)

EffectHandler is a function that is called when a new effect is received

type EffectRequest

type EffectRequest struct {
	ForAccount     string
	ForLedger      string
	ForOperation   string
	ForTransaction string
	Order          Order
	Cursor         string
	Limit          uint
}

EffectRequest struct contains data for getting effects from a horizon server. "ForAccount", "ForLedger", "ForOperation" and "ForTransaction": Not more than one of these can be set at a time. If none are set, the default is to return all effects. The query parameters (Order, Cursor and Limit) are optional. All or none can be set.

func (EffectRequest) BuildURL

func (er EffectRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the EffectRequest struct. If no data is set, it defaults to the build the URL for all effects

func (EffectRequest) StreamEffects

func (er EffectRequest) StreamEffects(ctx context.Context, client *Client, handler EffectHandler) error

StreamEffects streams horizon effects. It can be used to stream all effects or account specific effects. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. EffectHandler is a user-supplied function that is executed for each streamed effect received.

type Error

type Error struct {
	Response *http.Response
	Problem  problem.P
}

Error struct contains the problem returned by Horizon

func (*Error) Envelope

func (herr *Error) Envelope() (*xdr.TransactionEnvelope, error)

Envelope extracts the transaction envelope that triggered this error from the extra fields.

func (*Error) EnvelopeXDR

func (herr *Error) EnvelopeXDR() (string, error)

EnvelopeXDR returns the base 64 serialised string representation of the XDR envelope. This can be stored, or decoded in the Paydex Laboratory XDR viewer for example.

func (Error) Error

func (herr Error) Error() string

func (*Error) ResultCodes

func (herr *Error) ResultCodes() (*hProtocol.TransactionResultCodes, error)

ResultCodes extracts a result code summary from the error, if possible.

func (*Error) ResultString

func (herr *Error) ResultString() (string, error)

ResultString extracts the transaction result as a string.

type HTTP

type HTTP interface {
	Do(req *http.Request) (resp *http.Response, err error)
	Get(url string) (resp *http.Response, err error)
	PostForm(url string, data url.Values) (resp *http.Response, err error)
}

HTTP represents the HTTP client that a horizon client uses to communicate

type HorizonRequest

type HorizonRequest interface {
	BuildURL() (string, error)
}

HorizonRequest contains methods implemented by request structs for horizon endpoints.

type LedgerHandler

type LedgerHandler func(hProtocol.Ledger)

LedgerHandler is a function that is called when a new ledger is received

type LedgerRequest

type LedgerRequest struct {
	Order  Order
	Cursor string
	Limit  uint
	// contains filtered or unexported fields
}

LedgerRequest struct contains data for getting ledger details from a horizon server. The query parameters (Order, Cursor and Limit) are optional. All or none can be set.

func (LedgerRequest) BuildURL

func (lr LedgerRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the LedgerRequest struct. If no data is set, it defaults to the build the URL for all ledgers

func (LedgerRequest) StreamLedgers

func (lr LedgerRequest) StreamLedgers(ctx context.Context, client *Client,
	handler LedgerHandler) (err error)

StreamLedgers streams paydex ledgers. It can be used to stream all ledgers. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. LedgerHandler is a user-supplied function that is executed for each streamed ledger received.

type MockClient

type MockClient struct {
	mock.Mock
}

MockClient is a mockable horizon client.

func (*MockClient) AccountData

func (m *MockClient) AccountData(request AccountRequest) (hProtocol.AccountData, error)

AccountData is a mocking method

func (*MockClient) AccountDetail

func (m *MockClient) AccountDetail(request AccountRequest) (hProtocol.Account, error)

AccountDetail is a mocking method

func (*MockClient) Assets

func (m *MockClient) Assets(request AssetRequest) (hProtocol.AssetsPage, error)

Assets is a mocking method

func (*MockClient) Effects

func (m *MockClient) Effects(request EffectRequest) (effects.EffectsPage, error)

Effects is a mocking method

func (*MockClient) FeeStats

func (m *MockClient) FeeStats() (hProtocol.FeeStats, error)

FeeStats is a mocking method

func (*MockClient) Fund

Fund is a mocking method

func (*MockClient) HomeDomainForAccount

func (m *MockClient) HomeDomainForAccount(aid string) (string, error)

HomeDomainForAccount is a mocking method

func (*MockClient) LedgerDetail

func (m *MockClient) LedgerDetail(sequence uint32) (hProtocol.Ledger, error)

LedgerDetail is a mocking method

func (*MockClient) Ledgers

func (m *MockClient) Ledgers(request LedgerRequest) (hProtocol.LedgersPage, error)

Ledgers is a mocking method

func (*MockClient) Metrics

func (m *MockClient) Metrics() (hProtocol.Metrics, error)

Metrics is a mocking method

func (*MockClient) NextAssetsPage

func (m *MockClient) NextAssetsPage(page hProtocol.AssetsPage) (hProtocol.AssetsPage, error)

NextAssetsPage is a mocking method

func (*MockClient) NextEffectsPage

func (m *MockClient) NextEffectsPage(page effects.EffectsPage) (effects.EffectsPage, error)

NextEffectsPage is a mocking method

func (*MockClient) NextLedgersPage

func (m *MockClient) NextLedgersPage(page hProtocol.LedgersPage) (hProtocol.LedgersPage, error)

NextLedgersPage is a mocking method

func (*MockClient) NextOffersPage

func (m *MockClient) NextOffersPage(page hProtocol.OffersPage) (hProtocol.OffersPage, error)

NextOffersPage is a mocking method

func (*MockClient) NextOperationsPage

func (m *MockClient) NextOperationsPage(page operations.OperationsPage) (operations.OperationsPage, error)

NextOperationsPage is a mocking method

func (*MockClient) NextPaymentsPage

func (m *MockClient) NextPaymentsPage(page operations.OperationsPage) (operations.OperationsPage, error)

NextPaymentsPage is a mocking method

func (*MockClient) NextTradeAggregationsPage

func (m *MockClient) NextTradeAggregationsPage(page hProtocol.TradeAggregationsPage) (hProtocol.TradeAggregationsPage, error)

NextTradeAggregationsPage is a mocking method

func (*MockClient) NextTradesPage

func (m *MockClient) NextTradesPage(page hProtocol.TradesPage) (hProtocol.TradesPage, error)

NextTradesPage is a mocking method

func (*MockClient) NextTransactionsPage

func (m *MockClient) NextTransactionsPage(page hProtocol.TransactionsPage) (hProtocol.TransactionsPage, error)

NextTransactionsPage is a mocking method

func (*MockClient) Offers

func (m *MockClient) Offers(request OfferRequest) (hProtocol.OffersPage, error)

Offers is a mocking method

func (*MockClient) OperationDetail

func (m *MockClient) OperationDetail(id string) (operations.Operation, error)

OperationDetail is a mocking method

func (*MockClient) Operations

func (m *MockClient) Operations(request OperationRequest) (operations.OperationsPage, error)

Operations is a mocking method

func (*MockClient) OrderBook

func (m *MockClient) OrderBook(request OrderBookRequest) (hProtocol.OrderBookSummary, error)

OrderBook is a mocking method

func (*MockClient) Paths

func (m *MockClient) Paths(request PathsRequest) (hProtocol.PathsPage, error)

Paths is a mocking method

func (*MockClient) Payments

func (m *MockClient) Payments(request OperationRequest) (operations.OperationsPage, error)

Payments is a mocking method

func (*MockClient) PrevAssetsPage

func (m *MockClient) PrevAssetsPage(page hProtocol.AssetsPage) (hProtocol.AssetsPage, error)

PrevAssetsPage is a mocking method

func (*MockClient) PrevEffectsPage

func (m *MockClient) PrevEffectsPage(page effects.EffectsPage) (effects.EffectsPage, error)

PrevEffectsPage is a mocking method

func (*MockClient) PrevLedgersPage

func (m *MockClient) PrevLedgersPage(page hProtocol.LedgersPage) (hProtocol.LedgersPage, error)

PrevLedgersPage is a mocking method

func (*MockClient) PrevOffersPage

func (m *MockClient) PrevOffersPage(page hProtocol.OffersPage) (hProtocol.OffersPage, error)

PrevOffersPage is a mocking method

func (*MockClient) PrevOperationsPage

func (m *MockClient) PrevOperationsPage(page operations.OperationsPage) (operations.OperationsPage, error)

PrevOperationsPage is a mocking method

func (*MockClient) PrevPaymentsPage

func (m *MockClient) PrevPaymentsPage(page operations.OperationsPage) (operations.OperationsPage, error)

PrevPaymentsPage is a mocking method

func (*MockClient) PrevTradeAggregationsPage

func (m *MockClient) PrevTradeAggregationsPage(page hProtocol.TradeAggregationsPage) (hProtocol.TradeAggregationsPage, error)

PrevTradeAggregationsPage is a mocking method

func (*MockClient) PrevTradesPage

func (m *MockClient) PrevTradesPage(page hProtocol.TradesPage) (hProtocol.TradesPage, error)

PrevTradesPage is a mocking method

func (*MockClient) PrevTransactionsPage

func (m *MockClient) PrevTransactionsPage(page hProtocol.TransactionsPage) (hProtocol.TransactionsPage, error)

PrevTransactionsPage is a mocking method

func (*MockClient) Root

func (m *MockClient) Root() (hProtocol.Root, error)

Root is a mocking method

func (*MockClient) StreamEffects

func (m *MockClient) StreamEffects(ctx context.Context, request EffectRequest, handler EffectHandler) error

StreamEffects is a mocking method

func (*MockClient) StreamLedgers

func (m *MockClient) StreamLedgers(ctx context.Context, request LedgerRequest, handler LedgerHandler) error

StreamLedgers is a mocking method

func (*MockClient) StreamOffers

func (m *MockClient) StreamOffers(ctx context.Context, request OfferRequest, handler OfferHandler) error

StreamOffers is a mocking method

func (*MockClient) StreamOperations

func (m *MockClient) StreamOperations(ctx context.Context, request OperationRequest, handler OperationHandler) error

StreamOperations is a mocking method

func (*MockClient) StreamOrderBooks

func (m *MockClient) StreamOrderBooks(ctx context.Context, request OrderBookRequest, handler OrderBookHandler) error

StreamOrderBooks is a mocking method

func (*MockClient) StreamPayments

func (m *MockClient) StreamPayments(ctx context.Context, request OperationRequest, handler OperationHandler) error

StreamPayments is a mocking method

func (*MockClient) StreamTrades

func (m *MockClient) StreamTrades(ctx context.Context, request TradeRequest, handler TradeHandler) error

StreamTrades is a mocking method

func (*MockClient) StreamTransactions

func (m *MockClient) StreamTransactions(ctx context.Context, request TransactionRequest, handler TransactionHandler) error

StreamTransactions is a mocking method

func (*MockClient) SubmitTransaction

func (m *MockClient) SubmitTransaction(transaction txnbuild.Transaction) (hProtocol.TransactionSuccess, error)

SubmitTransaction is a mocking method

func (*MockClient) SubmitTransactionXDR

func (m *MockClient) SubmitTransactionXDR(transactionXdr string) (hProtocol.TransactionSuccess, error)

SubmitTransactionXDR is a mocking method

func (*MockClient) TradeAggregations

func (m *MockClient) TradeAggregations(request TradeAggregationRequest) (hProtocol.TradeAggregationsPage, error)

TradeAggregations is a mocking method

func (*MockClient) Trades

func (m *MockClient) Trades(request TradeRequest) (hProtocol.TradesPage, error)

Trades is a mocking method

func (*MockClient) TransactionDetail

func (m *MockClient) TransactionDetail(txHash string) (hProtocol.Transaction, error)

TransactionDetail is a mocking method

func (*MockClient) Transactions

func (m *MockClient) Transactions(request TransactionRequest) (hProtocol.TransactionsPage, error)

Transactions is a mocking method

type OfferHandler

type OfferHandler func(hProtocol.Offer)

OfferHandler is a function that is called when a new offer is received

type OfferRequest

type OfferRequest struct {
	ForAccount string
	Order      Order
	Cursor     string
	Limit      uint
}

OfferRequest struct contains data for getting offers made by an account from a horizon server. "ForAccount" is required. The query parameters (Order, Cursor and Limit) are optional. All or none can be set.

func (OfferRequest) BuildURL

func (or OfferRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the OfferRequest struct.

func (OfferRequest) StreamOffers

func (or OfferRequest) StreamOffers(ctx context.Context, client *Client, handler OfferHandler) (err error)

StreamOffers streams offers processed by the Paydex network for an account. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. OfferHandler is a user-supplied function that is executed for each streamed offer received.

type OperationHandler

type OperationHandler func(operations.Operation)

OperationHandler is a function that is called when a new operation is received

type OperationRequest

type OperationRequest struct {
	ForAccount     string
	ForLedger      uint
	ForTransaction string

	Order         Order
	Cursor        string
	Limit         uint
	IncludeFailed bool
	Join          string
	// contains filtered or unexported fields
}

OperationRequest struct contains data for getting operation details from a horizon server. "ForAccount", "ForLedger", "ForTransaction": Only one of these can be set at a time. If none are provided, the default is to return all operations. The query parameters (Order, Cursor, Limit and IncludeFailed) are optional. All or none can be set.

func (OperationRequest) BuildURL

func (op OperationRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the OperationRequest struct. If no data is set, it defaults to the build the URL for all operations or all payments; depending on thevalue of `op.endpoint`

func (*OperationRequest) SetOperationsEndpoint

func (op *OperationRequest) SetOperationsEndpoint() *OperationRequest

SetOperationsEndpoint is a helper function that sets the `endpoint` for OperationRequests to `operations`

func (*OperationRequest) SetPaymentsEndpoint

func (op *OperationRequest) SetPaymentsEndpoint() *OperationRequest

SetPaymentsEndpoint is a helper function that sets the `endpoint` for OperationRequests to `payments`

func (OperationRequest) StreamOperations

func (op OperationRequest) StreamOperations(ctx context.Context, client *Client, handler OperationHandler) error

StreamOperations streams paydex operations. It can be used to stream all operations or operations for and account. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. OperationHandler is a user-supplied function that is executed for each streamed operation received.

type Order

type Order string

Order represents `order` param in queries

type OrderBookHandler

type OrderBookHandler func(hProtocol.OrderBookSummary)

OrderBookHandler is a function that is called when a new order summary is received

type OrderBookRequest

type OrderBookRequest struct {
	SellingAssetType   AssetType
	SellingAssetCode   string
	SellingAssetIssuer string
	BuyingAssetType    AssetType
	BuyingAssetCode    string
	BuyingAssetIssuer  string
	Limit              uint
}

OrderBookRequest struct contains data for getting the orderbook for an asset pair from a horizon server. Limit is optional. All other parameters are required.

func (OrderBookRequest) BuildURL

func (obr OrderBookRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the OrderBookRequest struct.

func (OrderBookRequest) StreamOrderBooks

func (obr OrderBookRequest) StreamOrderBooks(ctx context.Context, client *Client, handler OrderBookHandler) error

StreamOrderBooks streams the orderbook for a given asset pair. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. OrderBookHandler is a user-supplied function that is executed for each streamed order received.

type PathsRequest

type PathsRequest struct {
	DestinationAccount     string
	DestinationAssetType   AssetType
	DestinationAssetCode   string
	DestinationAssetIssuer string
	DestinationAmount      string
	SourceAccount          string
}

PathsRequest struct contains data for getting available payment paths from a horizon server. All parameters are required.

func (PathsRequest) BuildURL

func (pr PathsRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the PathsRequest struct.

type ServerTimeRecord

type ServerTimeRecord struct {
	ServerTime        int64
	LocalTimeRecorded int64
}

ServerTimeRecord contains data for the current unix time of a horizon server instance, and the local time when it was recorded.

type TradeAggregationRequest

type TradeAggregationRequest struct {
	StartTime          time.Time
	EndTime            time.Time
	Resolution         time.Duration
	Offset             time.Duration
	BaseAssetType      AssetType
	BaseAssetCode      string
	BaseAssetIssuer    string
	CounterAssetType   AssetType
	CounterAssetCode   string
	CounterAssetIssuer string
	Order              Order
	Limit              uint
}

TradeAggregationRequest struct contains data for getting trade aggregations from a horizon server. The query parameters (Order and Limit) are optional. All or none can be set. All other parameters are required.

func (TradeAggregationRequest) BuildURL

func (ta TradeAggregationRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the TradeAggregationRequest struct.

type TradeHandler

type TradeHandler func(hProtocol.Trade)

TradeHandler is a function that is called when a new trade is received

type TradeRequest

type TradeRequest struct {
	ForOfferID         string
	ForAccount         string
	BaseAssetType      AssetType
	BaseAssetCode      string
	BaseAssetIssuer    string
	CounterAssetType   AssetType
	CounterAssetCode   string
	CounterAssetIssuer string
	Order              Order
	Cursor             string
	Limit              uint
}

TradeRequest struct contains data for getting trade details from a horizon server. "ForAccount", "ForOfferID": Only one of these can be set at a time. If none are provided, the default is to return all trades. All other query parameters are optional. All or none can be set.

func (TradeRequest) BuildURL

func (tr TradeRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the TradeRequest struct. If no data is set, it defaults to the build the URL for all trades

func (TradeRequest) StreamTrades

func (tr TradeRequest) StreamTrades(ctx context.Context, client *Client,
	handler TradeHandler) (err error)

StreamTrades streams executed trades. It can be used to stream all trades, trades for an account and trades for an offer. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. TradeHandler is a user-supplied function that is executed for each streamed trade received.

type TransactionHandler

type TransactionHandler func(hProtocol.Transaction)

TransactionHandler is a function that is called when a new transaction is received

type TransactionRequest

type TransactionRequest struct {
	ForAccount string
	ForLedger  uint

	Order         Order
	Cursor        string
	Limit         uint
	IncludeFailed bool
	// contains filtered or unexported fields
}

TransactionRequest struct contains data for getting transaction details from a horizon server. "ForAccount", "ForLedger": Only one of these can be set at a time. If none are provided, the default is to return all transactions. The query parameters (Order, Cursor, Limit and IncludeFailed) are optional. All or none can be set.

func (TransactionRequest) BuildURL

func (tr TransactionRequest) BuildURL() (endpoint string, err error)

BuildURL creates the endpoint to be queried based on the data in the TransactionRequest struct. If no data is set, it defaults to the build the URL for all transactions

func (TransactionRequest) StreamTransactions

func (tr TransactionRequest) StreamTransactions(ctx context.Context, client *Client,
	handler TransactionHandler) (err error)

StreamTransactions streams executed transactions. It can be used to stream all transactions and transactions for an account. Use context.WithCancel to stop streaming or context.Background() if you want to stream indefinitely. TransactionHandler is a user-supplied function that is executed for each streamed transaction received.

type UniversalTimeHandler

type UniversalTimeHandler func() int64

UniversalTimeHandler is a function that is called to return the UTC unix time in seconds. This handler is used when getting the time from a horizon server, which can be used to calculate transaction timebounds.

Jump to

Keyboard shortcuts

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