# EEZ Quickstarts > The Ethereum Economic Zone lets a contract on Ethereum or a rollup call a contract on > another chain and use the answer in the same transaction, with no bridge message and no > callback. Twenty-four interactive walkthroughs show how, each built on real protocol source cited > at a pinned commit rather than on pseudocode. Covers writing contracts that call across > rollups, running the stack, and how RollupX settles and proves. New here? Dapp developers start with [Run Your First Round Trip](https://build.eez.io/dapp-developers/qs1-run-your-first-round-trip.html). Rollup operators and protocol researchers get a reading order on [Start here](https://build.eez.io/start-here.html). Every code panel on this site is rendered from JavaScript at runtime, so fetching a page gives you the shell and not the content. These files hand over the content directly: each walkthrough's narration and code, the full compilable Solidity behind the Solidity ones, and the runnable Foundry tests. Two things worth knowing before you use any of it. The proof system in the public source is dev-grade ECDSA, not production ZK. And every citation here is pinned to a commit SHA, so a link tells you exactly which revision a claim was true of; interfaces may move after it. ## Dapp developers Writing contracts that call across rollups. - [One Call, Two Chains, One Transaction](https://build.eez.io/dapp-developers/qs0-one-call-two-rollups.html): Your L1 contract gets an L2 contract's return value back in the same transaction, with no bridge message and no callback. Markdown: https://build.eez.io/dapp-developers/qs0-one-call-two-rollups.md - [Run Your First Round Trip](https://build.eez.io/dapp-developers/qs1-run-your-first-round-trip.html): Two scenarios pass on local anvil chains: one call starts on L1 and gets back the value L2's execution produces, and one makes the same call from L2. Locally, that value is precomputed in the entry. Markdown: https://build.eez.io/dapp-developers/qs1-run-your-first-round-trip.md - [Follow One Call There and Back](https://build.eez.io/dapp-developers/qs2-read-your-side-of-it.html): Your contract makes an ordinary call to a proxy, the proxy hands it to the L1 manager, and the 1 that Counter returns on L2 comes back as data that was posted before your call. Markdown: https://build.eez.io/dapp-developers/qs2-read-your-side-of-it.md - [Who Answered?](https://build.eez.io/dapp-developers/qs3-who-answered.html): Follow the call hash from its calculation to the matching entry, then read the success flag and the return data that gives your contract 1. Markdown: https://build.eez.io/dapp-developers/qs3-who-answered.md - [Two Gotchas Before You Build](https://build.eez.io/dapp-developers/qs5-three-gotchas-before-you-build.html): Two cross-chain gotchas to check before you build: msg.sender is the source's proxy, and a state-changing proxy call needs an entry verified in the same block. Markdown: https://build.eez.io/dapp-developers/qs5-three-gotchas-before-you-build.md - [Cross-Chain Flash Loan](https://build.eez.io/dapp-developers/qs7-cross-chain-flash-loan.html): Borrowed tokens go to an L2 and back before the repayment check runs, all inside one L1 transaction. Markdown: https://build.eez.io/dapp-developers/qs7-cross-chain-flash-loan.md - [Bridge Tokens Both Ways](https://build.eez.io/dapp-developers/qs8-bridge-tokens-both-ways.html): Run one ETH scenario per direction, L1 to L2 and L2 to L1, each on its own pair of chains, then run the test that sends an ERC-20 through the Bridge.sol test fixture and back. Markdown: https://build.eez.io/dapp-developers/qs8-bridge-tokens-both-ways.md - [How to get your contract's address on another rollup](https://build.eez.io/dapp-developers/q7-your-cross-chain-address.html): Learn how to read it, or deploy it. - [How to call a contract on another rollup](https://build.eez.io/dapp-developers/q2-send-a-cross-chain-call.html): Learn how to encode a read like any normal call, send it to the proxy as a staticcall so it stays read-only, then decode the answer and branch on it. - [How to handle msg.sender across chains](https://build.eez.io/dapp-developers/q3-fix-the-msg-sender-gotcha.html): Learn how to whitelist the proxy instead of the address you expected. - [How to check an address is a real proxy](https://build.eez.io/dapp-developers/q4-check-if-an-address-is-a-proxy.html): Learn how to read the on-chain registry instead of guessing. - [How the guard makes sure only proxy calls reach execution](https://build.eez.io/dapp-developers/q6-why-you-cant-call-the-manager-directly.html): Learn how UnauthorizedProxy() rejects any caller of the cross-chain entry points that isn't a registered proxy. - [How to encode a call's content hash](https://build.eez.io/dapp-developers/q5-encode-a-calls-content-hash.html): Learn how to hash eight fields in the one order that works. - [How to read a remote contract's state](https://build.eez.io/dapp-developers/q8-read-a-remote-contracts-state.html): Learn why balance and code size answer about the proxy — a real number about the wrong contract, with no revert. ## Rollup operators Standing the stack up and driving it. - [How to run the whole stack locally](https://build.eez.io/rollup-operators/ro1-run-the-devnet-with-kurtosis.html): Learn how to bring up the node, proof-signer and the L1 in a disposable network. - [How to deploy the protocol](https://build.eez.io/rollup-operators/ro2-deploy-the-protocol.html): Learn what gets deployed on L1 and L2, and in what order, once the network is up. - [How to run against a real testnet](https://build.eez.io/rollup-operators/ro3-run-a-real-chiado-l2.html): Learn what changes when the L1 underneath you is Chiado rather than a disposable devnet. - [How to send and test a cross-chain call](https://build.eez.io/rollup-operators/ro4-send-and-test-cross-chain-calls.html): Learn how to drive traffic through the stack you just brought up, and how to tell that it worked. ## Protocol researchers How RollupX actually settles and proves. - [How the four components divide the work](https://build.eez.io/protocol-researchers/pr1-the-four-components-of-rollup0.html): Learn how sequencer, composer, proof-signer and deriver each fit. - [How L1 stays the source of truth](https://build.eez.io/protocol-researchers/pr2-commit-first-repair-if-needed.html): Learn why the L2 block is added immediately, and what happens to it if L1 never confirms it. - [How the composer attests a batch](https://build.eez.io/protocol-researchers/pr4-how-the-composer-proves-a-batch.html): Learn what is actually checked before a batch is accepted, and by whom. - [How the deriver rebuilds L2 from L1](https://build.eez.io/protocol-researchers/pr3-the-deriver.html): Learn how the whole chain is reconstructed from L1 data alone. - [How the address is derived](https://build.eez.io/protocol-researchers/pr5-how-the-address-is-derived.html): Learn how two values become a salt and a CREATE2 address. - [The rolling hash](https://build.eez.io/protocol-researchers/pr6-the-rolling-hash.html): Learn how one bytes32 commits to a whole execution tree — and why no call index is folded in. ## Compilable source Real files, not fragments: pragma, imports and a contract wrapper, all building under solc 0.8.28. Each mirrors the upstream function its walkthrough cites. - [snippets/qs2-counter-and-proxy.sol](https://build.eez.io/snippets/qs2-counter-and-proxy.sol): full source behind Follow One Call There and Back - [snippets/q7-create-proxy.sol](https://build.eez.io/snippets/q7-create-proxy.sol): full source behind How to get your contract's address on another rollup - [snippets/q2-cross-chain-call.sol](https://build.eez.io/snippets/q2-cross-chain-call.sol): full source behind How to call a contract on another rollup - [snippets/q3-msg-sender.sol](https://build.eez.io/snippets/q3-msg-sender.sol): full source behind How to handle msg.sender across chains - [snippets/q4-proxy-registry.sol](https://build.eez.io/snippets/q4-proxy-registry.sol): full source behind How to check an address is a real proxy - [snippets/q6-manager-direct.sol](https://build.eez.io/snippets/q6-manager-direct.sol): full source behind How the guard makes sure only proxy calls reach execution - [snippets/q5-content-hash.sol](https://build.eez.io/snippets/q5-content-hash.sol): full source behind How to encode a call's content hash - [snippets/q8-remote-reads.sol](https://build.eez.io/snippets/q8-remote-reads.sol): full source behind How to read a remote contract's state - [snippets/q1-compute-address.sol](https://build.eez.io/snippets/q1-compute-address.sol): full source behind How the address is derived ## Runnable tests Foundry tests with no forge-std and no submodules, so they drop into an existing suite. `cd snippets && forge test`. - [snippets/test/QS2CounterAndProxy.t.sol](https://build.eez.io/snippets/test/QS2CounterAndProxy.t.sol): proves the behaviour in Follow One Call There and Back - [snippets/test/Q2CrossChainCall.t.sol](https://build.eez.io/snippets/test/Q2CrossChainCall.t.sol): proves the behaviour in How to call a contract on another rollup - [snippets/test/Q3MsgSender.t.sol](https://build.eez.io/snippets/test/Q3MsgSender.t.sol): proves the behaviour in How to handle msg.sender across chains - [snippets/test/Q6ManagerDirect.t.sol](https://build.eez.io/snippets/test/Q6ManagerDirect.t.sol): proves the behaviour in How the guard makes sure only proxy calls reach execution - [snippets/test/Q5ContentHash.t.sol](https://build.eez.io/snippets/test/Q5ContentHash.t.sol): proves the behaviour in How to encode a call's content hash - [snippets/test/Q8RemoteReads.t.sol](https://build.eez.io/snippets/test/Q8RemoteReads.t.sol): proves the behaviour in How to read a remote contract's state ## Everything inlined - [llms-full.txt](https://build.eez.io/llms-full.txt): every walkthrough's narration, code, citations, snippets and tests in one document ## Optional - [Repository](https://github.com/eez-association/eez-demos): source of this site - [eez-core-protocol](https://github.com/eez-association/eez-core-protocol): the contracts every Solidity walkthrough cites - [eez-rollupX](https://github.com/eez-association/eez-rollupX): the node, composer, deriver and proof-signer - [CONTRIBUTING](https://github.com/eez-association/eez-demos/blob/main/CONTRIBUTING.md): how a walkthrough gets added and audited