Nevertheless! Party Metaphorically

    @metaplex-foundation/beet-solana
    TypeScript icon, indicating that this package has built-in type declarations

    0.4.0 • Public • Published

    @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

    Keywords

    none

    Install

    npm i @metaplex-foundation/beet-solana

    DownloadsWeekly Downloads

    66,372

    Version

    0.4.0

    License

    Apache-2.0

    Unpacked Size

    38.1 kB

    Total Files

    18

    Last publish

    Collaborators

    • 0x_febo
    • stegabob
    • svc01-metaplex
    • samuelvanderwaal
    • brandontulsi
    • lorisleiva
    • roederw
    • thlorenz
    • austbotm