Package Exports
- @metaplex-foundation/beet-solana
- @metaplex-foundation/beet-solana/dist/cjs/src/beet-solana.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@metaplex-foundation/beet-solana) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@metaplex-foundation/beet-solana
Solana specific extension for beet, the borsh compatible de/serializer
API
Please find the API docs here.
GPA Builders
solana-beet uses beet
s knowledge about account layouts to provide GpaBuilder
s for
them which allow to filter by account data size and content.
- Create a GPA Builder via
const gpaBuilder = GpaBuilder.fromStruct(programId, accountStruct)
- add filters via
gpaBuilder.dataSize
,gpaBuilder.addFilter
orgpaBuilder.addInnerFilter
- execute
gpaBuilder.run(connection)
which will return all accounts matching the specified filters
Examples
Simple struct with primitives
export type ResultsArgs = Pick<Results, 'win' | 'totalWin' | 'losses'>
export class Results {
constructor(
readonly win: number,
readonly totalWin: number,
readonly losses: number
) {}
static readonly struct = new BeetStruct<Results, ResultsArgs>(
[
['win', u8],
['totalWin', u16],
['losses', i32],
],
(args: ResultsArgs) => new Results(args.win!, args.totalWin!, args.losses!),
'Results'
)
}
const gpaBuilder = GpaBuilder.fromStruct(PROGRAM_ID, Results.struct)
const accounts = await gpaBuilder
.addFilter('totalWin', 8)
.addFilter('losses', -7)
.run()
Matching on Complete Nested Struct
Using Results
struct from above
export type TraderArgs = Pick<Trader, 'name' | 'results' | 'age'>
export class Trader {
constructor(
readonly name: string,
readonly results: Results,
readonly age: number
) {}
static readonly struct = new BeetStruct<Trader, TraderArgs>(
[
['name', fixedSizeUtf8String(4)],
['results', Results.struct],
['age', u8],
],
(args) => new Trader(args.name!, args.results!, args.age!),
'Trader'
)
}
const gpaBuilder = GpaBuilder.fromStruct<Trader>(
PROGRAM_ID,
Trader.struct
)
const results = {
win: 3,
totalWin: 4,
losses: -100,
}
const accounts = await gpaBuilder.addFilter('results', results).run()
Matching on Part of Nested Struct
Using Trader
struct from above
const gpaBuilder = GpaBuilder.fromStruct<Trader>(
PROGRAM_ID,
Trader.struct
)
const account = await gpaBuilder
.addInnerFilter('results.totalWin', 8)
.addInnerFilter('results.win', 2)
.run()
PublicKey
solana-beet provides a de/serializer for solana public keys. They can either be used directly or as part of a struct.
Examples
Using PublicKey Directly
import { publicKey } from '@metaplex-foundation/beet-solana'
const generatedKey = Keypair.generate().publicKey
const buf = Buffer.alloc(publicKey.byteSize)
beet.write(buf, 0, generatedKey)
beet.read(buf, 0) // same as generatedKey
PublicKey as part of a Struct Configuration
import * as web3 from '@solana/web3.js'
import * as beet from '@metaplex-foundation/beet'
import * as beetSolana from '@metaplex-foundation/beet-solana'
type InstructionArgs = {
authority: web3.PublicKey
}
const createStruct = new beet.BeetArgsStruct<InstructionArgs>(
[
['authority', beetSolana.publicKey]
],
'InstructionArgs'
)
LICENSE
Apache-2.0