JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 157883
  • Score
    100M100P100Q188639F
  • License Apache-2.0

Solana specific extension for beet, the borsh compatible de/serializer

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 beets knowledge about account layouts to provide GpaBuilders for them which allow to filter by account data size and content.

  1. Create a GPA Builder via const gpaBuilder = GpaBuilder.fromStruct(programId, accountStruct)
  2. add filters via gpaBuilder.dataSize, gpaBuilder.addFilter or gpaBuilder.addInnerFilter
  3. 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