Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@metaplex-foundation/beet-solana

Package Overview
Dependencies
Maintainers
6
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@metaplex-foundation/beet-solana

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

  • 0.4.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
60K
decreased by-40.65%
Maintainers
6
Weekly downloads
 
Created
Source

@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

FAQs

Package last updated on 28 Dec 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc