Documentation ¶
Index ¶
- Constants
- Variables
- func CheckNetworkListForNetwork(networkList *types.NetworkListResponse, ...) (bool, []*types.NetworkIdentifier)
- func Err(err error) bool
- type Backoff
- type Error
- type Fetcher
- func (f *Fetcher) AccountBalance(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.BlockIdentifier, []*types.Amount, map[string]interface{}, *Error)
- func (f *Fetcher) AccountBalanceRetry(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.BlockIdentifier, []*types.Amount, map[string]interface{}, *Error)
- func (f *Fetcher) AccountCoins(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.BlockIdentifier, []*types.Coin, map[string]interface{}, *Error)
- func (f *Fetcher) AccountCoinsRetry(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.BlockIdentifier, []*types.Coin, map[string]interface{}, *Error)
- func (f *Fetcher) Block(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.Block, *Error)
- func (f *Fetcher) BlockRetry(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.Block, *Error)
- func (f *Fetcher) Call(ctx context.Context, network *types.NetworkIdentifier, method string, ...) (map[string]interface{}, bool, *Error)
- func (f *Fetcher) CallRetry(ctx context.Context, network *types.NetworkIdentifier, method string, ...) (map[string]interface{}, bool, *Error)
- func (f *Fetcher) ConstructionCombine(ctx context.Context, network *types.NetworkIdentifier, ...) (string, *Error)
- func (f *Fetcher) ConstructionDerive(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.AccountIdentifier, map[string]interface{}, *Error)
- func (f *Fetcher) ConstructionHash(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.TransactionIdentifier, *Error)
- func (f *Fetcher) ConstructionMetadata(ctx context.Context, network *types.NetworkIdentifier, ...) (map[string]interface{}, []*types.Amount, *Error)
- func (f *Fetcher) ConstructionParse(ctx context.Context, network *types.NetworkIdentifier, signed bool, ...) ([]*types.Operation, []*types.AccountIdentifier, map[string]interface{}, *Error)
- func (f *Fetcher) ConstructionPayloads(ctx context.Context, network *types.NetworkIdentifier, ...) (string, []*types.SigningPayload, *Error)
- func (f *Fetcher) ConstructionPreprocess(ctx context.Context, network *types.NetworkIdentifier, ...) (map[string]interface{}, []*types.AccountIdentifier, *Error)
- func (f *Fetcher) ConstructionSubmit(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.TransactionIdentifier, map[string]interface{}, *Error)
- func (f *Fetcher) EventsBlocks(ctx context.Context, network *types.NetworkIdentifier, offset *int64, ...) (int64, []*types.BlockEvent, *Error)
- func (f *Fetcher) EventsBlocksRetry(ctx context.Context, network *types.NetworkIdentifier, offset *int64, ...) (int64, []*types.BlockEvent, *Error)
- func (f *Fetcher) InitializeAsserter(ctx context.Context, networkIdentifier *types.NetworkIdentifier, ...) (*types.NetworkIdentifier, *types.NetworkStatusResponse, *Error)
- func (f *Fetcher) Mempool(ctx context.Context, network *types.NetworkIdentifier) ([]*types.TransactionIdentifier, *Error)
- func (f *Fetcher) MempoolTransaction(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.Transaction, map[string]interface{}, *Error)
- func (f *Fetcher) NetworkList(ctx context.Context, metadata map[string]interface{}) (*types.NetworkListResponse, *Error)
- func (f *Fetcher) NetworkListRetry(ctx context.Context, metadata map[string]interface{}) (*types.NetworkListResponse, *Error)
- func (f *Fetcher) NetworkOptions(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.NetworkOptionsResponse, *Error)
- func (f *Fetcher) NetworkOptionsRetry(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.NetworkOptionsResponse, *Error)
- func (f *Fetcher) NetworkStatus(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.NetworkStatusResponse, *Error)
- func (f *Fetcher) NetworkStatusRetry(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.NetworkStatusResponse, *Error)
- func (f *Fetcher) RequestFailedError(rosettaErr *types.Error, err error, message string) *Error
- func (f *Fetcher) SearchTransactions(ctx context.Context, request *types.SearchTransactionsRequest) (*int64, []*types.BlockTransaction, *Error)
- func (f *Fetcher) SearchTransactionsRetry(ctx context.Context, request *types.SearchTransactionsRequest) (*int64, []*types.BlockTransaction, *Error)
- func (f *Fetcher) UnsafeBlock(ctx context.Context, network *types.NetworkIdentifier, ...) (*types.Block, *Error)
- func (f *Fetcher) UnsafeTransactions(ctx context.Context, network *types.NetworkIdentifier, ...) ([]*types.Transaction, *Error)
- type Option
- func WithAsserter(asserter *asserter.Asserter) Option
- func WithClient(client *client.APIClient) Option
- func WithForceRetry() Option
- func WithInsecureTLS() Option
- func WithMaxConnections(connections int) Option
- func WithMaxRetries(maxRetries uint64) Option
- func WithRetryElapsedTime(retryElapsedTime time.Duration) Option
- func WithTimeout(timeout time.Duration) Option
Constants ¶
const ( // DefaultElapsedTime is the default limit on time // spent retrying a fetch. DefaultElapsedTime = 1 * time.Minute // DefaultRetries is the default number of times to // attempt a retry on a failed request. DefaultRetries = 10 // DefaultHTTPTimeout is the default timeout for // HTTP requests. DefaultHTTPTimeout = 10 * time.Second // DefaultUserAgent is the default userAgent // to populate on requests to a Rosetta server. DefaultUserAgent = "rosetta-sdk-go" // DefaultIdleConnTimeout is the maximum amount of time an idle // (keep-alive) connection will remain idle before closing // itself. DefaultIdleConnTimeout = 30 * time.Second // DefaultMaxConnections limits the number of concurrent // connections we will attempt to make. Most OS's have a // default connection limit of 128, so we set the default // below that. DefaultMaxConnections = 120 )
Variables ¶
var ( // ErrNoNetworks is returned when there are no // networks available for syncing. ErrNoNetworks = errors.New("no networks available") // ErrNetworkMissing is returned during asserter initialization // when the provided *types.NetworkIdentifier is not in the // *types.NetworkListResponse. ErrNetworkMissing = errors.New("network missing") // ErrRequestFailed is returned when a request fails. ErrRequestFailed = errors.New("request failed") // ErrExhaustedRetries is returned when a request with retries // fails because it was attempted too many times. ErrExhaustedRetries = errors.New("retries exhausted") // ErrCouldNotAcquireSemaphore is returned when acquiring // the connection semaphore returns an error. ErrCouldNotAcquireSemaphore = errors.New("could not acquire semaphore") )
Functions ¶
func CheckNetworkListForNetwork ¶
func CheckNetworkListForNetwork( networkList *types.NetworkListResponse, networkIdentifier *types.NetworkIdentifier, ) (bool, []*types.NetworkIdentifier)
CheckNetworkListForNetwork returns a boolean indicating if a *types.NetworkIdentifier is present in the list of supported networks.
Types ¶
type Backoff ¶
type Backoff struct {
// contains filtered or unexported fields
}
Backoff wraps backoff.BackOff so we can access the retry count (which is private on backoff.BackOff).
type Error ¶
type Error struct { Err error `json:"err"` ClientErr *types.Error `json:"client_err"` // Retry is a boolean that indicates if the request should be retried. // It is the combination of the *types.Error.Retriable status and a // collection of transient errors. Retry bool `json:"retry"` }
Error wraps the two possible types of error responses returned by the Rosetta Client
type Fetcher ¶
type Fetcher struct { // Asserter is a public variable because // it can be used to determine if a retrieved // types.Operation is successful and should // be applied. Asserter *asserter.Asserter // contains filtered or unexported fields }
Fetcher contains all logic to communicate with a Rosetta Server.
func (*Fetcher) AccountBalance ¶
func (f *Fetcher) AccountBalance( ctx context.Context, network *types.NetworkIdentifier, account *types.AccountIdentifier, block *types.PartialBlockIdentifier, currencies []*types.Currency, ) (*types.BlockIdentifier, []*types.Amount, map[string]interface{}, *Error)
AccountBalance returns the validated response from the AccountBalance method. If a block is provided, a historical lookup is performed.
func (*Fetcher) AccountBalanceRetry ¶
func (f *Fetcher) AccountBalanceRetry( ctx context.Context, network *types.NetworkIdentifier, account *types.AccountIdentifier, block *types.PartialBlockIdentifier, currencies []*types.Currency, ) (*types.BlockIdentifier, []*types.Amount, map[string]interface{}, *Error)
AccountBalanceRetry retrieves the validated AccountBalance with a specified number of retries and max elapsed time. If a block is provided, a historical lookup is performed.
func (*Fetcher) AccountCoins ¶
func (f *Fetcher) AccountCoins( ctx context.Context, network *types.NetworkIdentifier, account *types.AccountIdentifier, includeMempool bool, currencies []*types.Currency, ) (*types.BlockIdentifier, []*types.Coin, map[string]interface{}, *Error)
AccountCoins returns the validated response from the AccountCoins method.
func (*Fetcher) AccountCoinsRetry ¶
func (f *Fetcher) AccountCoinsRetry( ctx context.Context, network *types.NetworkIdentifier, account *types.AccountIdentifier, includeMempool bool, currencies []*types.Currency, ) (*types.BlockIdentifier, []*types.Coin, map[string]interface{}, *Error)
AccountCoinsRetry retrieves the validated AccountCoins with a specified number of retries and max elapsed time.
func (*Fetcher) Block ¶
func (f *Fetcher) Block( ctx context.Context, network *types.NetworkIdentifier, blockIdentifier *types.PartialBlockIdentifier, ) (*types.Block, *Error)
Block returns the validated response from the block method. This function will automatically fetch any transactions that were not returned by the call to fetch the block.
func (*Fetcher) BlockRetry ¶
func (f *Fetcher) BlockRetry( ctx context.Context, network *types.NetworkIdentifier, blockIdentifier *types.PartialBlockIdentifier, ) (*types.Block, *Error)
BlockRetry retrieves a validated Block with a specified number of retries and max elapsed time.
func (*Fetcher) Call ¶
func (f *Fetcher) Call( ctx context.Context, network *types.NetworkIdentifier, method string, parameters map[string]interface{}, ) (map[string]interface{}, bool, *Error)
Call returns the validated response from the Call method.
func (*Fetcher) CallRetry ¶
func (f *Fetcher) CallRetry( ctx context.Context, network *types.NetworkIdentifier, method string, parameters map[string]interface{}, ) (map[string]interface{}, bool, *Error)
CallRetry invokes the /call endpoint with a specified number of retries and max elapsed time.
func (*Fetcher) ConstructionCombine ¶
func (f *Fetcher) ConstructionCombine( ctx context.Context, network *types.NetworkIdentifier, unsignedTransaction string, signatures []*types.Signature, ) (string, *Error)
ConstructionCombine creates a network-specific transaction from an unsigned transaction and an array of provided signatures.
The signed transaction returned from this method will be sent to the `/construction/submit` endpoint by the caller.
func (*Fetcher) ConstructionDerive ¶
func (f *Fetcher) ConstructionDerive( ctx context.Context, network *types.NetworkIdentifier, publicKey *types.PublicKey, metadata map[string]interface{}, ) (*types.AccountIdentifier, map[string]interface{}, *Error)
ConstructionDerive returns the network-specific address associated with a public key.
Blockchains that require an on-chain action to create an account should not implement this method.
func (*Fetcher) ConstructionHash ¶
func (f *Fetcher) ConstructionHash( ctx context.Context, network *types.NetworkIdentifier, signedTransaction string, ) (*types.TransactionIdentifier, *Error)
ConstructionHash returns the network-specific transaction hash for a signed transaction.
func (*Fetcher) ConstructionMetadata ¶
func (f *Fetcher) ConstructionMetadata( ctx context.Context, network *types.NetworkIdentifier, options map[string]interface{}, publicKeys []*types.PublicKey, ) (map[string]interface{}, []*types.Amount, *Error)
ConstructionMetadata returns the validated response from the ConstructionMetadata method.
func (*Fetcher) ConstructionParse ¶
func (f *Fetcher) ConstructionParse( ctx context.Context, network *types.NetworkIdentifier, signed bool, transaction string, ) ([]*types.Operation, []*types.AccountIdentifier, map[string]interface{}, *Error)
ConstructionParse is called on both unsigned and signed transactions to understand the intent of the formulated transaction.
This is run as a sanity check before signing (after `/construction/payloads`) and before broadcast (after `/construction/combine`).
func (*Fetcher) ConstructionPayloads ¶
func (f *Fetcher) ConstructionPayloads( ctx context.Context, network *types.NetworkIdentifier, operations []*types.Operation, metadata map[string]interface{}, publicKeys []*types.PublicKey, ) (string, []*types.SigningPayload, *Error)
ConstructionPayloads is called with an array of operations and the response from `/construction/metadata`. It returns an unsigned transaction blob and a collection of payloads that must be signed by particular addresses using a certain SignatureType.
The array of operations provided in transaction construction often times can not specify all "effects" of a transaction (consider invoked transactions in Ethereum). However, they can deterministically specify the "intent" of the transaction, which is sufficient for construction. For this reason, parsing the corresponding transaction in the Data API (when it lands on chain) will contain a superset of whatever operations were provided during construction.
func (*Fetcher) ConstructionPreprocess ¶
func (f *Fetcher) ConstructionPreprocess( ctx context.Context, network *types.NetworkIdentifier, operations []*types.Operation, metadata map[string]interface{}, ) (map[string]interface{}, []*types.AccountIdentifier, *Error)
ConstructionPreprocess is called prior to `/construction/payloads` to construct a request for any metadata that is needed for transaction construction given (i.e. account nonce).
The request returned from this method will be used by the caller (in a different execution environment) to call the `/construction/metadata` endpoint.
func (*Fetcher) ConstructionSubmit ¶
func (f *Fetcher) ConstructionSubmit( ctx context.Context, network *types.NetworkIdentifier, signedTransaction string, ) (*types.TransactionIdentifier, map[string]interface{}, *Error)
ConstructionSubmit returns the validated response from the ConstructionSubmit method.
func (*Fetcher) EventsBlocks ¶
func (f *Fetcher) EventsBlocks( ctx context.Context, network *types.NetworkIdentifier, offset *int64, limit *int64, ) (int64, []*types.BlockEvent, *Error)
EventsBlocks returns the validated response from the EventsBlocks method.
func (*Fetcher) EventsBlocksRetry ¶
func (f *Fetcher) EventsBlocksRetry( ctx context.Context, network *types.NetworkIdentifier, offset *int64, limit *int64, ) (int64, []*types.BlockEvent, *Error)
EventsBlocksRetry retrieves the valided EventsBlocks with a specified number of retries and max elapsed time.
func (*Fetcher) InitializeAsserter ¶
func (f *Fetcher) InitializeAsserter( ctx context.Context, networkIdentifier *types.NetworkIdentifier, validationFilePath string, ) ( *types.NetworkIdentifier, *types.NetworkStatusResponse, *Error, )
InitializeAsserter creates an Asserter for validating responses. The Asserter is created by fetching the NetworkStatus and NetworkOptions from a Rosetta server.
If a *types.NetworkIdentifier is provided, it will be used to fetch status and options. Not providing a *types.NetworkIdentifier will result in the first network returned by NetworkList to be used.
This method should be called before making any validated client requests.
func (*Fetcher) Mempool ¶
func (f *Fetcher) Mempool( ctx context.Context, network *types.NetworkIdentifier, ) ([]*types.TransactionIdentifier, *Error)
Mempool returns the validated response from the Mempool method.
func (*Fetcher) MempoolTransaction ¶
func (f *Fetcher) MempoolTransaction( ctx context.Context, network *types.NetworkIdentifier, transaction *types.TransactionIdentifier, ) (*types.Transaction, map[string]interface{}, *Error)
MempoolTransaction returns the validated response from the MempoolTransaction method.
func (*Fetcher) NetworkList ¶
func (f *Fetcher) NetworkList( ctx context.Context, metadata map[string]interface{}, ) (*types.NetworkListResponse, *Error)
NetworkList returns the validated response from the NetworkList method.
func (*Fetcher) NetworkListRetry ¶
func (f *Fetcher) NetworkListRetry( ctx context.Context, metadata map[string]interface{}, ) (*types.NetworkListResponse, *Error)
NetworkListRetry retrieves the validated NetworkList with a specified number of retries and max elapsed time.
func (*Fetcher) NetworkOptions ¶
func (f *Fetcher) NetworkOptions( ctx context.Context, network *types.NetworkIdentifier, metadata map[string]interface{}, ) (*types.NetworkOptionsResponse, *Error)
NetworkOptions returns the validated response from the NetworkOptions method.
func (*Fetcher) NetworkOptionsRetry ¶
func (f *Fetcher) NetworkOptionsRetry( ctx context.Context, network *types.NetworkIdentifier, metadata map[string]interface{}, ) (*types.NetworkOptionsResponse, *Error)
NetworkOptionsRetry retrieves the validated NetworkOptions with a specified number of retries and max elapsed time.
func (*Fetcher) NetworkStatus ¶
func (f *Fetcher) NetworkStatus( ctx context.Context, network *types.NetworkIdentifier, metadata map[string]interface{}, ) (*types.NetworkStatusResponse, *Error)
NetworkStatus returns the validated response from the NetworkStatus method.
func (*Fetcher) NetworkStatusRetry ¶
func (f *Fetcher) NetworkStatusRetry( ctx context.Context, network *types.NetworkIdentifier, metadata map[string]interface{}, ) (*types.NetworkStatusResponse, *Error)
NetworkStatusRetry retrieves the validated NetworkStatus with a specified number of retries and max elapsed time.
func (*Fetcher) RequestFailedError ¶
RequestFailedError creates a new *Error and asserts the provided rosettaErr was provided in /network/options.
func (*Fetcher) SearchTransactions ¶
func (f *Fetcher) SearchTransactions( ctx context.Context, request *types.SearchTransactionsRequest, ) (*int64, []*types.BlockTransaction, *Error)
SearchTransactions returns the validated response from the SearchTransactions method.
func (*Fetcher) SearchTransactionsRetry ¶
func (f *Fetcher) SearchTransactionsRetry( ctx context.Context, request *types.SearchTransactionsRequest, ) (*int64, []*types.BlockTransaction, *Error)
SearchTransactionsRetry retrieves the valided SearchTransactions with a specified number of retries and max elapsed time.
func (*Fetcher) UnsafeBlock ¶
func (f *Fetcher) UnsafeBlock( ctx context.Context, network *types.NetworkIdentifier, blockIdentifier *types.PartialBlockIdentifier, ) (*types.Block, *Error)
UnsafeBlock returns the unvalidated response from the Block method. This function will automatically fetch any transactions that were not returned by the call to fetch the block.
func (*Fetcher) UnsafeTransactions ¶
func (f *Fetcher) UnsafeTransactions( ctx context.Context, network *types.NetworkIdentifier, block *types.BlockIdentifier, transactionIdentifiers []*types.TransactionIdentifier, ) ([]*types.Transaction, *Error)
UnsafeTransactions returns the unvalidated response from the BlockTransaction method. UnsafeTransactions fetches all provided types.TransactionIdentifiers concurrently (with the number of threads specified by txConcurrency). If any fetch fails, this function will return an error.
type Option ¶
type Option func(f *Fetcher)
Option is used to overwrite default values in Fetcher construction. Any Option not provided falls back to the default value.
func WithAsserter ¶
WithAsserter sets the asserter.Asserter on construction so it does not need to be initialized.
func WithClient ¶
WithClient overrides the default client.APIClient.
func WithForceRetry ¶
func WithForceRetry() Option
WithForceRetry overrides the default retry handling logic and treats every error as retriable.
This is particularly useful when accessing a Rosetta implementation via a load balancer where there may be periods of inconsistency (i.e. we get a network status from one implementation and query another that has not yet synced the most recent block).
func WithInsecureTLS ¶
func WithInsecureTLS() Option
WithInsecureTLS overrides the default TLS security settings to allow insecure certificates on an HTTPS connection.
This should ONLY be used when debugging a Rosetta API implementation. Using this option can lead to a man-in-the-middle attack!!
func WithMaxConnections ¶
WithMaxConnections limits the number of concurrent requests the fetcher will attempt at once.
func WithMaxRetries ¶
WithMaxRetries overrides the default number of retries on a request.
func WithRetryElapsedTime ¶
WithRetryElapsedTime overrides the default max elapsed time to retry a request.
func WithTimeout ¶
WithTimeout overrides the default HTTP timeout.