$TILT
New York phone bets
StatusNot signedSource terms need written consent.
UpdatesWeekly
Week to Nov 8$655.28MLikely
Range$561.71M to $760.98M8 in 10
Backtest78% inside241 periods
ModelThe median of all modelsDisplay only, never signed
On Solana
Read this feed
The feed account holds prints once the program is deployed. Until then, the signed report is read at /api/indices/tilt/report, from the first signing.
TypeScript
// $TILT on Solana: the newest print in its feed account.
const FEED = "EtH8jurPwe1PESCFKcvU5Xis6PT75e5XP6EXQeETQXMr";
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::*;
// $TILT on Solana.
pub const TICKERZ_ORACLE: Pubkey = Pubkey::from_str_const("838cdWMpb2WeAT4stt7rgaBcwEcJh5ziS9P9RKLeTw7o");
pub const FEED: Pubkey = Pubkey::from_str_const("EtH8jurPwe1PESCFKcvU5Xis6PT75e5XP6EXQeETQXMr");
#[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))
}