Skip to content
Oracle

$TRENCHES

Memecoin launchpad fees

Latest signedNone yetNot signed yet
UpdatesDailyNot signed yet
SettleableNoSource terms do not allow it
SourcesNone yetNot signed yet

On Solana

Feed account
FtXN7JbiafQNmPHPrqWzJ4xognzWKPUCBbLskXssMxwqLive at deploy
Program
838cdWMpb2WeAT4stt7rgaBcwEcJh5ziS9P9RKLeTw7oSolana mainnet
Rule
Version 1 Rule JSON
Rule hash
e6f61d1a9b7ff304573c3f9b0f10211b2be430aac9da6943c5dd9e26b0ada6d7

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/trenches/report.

TypeScript

// $TRENCHES on Solana: the newest print in its feed account.
const FEED = "FtXN7JbiafQNmPHPrqWzJ4xognzWKPUCBbLskXssMxwq";
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::*;

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

#[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.