sbv2-solana/examples/programs/anchor-buffer-parser/client/accounts/BufferClient.ts

68 lines
1.6 KiB
TypeScript

import * as borsh from "@project-serum/borsh" // eslint-disable-line @typescript-eslint/no-unused-vars
import { Connection, PublicKey } from "@solana/web3.js"
import { PROGRAM_ID } from "../programId"
export interface BufferClientFields {}
export interface BufferClientJSON {}
export class BufferClient {
static readonly discriminator = Buffer.from([142, 182, 89, 69, 9, 66, 10, 86])
static readonly layout = borsh.struct([])
constructor(fields: BufferClientFields) {}
static async fetch(
c: Connection,
address: PublicKey
): Promise<BufferClient | null> {
const info = await c.getAccountInfo(address)
if (info === null) {
return null
}
if (!info.owner.equals(PROGRAM_ID)) {
throw new Error("account doesn't belong to this program")
}
return this.decode(info.data)
}
static async fetchMultiple(
c: Connection,
addresses: PublicKey[]
): Promise<Array<BufferClient | null>> {
const infos = await c.getMultipleAccountsInfo(addresses)
return infos.map((info) => {
if (info === null) {
return null
}
if (!info.owner.equals(PROGRAM_ID)) {
throw new Error("account doesn't belong to this program")
}
return this.decode(info.data)
})
}
static decode(data: Buffer): BufferClient {
if (!data.slice(0, 8).equals(BufferClient.discriminator)) {
throw new Error("invalid account discriminator")
}
const dec = BufferClient.layout.decode(data.slice(8))
return new BufferClient({})
}
toJSON(): BufferClientJSON {
return {}
}
static fromJSON(obj: BufferClientJSON): BufferClient {
return new BufferClient({})
}
}