Data Source

@staratlas/data-source

Introduction

Abstraction over getting account updates from Solana. Supports RPC out of the box but can support other protocols through custom implementations.

@staratlas/data-source will help you:

  • Build, Sign, and Send transactions

  • Read accounts from RPC or other source

  • Parse data

PackageDescriptionVersionDocs

@staratlas/data-source

TypeScript interface for Star Atlas programs

Installation

npm i @staratlas/data-source

Examples

Read from RPC:

import { Connection } from '@solana/web3.js';
import { readAllFromRPC } from '@staratlas/data-source';
import { Fleet, SageIDLProgram } from '@staratlas/sage';

export async function readAllFleetsWarpStatus(
  connection: Connection,
  sageProgram: SageIDLProgram
): Promise<void> {
  const fleets = (await readAllFromRPC(connection, sageProgram, Fleet)).map(
    (fleet) => fleet.type === 'ok' && fleet.data
  );

  const currentUnixTimestamp = Date.now() / 1000 | 0;


  for (const fleet of fleets) {
    const secondsUntilWarpable = fleet.data.warpCooldownExpiresAt.toNumber() - currentUnixTimestamp;

    if (secondsUntilWarpable > 0)
      console.log(`Fleet ${fleet.key.toBase58()} can warp again in ${secondsUntilWarpable} seconds`);
    else 
      console.log(`Fleet ${fleet.key.toBase58()} warp engines are ready to use`);
  }
}

Build Dynamic Transaction:

import { Connection, Finality, TransactionSignature } from '@solana/web3.js';
import {
  AsyncSigner,
  buildDynamicTransactions,
  InstructionReturn,
  sendTransaction,
} from '@staratlas/data-source';

export async function sendDynamicTransaction(
  instructions: InstructionReturn[],
  signer: AsyncSigner,
  connection: Connection,
  commitment: Finality = 'confirmed'
): Promise<TransactionSignature> {
  const txs = await buildDynamicTransactions(instructions, signer, {
    connection,
  });

  if (txs.isErr()) {
    throw txs.error;
  }

  let txSignature: TransactionSignature;

  for (const tx of txs.value) {
    const result = await sendTransaction(tx, connection, {
      commitment,
      sendOptions: {
        skipPreflight: false,
      },
    });

    if (result.value.isErr()) {
      throw result.value.error;
    }

    txSignature = result.value.value;
  }

  return txSignature;
}

Last updated