Skip to content
Oracle

$LAYOFFS

US initial jobless claims

Latest signedNone yetNot signed yet
UpdatesWeeklyNot signed yet
SettleableYesSource terms allow it
SourcesNone yetNot signed yet

On Solana

Feed account
BLrppU4Y7tN9FBCBfgZ6y4dAFcaKU3mQCgpLG5MX9kQSLive at deploy
Program
838cdWMpb2WeAT4stt7rgaBcwEcJh5ziS9P9RKLeTw7oSolana mainnet
Rule
Version 1 Rule JSON
Rule hash
366fbd018f1631f043a6a21e4145e4ec60296b35de6c89c6f43bbf34f429018f

Last 10 signed

This index is not signed yet.

Read this feed

The feed account holds prints once the program is deployed. Until then, read the signed report: /api/indices/layoffs/report.

TypeScript

// $LAYOFFS on Solana: the newest print in its feed account.
const FEED = "BLrppU4Y7tN9FBCBfgZ6y4dAFcaKU3mQCgpLG5MX9kQS";
const PROGRAM = "838cdWMpb2WeAT4stt7rgaBcwEcJh5ziS9P9RKLeTw7o";

const res = await fetch("https://api.mainnet-beta.solana.com", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "getAccountInfo",
    params: [FEED, { encoding: "base64", commitment: "finalized" }] }),
});
const { result } = await res.json();
if (result.value?.owner !== PROGRAM) throw new Error("not a Tickerz feed");

const d = Buffer.from(result.value.data[0], "base64").subarray(8); // after the 8 byte discriminator
const decimals = d[52], grade = d[54], head = d[55], count = d[56];
if (count === 0) throw new Error("no print yet");
const o = 72 + 72 * head; // prints[head], the newest
const print = {
  period_start: Number(d.readBigInt64LE(o)),       // UTC seconds
  value: d.readBigInt64LE(o + 8),                  // value / 10 ** decimals
  published_at: Number(d.readBigInt64LE(o + 16)),
  report_hash: d.subarray(o + 32, o + 64).toString("hex"),
  status: ["provisional", "final", "corrected"][d[o + 64]],
};
const settleable = grade === 1 && print.status !== "provisional";

Rust (Anchor)

use anchor_lang::prelude::*;

// $LAYOFFS on Solana.
pub const TICKERZ_ORACLE: Pubkey = Pubkey::from_str_const("838cdWMpb2WeAT4stt7rgaBcwEcJh5ziS9P9RKLeTw7o");
pub const FEED: Pubkey = Pubkey::from_str_const("BLrppU4Y7tN9FBCBfgZ6y4dAFcaKU3mQCgpLG5MX9kQS");

#[derive(Accounts)]
pub struct ReadTickerz<'info> {
    /// CHECK: address and owner checked; layout at tickerz.com/methodology#the-solana-feed
    #[account(address = FEED, owner = TICKERZ_ORACLE)]
    pub feed: UncheckedAccount<'info>,
}

/// The newest print, refused unless a market may settle on it (grade 1, status 1 final or 2 corrected).
/// Returns (period_start, value, status); value / 10^decimals in the index's unit.
pub fn latest_settled(feed: &AccountInfo) -> Result<(i64, i64, u8)> {
    let data = feed.try_borrow_data()?;
    let d = &data[8..]; // after the 8 byte discriminator
    let (grade, head, count) = (d[54], d[55] as usize, d[56]);
    require!(count > 0, ErrorCode::AccountNotInitialized);
    let o = 72 + 72 * head; // prints[head]
    let at = |i: usize| i64::from_le_bytes(d[i..i + 8].try_into().unwrap());
    let (period_start, value, status) = (at(o), at(o + 8), d[o + 64]);
    require!(grade == 1 && status != 0, ErrorCode::ConstraintRaw);
    Ok((period_start, value, status))
}

Layout: methodology. Checking a report's signature: the signer file.