0.4.1 • Published 5 months ago

@metaplex-foundation/beet-solana v0.4.1

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
5 months ago

@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

@layerzerolabs/lz-solana-sdk-v2rainfi-cli-testrainfi-test@flxxyz-foundation/js@holaplex/mpl-listing-rewards@holaplex/mpl-reward-center@layerzerolabs/layerzero-v2-solana-sdk@everything-registry/sub-chunk-597esbonk-stake-sdkglaicon-nft-packshydra-sdk-anchorproviderexexdreader-comic-versekyzr-auction-housemetapass-sdk@blockpal/guild-vault-sdkmyrandompackagetest7799mpl-trifleblob-metadatabrick-protocolauction-house-v2token-metadata-descriptorsequiillosoar_sdksolana-frameworksolaplexsolaplex-foundationsolaplex1@sooshisan/auction-sdk@sooshisan/edition-printer@sooshisan/hyperglyph-sdk@sooshisan/solana-add-data-to-buffer@sorend-solana/bubblegum@sorend-solana/gumball-machine@sorend-solana/gummyroll@sorend-solana/sugar-shack@sonarwatch/portfolio-plugins@solventprotocol/protocol@solventprotocol/solvent-sdk@solventprotocol/strikr-sdk@tumi-labs/liquidprop@undergroundsociety/raffle@splitwave/js@sqds/multisig@stakingcapital.io/reward-distributor-sdk@stakingcapital.io/stake-pool-sdk@sol-tools/counter@usedispatch/forum_broadcast@solana/spl-account-compressionseaway-sdkquisquibusdampixels-on-chain-solana@0xbanana/js@2112-labs/emerald-react@2112-labs/emerald.js@agreewe-dev/solana-blockchain-contracts@agreewe/solana-blockchain-contracts@altruism-finance/js@albus-finance/sdkw3poker-solana-nft@cardinal/mpl-candy-machine-utils@colosseum-so/colosseum-promo-sdk@cosimo-rip/js@code-wallet/programs@blockpal/vault-x-sdk@appliedblockchain/metaplex-js@fluidchains/ywpl-token-metadata@fluidchains/ywpl-token-vault@cryowar/escrow-program-interface@metaplex-foundation/js-next@metaplex-foundation/mpl-token-entangler@metaplex-foundation/solita@metaplex-foundation/mpl-auction-house@metaplex-foundation/mpl-auctioneer@metaplex-foundation/mpl-candy-guard@metaplex-foundation/mpl-candy-machine-core@metaplex-foundation/mpl-fixed-price-sale@metaplex-foundation/mpl-gumdrop@metaplex-foundation/mpl-membership-token@metaplex-foundation/mpl-migration-validator@metaplex-foundation/mpl-nft-packs@motleylabs/mtly-auction-house@motleylabs/mtly-reward-center@guakamoli/js@helium/react-native-sdk@glasseaters/hydra-sdk@ju-protocol/ju-core@jolders/mpl-auction-house@lorisleiva/js-next-alpha@lorisleiva/mpl-candy-guard@lorisleiva/mpl-candy-machine-core@lorisleiva/mpl-fair-launch@loris-sandbox/mx-monorepo-js@honeycomb-protocol/events@honeycomb-protocol/hive-control@holaplex/hpl-reward-center@holaplex/mpl-auction-house@genesysgo/ssc-fusion@genesysgo/trait-escrow@magiceden-oss/open_creator_protocol
0.4.1

5 months ago

0.4.0

2 years ago

0.3.1

2 years ago

0.3.0

2 years ago

0.2.0

2 years ago

0.1.0

2 years ago

0.1.1

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago

0.0.0

2 years ago