Architecture
Last updated
Last updated
Bullet is designed as a Solana Network Extension, which in simple terms means that it executes transactions on it's own purpose-built, high-performance runtime, but still relies on Solana for the settlement, consensus and data availability. This concept allows Bullet to benefit from isolated blockspace and a fully-customized, real-time transaction execution model, whilst still inheriting many of the security guarantees and native assets of Solana's robust and well adopted network. Solana's 1000+ validator nodes will participate in storing and voting on rollup blocks, as well as storing and verifying the merkle proofs of the rollup.
Bullet is built using the Sovereign SDK, a rollup framework for building custom, high-performance rollups on any chain, who's maintaining team has years of blockchain and rollup architecture experience from Consensys, AWS Crypto and elsewhere. We're excited to work with them to pioneer a leading Network Extension stack for Solana.
Bullet consists of several core entities:
Client - effectively "the user" who can interact via their existing Solana wallet, or via a programmatic SDK (e.g. algorithmic traders)
Sequencer - orders, executes, filters and then bundles transactions into batches.
L1 Proposer - writes the batch to the DA layer, in this case our proposer is the current Solana leader.
Full Node - downloads full block data from the DA layer and executes said transactions to trustlessly determine the current state of the rollup network.
Prover Node - identical to a full node, except transactions are executed in a zero-knowledge virtual machine (zkVM). The resultant validity or fraud proofs are also written to the DA layer for anyone to verify.
Light Node - a "lightweight" alternative to full nodes which only need to download the block headers, which contain the zk proofs, and verify them in order to trustlessly sync with the network. This allows them to be run on lower hardware requirements such as mobile devices.
Generally what the end to end flow looks like for users is the following:
User creates and signs transaction via an existing Solana wallet, submits to sequencer.
Sequencer locally executes the transaction to make sure it is valid, and issues a "soft confirmation" of the result to the user within milliseconds. From the user's perpsective their interaction was instant, and they are free to move on with their life.
In the background, the sequencer batches thousands of transactions from all users into a batch (say every 3 seconds), and then submits said batch to the Solana leader to be written within a Solana block.
Once the block has become available on Solana DA, full nodes of Bullet fetch the relevant blocks and independently execute the Bullet transaction data within them. The rollup is now finalized from the perspective of full nodes of our rollup.
After either 24hrs has elapsed (optimistic mode) or the zk proof for the block (zk mode) has been generated (roughly 30m), any withdrawals from the rollup to other chains can be processed.