Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
Functions ¶
This section is empty.
Types ¶
type BySchedulingOrder ¶
type BySchedulingOrder []*Record
func (BySchedulingOrder) Len ¶
func (a BySchedulingOrder) Len() int
func (BySchedulingOrder) Less ¶
func (a BySchedulingOrder) Less(i, j int) bool
func (BySchedulingOrder) Swap ¶
func (a BySchedulingOrder) Swap(i, j int)
type Record ¶
type Record struct { Id uint64 Intent string IntentType intent.Type ActionId uint32 ActionType action.Type FulfillmentType Type Data []byte Signature *string Nonce *string Blockhash *string Source string // Source token account involved in the transaction Destination *string // Destination token account involved in the transaction, when it makes sense (eg. transfers) // Metadata required to pre-sort fulfillments for scheduling // // This is a 3-tiered sorting heurstic. At each tier, f1 < f2 when index1 < index2. // We move down in tiers when the current level tier matches. The order of tiers is // intent, then action, then fullfillment. IntentOrderingIndex uint64 // Typically, but not always, the FK to the intent ID ActionOrderingIndex uint32 // Typically, but not always, the FK of the action ID FulfillmentOrderingIndex uint32 // Does the fulfillment worker poll for this record? If true, it's up to other // systems to hint as to when polling can occur. This is primarily an optimization // to reduce redundant processing. This doesn't affect correctness of scheduling // (eg. depedencies), so accidentally making some actively scheduled is ok. DisableActiveScheduling bool // Metadata required to help make antispam decisions InitiatorPhoneNumber *string State State CreatedAt time.Time }
func (*Record) IsFulfilled ¶
func (*Record) ScheduledBefore ¶
type Store ¶
type Store interface { // Count returns the total count of fulfillment records. Count(ctx context.Context) (uint64, error) // Count returns the total count of fulfillments in the provided state. CountByState(ctx context.Context, state State) (uint64, error) // CountByStateGroupedByType returns the total count of fulfillments, grouped // by type, in the provided state. CountByStateGroupedByType(ctx context.Context, state State) (map[Type]uint64, error) // CountForMetrics is like CountByStateGroupedByType for metrics. Partial data may be provided. CountForMetrics(ctx context.Context, state State) (map[Type]uint64, error) // CountByStateAndAddress returns the total count of fulfillments for the provided account and state. CountByStateAndAddress(ctx context.Context, state State, address string) (uint64, error) // CountByStateAndAddress returns the total count of fulfillments for the provided type, state and account (as a source an destination). CountByTypeStateAndAddress(ctx context.Context, fulfillmentType Type, state State, address string) (uint64, error) // CountByStateAndAddress returns the total count of fulfillments for the provided type, state and account as a source. CountByTypeStateAndAddressAsSource(ctx context.Context, fulfillmentType Type, state State, address string) (uint64, error) // Count returns the total count of fulfillments for the provided intent and state. CountByIntentAndState(ctx context.Context, intent string, state State) (uint64, error) // Count returns the total count of fulfillments for the provided intent. CountByIntent(ctx context.Context, intent string) (uint64, error) // CountByTypeActionAndState returns the total count of fulfillments with a // given type, action and state. CountByTypeActionAndState(ctx context.Context, intentId string, actionId uint32, fulfillmentType Type, state State) (uint64, error) // CountPendingByType gets the count of pending transactions by type. // This is particularly useful for estimating fees that will be consumed // by our subsidizer. CountPendingByType(ctx context.Context) (map[Type]uint64, error) // PutAll creates all fulfillments in one transaction PutAll(ctx context.Context, records ...*Record) error // Update updates an existing fulfillment record // // Note 1: Updating pre-sorting metadata is allowed but limited to certain fulfillment types // Note 2: Updating DisableActiveScheduling is done in MarkAsActivelyScheduled, due to no distributed locks existing Update(ctx context.Context, record *Record) error // GetById find the fulfillment recofd for a given ID GetById(ctx context.Context, id uint64) (*Record, error) // GetBySignature finds the fulfillment record for a given signature. GetBySignature(ctx context.Context, signature string) (*Record, error) // MarkAsActivelyScheduled marks a fulfillment as actively scheduled MarkAsActivelyScheduled(ctx context.Context, id uint64) error // ActivelyScheduleTreasuryAdvances is a specialized MarkAsActivelyScheduled variant // to batch enable active scheduling for treasury advances at a particular point in time // defined by the intent ordering index. ActivelyScheduleTreasuryAdvances(ctx context.Context, treasury string, intentOrderingIndex uint64, limit int) (uint64, error) // GetAllByState returns all fulfillment records for a given state. // // Returns ErrNotFound if no records are found. GetAllByState(ctx context.Context, state State, includeDisabledActiveScheduling bool, cursor query.Cursor, limit uint64, direction query.Ordering) ([]*Record, error) // GetAllByIntent returns all fulfillment records for a given intent. // // Returns ErrNotFound if no records are found. GetAllByIntent(ctx context.Context, intent string, cursor query.Cursor, limit uint64, direction query.Ordering) ([]*Record, error) // GetAllByAction returns all fulfillment records for a given action // // Returns ErrNotFound if no records are found. GetAllByAction(ctx context.Context, intentId string, actionId uint32) ([]*Record, error) // GetAllByTypeAndAction returns all fulfillment records for a given type and action // // Returns ErrNotFound if no records are found. GetAllByTypeAndAction(ctx context.Context, fulfillmentType Type, intentId string, actionId uint32) ([]*Record, error) // GetFirstSchedulableByAddressAsSource returns the earliest fulfillment // that can be scheduled for an account as a source given the total ordering // of all fulfillments. // // Returns ErrNotFound if no records are found. GetFirstSchedulableByAddressAsSource(ctx context.Context, address string) (*Record, error) // GetFirstSchedulableByAddressAsDestination returns the earliest fulfillment // that can be scheduled for an account as a destination given the total ordering // of all fulfillments. // // Returns ErrNotFound if no records are found. GetFirstSchedulableByAddressAsDestination(ctx context.Context, address string) (*Record, error) // GetFirstSchedulableByType returns the earliest fulfillment that can be scheduled // for fulfillments of the provided type. // // Returns ErrNotFound if no records are found. GetFirstSchedulableByType(ctx context.Context, fulfillmentType Type) (*Record, error) // GetNextSchedulableByAddress gets the next schedulable fulfillment for an account after // a point in time defined by ordering indices. // // Returns ErrNotFound if no records are found. GetNextSchedulableByAddress(ctx context.Context, address string, intentOrderingIndex uint64, actionOrderingIndex, fulfillmentOrderingIndex uint32) (*Record, error) }
type Type ¶
type Type uint8
const ( UnknownType Type = iota InitializeLockedTimelockAccount NoPrivacyTransferWithAuthority NoPrivacyWithdraw TemporaryPrivacyTransferWithAuthority PermanentPrivacyTransferWithAuthority TransferWithCommitment CloseEmptyTimelockAccount CloseDormantTimelockAccount SaveRecentRoot InitializeCommitmentProof UploadCommitmentProof VerifyCommitmentProof // Deprecated, since we bundle verification with OpenCommitmentVault OpenCommitmentVault CloseCommitmentVault )
Click to show internal directories.
Click to hide internal directories.