Back to Blog

Bitcoin vs Ethereum vs Solana: Architecture Comparison for Developers

Thi Nguyen

Thi Nguyen

Author

April 29, 2026
14 min read

Founder

Bitcoin vs Ethereum vs Solana: Architecture Comparison for Developers

TL;DR

  • Bitcoin uses Proof of Work + UTXO + a non-Turing-complete script. It optimizes for decentralization and physical security; ~7 TPS, ~10 min blocks, ~60 min finality.
  • Ethereum uses Proof of Stake (Gasper) + global account state + the EVM. It optimizes for programmability with sequential execution; ~15-30 TPS L1, 12 sec slots, ~13 min finality.
  • Solana uses Proof of History + Tower BFT + a stateless program model + the Sealevel parallel runtime. It optimizes for throughput by demanding server-class validators; 3-5k sustained TPS, 400 ms slots, ~12.8 sec finality.
  • The pattern is consistent: each chain bet on one corner of the trilemma (decentralization / security / scalability) and accepted the cost everywhere else.
  • For wallet builders: each chain uses different signature schemes (ECDSA, Ed25519, Schnorr) and different transaction structures. A multi-chain wallet has to abstract across all three, see mpcium for the open-source signing layer.

If you've shipped on more than one chain, you already know the surface differences: Bitcoin moves slowly, Ethereum costs a fortune at peak, Solana sometimes restarts. What's less obvious is why, and the answer lives in the architecture, not the marketing.

Each of these three chains made a different bet about the same set of constraints: how to get a global, untrusted network to agree on state. Those bets show up in everything downstream: the data model, the VM, the failure modes, the wallet code you have to write. This post walks through the architecture of each chain side-by-side, with diagrams, real specs, and the tradeoffs that follow.

If you're building wallet infrastructure across these chains, Fystack's open-source MPC engine handles the signing layer for all three. The architecture differences below are exactly why a single wallet abstraction is harder than it looks.


The Core Tradeoff

Every blockchain is a state machine replicated across untrusted nodes. The hard part isn't the state machine, it's the replication.

Three knobs you can turn:

  • How nodes agree on the next state (consensus)
  • How state is represented (data model)
  • What logic can run against that state (execution environment)

Bitcoin, Ethereum, and Solana turn these knobs in different directions. Once you see which knob each chose, the rest of the architecture follows mechanically.


Bitcoin: Maximum Decentralization

Bitcoin architecture diagram showing Proof of Work mining flow, UTXO transaction model, Bitcoin Script execution, and 80-byte block header structure

Consensus: Proof of Work

Bitcoin's design goal was physical security, make rewriting history cost real-world energy. Miners race to find a nonce such that SHA256(SHA256(header || nonce)) < target. The winner extends the chain. The loser starts over on the new tip.

Python
# nonce is one of six fields inside the 80-byte block header
while True:
    header.nonce += 1
    h = SHA256(SHA256(header))   # Bitcoin uses double SHA-256
    if h < target:
        break  # found a valid block

The target adjusts every 2,016 blocks so a block lands roughly every 10 minutes regardless of how much hash power is online. There's no shortcut: you can't stake your way to a block.

Why it matters: Reorging the last six blocks requires ~60 minutes of energy at >50% of global hash power. That's a lot of money to undo a transaction. It's also why Bitcoin is slow, the security guarantee is the slowness.

Transaction model: UTXO

There are no account balances on Bitcoin. The state is a set: every Unspent Transaction Output (UTXO) ever created and not yet consumed. To spend, you reference a UTXO, prove you can unlock it, and create new UTXOs.

A spend consumes the input entirely. If you have a 0.8 BTC UTXO and want to send 0.5 BTC, you create two outputs: 0.5 BTC to the recipient and 0.299 BTC back to yourself as "change." The remaining 0.001 BTC is the implicit fee.

This sounds awkward, and it is: wallet code has to track UTXOs, pick combinations to spend, and manage change addresses. In return you get:

  • Trivial parallelism for validation (UTXOs are independent)
  • Strong privacy through fresh addresses (every change output can be a new address)
  • No global state to trash when bugs happen

Execution: Bitcoin Script

Bitcoin Script is a stack-based, non-Turing-complete language. The most common locking script (P2PKH) is:

OP_DUP
OP_HASH160 <pubKeyHash>
OP_EQUALVERIFY
OP_CHECKSIG

That's it, push pubkey, hash it, verify it matches, check the signature. No loops. No recursion. No cross-contract calls. No persistent state.

This isn't a limitation Bitcoin has yet to overcome, it's the design. Limited expressiveness eliminates entire categories of consensus-breaking bugs and keeps validation cheap enough to run on a Raspberry Pi.

The price: you can't build DeFi on Bitcoin L1. You can build payments. That's it. Everything fancier (Lightning, Ordinals, BitVM) is a layer or a clever abuse of the script that exists.


Ethereum: Programmable State

Ethereum architecture diagram showing Proof of Stake consensus with attesters, EOA vs contract account model, EVM execution with gas-metered Solidity, and Casper finality

Consensus: Proof of Stake (Gasper)

Ethereum's consensus is two protocols stitched together, LMD-GHOST for fork choice, Casper FFG for finality. Together they're called Gasper.

The mechanics:

ParameterValue
Stake per validator32 ETH
Slot time12 seconds (one block per slot)
Epoch32 slots (6.4 minutes)
Finality2 epochs (~13 minutes)

A pseudo-randomly selected proposer publishes a block each slot. A committee of attesters votes on whether they saw it. After two epochs of attestations, blocks become finalized, reverting them would require slashing one-third of all staked ETH. That's about $30+ billion worth of ETH being burned. The economic finality is the point.

Why this is different from Bitcoin: Ethereum's security comes from capital at risk, not energy spent. A validator who tries to cheat loses their stake. A miner who tries to cheat just wastes electricity, they're free to try again next block. The slashing condition is what makes "economic finality" mean something.

Transaction model: account-based

Ethereum has two account types, both living in one global state trie:

Externally-Owned Accounts (EOAs):

address     0x742d…4e2B
balance     3.5 ETH
nonce       42
codeHash    0x  (empty)

Contract Accounts:

address     0xA0b8…6Eb48
balance     1,250 USDC
nonce       1
codeHash    0x68be…a5
storageRoot 0xab3f…  (Merkle root of contract storage)

State transitions are direct mutations: state(N+1) = apply(state(N), block_txs). No UTXO consumption, no change outputs. You send 0.5 ETH from one account, the balance there goes down, the recipient's goes up. The nonce prevents replay.

This model is much easier to reason about for application logic. Token balances are just mappings. A DEX is just a contract that holds reserves. The price is global serialization, every transaction touches shared state, so blocks must execute sequentially.

Execution: the EVM

The Ethereum Virtual Machine is a Turing-complete, gas-metered stack machine. Solidity (or Vyper, or Yul) compiles to EVM bytecode:

Solidity
function transfer(address to, uint256 amount) public {
    require(balances[msg.sender] >= amount, "insufficient");
    balances[msg.sender] -= amount;   // SSTORE 5,000 (non-zero→non-zero) + 100 warm  = 5,100
    balances[to]         += amount;   // SSTORE 20,000 (zero→non-zero)   + 2,100 cold = 22,100
    emit Transfer(msg.sender, to, amount);
}

Gas accounting on EVM is two orthogonal layers, get them right or your estimates will drift:

1. State transition cost (EIP-2200, refined by EIP-3529)

TransitionCost
0 → non-zero (initial write)20,000 gas
non-zero → different non-zero (update)5,000 gas
non-zero → 0 (clear)5,000 gas + refund up to 4,800

2. Access pattern cost (EIP-2929)

AccessCost
Cold (first touch in this tx)+2,100 gas
Warm (subsequent touches)+100 gas

Cold/warm applies to both SLOAD and SSTORE (because every SSTORE internally reads first). A standard ERC-20 transfer ends up around 50,000-65,000 gas total, the dominant cost is whichever recipient slots are still zero.

Every opcode costs gas; run out, the entire transaction reverts (state changes undone, fee still charged). Gas metering is what lets a Turing-complete VM run safely on an open network, the halting problem becomes "you ran out of money first."

The price: sequential execution per block. Even if two transactions touch unrelated state, they run one after the other. This caps throughput at whatever the gas limit allows in 12 seconds, historically 15-30 TPS for typical workloads.

If you're building a wallet that needs to support arbitrary EVM contracts (token approvals, DEX swaps, gasless transactions), the signing layer is the bottleneck. Mpcium handles ECDSA signing with threshold MPC across ETH, BSC, Polygon, and other EVM chains, git clone to a working signer cluster in 10 minutes.


Solana: Speed Through Engineering

Solana architecture diagram showing Proof of History hash chain timeline, stateless program account model, Sealevel parallel runtime fanning transactions across threads, and Gulf Stream transaction flow

Consensus: Proof of History + Tower BFT

Most blockchains have a chicken-and-egg problem: to agree on transaction order, validators need synchronized clocks. To synchronize clocks across an untrusted network, you need consensus. Round and round.

Solana's trick is to make a verifiable clock, a single SHA-256 hash chain where each step depends on the previous one:

h₀
h₁ = SHA(h₀)
h₂ = SHA(h₁)
h₃ = SHA(h₂ || tx_hash_A)   ← timestamps tx A
h₄ = SHA(h₃)
h₅ = SHA(h₄ || tx_hash_B)   ← timestamps tx B

Computing the chain takes wall-clock time. Verifying it (in parallel via SIMD) is fast. The chain itself proves time passed and orders the transactions hashed into it. Validators no longer need to gossip "what time is it?", they just check the hash chain.

Tower BFT is the actual consensus protocol that votes on PoH. Each vote increases a lockout, a validator that votes for fork A can't vote for fork B for 2^N slots without getting slashed. Lockouts double every confirmation, so after 32 confirmations (~12.8 sec) a slot is effectively final.

ParameterValue
Slot time400 ms
Epoch432,000 slots (~2 days)
Optimistic finality~400 ms
Tower BFT finality~12.8 sec

Transaction model: stateless programs

Solana inverts Ethereum's contract model. Programs (executable code) hold no state. State lives in separate data accounts owned by the program:

Program account (the code):

owner       BPFLoader2
executable  true
data        BPF bytecode

Data account (the state):

owner       <program ID>
lamports    1,500,000
data        [u8; 165]
rent_epoch  364

This is the load-bearing design choice, and it's what makes Sealevel work. Every Solana transaction must declare upfront which accounts it reads and which it writes. The runtime can then schedule transactions in parallel as long as no two transactions write to the same account.

Execution: Sealevel

Sealevel is a parallel runtime. A leader takes a batch of incoming transactions, looks at their declared account dependencies, and dispatches non-overlapping ones to separate CPU cores:

Tx batch ──┬─► Thread 1 → SPL token transfers (different mints)
           ├─► Thread 2 → NFT mints (Metaplex)
           ├─► Thread 3 → Raydium swaps (different pools)
           └─► Thread 4 → vote transactions

Two transfers on the same SPL token mint? Serialized. Two transfers on different mints? Parallel. The runtime is what turns 64-core servers into transaction throughput.

Programs are written in Rust (or C) and compiled to BPF bytecode, a sandboxed instruction set originally from the Linux kernel. No gas in the EVM sense; instead a compute unit budget per transaction.

The other parts that matter

  • Gulf Stream, there's no public mempool. The leader schedule is known for the entire epoch in advance, so wallets forward transactions directly to the upcoming leaders.
  • Turbine, the leader splits each block into "shreds" and gossips them tree-style instead of broadcasting whole blocks. This is how a 10 MB/s block can propagate to thousands of validators.
  • Hardware demands, the price for all this is real. A Solana validator wants 256 GB RAM, NVMe disks, and a 1 Gbps connection. That's a sysadmin's job, not a Raspberry Pi's.

Side-by-side: where the bets show up

DimensionBitcoinEthereumSolana
ConsensusProof of Work (SHA-256)Proof of Stake (Gasper)PoH + Tower BFT
Block / slot time~10 min12 sec400 ms
Practical finality~60 min (6 conf)~13 min (2 epochs)~12.8 sec
Throughput~7 TPS15-30 TPS3-5k sustained
Data modelUTXOAccount (global trie)Account (program + data split)
ExecutionScript (limited)EVM (Turing-complete, sequential)Sealevel (Turing-complete, parallel)
Smart contract languagen/aSolidity, VyperRust, C
Validator hardwareRaspberry PiMid-range desktopServer-class (256 GB RAM)
Failure modeSlowExpensiveOutages
What it optimizes forDecentralizationProgrammabilityThroughput
What it sacrificesProgrammabilityThroughputDecentralization

The pattern is consistent: each chain optimized for one corner of the trilemma and accepted the cost everywhere else.


What this means if you're building

Building payments? Bitcoin via Lightning is unbeatable for adversarial settlement. Solana is unbeatable for low-friction stablecoin transfers. Ethereum L2s sit in the middle with the broadest tooling ecosystem.

Building DeFi? Ethereum has the deepest liquidity and the longest-tested contracts, but you'll fight gas costs. Solana has lower fees and deeper composability per transaction (a single tx can touch many programs), but a smaller ecosystem and harder Rust learning curve.

Building wallets? This is where the architecture difference hits hardest. Each chain wants:

  • Bitcoin: UTXO selection, change management, PSBTs, Schnorr/Taproot
  • Ethereum + EVM L2s: ECDSA signing, nonce management, gas estimation, EIP-712 typed data, ERC-4337 account abstraction
  • Solana: Ed25519 signing, account dependency declaration, fee payer separation, program-derived addresses

A multi-chain wallet has to abstract across all three. The signing primitives are different (ECDSA, Ed25519, Schnorr). The address derivation is different (BIP32 vs SLIP10). The transaction structures are completely different.

This is exactly the problem Fystack solves. mpcium is an open-source MPC wallet engine that supports all three signing schemes, your application code stays the same regardless of which chain you're addressing. Threshold signatures mean the private key never exists in any one place, so there's no single host you can compromise to drain the wallet.


When to Use Which Chain

The architecture sections explain what each chain does. This section answers when each is the right call, distilled into pros, cons, and the use cases each chain wins on.

Bitcoin

ProsCons
Most decentralized network in production (~17,000+ nodes)No native smart contracts
Strongest physical security guarantees (PoW)~7 TPS on L1; ~10 min blocks
Lowest validator hardware bar (Raspberry Pi works)UTXO model is awkward for stateful apps
Simplest threat model, fewest attack surfacesLimited script language (no loops, no state)
Largest market cap and brand trustLayer-2 (Lightning) has UX complexity

Best for:

  • Store of value / "digital gold" applications
  • Settlement-grade payments (especially via Lightning)
  • Treasury reserves and corporate balance sheets
  • Cross-border, censorship-resistant transfers
  • Anything where you want the asset to outlive your application

Ethereum

ProsCons
Largest smart-contract developer ecosystemL1 throughput capped at 15-30 TPS
Deepest DeFi liquidity ($50B+ TVL)Gas fees spike during congestion
Mature tooling (Hardhat, Foundry, viem, ethers.js)Sequential execution per block
EVM is the de facto standard, code ports to L2s, BSC, Polygon, Avalanche, etc.~13 min finality (slow for some UX)
Strong economic finality via Casper FFGState growth pressures node operators

Best for:

  • DeFi protocols (DEXs, lending, derivatives)
  • NFT marketplaces with rich royalty/metadata logic
  • DAOs and on-chain governance
  • Tokenized real-world assets (RWA)
  • Anything that needs composability with existing DeFi

Solana

ProsCons
3,000-5,000 sustained TPS (often >50k peak)Server-class validator hardware (256 GB RAM, 1 Gbps)
~400 ms slot time, sub-second optimistic finalityFewer validators → less decentralized
Sub-cent transaction feesHistory of network outages / restarts
Sealevel parallelism scales with CPU coresSmaller dev ecosystem than EVM
Single global state, no L2 fragmentationRust learning curve for contract devs

Best for:

  • High-frequency trading and order books on-chain (Phoenix, Drift)
  • Consumer-grade payments (especially stablecoin)
  • Web3 gaming and social apps with cheap micro-transactions
  • AI agents and bots needing fast, cheap settlement
  • NFT mints at scale (Metaplex)

Quick decision matrix

If your priority is…Pick
Settlement security and longevityBitcoin
DeFi composability and liquidityEthereum (or an L2 for cheap ops)
Throughput and low fees per transactionSolana
Maximum decentralizationBitcoin
Mature smart contract toolingEthereum
Sub-second user-facing latencySolana
The broadest existing user baseEthereum (~470k daily active addresses across L1+L2s)
The largest hot-money / consumer activity right nowSolana

There is no universally "best" chain. Pick the one whose architecture matches the failure modes you can tolerate, and remember that "supports multiple chains" is usually the right answer for production wallet infrastructure.


Exchange Finality: What Builders Actually Wait For

The protocol-level finality numbers above (60 min Bitcoin, 13 min Ethereum, 13 sec Solana) are the strongest guarantee each chain offers. In practice, exchanges and dApps credit deposits much sooner, using probabilistic confirmation thresholds calibrated to the dollar value at risk.

Here's what major exchanges actually wait for, as a snapshot of public deposit-confirmation docs:

AssetTypical confirmationsApprox waitExamples
Bitcoin (BTC)2-6 confirmations~20-60 minCoinbase: 3, Kraken: 3, Binance: 2 (low value) → 6 (high value)
Ethereum (ETH)12-65 confirmations~2.4 min - 13 minBinance: 12, Coinbase: 14, Kraken: 20-50, some routes wait for finalized block tag
ERC-20 stablecoins (USDC, USDT)12-65 confirmations~2.4 min - 13 minSame as ETH for most exchanges; Circle's CCTP uses 65 blocks for cross-chain finality
Solana (SOL, SPL tokens)finalized commitment~13 secCoinbase, Binance, Kraken all wait for finalized (32 confs)

Why these numbers diverge from "protocol finality":

  • Bitcoin's 6 confirmations is the conventional "safe" threshold. Beyond ~6 blocks, a successful reorg requires sustained majority hashpower, not a one-shot stroke of luck. Most exchanges use 3 confirmations for low/medium value because the risk drops sharply after just 2-3 blocks.
  • Ethereum's 12-confirmation rule is a holdover from PoW Ethereum, kept because each additional block makes a reorg exponentially more expensive. Post-Merge, the safer alternative is to wait for the finalized block tag (~13 min), which is what most exchanges now use for high-value flows.
  • Solana exchanges uniformly wait for the finalized commitment level (~13 sec / 32 confs). Solana's optimistic confirmation (~1-2 sec) is fast enough for in-app UX feedback, but no major exchange uses anything weaker than finalized for crediting deposits.

Rule of thumb for builders:

Transaction valueConfirmations to wait
Low (<$1k, in-app UX)Minimum (1 conf, or confirmed on Solana)
Medium ($1k-$100k, exchange deposits)Exchange-typical (3-12 confs depending on chain)
High (>$100k, treasury, compliance)Wait for protocol finality (finalized block tag)

Don't blindly copy the largest exchange's number; calibrate to your own risk tolerance and the value flowing through your system. Always check the current live deposit docs of any exchange you're integrating with, these numbers shift as networks evolve.


FAQ

Why doesn't Bitcoin add smart contracts?

Because the security model depends on validation being cheap and bug surface being small. A Turing-complete VM means consensus-breaking bugs become possible, a single Solidity-style reentrancy bug at the protocol layer would be catastrophic for an asset that's positioned as digital gold. Bitcoin developers chose to push expressiveness into Layer 2 (Lightning) and clever script abuses (Ordinals, BitVM) instead.

Why is Solana faster than Ethereum if both are PoS?

PoS isn't the speed determinant, execution model is. Ethereum executes transactions sequentially per block; Solana executes in parallel via Sealevel. Solana also has a 400 ms slot vs Ethereum's 12 sec slot, smaller minimum quorum requirements, and no public mempool (Gulf Stream forwards txs directly to leaders). The cost is hardware requirements that exclude home validators.

Is "65,000 TPS" on Solana real?

It's the theoretical ceiling on optimal hardware with synthetic transactions. Sustained mainnet throughput is more like 3,000-5,000 TPS once you exclude vote transactions, which is still ~100x Ethereum L1. The TPS number to take seriously is "what your application's tx pattern actually achieves," not the marketing maximum.

What does "finality" actually mean and why are the numbers so different?

Finality is the point at which reverting a transaction becomes economically irrational. Bitcoin: ~60 min (an attacker would need ~6 blocks of >50% hashrate). Ethereum: ~13 min (Casper FFG finalizes after 2 epochs; reverting requires slashing 1/3 of all stake). Solana: ~12.8 sec (Tower BFT lockouts double every confirmation). All three are probabilistic until the protocol's specific finality threshold, after which reverting requires destroying provably large amounts of value.

Why does Solana have outages and Ethereum doesn't?

Solana's design pushes hardware and software to the edge, high TPS, parallel execution, optimistic transaction forwarding. When something unexpected happens (a flood of NFT mint txs, a state bloat bug), the network can degrade or halt. Ethereum's slower, more conservative design has more headroom. The tradeoff is honest: Ethereum trades throughput for stability; Solana trades stability for throughput.

Can I run a node for each of these from home?

Bitcoin: easily, even on a Raspberry Pi 4. Ethereum: yes on a mid-range desktop with a 2 TB NVMe (state grows). Solana: technically yes but you'll need 256 GB RAM, fast NVMe, a beefy CPU, and a 1 Gbps connection, most home setups won't sustain a validator long-term.

Which chain should I build my application on?

The right answer is "whichever chain has the users and liquidity you need." Architecture matters, but ecosystem matters more. If you're building a stablecoin payment app, Solana's fee structure is hard to beat. If you're building DeFi, Ethereum L2s have the liquidity and composability. If you're building digital gold or sovereign payments, Bitcoin is the only credible option. Don't pick by TPS chart; pick by where your users already are.

How does multi-chain wallet infrastructure handle these differences?

The core challenge is the signing layer: each chain uses different signature schemes (ECDSA for Bitcoin/EVM, Ed25519 for Solana, Schnorr for Bitcoin Taproot). A serious multi-chain wallet uses MPC (Multi-Party Computation) to compute signatures across multiple parties without ever assembling the full key in one place. Fystack's mpcium handles all three schemes from one cluster: same API, different chains underneath.


Building multi-chain wallet infrastructure? mpcium is open-source MPC for Bitcoin, Ethereum, and Solana, git clone to working cluster in 10 minutes. Star the repo if it's useful, or reach out via Telegram for architecture discussions. Managed cloud and self-hosted enterprise options at fystack.io.

Share this post