Documentation
¶
Index ¶
- Variables
- func EnforceMinimumSubsidizerBalance(ctx context.Context, data code_data.Provider) error
- func EstimateUsedSubsidizerBalance(ctx context.Context, data code_data.Provider) (uint64, error)
- func FromCoreMintQuarks(quarks uint64) uint64
- func GetCurrentSubsidizerBalance(ctx context.Context, data code_data.Provider) (uint64, error)
- func GetLatestCodeTimelockAccountRecordsForOwner(ctx context.Context, data code_data.Provider, owner *Account) (map[commonpb.AccountType][]*AccountRecords, error)
- func GetLatestTokenAccountRecordsForOwner(ctx context.Context, data code_data.Provider, owner *Account) (map[commonpb.AccountType][]*AccountRecords, error)
- func InjectTestSubsidizer(ctx context.Context, data code_data.Provider, testAccount *Account) error
- func IsCoreMintUsdStableCoin() bool
- func IsManagedByCode(ctx context.Context, timelockRecord *timelock.Record) bool
- func LoadProductionSubsidizer(ctx context.Context, data code_data.Provider) error
- func StrToQuarks(val string) (int64, error)
- func ToCoreMintQuarks(units uint64) uint64
- func ValidateExternalTokenAccount(ctx context.Context, data code_data.Provider, tokenAccount *Account) (bool, string, error)
- type Account
- func GetSubsidizer() *Account
- func NewAccountFromPrivateKey(privateKey *Key) (*Account, error)
- func NewAccountFromPrivateKeyBytes(publicKey []byte) (*Account, error)
- func NewAccountFromPrivateKeyString(privateKey string) (*Account, error)
- func NewAccountFromProto(proto *commonpb.SolanaAccountId) (*Account, error)
- func NewAccountFromPublicKey(publicKey *Key) (*Account, error)
- func NewAccountFromPublicKeyBytes(publicKey []byte) (*Account, error)
- func NewAccountFromPublicKeyString(publicKey string) (*Account, error)
- func NewRandomAccount() (*Account, error)
- func (a *Account) GetTimelockAccounts(vm, mint *Account) (*TimelockAccounts, error)
- func (a *Account) GetVmDepositAccounts(vm, mint *Account) (*VmDepositAccounts, error)
- func (a *Account) IsManagedByCode(ctx context.Context, data code_data.Provider) (bool, error)
- func (a *Account) PrivateKey() *Key
- func (a *Account) PublicKey() *Key
- func (a *Account) Sign(message []byte) ([]byte, error)
- func (a *Account) String() string
- func (a *Account) ToAssociatedTokenAccount(mint *Account) (*Account, error)
- func (a *Account) ToProto() *commonpb.SolanaAccountId
- func (a *Account) ToTimelockVault(vm, mint *Account) (*Account, error)
- func (a *Account) ToVmDepositAssociatedTokenAccount(vm, mint *Account) (*Account, error)
- func (a *Account) Validate() error
- type AccountRecords
- type Key
- type OwnerManagementState
- type OwnerMetadata
- type OwnerType
- type TimelockAccounts
- type VmDepositAccounts
Constants ¶
This section is empty.
Variables ¶
var (
CoreMintAccount, _ = NewAccountFromPublicKeyBytes(config.CoreMintPublicKeyBytes)
CoreMintQuarksPerUnit = uint64(config.CoreMintQuarksPerUnit)
CoreMintSymbol = config.CoreMintSymbol
CoreMintDecimals = config.CoreMintDecimals
UsdcMintAccount, _ = NewAccountFromPublicKeyBytes(usdc.TokenMint)
)
var (
// The well-known Code VM instance
CodeVmAccount, _ = NewAccountFromPublicKeyString(config.VmAccountPublicKey)
// The well-known Code VM instance omnibus account
CodeVmOmnibusAccount, _ = NewAccountFromPublicKeyString(config.VmOmnibusPublicKey)
)
var (
ErrOwnerNotFound = errors.New("owner account not found")
)
var (
ErrSubsidizerRequiresFunding = errors.New("subsidizer requires funding")
)
Functions ¶
func EnforceMinimumSubsidizerBalance ¶
EnforceMinimumSubsidizerBalance returns ErrSubsidizerRequiresFunding if the subsidizer's estimated available balance breaks a given threshold.
func EstimateUsedSubsidizerBalance ¶
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 FromCoreMintQuarks ¶
func GetCurrentSubsidizerBalance ¶
GetCurrentSubsidizerBalance returns the subsidizer's current balance in lamports.
func GetLatestCodeTimelockAccountRecordsForOwner ¶
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 ¶
InjectTestSubsidizer injects a provided account as a subsidizer for testing purposes. Do not call this in a production setting.
func IsCoreMintUsdStableCoin ¶
func IsCoreMintUsdStableCoin() bool
func IsManagedByCode ¶
func LoadProductionSubsidizer ¶
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 ToCoreMintQuarks ¶
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 NewAccountFromProto ¶
func NewAccountFromProto(proto *commonpb.SolanaAccountId) (*Account, error)
func NewAccountFromPublicKey ¶
func NewRandomAccount ¶
func (*Account) GetTimelockAccounts ¶
func (a *Account) GetTimelockAccounts(vm, mint *Account) (*TimelockAccounts, error)
func (*Account) GetVmDepositAccounts ¶
func (a *Account) GetVmDepositAccounts(vm, mint *Account) (*VmDepositAccounts, error)
func (*Account) IsManagedByCode ¶
func (*Account) PrivateKey ¶
func (*Account) ToAssociatedTokenAccount ¶
func (*Account) ToProto ¶
func (a *Account) ToProto() *commonpb.SolanaAccountId
func (*Account) ToTimelockVault ¶
func (*Account) ToVmDepositAssociatedTokenAccount ¶
type AccountRecords ¶
func (*AccountRecords) IsManagedByCode ¶
func (r *AccountRecords) IsManagedByCode(ctx context.Context) bool
func (*AccountRecords) IsTimelock ¶
func (r *AccountRecords) IsTimelock() bool
type Key ¶
type Key struct {
// contains filtered or unexported fields
}
func NewKeyFromBytes ¶
func NewKeyFromString ¶
func NewRandomKey ¶
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 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 TimelockAccounts ¶
type TimelockAccounts struct { VaultOwner *Account State *Account StateBump uint8 Vault *Account VaultBump uint8 Unlock *Account UnlockBump uint8 VmDepositAccounts *VmDepositAccounts Vm *Account Mint *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) GetInitializeInstruction ¶
func (a *TimelockAccounts) GetInitializeInstruction(memory *Account, accountIndex uint16) (solana.Instruction, error)
GetInitializeInstruction gets a SystemTimelockInitInstruction instruction for a timelock account
func (*TimelockAccounts) ToDBRecord ¶
func (a *TimelockAccounts) ToDBRecord() *timelock.Record
ToDBRecord transforms the TimelockAccounts struct to a default timelock.Record