Introducing Yellowstone Shield š«š”ļø


At Triton One, we believe every user and developer should have transparency and control over how their transactions move through the Solana network. As the validator landscape evolvesāand Maximum Extractable Value (MEV) risks become more prominentāthis control has become essential.
Today, we're excited to introduce Yellowstone Shield: an on-chain access control framework that empowers users and transaction forwarders to decide who is (and isn't) authorized to handle their transactions.
What Is Yellowstone Shield?
Yellowstone Shield is a Solana program for managing on-chain allowlists and blocklists of identities. An identity can be a validator, a wallet, or even another program. These policies let transaction senders define which validators are trusted to process transactionsāand which should be excluded.
Each policy is stored as a Program Derived Address (PDA) and linked to a Token Extensions (TE) asset, giving token holders the power to manage and update forwarding policies over time.
Why We Built It
As transaction forwarding became more commonāthrough solutions like Jitoās Block Engine or custom RPC routing layersāso did the potential for abuse.
The MEV Problem
While Solana originally had no public mempool, systems like Jito introduced partial transaction visibility. Some validators began exploiting private mempools for profitāexecuting frontrunning, sandwiching, and other forms of MEV.
Even though Jito eventually removed their public mempool, the practice continues today: validator-based transaction exploitation became real.
With Yellowstone Shield, we give users and RPC providers a way to opt outāto route transactions only to validators they trust.
How It Works
Yellowstone Shield lets you define a forwarding policy with two modes:
⢠Allow: Transactions are only forwarded to validators that appear on the allowlist.
⢠Deny: Transactions are never forwarded to validators that appear on the blocklist.
RPCs using Shield will monitor Solanaās leader schedule. If the current leader doesnāt meet the policy criteria, the transaction wonāt be sent. Instead, it will be forwarded to the next eligible leader that passes the policy check.
This offers a strong guarantee: your transaction is never handed to an untrusted validator.
Powered by Yellowstone Shield Store
Weāve also released yellowstone_shield_store, a Rust crate that provides:
cargo add yellowstone-shield-store
⢠š Efficient caching of on-chain policies
⢠┠Atomic updates to policy data
⢠ā Fast, thread-safe enforcement of access rules in transaction forwarders
This library makes it easy for anyone building custom RPCs or forwarders to enforce policy-based routing without sacrificing performance.
use yellowstone_shield_store::{
VixenConfig,
NullConfig,
PolicyStoreBuilder,
BuiltPolicyStore
};
// Initially seed policy store through RPC
let rpc = RpcClient::new("https://api.mainnet-beta.solana.com".to_string());
// Keep policy up to date over grpc
let vixen = VixenConfig::<NullConfig>::default();
// Build a policy store and subscription for live-updates
let BuiltPolicyStore { subscription, policies } = PolicyStoreBuilder::new()
.rpc(rpc)
.vixen(vixen)
.build()
.await?;
// Dummy validator and policy addresses
let validator = Pubkey::new_unique();
let policy = Pubkey::new_unique();
// Retrieve the latest snapshot of policies
let snapshot = policies.snapshot();
// Check if the validator is allowed by the policy
match snapshot.is_allowed(&[policy], &validator) {
Ok(true) => println!("Validator is allowed."),
Ok(false) => println!("Validator is denied."),
Err(e) => println!("Error checking policy: {:?}", e),
}
Jet Support ā Available Today
If youāre using Triton RPC, you can start using forwarding policies right now.
Thatās because Yellowstone Shield is fully integrated into Yellowstone Jet, Triton Oneās open-source transaction forwarder. When you submit a transaction through Triton RPC, Jet checks your specified Shield policy and routes the transaction accordingly:
⢠If the current leader is not on your allowlistāor appears on your blocklistāJet will not forward the transaction.
⢠Instead, it skips the validator and forwards to the next eligible validator that meets your policy criteria.
This ensures your transactions are only ever handled by validators you trust.
Example usage:
{
"jsonrpc": "2.0",
"id": 1,
"method": "sendTransaction",
"params": [
"<base64_encoded_transaction>",
{
"encoding": "base64",
"skipPreflight": true,
"forwardingPolicies": ["<your_policy_pda>"]
}
]
}
Or use the HTTP header for legacy clients:
Solana-ForwardingPolicies: "<your_policy_pda>,<your_policy_pda2>"
Whether youāre integrating with a wallet, a dApp backend, or just sending transactions manually, you now have a simple and powerful way to enforce trust in your transaction flowāwith zero changes to how Solana itself operates.
Build, Explore, and Customize
To make policy creation and management easier, weāve built a full toolkit:
⢠𧰠CLI Tools ā Create, update, and share policies from the terminal
⢠š¦ SDKs ā Integrate with Rust or TypeScript apps
⢠āļø Rust Policy Store ā Fast caching and enforcement for custom RPCs
⢠š Web App (coming soon) ā Explore and manage public or shared policies visually
The Road Ahead
Triton One is just getting started.
Yellowstone Shield is a foundational building block for a more secure, transparent, and user-driven Solana network. As support expands across the ecosystem, users, and builders will be able to confidently route transactions without fear of validator-level exploitation.
Take Control
Solanaās performance has always been world-class. With Yellowstone Shield, weāre raising the bar on transaction trust and forwarding transparency.
š Visit the repository
š” Start building with yellowstone_shield_store
Together, we can make Solana not just fastābut fair. šš”ļø
Subscribe to my newsletter
Read articles from Rafael Ribas directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
