Documentation
¶
Index ¶
- Constants
- Variables
- func DeriveMigrationAccount(source ed25519.PublicKey, secret []byte) (ed25519.PublicKey, ed25519.PrivateKey, error)
- func HasMigrationHeader(ctx context.Context) (bool, error)
- func MarkComplete(ctx context.Context, store Store, account ed25519.PublicKey, prev State) error
- func MigrateBatch(ctx context.Context, m Migrator, accounts ...ed25519.PublicKey) error
- func MigrateTransferAccounts(ctx context.Context, hc horizon.ClientInterface, m Migrator, ...) error
- type Migrator
- type Processor
- func (p *Processor) Queue(ctx context.Context, req *migrationpb.QueueRequest) (*migrationpb.VoidResponse, error)
- func (p *Processor) SetRateLimit(_ context.Context, req *migrationpb.SetRateLimitRequest) (*migrationpb.VoidResponse, error)
- func (p *Processor) SetState(_ context.Context, req *migrationpb.SetStateRequest) (*migrationpb.VoidResponse, error)
- func (p *Processor) Shutdown()
- func (p *Processor) Write(ctx context.Context, account ed25519.PublicKey, ignoreZeroBalance bool) error
- type State
- type Status
- type Store
Constants ¶
const ( MigrationQueueName = "migration-queue" MigrationQueueBurnedName = "migration-queue-burned" MigrationQueueMultisigName = "migration-queue-multisig" )
Variables ¶
var ( OnDemandSuccessCounterVec = prometheus.NewCounterVec(prometheus.CounterOpts{ Namespace: "agora", Name: "on_demand_migration_success", Help: "Number of successful on demand migrations", }, []string{"kin_version"}) OnDemandFailureCounterVec = prometheus.NewCounterVec(prometheus.CounterOpts{ Namespace: "agora", Name: "on_demand_migration_failure", Help: "Number of failed on demand migrations", }, []string{"kin_version"}) MigrationAllowedCounter = prometheus.NewCounter(prometheus.CounterOpts{ Namespace: "agora", Name: "migration_allowed", Help: "Number of initiate migration calls allowed", }) MigrationRateLimitedCounter = prometheus.NewCounter(prometheus.CounterOpts{ Namespace: "agora", Name: "migration_rate_limited", Help: "Number of initiate migration calls rate limited", }) )
var ( ErrMultisig = errors.New("multisig wallet") ErrNotFound = errors.New("account not found") ErrBurned = errors.New("account was burned") ErrRateLimited = errors.New("rate limited") )
var ErrStatusMismatch = errors.New("previous state does not match stored")
ErrStatusMismatch indicates the expected previous state was not what was stored.
Functions ¶
func DeriveMigrationAccount ¶ added in v0.2.6
func DeriveMigrationAccount(source ed25519.PublicKey, secret []byte) (ed25519.PublicKey, ed25519.PrivateKey, error)
DeriveMigrationAccount derives a migration account address.
func HasMigrationHeader ¶ added in v0.2.6
HasMigrationHeader indicates whether or not the provided context contains a header indicating a migration should occur.
func MarkComplete ¶ added in v0.2.6
MarkComplete is a utility function to mark the state for an account as complete.
func MigrateBatch ¶ added in v0.2.6
MigrateBatch migrates a set of accounts in parallel.
The function will deduplicate accounts, so callers need not be concerned.
func MigrateTransferAccounts ¶ added in v0.3.0
func MigrateTransferAccounts(ctx context.Context, hc horizon.ClientInterface, m Migrator, transferAccountPairs ...[]ed25519.PublicKey) error
Migrate the accounts involved in a transaction in parallel.
Ensures a migration for destinations occurs if a sender sending a transfer to it has a native balance.
Types ¶
type Migrator ¶ added in v0.2.6
type Migrator interface { // InitiateMigration initiates a migration for a given account. // // The commitment provided indicates the commitment that should be used for // transactions and queries before returning. It should be noted that any // commitment less than MAX will not mark a migration as completed. InitiateMigration(ctx context.Context, account ed25519.PublicKey, ignoreBalance bool, commitment solana.Commitment) error // GetMigrationAccount returns the migration account for the public key, _only if_ // a migration would occur for said account. // // That is, this only returns the dervied (migration) account if the provided public // key exists on an older change GetMigrationAccount(ctx context.Context, account ed25519.PublicKey) (ed25519.PublicKey, error) }
func NewContextAwareMigrator ¶ added in v0.2.6
func NewNoopMigrator ¶ added in v0.2.6
func NewNoopMigrator() Migrator
type Processor ¶ added in v0.3.0
type Processor struct {
// contains filtered or unexported fields
}
func NewProcessor ¶ added in v0.3.0
func (*Processor) Queue ¶ added in v0.3.0
func (p *Processor) Queue(ctx context.Context, req *migrationpb.QueueRequest) (*migrationpb.VoidResponse, error)
func (*Processor) SetRateLimit ¶ added in v0.3.0
func (p *Processor) SetRateLimit(_ context.Context, req *migrationpb.SetRateLimitRequest) (*migrationpb.VoidResponse, error)
func (*Processor) SetState ¶ added in v0.3.0
func (p *Processor) SetState(_ context.Context, req *migrationpb.SetStateRequest) (*migrationpb.VoidResponse, error)
type Status ¶
type Status int
Status is the 'marked' status of a migration.
The source of truth for an account's migration status is completely recoverable from the chain, and will be used as a fallback. If the status is marked as complete, the migrators will _not_ consult the chain.
const ( // StatusNone indicates either no migration has occurred, or no // information about a migration is stored. StatusNone Status = iota // StatusInProgress indicates that a migration transaction was // likely submitted, but its result is unknown. StatusInProgress // StatusComplete indicates that a migration transaction reached // max lockout with certainty. StatusComplete )
type Store ¶
type Store interface { // Get returns the recorded state, if any, for an account. // // ZeroState is returned if there is no persisted state. Get(ctx context.Context, account ed25519.PublicKey) (state State, exists bool, err error) // Update updates the state for an account. The previous state must match // what was stored. Implementations must support atomic compare-and-swap. Update(ctx context.Context, account ed25519.PublicKey, prev, next State) error // IncrementCount increments the request count for an account IncrementCount(ctx context.Context, account ed25519.PublicKey) error // GetCount returns the request count for an account GetCount(ctx context.Context, account ed25519.PublicKey) (int, error) }