
Security News
Deno 2.2 Improves Dependency Management and Expands Node.js Compatibility
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
@metaplex-foundation/beet-solana
Advanced tools
Solana specific extension for beet, the borsh compatible de/serializer
@metaplex-foundation/beet-solana is a library designed to facilitate serialization and deserialization of data structures in the Solana blockchain ecosystem. It provides utilities to define and work with complex data types, making it easier to interact with Solana programs.
Serialization and Deserialization
This feature allows users to define data structures and serialize/deserialize them to/from buffers. The code sample demonstrates how to define a simple struct with two fields and serialize/deserialize it using the library.
const { u8, struct } = require('@metaplex-foundation/beet-solana');
const MyStruct = struct([
['field1', u8],
['field2', u8]
]);
const buffer = Buffer.alloc(MyStruct.byteSize);
MyStruct.write(buffer, 0, { field1: 1, field2: 2 });
const result = MyStruct.read(buffer, 0);
console.log(result); // { field1: 1, field2: 2 }
Complex Data Types
This feature supports complex data types, such as arrays within structs. The code sample shows how to define a struct with an array field and serialize/deserialize it.
const { u8, array, struct } = require('@metaplex-foundation/beet-solana');
const ComplexStruct = struct([
['field1', u8],
['field2', array(u8, 3)]
]);
const buffer = Buffer.alloc(ComplexStruct.byteSize);
ComplexStruct.write(buffer, 0, { field1: 1, field2: [2, 3, 4] });
const result = ComplexStruct.read(buffer, 0);
console.log(result); // { field1: 1, field2: [2, 3, 4] }
Borsh is a binary serialization format designed for speed and efficiency, commonly used in the Solana ecosystem. It provides similar functionality to @metaplex-foundation/beet-solana in terms of serialization and deserialization of data structures, but with a focus on performance and simplicity.
Buffer-layout is a library for describing and serializing binary data structures. It is used in the Solana ecosystem for defining data layouts in a flexible manner. Compared to @metaplex-foundation/beet-solana, buffer-layout offers a more low-level approach to defining data structures.
Solana specific extension for beet, the borsh compatible de/serializer
Please find the API docs here.
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.
const gpaBuilder = GpaBuilder.fromStruct(programId, accountStruct)
gpaBuilder.dataSize
, gpaBuilder.addFilter
or gpaBuilder.addInnerFilter
gpaBuilder.run(connection)
which will return all accounts matching the specified
filtersexport 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()
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()
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()
solana-beet provides a de/serializer for solana public keys. They can either be used directly or as part of a struct.
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
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'
)
Apache-2.0
FAQs
Solana specific extension for beet, the borsh compatible de/serializer
The npm package @metaplex-foundation/beet-solana receives a total of 135,954 weekly downloads. As such, @metaplex-foundation/beet-solana popularity was classified as popular.
We found that @metaplex-foundation/beet-solana demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
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.
Security News
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Security News
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.
Security News
Ransomware payment rates hit an all-time low in 2024 as law enforcement crackdowns, stronger defenses, and shifting policies make attacks riskier and less profitable.