12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import * as bs58 from "bs58";
- import { sha256 } from "crypto-hash";
- import assert from "assert";
- import { PublicKey, AccountInfo, Connection } from "@solana/web3.js";
- import { idlAddress } from "./idl";
- export const TOKEN_PROGRAM_ID = new PublicKey(
- "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
- );
- async function getMultipleAccounts(
- connection: Connection,
- publicKeys: PublicKey[]
- ): Promise<
- Array<null | { publicKey: PublicKey; account: AccountInfo<Buffer> }>
- > {
- const args = [publicKeys.map((k) => k.toBase58()), { commitment: "recent" }];
- // @ts-ignore
- const res = await connection._rpcRequest("getMultipleAccounts", args);
- if (res.error) {
- throw new Error(
- "failed to get info about accounts " +
- publicKeys.map((k) => k.toBase58()).join(", ") +
- ": " +
- res.error.message
- );
- }
- assert(typeof res.result !== "undefined");
- const accounts: Array<null | {
- executable: any;
- owner: PublicKey;
- lamports: any;
- data: Buffer;
- }> = [];
- for (const account of res.result.value) {
- let value: {
- executable: any;
- owner: PublicKey;
- lamports: any;
- data: Buffer;
- } | null = null;
- if (account === null) {
- accounts.push(null);
- continue;
- }
- if (res.result.value) {
- const { executable, owner, lamports, data } = account;
- assert(data[1] === "base64");
- value = {
- executable,
- owner: new PublicKey(owner),
- lamports,
- data: Buffer.from(data[0], "base64"),
- };
- }
- if (value === null) {
- throw new Error("Invalid response");
- }
- accounts.push(value);
- }
- return accounts.map((account, idx) => {
- if (account === null) {
- return null;
- }
- return {
- publicKey: publicKeys[idx],
- account,
- };
- });
- }
- const utils = {
- bs58,
- sha256,
- getMultipleAccounts,
- idlAddress,
- };
- export default utils;
|