Documentation ¶
Overview ¶
Package txsub provides the machinery that horizon uses to submit transactions to the stellar network and track their progress. It also helps to hide some of the complex asynchronous nature of transaction submission, waiting to respond to submitters when no definitive state is known.
Index ¶
- Variables
- type FailedTransactionError
- func (err *FailedTransactionError) Error() string
- func (fte *FailedTransactionError) OperationResultCodes() (result []string, err error)
- func (fte *FailedTransactionError) Result() (result xdr.TransactionResult, err error)
- func (fte *FailedTransactionError) TransactionResultCode(transactionHash string) (result string, err error)
- type Listener
- type MockResultProvider
- type MockSequenceProvider
- type MockSubmitter
- type OpenSubmissionList
- type Result
- type ResultProvider
- type SequenceProvider
- type SubmissionResult
- type Submitter
- type System
Constants ¶
This section is empty.
Variables ¶
var ( ErrNoResults = errors.New("No result found") ErrCanceled = errors.New("canceled") ErrTimeout = errors.New("timeout") // ErrBadSequence is a canned error response for transactions whose sequence // number is wrong. ErrBadSequence = &FailedTransactionError{"AAAAAAAAAAD////7AAAAAA=="} // ErrNoAccount is returned when the source account for the transaction // cannot be found in the database ErrNoAccount = &FailedTransactionError{"AAAAAAAAAAD////4AAAAAA=="} )
Functions ¶
This section is empty.
Types ¶
type FailedTransactionError ¶
type FailedTransactionError struct {
ResultXDR string
}
FailedTransactionError represent an error that occurred because stellar-core rejected the transaction. ResultXDR is a base64 encoded TransactionResult struct
func (*FailedTransactionError) Error ¶
func (err *FailedTransactionError) Error() string
func (*FailedTransactionError) OperationResultCodes ¶
func (fte *FailedTransactionError) OperationResultCodes() (result []string, err error)
func (*FailedTransactionError) Result ¶
func (fte *FailedTransactionError) Result() (result xdr.TransactionResult, err error)
func (*FailedTransactionError) TransactionResultCode ¶
func (fte *FailedTransactionError) TransactionResultCode(transactionHash string) (result string, err error)
type Listener ¶
type Listener chan<- Result
Listener represents some client who is interested in retrieving the result of a specific transaction.
type MockResultProvider ¶
MockResultProvider is a test helper that simplements the ResultProvider interface
func (*MockResultProvider) ResultByHash ¶
func (results *MockResultProvider) ResultByHash(ctx context.Context, hash string) Result
ResultByHash implements `txsub.ResultProvider`
type MockSequenceProvider ¶
MockSequenceProvider is a test helper that simplements the SequenceProvider interface
func (*MockSequenceProvider) GetSequenceNumbers ¶
func (o *MockSequenceProvider) GetSequenceNumbers(addresses []string) (map[string]uint64, error)
Get implements `txsub.SequenceProvider`
type MockSubmitter ¶
type MockSubmitter struct { R SubmissionResult WasSubmittedTo bool }
MockSubmitter is a test helper that simplements the Submitter interface
func (*MockSubmitter) Submit ¶
func (sub *MockSubmitter) Submit(ctx context.Context, env string) SubmissionResult
Submit implements `txsub.Submitter`
type OpenSubmissionList ¶
type OpenSubmissionList interface { // Add registers the provided listener as interested in being notified when a // result is available for the provided transaction hash. Add(context.Context, string, Listener) error // Finish forwards the provided result on to any listeners and cleans up any // resources associated with the transaction that this result is for Finish(context.Context, string, Result) error // Clean removes any open submissions over the provided age. Clean(context.Context, time.Duration) (int, error) // Pending return a list of transaction hashes that have at least one // listener registered to them in this list. Pending(context.Context) []string }
OpenSubmissionList represents the structure that tracks pending transactions and forwards Result structs on to listeners as they become available.
NOTE: An implementation of this interface will be called from multiple go-routines concurrently.
NOTE: A Listener must be a buffered channel. A panic will trigger if you provide an unbuffered channel
func NewDefaultSubmissionList ¶
func NewDefaultSubmissionList() OpenSubmissionList
NewDefaultSubmissionList returns a list that manages open submissions purely in memory.
type Result ¶
type Result struct { // Any error that occurred during the retrieval of this result Err error // The full details of the transaction which was submitted // to Stellar Core Transaction history.Transaction }
Result represents the response from a ResultProvider. Given no Err is set, the rest of the struct should be populated appropriately.
type ResultProvider ¶
type ResultProvider interface { // Look up a result by transaction hash ResultByHash(context.Context, string) Result }
ResultProvider represents an abstract store that can lookup Result objects by transaction hash or by [address,sequence] pairs. A ResultProvider is used within the transaction submission system to decide whether a submission should be submitted to the backing stellar-core process, as well as looking up the status of each transaction in the open submission list at each tick (i.e. ledger close)
type SequenceProvider ¶
type SequenceProvider interface { // Look up a sequence by address GetSequenceNumbers(addresses []string) (map[string]uint64, error) }
SequenceProvider represents an abstract store that can lookup the current sequence number of an account. It is used by the SequenceLock to
type SubmissionResult ¶
type SubmissionResult struct { // Any error that occurred during the attempted submission. A nil value // indicates that the submission will or already is being considered for // inclusion in the ledger (i.e. A successful submission). Err error // Duration records the time it took to submit a transaction // to stellar-core Duration time.Duration }
SubmissionResult gets returned in response to a call to Submitter.Submit. It represents a single discrete submission of a transaction envelope to the stellar network.
func (SubmissionResult) IsBadSeq ¶
func (s SubmissionResult) IsBadSeq() (bool, error)
type Submitter ¶
type Submitter interface { // Submit sends the provided transaction envelope to stellar-core Submit(context.Context, string) SubmissionResult }
Submitter represents the low-level "submit a transaction to stellar-core" provider.
type System ¶
type System struct { Pending OpenSubmissionList Results ResultProvider Sequences SequenceProvider Submitter Submitter SubmissionQueue *sequence.Manager SubmissionTimeout time.Duration Log *log.Entry Metrics struct { // SubmissionTimer exposes timing metrics about the rate and latency of // submissions to stellar-core SubmissionTimer metrics.Timer // BufferedSubmissionGauge tracks the count of submissions buffered // behind this system's SubmissionQueue BufferedSubmissionsGauge metrics.Gauge // OpenSubmissionsGauge tracks the count of "open" submissions (i.e. // submissions whose transactions haven't been confirmed successful or failed OpenSubmissionsGauge metrics.Gauge // FailedSubmissionsMeter tracks the rate of failed transactions that have // been submitted to this process FailedSubmissionsMeter metrics.Meter // SuccessfulSubmissionsMeter tracks the rate of successful transactions that // have been submitted to this process SuccessfulSubmissionsMeter metrics.Meter // V0TransactionsMeter tracks the rate of v0 transaction envelopes that // have been submitted to this process V0TransactionsMeter metrics.Meter // V1TransactionsMeter tracks the rate of v1 transaction envelopes that // have been submitted to this process V1TransactionsMeter metrics.Meter // FeeBumpTransactionsMeter tracks the rate of fee bump transaction envelopes that // have been submitted to this process FeeBumpTransactionsMeter metrics.Meter } // contains filtered or unexported fields }
System represents a completely configured transaction submission system. Its methods tie together the various pieces used to reliably submit transactions to a stellar-core instance.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
results
|
|
db
Package results provides an implementation of the txsub.ResultProvider interface backed using the SQL databases used by both stellar core and horizon
|
Package results provides an implementation of the txsub.ResultProvider interface backed using the SQL databases used by both stellar core and horizon |
Package sequence providers helpers to manage sequence numbers on behalf of horizon clients.
|
Package sequence providers helpers to manage sequence numbers on behalf of horizon clients. |