Five minutes, one aggregate verify.
Crate, function, instruction, done. No coordinator, no proxy, no off-chain trust assumption.
Add the crate
toml[dependencies] yoroi_bls = "0.1"
no_std, lighter than half the things already in your Cargo.toml. No syscall bindings pulled at compile time — the syscall lives in the runtime, not the binary.
Sign and aggregate off-chain
tsimport { generateKeypair, sign, aggregate } from "@yoroi/sdk"; const signers = Array.from({ length: 1000 }, (_, i) => generateKeypair(seedFor(i)), ); const msg = Buffer.from("vote slot 0xCAFE"); const aggSig = aggregate(signers.map(kp => sign(kp.secret, msg))); const aggPub = aggregate(signers.map(kp => kp.public));
A thousand signers fold into one 48-byte signature and one 96-byte aggregate pubkey. Around 400 ms on a modern laptop. The aggregation is associative and commutative — order does not matter, batches can be precomputed, late signers add to an existing aggregate without recomputation.
Verify on-chain
rustuse yoroi_bls::verify_aggregate; pub fn execute_vote( ctx: Context<Execute>, sig: [u8; 48], pub_: [u8; 96], msg: Vec<u8>, ) -> Result<()> { verify_aggregate(&pub_, &msg, &sig)?; Ok(()) }
One call. 150 compute units. Whether two signed or two thousand signed. This is the entire on-chain verification path for every Solana committee shape — validator attestations, oracle aggregations, governance votes, treasury withdrawals.
Point at devnet
tsconst YOROI_DEVNET = new PublicKey( "4mWMFNCzUUzkC7j8qRESFbBT2hmZEV2ddPVenveUbBCm", );
SIMD-0388 has not activated. The verifier currently returns SyscallUnavailable. The account layout, instruction discriminators, and SDK contract are final. Only the pairing math waits on Anza. Your integration today survives the syscall switch — same Program ID, same client code, real booleans the day it ships.
Done
One crate. One trait. One verifier line. Your governance vote, your oracle aggregation, your validator-committee attestation: all of them now cost the same on-chain regardless of how many signers contributed.