Documentation
¶
Index ¶
- Constants
- Variables
- func CreateProgramAddress(program ed25519.PublicKey, seeds ...[]byte) (ed25519.PublicKey, error)
- func FindProgramAddress(program ed25519.PublicKey, seeds ...[]byte) (ed25519.PublicKey, error)
- func FindProgramAddressAndBump(program ed25519.PublicKey, seeds ...[]byte) (ed25519.PublicKey, uint8, error)
- type AccountInfo
- type AccountMeta
- type AddressLookupTable
- type Block
- type BlockTransaction
- type Blockhash
- type Client
- type Commitment
- type CompiledInstruction
- type ConfirmedTransaction
- type CustomError
- type Environment
- type Header
- type Instruction
- type InstructionError
- type InstructionErrorKey
- type LoadedAddresses
- type Message
- type MessageAddressTableLookup
- type MessageVersion
- type Signature
- type SignatureStatus
- type SortableAccountMeta
- type SortableAddressLookupTables
- type TokenAmount
- type TokenBalance
- type Transaction
- type TransactionError
- type TransactionErrorKey
- type TransactionMeta
- type TransactionSignature
- type TransactionTokenBalances
Constants ¶
const (
// MaxTransactionSize taken from: https://github.com/solana-labs/solana/blob/39b3ac6a8d29e14faa1de73d8b46d390ad41797b/sdk/src/packet.rs#L9-L13
MaxTransactionSize = 1232
)
const ( // PollRate is the rate at which blocks should be polled at. PollRate = (time.Second / slotsPerSec) / 2 )
Variables ¶
var ( ErrTooManySeeds = errors.New("too many seeds") ErrMaxSeedLengthExceeded = errors.New("max seed length exceeded") ErrInvalidPublicKey = errors.New("invalid public key") )
var ( CommitmentProcessed = Commitment{Commitment: confirmationStatusProcessed} CommitmentConfirmed = Commitment{Commitment: confirmationStatusConfirmed} CommitmentFinalized = Commitment{Commitment: confirmationStatusFinalized} )
var ( ErrNoAccountInfo = errors.New("no account info") ErrSignatureNotFound = errors.New("signature not found") ErrBlockNotAvailable = errors.New("block not available") ErrStaleData = errors.New("rpc data is stale") ErrNoBalance = errors.New("no balance") )
var ( ErrIncorrectProgram = errors.New("incorrect program") ErrIncorrectInstruction = errors.New("incorrect instruction") )
Functions ¶
func CreateProgramAddress ¶
CreateProgramAddress mirrors the implementation of the Solana SDK's CreateProgramAddress.
ProgramAddresses are public keys that _do not_ lie on the ed25519 curve to ensure that there is no associated private key. In the event that the program and seed parameters result in a valid public key, ErrInvalidPublicKey is returned.
func FindProgramAddress ¶
FindProgramAddress mirrors the implementation of the Solana SDK's FindProgramAddress. It only returns the address.
Types ¶
type AccountInfo ¶
AccountInfo contains the Solana account information (not to be confused with a TokenAccount)
type AccountMeta ¶
type AccountMeta struct {
PublicKey ed25519.PublicKey
IsSigner bool
IsWritable bool
// contains filtered or unexported fields
}
AccountMeta represents the account information required for building transactions.
func NewAccountMeta ¶
func NewAccountMeta(pub ed25519.PublicKey, isSigner bool) AccountMeta
NewAccountMeta creates a new AccountMeta representing a writable account.
func NewReadonlyAccountMeta ¶
func NewReadonlyAccountMeta(pub ed25519.PublicKey, isSigner bool) AccountMeta
NewAccountMeta creates a new AccountMeta representing a readonly account.
type AddressLookupTable ¶
type BlockTransaction ¶
type BlockTransaction struct {
Transaction Transaction
Err *TransactionError
Meta *TransactionMeta
}
type Client ¶
type Client interface {
GetAccountInfo(ed25519.PublicKey, Commitment) (AccountInfo, uint64, error)
GetAccountDataAfterBlock(ed25519.PublicKey, uint64) ([]byte, uint64, error)
GetBalance(ed25519.PublicKey) (uint64, error)
GetBlock(slot uint64) (*Block, error)
GetBlockSignatures(slot uint64) ([]string, error)
GetBlockTime(block uint64) (time.Time, error)
GetConfirmationStatus(Signature, Commitment) (bool, error)
GetConfirmedBlock(slot uint64) (*Block, error)
GetConfirmedBlocksWithLimit(start, limit uint64) ([]uint64, error)
GetFilteredProgramAccounts(program ed25519.PublicKey, offset uint, filterValue []byte) ([]string, uint64, error)
GetLatestBlockhash() (Blockhash, error)
GetMinimumBalanceForRentExemption(size uint64) (lamports uint64, err error)
GetSignatureStatus(Signature, Commitment) (*SignatureStatus, error)
GetSignatureStatuses([]Signature) ([]*SignatureStatus, error)
GetSignaturesForAddress(owner ed25519.PublicKey, commitment Commitment, limit uint64, before, until string) ([]*TransactionSignature, error)
GetSlot(Commitment) (uint64, error)
GetTokenAccountBalance(ed25519.PublicKey) (uint64, uint64, error)
GetTokenAccountsByOwner(owner, mint ed25519.PublicKey) ([]ed25519.PublicKey, error)
GetTransaction(Signature, Commitment) (ConfirmedTransaction, error)
GetTransactionTokenBalances(Signature) (TransactionTokenBalances, error)
SubmitTransaction(Transaction, Commitment) (Signature, error)
}
Client provides an interaction with the Solana JSON RPC API.
Reference: https://docs.solana.com/apps/jsonrpc-api
func NewWithFallback ¶ added in v1.3.0
NewWithFallback returns a Client that uses the fallback endpoint as a retry mechanism when the primary returns an unexpected error (e.g. network failures, unknown RPC errors). Domain errors like ErrNoAccountInfo or transaction errors are not retried since they would produce the same result on any node.
func NewWithFallbackFromClients ¶ added in v1.3.0
NewWithFallbackFromClients is like NewWithFallback but accepts pre-constructed Client instances. This is useful for testing or when clients need custom RPC options.
func NewWithRPCOptions ¶
func NewWithRPCOptions(endpoint string, opts *jsonrpc.RPCClientOpts) Client
NewWithRPCOptions returns a client configured with the specified RPC options.
type Commitment ¶
type Commitment struct {
Commitment string `json:"commitment"`
}
type CompiledInstruction ¶
CompiledInstruction represents an instruction that has been compiled into a transaction.
type ConfirmedTransaction ¶
type ConfirmedTransaction struct {
Slot uint64
BlockTime *time.Time
Transaction Transaction
Err *TransactionError
Meta *TransactionMeta
}
type CustomError ¶
type CustomError int
CustomError is the numerical error returned by a non-system program.
func (CustomError) Error ¶
func (c CustomError) Error() string
type Environment ¶
type Environment string
const ( EnvironmentDev Environment = "https://api.devnet.solana.com" EnvironmentTest Environment = "https://api.testnet.solana.com" EnvironmentProd Environment = "https://api.mainnet-beta.solana.com" )
type Instruction ¶
type Instruction struct {
Program ed25519.PublicKey
Accounts []AccountMeta
Data []byte
}
Instruction represents a transaction instruction.
func NewInstruction ¶
func NewInstruction(program ed25519.PublicKey, data []byte, accounts ...AccountMeta) Instruction
NewInstruction creates a new instruction.
type InstructionError ¶
InstructionError indicates an instruction returned an error in a transaction.
func (InstructionError) CustomError ¶
func (i InstructionError) CustomError() *CustomError
func (InstructionError) Error ¶
func (i InstructionError) Error() string
func (InstructionError) ErrorKey ¶
func (i InstructionError) ErrorKey() InstructionErrorKey
func (InstructionError) JSONString ¶
func (i InstructionError) JSONString() string
type InstructionErrorKey ¶
type InstructionErrorKey string
InstructionErrorKey is the string keys returned in an instruction error.
const ( InstructionErrorGenericError InstructionErrorKey = "GenericError" InstructionErrorInvalidArgument InstructionErrorKey = "InvalidArgument" InstructionErrorInvalidInstructionData InstructionErrorKey = "InvalidInstructionData" InstructionErrorInvalidAccountData InstructionErrorKey = "InvalidAccountData" InstructionErrorAccountDataTooSmall InstructionErrorKey = "AccountDataTooSmall" InstructionErrorInsufficientFunds InstructionErrorKey = "InsufficientFunds" InstructionErrorIncorrectProgramID InstructionErrorKey = "IncorrectProgramId" InstructionErrorMissingRequiredSignature InstructionErrorKey = "MissingRequiredSignature" InstructionErrorAccountAlreadyInitialized InstructionErrorKey = "AccountAlreadyInitialized" InstructionErrorUninitializedAccount InstructionErrorKey = "UninitializedAccount" InstructionErrorUnbalancedInstruction InstructionErrorKey = "UnbalancedInstruction" InstructionErrorModifiedProgramID InstructionErrorKey = "ModifiedProgramId" InstructionErrorExternalAccountLamportSpend InstructionErrorKey = "ExternalAccountLamportSpend" InstructionErrorExternalAccountDataModified InstructionErrorKey = "ExternalAccountDataModified" InstructionErrorReadonlyLamportChange InstructionErrorKey = "ReadonlyLamportChange" InstructionErrorReadonlyDataModified InstructionErrorKey = "ReadonlyDataModified" InstructionErrorDuplicateAccountIndex InstructionErrorKey = "DuplicateAccountIndex" InstructionErrorExecutableModified InstructionErrorKey = "ExecutableModified" InstructionErrorRentEpochModified InstructionErrorKey = "RentEpochModified" InstructionErrorNotEnoughAccountKeys InstructionErrorKey = "NotEnoughAccountKeys" InstructionErrorAccountDataSizeChanged InstructionErrorKey = "AccountDataSizeChanged" InstructionErrorAccountNotExecutable InstructionErrorKey = "AccountNotExecutable" InstructionErrorAccountBorrowFailed InstructionErrorKey = "AccountBorrowFailed" InstructionErrorAccountBorrowOutstanding InstructionErrorKey = "AccountBorrowOutstanding" InstructionErrorDuplicateAccountOutOfSync InstructionErrorKey = "DuplicateAccountOutOfSync" InstructionErrorCustom InstructionErrorKey = "Custom" InstructionErrorInvalidError InstructionErrorKey = "InvalidError" InstructionErrorExecutableDataModified InstructionErrorKey = "ExecutableDataModified" InstructionErrorExecutableLamportChange InstructionErrorKey = "ExecutableLamportChange" InstructionErrorExecutableAccountNotRentExempt InstructionErrorKey = "ExecutableAccountNotRentExempt" InstructionErrorUnsupportedProgramID InstructionErrorKey = "UnsupportedProgramId" InstructionErrorCallDepth InstructionErrorKey = "CallDepth" InstructionErrorMissingAccount InstructionErrorKey = "MissingAccount" InstructionErrorReentrancyNotAllowed InstructionErrorKey = "ReentrancyNotAllowed" InstructionErrorMaxSeedLengthExceeded InstructionErrorKey = "MaxSeedLengthExceeded" InstructionErrorInvalidSeeds InstructionErrorKey = "InvalidSeeds" InstructionErrorInvalidRealloc InstructionErrorKey = "InvalidRealloc" )
type LoadedAddresses ¶
type Message ¶
type Message struct {
Version MessageVersion
Header Header
Accounts []ed25519.PublicKey
RecentBlockhash Blockhash
Instructions []CompiledInstruction
AddressTableLookups []MessageAddressTableLookup
}
type MessageVersion ¶
type MessageVersion uint8
const ( MessageVersionLegacy MessageVersion = iota MessageVersion0 )
func (MessageVersion) String ¶
func (v MessageVersion) String() string
type Signature ¶
type Signature [ed25519.SignatureSize]byte
type SignatureStatus ¶
type SignatureStatus struct {
Slot uint64
ErrorResult *TransactionError
// Confirmations will be nil if the transaction has been rooted.
Confirmations *int
ConfirmationStatus string
}
func (SignatureStatus) Confirmed ¶
func (s SignatureStatus) Confirmed() bool
func (SignatureStatus) Finalized ¶
func (s SignatureStatus) Finalized() bool
type SortableAccountMeta ¶
type SortableAccountMeta []AccountMeta
SortableAccountMeta is a sortable []AccountMeta based on the solana transaction account sorting rules.
Reference: https://docs.solana.com/transaction#account-addresses-format
func (SortableAccountMeta) Len ¶
func (s SortableAccountMeta) Len() int
Len is the number of elements in the collection.
func (SortableAccountMeta) Less ¶
func (s SortableAccountMeta) Less(i int, j int) bool
Less reports whether the element with index i should sort before the element with index j.
func (SortableAccountMeta) Swap ¶
func (s SortableAccountMeta) Swap(i int, j int)
Swap swaps the elements with indexes i and j.
type SortableAddressLookupTables ¶
type SortableAddressLookupTables []AddressLookupTable
func (SortableAddressLookupTables) Len ¶
func (s SortableAddressLookupTables) Len() int
func (SortableAddressLookupTables) Less ¶
func (s SortableAddressLookupTables) Less(i int, j int) bool
func (SortableAddressLookupTables) Swap ¶
func (s SortableAddressLookupTables) Swap(i int, j int)
type TokenAmount ¶
type TokenBalance ¶
type TokenBalance struct {
AccountIndex uint64 `json:"accountIndex"` // example: 2,
Mint string `json:"mint"` // example: "kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6",
TokenAmount TokenAmount `json:"uiTokenAmount"`
}
type Transaction ¶
func NewLegacyTransaction ¶
func NewLegacyTransaction(payer ed25519.PublicKey, instructions ...Instruction) Transaction
func NewV0Transaction ¶
func NewV0Transaction(payer ed25519.PublicKey, addressLookupTables []AddressLookupTable, instructions []Instruction) Transaction
func (Transaction) Marshal ¶
func (t Transaction) Marshal() []byte
func (*Transaction) SetBlockhash ¶
func (t *Transaction) SetBlockhash(bh Blockhash)
func (*Transaction) Sign ¶
func (t *Transaction) Sign(signers ...ed25519.PrivateKey) error
func (*Transaction) Signature ¶
func (t *Transaction) Signature() []byte
func (*Transaction) String ¶
func (t *Transaction) String() string
func (*Transaction) Unmarshal ¶
func (t *Transaction) Unmarshal(b []byte) error
type TransactionError ¶
type TransactionError struct {
// contains filtered or unexported fields
}
TransactionError contains the transaction error details.
func NewTransactionError ¶
func NewTransactionError(key TransactionErrorKey) *TransactionError
func ParseRPCError ¶
func ParseRPCError(err *jsonrpc.RPCError) (*TransactionError, error)
ParseRPCError parses the jsonrpc.RPCError returned from a method.
func ParseTransactionError ¶
func ParseTransactionError(raw interface{}) (*TransactionError, error)
ParseTransactionError parses the JSON error returned from the "err" field in various RPC methods and fields.
func TransactionErrorFromInstructionError ¶
func TransactionErrorFromInstructionError(err *InstructionError) (*TransactionError, error)
func (TransactionError) Error ¶
func (t TransactionError) Error() string
func (TransactionError) ErrorKey ¶
func (t TransactionError) ErrorKey() TransactionErrorKey
func (TransactionError) InstructionError ¶
func (t TransactionError) InstructionError() *InstructionError
func (TransactionError) JSONString ¶
func (t TransactionError) JSONString() (string, error)
type TransactionErrorKey ¶
type TransactionErrorKey string
TransactionErrorKey is the string key returned in a transaction error.
const ( TransactionErrorInternal TransactionErrorKey = "Internal" // Internal error TransactionErrorAccountInUse TransactionErrorKey = "AccountInUse" // An account is already being processed in another transaction in a way that does not support parallelism TransactionErrorAccountLoadedTwice TransactionErrorKey = "AccountLoadedTwice" // A `Pubkey` appears twice in the transaction's `account_keys`. Instructions can reference `Pubkey`s more than once but the message must contain a list with no duplicate keys TransactionErrorAccountNotFound TransactionErrorKey = "AccountNotFound" // Attempt to debit an account but found no record of a prior credit. TransactionErrorProgramAccountNotFound TransactionErrorKey = "ProgramAccountNotFound" // Attempt to load a program that does not exist TransactionErrorInsufficientFundsForFee TransactionErrorKey = "InsufficientFundsForFee" // The from `Pubkey` does not have sufficient balance to pay the fee to schedule the transaction TransactionErrorInvalidAccountForFee TransactionErrorKey = "InvalidAccountForFee" // This account may not be used to pay transaction fees TransactionErrorDuplicateSignature TransactionErrorKey = "DuplicateSignature" // The bank has seen this transaction before. This can occur under normal operation when a UDP packet is duplicated, as a user error from a client not updating its `recent_blockhash`, or as a double-spend attack. TransactionErrorBlockhashNotFound TransactionErrorKey = "BlockhashNotFound" // The bank has not seen the given `recent_blockhash` or the transaction is too old and the `recent_blockhash` has been discarded. TransactionErrorInstructionError TransactionErrorKey = "InstructionError" // An error occurred while processing an instruction. The first element of the tuple indicates the instruction index in which the error occurred. TransactionErrorCallChainTooDeep TransactionErrorKey = "CallChainTooDeep" // Loader call chain is too deep TransactionErrorMissingSignatureForFee TransactionErrorKey = "MissingSignatureForFee" // Transaction requires a fee but has no signature present TransactionErrorInvalidAccountIndex TransactionErrorKey = "InvalidAccountIndex" // Transaction contains an invalid account reference TransactionErrorSignatureFailure TransactionErrorKey = "SignatureFailure" // Transaction did not pass signature verification TransactionErrorInvalidProgramForExecution TransactionErrorKey = "InvalidProgramForExecution" // This program may not be used for executing instructions TransactionErrorSanitizeFailure TransactionErrorKey = "SanitizeFailure" // Transaction failed to sanitize accounts offsets correctly implies that account locks are not taken for this TX, and should not be unlocked. TransactionErrorClusterMaintenance TransactionErrorKey = "ClusterMaintenance" // Transactions are currently disabled due to cluster maintenance TransactionErrorAccountBorrowOutstanding TransactionErrorKey = "AccountBorrowOutstanding" // Transaction processing left an account with an outstanding borrowed reference TransactionErrorWouldExceedMaxBlockCostLimit TransactionErrorKey = "WouldExceedMaxBlockCostLimit" // Transaction could not fit into current block without exceeding the Max Block Cost Limit TransactionErrorUnsupportedVersion TransactionErrorKey = "UnsupportedVersion" // Transaction version is unsupported TransactionErrorInvalidWritableAccount TransactionErrorKey = "InvalidWritableAccount" // Transaction loads a writable account that cannot be written )
type TransactionMeta ¶
type TransactionMeta struct {
Err interface{} `json:"err"`
Fee uint64 `json:"fee"`
PreBalances []uint64 `json:"preBalances"`
PostBalances []uint64 `json:"postBalances"`
PreTokenBalances []TokenBalance `json:"preTokenBalances"`
PostTokenBalances []TokenBalance `json:"postTokenBalances"`
LoadedAddresses LoadedAddresses `json:"loadedAddresses"`
}
type TransactionSignature ¶
type TransactionSignature struct {
Signature Signature
Slot uint64
BlockTime *time.Time
Err *TransactionError
Memo *string
}
func (TransactionSignature) ToBase58 ¶
func (s TransactionSignature) ToBase58() string
type TransactionTokenBalances ¶
type TransactionTokenBalances struct {
Accounts []string
PreTokenBalances []TokenBalance
PostTokenBalances []TokenBalance
Slot uint64
BlockTime *time.Time
}