common

package
v1.9.0 Latest Latest
Warning

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

Go to latest
Published: Apr 9, 2024 License: MIT Imports: 27 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNoPrivacyMigration2022 = errors.New("no privacy migration 2022 for owner")
)
View Source
var (
	ErrOwnerNotFound = errors.New("owner account not found")
)
View Source
var (
	ErrSubsidizerRequiresFunding = errors.New("subsidizer requires funding")
)

Functions

func EnforceMinimumSubsidizerBalance

func EnforceMinimumSubsidizerBalance(ctx context.Context, data code_data.Provider) error

EnforceMinimumSubsidizerBalance returns ErrSubsidizerRequiresFunding if the subsidizer's estimated available balance breaks a given threshold.

func EstimateUsedSubsidizerBalance

func EstimateUsedSubsidizerBalance(ctx context.Context, data code_data.Provider) (uint64, error)

EstimateUsedSubsidizerBalance estimates the number of lamports that will be used by in flight fulfillments.

todo: This assumes fees are constant, which might not be the case in the future.

func GetCurrentSubsidizerBalance

func GetCurrentSubsidizerBalance(ctx context.Context, data code_data.Provider) (uint64, error)

GetCurrentSubsidizerBalance returns the subsidizer's current balance in lamports.

func GetLatestCodeTimelockAccountRecordsForOwner added in v1.3.0

func GetLatestCodeTimelockAccountRecordsForOwner(ctx context.Context, data code_data.Provider, owner *Account) (map[commonpb.AccountType][]*AccountRecords, error)

GetLatestCodeTimelockAccountRecordsForOwner is a utility wrapper over GetLatestTokenAccountRecordsForOwner that filters for Code Timelock accounts.

func GetLatestTokenAccountRecordsForOwner

func GetLatestTokenAccountRecordsForOwner(ctx context.Context, data code_data.Provider, owner *Account) (map[commonpb.AccountType][]*AccountRecords, error)

GetLatestTokenAccountRecordsForOwner gets DB records for the latest set of token accounts for an owner account.

func InjectTestSubsidizer

func InjectTestSubsidizer(ctx context.Context, data code_data.Provider, testAccount *Account) error

InjectTestSubsidizer injects a provided account as a subsidizer for testing purposes. Do not call this in a production setting.

func IsManagedByCode

func IsManagedByCode(ctx context.Context, timelockRecord *timelock.Record) bool

func LoadProductionSubsidizer

func LoadProductionSubsidizer(ctx context.Context, data code_data.Provider) error

LoadProductionSubsidizer loads the production subsidizer account by it's public key over the provided data provider. This should be done exactly once on app launch. Use GetSubsidizer to get the Account struct.

func ValidateExternalKinTokenAccount

func ValidateExternalKinTokenAccount(ctx context.Context, data code_data.Provider, tokenAccount *Account) (bool, string, error)

ValidateExternalKinTokenAccount validates an address is an external Kin token account

Types

type Account

type Account struct {
	// contains filtered or unexported fields
}

func GetSubsidizer

func GetSubsidizer() *Account

GetSubsidizer gets the subsidizer account, as initially loaded in LoadSubsidizer

func NewAccountFromPrivateKey

func NewAccountFromPrivateKey(privateKey *Key) (*Account, error)

func NewAccountFromPrivateKeyBytes

func NewAccountFromPrivateKeyBytes(publicKey []byte) (*Account, error)

func NewAccountFromPrivateKeyString

func NewAccountFromPrivateKeyString(privateKey string) (*Account, error)

func NewAccountFromProto

func NewAccountFromProto(proto *commonpb.SolanaAccountId) (*Account, error)

func NewAccountFromPublicKey

func NewAccountFromPublicKey(publicKey *Key) (*Account, error)

func NewAccountFromPublicKeyBytes

func NewAccountFromPublicKeyBytes(publicKey []byte) (*Account, error)

func NewAccountFromPublicKeyString

func NewAccountFromPublicKeyString(publicKey string) (*Account, error)

func NewRandomAccount

func NewRandomAccount() (*Account, error)

func (*Account) GetTimelockAccounts

func (a *Account) GetTimelockAccounts(dataVersion timelock_token_v1.TimelockDataVersion, mint *Account) (*TimelockAccounts, error)

func (*Account) IsManagedByCode

func (a *Account) IsManagedByCode(ctx context.Context, data code_data.Provider) (bool, error)

func (*Account) PrivateKey

func (a *Account) PrivateKey() *Key

func (*Account) PublicKey

func (a *Account) PublicKey() *Key

func (*Account) Sign

func (a *Account) Sign(message []byte) ([]byte, error)

func (*Account) String

func (a *Account) String() string

func (*Account) ToAssociatedTokenAccount

func (a *Account) ToAssociatedTokenAccount(mint *Account) (*Account, error)

func (*Account) ToProto

func (a *Account) ToProto() *commonpb.SolanaAccountId

func (*Account) ToTimelockVault

func (a *Account) ToTimelockVault(dataVersion timelock_token_v1.TimelockDataVersion, mint *Account) (*Account, error)

func (*Account) Validate

func (a *Account) Validate() error

type AccountRecords

type AccountRecords struct {
	General  *account.Record
	Timelock *timelock.Record
}

func GetLegacyPrimary2022AccountRecordsIfNotMigrated

func GetLegacyPrimary2022AccountRecordsIfNotMigrated(ctx context.Context, data code_data.Provider, owner *Account) (*AccountRecords, error)

GetLegacyPrimary2022AccountRecordsIfNotMigrated gets a faked AccountRecords for the LEGACY_PRIMARY_2022 account associated with the provided owner. If the account doesn't exist, or was migrated, then ErrNoPrivacyMigration2022 is returned.

Note: Legacy Timelock accounts were always Kin accounts

todo: Needs tests here, but most already exist in account service

func (*AccountRecords) IsManagedByCode

func (r *AccountRecords) IsManagedByCode(ctx context.Context) bool

func (*AccountRecords) IsTimelock added in v1.3.0

func (r *AccountRecords) IsTimelock() bool

type Key

type Key struct {
	// contains filtered or unexported fields
}

func NewKeyFromBytes

func NewKeyFromBytes(value []byte) (*Key, error)

func NewKeyFromString

func NewKeyFromString(value string) (*Key, error)

func NewRandomKey

func NewRandomKey() (*Key, error)

func (*Key) IsPublic

func (k *Key) IsPublic() bool

func (*Key) ToBase58

func (k *Key) ToBase58() string

func (*Key) ToBytes

func (k *Key) ToBytes() []byte

func (*Key) Validate

func (k *Key) Validate() error

type OwnerManagementState

type OwnerManagementState uint8
const (
	OwnerManagementStateUnknown OwnerManagementState = iota
	OwnerManagementStateCodeAccount
	OwnerManagementStateNotFound
	OwnerManagementStateUnlocked
)

func GetOwnerManagementState

func GetOwnerManagementState(ctx context.Context, data code_data.Provider, owner *Account) (OwnerManagementState, error)

GetOwnerManagementState returns an aggregate management state for an owner account based on the set of sub accounts it owns.

todo: Needs tests here, but most already exist in account service

func (OwnerManagementState) String

func (t OwnerManagementState) String() string

type OwnerMetadata

type OwnerMetadata struct {
	Type               OwnerType
	Account            *Account
	VerificationRecord *phone.Verification
	State              OwnerManagementState
}

func GetOwnerMetadata

func GetOwnerMetadata(ctx context.Context, data code_data.Provider, owner *Account) (*OwnerMetadata, error)

GetOwnerMetadata gets metadata about an owner account

type OwnerType

type OwnerType uint8
const (
	OwnerTypeUnknown OwnerType = iota
	OwnerTypeUser12Words
	OwnerTypeRemoteSendGiftCard
)

func (OwnerType) String

func (t OwnerType) String() string

type TimelockAccounts

type TimelockAccounts struct {
	DataVersion timelock_token_v1.TimelockDataVersion

	State     *Account
	StateBump uint8

	Vault     *Account
	VaultBump uint8

	VaultOwner *Account

	TimeAuthority  *Account
	CloseAuthority *Account

	Mint *Account
}

func (*TimelockAccounts) GetBurnDustWithAuthorityInstruction

func (a *TimelockAccounts) GetBurnDustWithAuthorityInstruction(maxQuarks uint64) (solana.Instruction, error)

GetBurnDustWithAuthorityInstruction gets a BurnDustWithAuthority instruction for a timelock account

func (*TimelockAccounts) GetCloseAccountsInstruction

func (a *TimelockAccounts) GetCloseAccountsInstruction() (solana.Instruction, error)

GetCloseAccountsInstruction gets a CloseAccounts instruction for a timelock account

func (*TimelockAccounts) GetDBRecord

func (a *TimelockAccounts) GetDBRecord(ctx context.Context, data code_data.Provider) (*timelock.Record, error)

GetDBRecord fetches the equivalent timelock.Record for a TimelockAccounts from the DB

func (*TimelockAccounts) GetDeactivateInstruction

func (a *TimelockAccounts) GetDeactivateInstruction() (solana.Instruction, error)

GetDeactivateInstruction gets a Deactivate instruction for a timelock account

func (*TimelockAccounts) GetInitializeInstruction

func (a *TimelockAccounts) GetInitializeInstruction() (solana.Instruction, error)

GetInitializeInstruction gets an Initialize instruction for a timelock account

func (*TimelockAccounts) GetRevokeLockWithAuthorityInstruction

func (a *TimelockAccounts) GetRevokeLockWithAuthorityInstruction() (solana.Instruction, error)

GetRevokeLockWithAuthorityInstruction gets a RevokeLockWithAuthority instruction for a timelock account

func (*TimelockAccounts) GetTransferWithAuthorityInstruction

func (a *TimelockAccounts) GetTransferWithAuthorityInstruction(destination *Account, quarks uint64) (solana.Instruction, error)

GetTransferWithAuthorityInstruction gets a TransferWithAuthority instruction for a timelock account

func (*TimelockAccounts) GetWithdrawInstruction

func (a *TimelockAccounts) GetWithdrawInstruction(destination *Account) (solana.Instruction, error)

GetWithdrawInstruction gets a Withdraw instruction for a timelock account

func (*TimelockAccounts) ToDBRecord

func (a *TimelockAccounts) ToDBRecord() *timelock.Record

ToDBRecord transforms the TimelockAccounts struct to a default timelock.Record

Jump to

Keyboard shortcuts

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