\documentclass[8pt,aspectratio=169]{beamer}
\usetheme{Madrid}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{hyperref}
\usepackage{amsmath}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes,arrows.meta,calc}

\definecolor{mlgreen}{RGB}{44,160,44}
\definecolor{mlorange}{RGB}{255,127,14}
\definecolor{mlred}{RGB}{214,39,40}

% ---- Listings setup (large font on the HelloWorld slide; tiny elsewhere) ----
\lstdefinestyle{soltiny}{basicstyle=\tiny\ttfamily,breaklines=true,keywordstyle=\color{mlorange}\bfseries,commentstyle=\color{gray}\itshape,stringstyle=\color{mlgreen}}
\lstdefinestyle{sollarge}{basicstyle=\large\ttfamily,breaklines=true,keywordstyle=\color{mlorange}\bfseries,commentstyle=\color{gray}\itshape,stringstyle=\color{mlgreen}}
\lstset{style=soltiny}

% ---- Accessibility helpers ----
% \altdescription{...} expands to nothing visually; the description lives in the
% surrounding frame text instead. We keep this macro as a marker for future
% accessibility tagging tooling.
\newcommand{\altdescription}[1]{}
\newcommand{\bottomnote}[1]{\vfill\footnotesize\textit{#1}}

% ---- Status callouts (color + text) ----
\newcommand{\okstatus}[1]{\textcolor{mlgreen}{[OK]\,\textbf{#1}}}
\newcommand{\warnstatus}[1]{\textcolor{mlorange}{[WARN]\,\textbf{#1}}}
\newcommand{\stopstatus}[1]{\textcolor{mlred}{[STOP]\,\textbf{#1}}}

\hypersetup{
  pdftitle={Ethereum Interactive Lecture},
  pdfauthor={Joerg Osterrieder},
  pdfsubject={BSc Blockchain, Crypto Economy and NFTs},
  pdfkeywords={Ethereum, smart contracts, Solidity, Remix, first principles}
}

\title{Ethereum Interactive Lecture}
\subtitle{BSc Blockchain, Crypto Economy \& NFTs}
\author{Blockchain \& Cryptocurrency Course}
\date{Spring 2026}

\begin{document}
% Footer with copyright (matches Module B house style)
\setbeamertemplate{footline}{
    \hbox{\begin{beamercolorbox}[wd=\paperwidth,ht=2.5ex,dp=1ex,center]{author in head/foot}
    \tiny (c) Joerg Osterrieder 2026
    \end{beamercolorbox}}
}

% ===== Slide 1: Title =====
\begin{frame}
\titlepage
\end{frame}

% ===== Slide 2: Not financial advice (must be early; security_brief.md verbatim) =====
\begin{frame}{This Lecture is Educational}
\altdescription{A boxed paragraph stating the lecture is educational only and not financial advice.}
\begin{center}
\begin{tikzpicture}
  \node[draw, line width=1.2pt, rounded corners=8pt,
        inner sep=14pt, minimum width=0.85\linewidth,
        text width=0.82\linewidth, align=left, fill=mlorange!10]
  {%
    \footnotesize
    \textbf{This is not investment, legal, or tax advice.}\\[0.3em]
    Cryptocurrency markets are volatile and a meaningful share of retail investors lose money. If you choose to participate after this class, do so with money you can afford to lose, on a clean wallet you generated yourself, and after independent research.\\[0.3em]
    \textit{See instructor\_kit/security\_brief.md.}
  };
\end{tikzpicture}
\end{center}
\bottomnote{Duty of care: the lecture leaves you more security-aware than you arrived, not less.}
\end{frame}

% ===== Slide 3: Lecture map =====
\begin{frame}{Today, in Six Acts}
\altdescription{Numbered list of six lecture acts plus a workshop block.}
\begin{enumerate}
\item The shared doc (what Ethereum is)
\item Identity to write (accounts, signatures, the test-wallet warning)
\item The cost of writing (transactions, gas)
\item A cell that runs itself (smart contracts, EVM)
\item Reading the doc (Etherscan)
\item Build it ourselves (HelloWorld on Remix VM, optional Sepolia level-up)
\end{enumerate}
\textbf{Format.} 60 minutes lecture, 30 minutes workshop. Two interactive checkpoints. One artifact: a deployed smart contract.\\[0.5em]
\textbf{Tools you need.} A browser tab. That is the entire toolchain.
\bottomnote{First principles, honest about the work.}
\end{frame}

% ===== Slide 4: Act 1 - The Google Doc analogy (the hook) =====
\begin{frame}[t]{Act 1: Ethereum as a Shared, Signed, Append-Only Google Doc}
\altdescription{Diagram showing a Google-Doc icon with three properties listed: shared, signed, append-only.}
\begin{columns}[T]
\column{0.55\textwidth}
We will treat Ethereum as a \textbf{shared, append-only Google Doc} where every edit must be signed and pays a small fee. \\[0.4em]
\textbf{Imagine one Google Doc:}
\begin{itemize}
\item Visible to everyone (\textit{shared})
\item Every edit must be \textbf{signed} (you cannot pretend to be someone else)
\item No one can \textbf{edit} a past line; you can only \textbf{append}
\item Each character costs a tiny fee
\end{itemize}
\vspace{0.3em}
That is Ethereum. The doc is the chain. The fees are gas. The signed edits are transactions. Cells with little scripts that run themselves are smart contracts.
\column{0.42\textwidth}
\textit{[Diagram: a Google-Doc icon with three labeled tags above it: SHARED, SIGNED, APPEND-ONLY. Below the icon a row of three small rows with timestamps, each row a different sender, each row tagged with a tiny coin icon for fee.]}
\end{columns}
\bottomnote{Vocab: \textit{shared} = global, \textit{signed} = cryptographically authenticated, \textit{append-only} = immutable history.}
\end{frame}

% ===== Slide 5: Anatomy of the analogy =====
\begin{frame}{The Four Pieces}
\altdescription{Four-row table mapping Google-Doc concept to Ethereum concept.}
\begin{center}
\begin{tabular}{l|l}
\textbf{Google Doc} & \textbf{Ethereum} \\\hline
Your Google identity & An \textbf{account} (a public/private key pair) \\
A signed edit you make & A \textbf{transaction} \\
A doc cell with a tiny script that runs itself & A \textbf{smart contract} \\
Per-character cost of writing & \textbf{Gas} (a fee paid in ETH) \\
\end{tabular}
\end{center}
\vspace{0.5em}
\textbf{Hold this table in your head.} Every concept later is one of these four.
\bottomnote{The analogy is your scaffolding; we will name where it breaks at slide 20.}
\end{frame}

% ===== Slide 6: Act 2 title =====
\begin{frame}{Act 2: Identity to Write}
\altdescription{Section divider for Act 2.}
\begin{center}
\Huge \textbf{Who can write in the doc?}\\[1em]
\Large \textit{Accounts. Signatures. The wallet warning.}
\end{center}
\bottomnote{Time check: minutes 12 to 22.}
\end{frame}

% ===== Slide 7: Accounts =====
\begin{frame}{An Ethereum Account is a Key Pair}
\altdescription{Two-column comparison of public and private keys.}
\begin{columns}[T]
\column{0.48\textwidth}
\textbf{Public key (the address)}
\begin{itemize}
\item Looks like \texttt{0xAbCd\dots1234}
\item Anyone can see it
\item Like your username
\end{itemize}
\column{0.48\textwidth}
\textbf{Private key (the secret)}
\begin{itemize}
\item A 256-bit number you must never share
\item Lets you SIGN transactions
\item Like your password, except no reset button
\end{itemize}
\end{columns}
\vspace{0.5em}
\textbf{Your wallet} (e.g. MetaMask) is software that stores the private key locally and signs transactions on your behalf. It is NOT a bank account; the wallet does not hold ETH. The chain holds the ETH. The wallet holds the key that proves you own the chain entry.
\bottomnote{Vocab: \textit{wallet} = Geldborse (Schlusselverwaltung). It manages keys, not money.}
\end{frame}

% ===== Slide 8: Signatures =====
\begin{frame}{What a Signature Proves}
\altdescription{Diagram of message plus private key going into a signing function and producing a signature, with verification by public key shown beneath.}
\begin{center}
\begin{tikzpicture}[node distance=1.0cm and 1.4cm, every node/.style={font=\footnotesize}]
  \node[draw, rounded corners, fill=mlgreen!12, minimum width=3.0cm, minimum height=0.9cm] (msg) {Transaction (To, Value, Data)};
  \node[draw, rounded corners, fill=mlorange!15, minimum width=2.6cm, minimum height=0.9cm, below=of msg] (key) {Private Key};
  \node[draw, line width=1pt, rounded corners, fill=lightgray!25, minimum width=2.0cm, minimum height=1.0cm, right=of $(msg)!0.5!(key)$] (sign) {\textbf{sign(...)}};
  \node[draw, rounded corners, fill=mlgreen!18, minimum width=2.4cm, minimum height=0.9cm, right=of sign] (sig) {Signature};
  \draw[-{Stealth[length=2mm]}] (msg.east) -- (sign.west);
  \draw[-{Stealth[length=2mm]}] (key.east) -- (sign.west);
  \draw[-{Stealth[length=2mm]}] (sign.east) -- (sig.west);
\end{tikzpicture}
\end{center}
\vspace{0.3em}
A signature proves: this transaction was authorized by the holder of the private key for this address. Anyone with the matching public key can verify the signature; nobody without the private key can reproduce it.\\[0.3em]
\textbf{Without that proof, the network rejects the transaction.}
\bottomnote{This is the same mechanism that signs HTTPS certificates, SSH keys, and SWIFT messages.}
\end{frame}

% ===== Slide 9: TEST WALLET ONLY (mandatory warning before any wallet content) =====
\begin{frame}{TEST WALLET ONLY, NEVER REUSE THIS SEED}
\altdescription{A boxed warning slide. Title: TEST WALLET ONLY. Body: never reuse the workshop seed phrase for real money.}
\begin{center}
\begin{tikzpicture}
  \node[draw=mlred, line width=2pt, rounded corners=10pt,
        inner sep=14pt, minimum width=0.88\linewidth,
        text width=0.84\linewidth, align=left, fill=mlred!8]
  {%
    \footnotesize
    \textbf{If you set up a wallet today, treat it as disposable.}\\[0.3em]
    \stopstatus{Never fund this wallet with real ETH.}\\
    \stopstatus{Never import this seed into a real-money wallet.}\\
    \stopstatus{Never use the same seed for testnet and mainnet.}\\[0.3em]
    For real-money use later, install a fresh wallet on a clean machine and generate a NEW seed.\\[0.3em]
    \textit{See instructor\_kit/security\_brief.md.}
  };
\end{tikzpicture}
\end{center}
\bottomnote{The seed phrase is the master key. One leak = every chain compromised forever.}
\end{frame}

% ===== Slide 10: Interactive checkpoint - think-pair-share with card alternative =====
\begin{frame}{Interactive: Think, Then Pair (or Card)}
\altdescription{Prompt for a think-pair-share exercise with a written-card alternative for shy or non-voice students.}
\begin{center}
\begin{tikzpicture}
  \node[draw, line width=1.2pt, rounded corners=8pt,
        inner sep=14pt, minimum width=0.8\linewidth,
        text width=0.78\linewidth, align=left, fill=mlgreen!10]
  {%
    \footnotesize
    \textbf{Prompt (60 seconds thinking, 60 seconds pair, 60 seconds share):}\\[0.3em]
    What would happen if anyone in the world could pretend to be you and sign transactions from your account?\\[0.5em]
    \textbf{Alternative (no speaking required):}\\
    Write your answer on a card. Pass it to the instructor. We read three sample cards aloud anonymously.
  };
\end{tikzpicture}
\end{center}
\bottomnote{This is one of two interactive checkpoints. The other is the on-chain treasure hunt at slide 21.}
\end{frame}

% ===== Slide 11: Act 3 title =====
\begin{frame}{Act 3: The Cost of Writing}
\altdescription{Section divider for Act 3.}
\begin{center}
\Huge \textbf{Why does each edit cost a fee?}\\[1em]
\Large \textit{Transactions. Gas. The dollar number.}
\end{center}
\bottomnote{Time check: minutes 22 to 32.}
\end{frame}

% ===== Slide 12: Transactions and gas =====
\begin{frame}{Every Edit is a Transaction. Every Transaction Pays Gas.}
\altdescription{A row diagram of a transaction showing five fields: From, To, Value, Data, Signature, with a gas note beneath.}
\begin{center}
\begin{tikzpicture}[every node/.style={font=\footnotesize}]
  \node[draw, rounded corners, fill=mlgreen!10, align=center, text width=2.0cm, minimum height=1.1cm] (from) {From\\\tiny\textit{address}};
  \node[draw, rounded corners, fill=mlgreen!10, align=center, text width=2.0cm, minimum height=1.1cm, right=0.05cm of from] (to) {To\\\tiny\textit{address}};
  \node[draw, rounded corners, fill=mlorange!12, align=center, text width=2.0cm, minimum height=1.1cm, right=0.05cm of to] (val) {Value\\\tiny\textit{ETH}};
  \node[draw, rounded corners, fill=mlorange!12, align=center, text width=2.0cm, minimum height=1.1cm, right=0.05cm of val] (data) {Data\\\tiny\textit{calldata}};
  \node[draw, rounded corners, fill=mlgreen!18, align=center, text width=2.0cm, minimum height=1.1cm, right=0.05cm of data] (sig) {Signature};
  \node[below=0.4cm of $(val)!0.5!(data)$, font=\scriptsize\itshape] {Gas: paid in ETH, set by sender, charged by the network};
\end{tikzpicture}
\end{center}
\vspace{0.3em}
\textbf{Why charge gas at all?}
\begin{itemize}
\item Computation is not free. Every node in the world re-runs your transaction.
\item Without a fee, anyone could spam the network with infinite-loop transactions.
\item Gas is also how validators (the nodes that order transactions into blocks) get paid.
\end{itemize}
\bottomnote{Vocab: \textit{gas} = Gas (Transaktionsgebuhr). \textit{nonce} = laufende Transaktionsnummer.}
\end{frame}

% ===== Slide 13: Gas in dollars (concrete) =====
\begin{frame}{Gas in Dollars: A Worked Example}
\altdescription{Worked numerical example showing how gas in gwei converts to a dollar fee.}
\textbf{A simple transfer (sending ETH from one account to another):}
\begin{itemize}
\item Gas used: 21{,}000 (a fixed minimum)
\item Gas price (typical, mainnet): 20 gwei
\item ETH price (illustrative): \$3{,}000
\end{itemize}
\textbf{Fee} = $21{,}000 \times 20 \text{ gwei} = 420{,}000 \text{ gwei} = 0.00042$ ETH $\approx \$1.26$.\\[0.5em]
\textbf{A contract deployment} (like our HelloWorld) typically uses 100{,}000 to 200{,}000 gas. At the same prices, that is \$6 to \$12 on mainnet. \\[0.5em]
\textbf{On Sepolia testnet}, the ETH is fake. The fee is in fake ETH. The cost is zero in real money. \\[0.5em]
\textbf{On Remix VM}, the chain is in your tab. The fee is fake fake ETH. The cost is also zero.
\bottomnote{One ETH = $10^{18}$ wei. One gwei = $10^9$ wei. Numbers are illustrative; mainnet gas prices vary by orders of magnitude.}
\end{frame}

% ===== Slide 14: Physical break =====
\begin{frame}[plain]
\altdescription{A 90-second physical-stretch break. No content; just a recovery beat in the schedule.}
\vfill
\begin{center}
\begin{tikzpicture}
  \node[draw, line width=1.5pt, rounded corners=10pt,
        inner sep=20pt, minimum width=0.55\linewidth,
        text centered, fill=lightgray!20]
  {\Large\bfseries 90 seconds. Stand up. Look out the window.};
\end{tikzpicture}
\end{center}
\vfill
\end{frame}

% ===== Slide 15: Anchor demo intro =====
\begin{frame}{Watch Me Deploy on a SHARED Chain (3 minutes)}
\altdescription{Section divider for the instructor-projected Sepolia anchor demo.}
\begin{itemize}
\item I will deploy the same HelloWorld contract you will deploy in 25 minutes.
\item BUT I will deploy it on Sepolia, a chain shared by every student in this room and by everyone else in the world running an Ethereum testnet client.
\item Then we open Etherscan and look at it together.
\item \textbf{This is the moment that proves the analogy.} Everyone in this room (and outside it) sees the same line in the same doc.
\end{itemize}
\textit{Live page if available; pre-recorded video at instructor\_kit/sepolia\_anchor\_assets/anchor\_demo.mp4 is the source of truth.}
\bottomnote{Slide 16 is the diagram you watch alongside the demo.}
\end{frame}

% ===== Slide 16: Private vs shared chain diagram =====
\begin{frame}{Private vs Shared: Two Different Chains}
\altdescription{Diagram comparing the in-browser Remix VM chain (private to one tab) with the Sepolia testnet chain (shared globally).}
\begin{columns}[T]
\column{0.48\textwidth}
\textbf{Remix VM} (your workshop)\\
\begin{tikzpicture}
\node[draw, rounded corners=4pt, fill=mlorange!12, minimum width=4cm, minimum height=2cm, align=center] {Browser tab\\\footnotesize private chain};
\end{tikzpicture}\\
\warnstatus{Visible only to YOUR tab.}\\
Closing the tab erases the chain.
\column{0.48\textwidth}
\textbf{Sepolia} (anchor demo)\\
\begin{tikzpicture}
\node[draw, rounded corners=4pt, fill=mlgreen!18, minimum width=4cm, minimum height=2cm, align=center] {Global testnet\\\footnotesize shared chain};
\end{tikzpicture}\\
\okstatus{Visible to the world.}\\
The chain is shared, the ETH is fake.
\end{columns}
\vspace{0.5em}
\textbf{Honesty pattern.} At every step of the workshop, ask which chain you are on. Same code can run on both, and the results LOOK the same; the social fact is different.
\bottomnote{Mainnet is a third chain: shared, real ETH, real money. Out of scope today.}
\end{frame}

% ===== Slide 17: Act 4 title =====
\begin{frame}{Act 4: A Cell That Runs Itself}
\altdescription{Section divider for Act 4.}
\begin{center}
\Huge \textbf{What is a smart contract, really?}\\[1em]
\Large \textit{The doc cell with a script.}
\end{center}
\bottomnote{Time check: minutes 38 to 48.}
\end{frame}

% ===== Slide 18: Smart contract + HelloWorld code =====
\begin{frame}[fragile]{HelloWorld: Three Lines That Make a Contract}
\altdescription{The HelloWorld Solidity source code shown in a large readable font.}
\lstset{style=sollarge,language={}}
\begin{lstlisting}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract HelloWorld {
    string public greeting = "Hello, Class";
}
\end{lstlisting}
\lstset{style=soltiny}
\textbf{Read it.}
\begin{itemize}
\item One state variable (\texttt{greeting}), public, holds a string.
\item Solidity auto-generates a getter for any \texttt{public} state variable. So \texttt{greeting()} is callable from outside without writing it.
\item No constructor, no other functions. Three meaningful lines.
\end{itemize}
\bottomnote{This is what every student deploys in the workshop.}
\end{frame}

% ===== Slide 19: The EVM =====
\begin{frame}{The EVM: Why Every Node Agrees}
\altdescription{Five distributed nodes each labeled EVM converge via arrows on a single "Same State" cloud, captioned deterministic plus replicated equals consensus.}
\begin{center}
\begin{tikzpicture}[every node/.style={font=\footnotesize}]
  \node[draw, ellipse, fill=mlgreen!18, minimum width=3.2cm, minimum height=0.9cm] (state) at (0,1.4) {Same world state};
  \foreach \i/\x in {1/-3, 2/-1.5, 3/0, 4/1.5, 5/3} {
    \node[draw, rounded corners, fill=mlorange!10, minimum width=1.1cm, minimum height=0.9cm] (n\i) at (\x,-0.6) {EVM};
    \draw[-{Stealth[length=2mm]}, gray] (n\i.north) -- (state.south);
  }
  \node[below=0.6cm of n3, font=\scriptsize\itshape] {deterministic + replicated = consensus};
\end{tikzpicture}
\end{center}
\vspace{0.3em}
\textbf{Two properties:}
\begin{itemize}
\item \textbf{Deterministic.} The same input always produces the same output. No randomness, no system clocks, no file I/O inside contract execution.
\item \textbf{Replicated.} Every node runs every transaction. They compare results. If they disagree, the dissenter is wrong.
\end{itemize}
\textbf{This is why a contract is "a cell that runs itself".} Nobody in particular runs it; every node does, and they agree.
\bottomnote{Vocab: \textit{EVM} = Ethereum Virtuelle Maschine.}
\end{frame}

% ===== Slide 20: Where the analogy breaks =====
\begin{frame}{Where the Google-Doc Analogy Breaks}
\altdescription{Three-row table comparing what an actual Google Doc allows versus what Ethereum allows.}
\begin{center}
\begin{tabular}{l|l|l}
 & \textbf{Google Doc} & \textbf{Ethereum} \\\hline
Identity per edit & Loose (login optional) & \textbf{Cryptographic signature required} \\
Edit a past line & Yes (paste over it) & \textbf{No, append-only} \\
Undo a transaction & Ctrl+Z & \textbf{No undo, ever} \\
\end{tabular}
\end{center}
\vspace{0.5em}
\textbf{The single most important difference.} Ethereum is append-only. Once a transaction is mined, you can write a new transaction that updates state, but you cannot edit or delete the historical record. This is the property that makes the chain auditable forever, AND the property that makes mistakes expensive forever.
\bottomnote{The analogy got us to slide 20. Now we know its limits.}
\end{frame}

% ===== Slide 21: Treasure hunt + hard reset =====
\begin{frame}{Interactive: On-Chain Treasure Hunt}
\altdescription{Prompt for the on-chain treasure hunt. Students open Etherscan and decode block 46147's first non-coinbase transaction.}
\textbf{Open https://etherscan.io and search for block \texttt{46147}.}
\begin{itemize}
\item Type \texttt{46147} into the top search bar; if Etherscan does not navigate directly, click the \textit{Blocks} tab and enter \texttt{46147} there. Either route works.
\item This is the block holding the very first non-coinbase transaction on Ethereum mainnet (year 2015).
\item In your pair (or alone, your choice), find: the sender, the recipient, the value sent (in ETH), the gas paid.
\item Why this tx and not the famous ENS first registration? The ENS one was used in week 3. We avoid repetition.
\end{itemize}
\textbf{Hard reset checkpoint.} If at this point your screen is still on the slides and not on Etherscan and Remix, the instructor projects Remix on the main screen and we rebuild together. No student gets left in the slides.
\bottomnote{This block is older than this course. The append-only property has held for a decade.}
\end{frame}

% ===== Slide 22: Etherscan =====
\begin{frame}{Etherscan is a UI on the Shared Doc}
\altdescription{Mock-up of the Etherscan home page with a search bar, three tabs (Transactions, Internal, ERC-20), and a body table of recent transactions.}
\begin{center}
\begin{tikzpicture}[every node/.style={font=\scriptsize}]
  \node[draw, fill=lightgray!20, minimum width=10cm, minimum height=0.7cm] (bar) {Search by address, txn hash, block, token...};
  \node[draw, fill=mlgreen!15, below=0.05cm of bar.south west, anchor=north west, minimum width=2.4cm, minimum height=0.5cm] (t1) {Transactions};
  \node[draw, fill=lightgray!10, right=0.02cm of t1, minimum width=2.4cm, minimum height=0.5cm] (t2) {Internal};
  \node[draw, fill=lightgray!10, right=0.02cm of t2, minimum width=2.4cm, minimum height=0.5cm] (t3) {ERC-20 Txns};
  \node[draw, fill=white, below=0.05cm of t1.south west, anchor=north west, minimum width=10cm, minimum height=2.2cm, text width=9.6cm, align=left] (body) {%
    \textbf{Hash}\quad\textbf{Block}\quad\textbf{From}\quad\textbf{To}\quad\textbf{Value}\\[0.2em]
    0xab12...c34d \quad 18{,}901{,}231 \quad 0xAlice... \quad 0xBob... \quad 0.05 ETH\\
    0xff03...09e1 \quad 18{,}901{,}231 \quad 0xCarol... \quad 0xContract... \quad 0.00 ETH\\
    0x55aa...3d12 \quad 18{,}901{,}230 \quad 0xDan... \quad 0xUniswap... \quad 1.20 ETH%
  };
\end{tikzpicture}
\end{center}
\textbf{Etherscan does not own the chain.} It reads the chain and renders it as HTML. Other explorers (Blockscout, Beaconcha.in) read the same chain. If Etherscan is down, the chain is fine.
\bottomnote{The companion notebook (take-home) reads the chain via web3.py: same chain, different UI.}
\end{frame}

% ===== Slide 23: Workshop kickoff =====
\begin{frame}{Bridge: What You Are About to Build}
\altdescription{Workshop kickoff slide: numbered list of the five workshop steps.}
\begin{enumerate}
\item Open Remix in a fresh tab: \texttt{https://remix.ethereum.org}
\item Paste \texttt{HelloWorld.sol} from the lab guide
\item Compile (button click; status turns to \okstatus{compiled successfully})
\item Deploy on Remix VM (the in-browser private chain)
\item Click \texttt{greeting} on the deployed contract; read \texttt{Hello, Class}
\end{enumerate}
\vspace{0.3em}
\textbf{Time budget.} 30 minutes for steps 1 through 5, plus an optional 5 minutes for the Sepolia level-up if you arrived with a funded MetaMask. \\[0.3em]
\textbf{Stragglers' protocol.} At minute 80 (i.e. 5 minutes before close), the TA pulls aside any student still without a deployed contract for a 5-minute focused walkthrough. Nobody leaves without an artifact.
\bottomnote{Lab guide: ../lab\_guide.md. Pre-class prep was encouraged, not required.}
\end{frame}

% ===== Slide 24: Workshop step detail =====
\begin{frame}[fragile]{Workshop: The Three Critical Clicks}
\altdescription{Three numbered Remix sidebar icons paired with the corresponding click actions and expected outputs.}
\begin{columns}[T]
\column{0.62\textwidth}
\lstset{style=soltiny,language={}}
\begin{lstlisting}
1. Solidity Compiler panel -> [Compile]
   Status: green check + "compiled successfully"

2. Deploy & run transactions panel
   Environment: Remix VM (Cancun)
   -> [Deploy]
   Wait for green check in the bottom terminal

3. Deployed Contracts -> expand HelloWorld
   -> click [greeting]
   Output: string: greeting Hello, <your name>
\end{lstlisting}
\column{0.34\textwidth}
\begin{tikzpicture}[every node/.style={font=\scriptsize}]
  \node[draw, fill=mlorange!12, circle, minimum size=0.75cm] (n1) at (0,0) {1};
  \node[right=0.3cm of n1, anchor=west] {Solidity Compiler};
  \node[draw, fill=mlgreen!18, circle, minimum size=0.75cm, below=0.4cm of n1] (n2) {2};
  \node[right=0.3cm of n2, anchor=west] {Deploy \& run};
  \node[draw, fill=mlgreen!28, circle, minimum size=0.75cm, below=0.4cm of n2] (n3) {3};
  \node[right=0.3cm of n3, anchor=west] {Deployed Contracts};
\end{tikzpicture}
\end{columns}
\bottomnote{The greeting string is editable: open HelloWorld.sol and change "Hello, Class" to "Hello, <your name>" before clicking Compile.}
\end{frame}

% ===== Slide 25: Take-home notebook + post-quiz =====
\begin{frame}{Take-Home and Post-Quiz}
\altdescription{Two-column slide showing the take-home notebook on the left and the 5-question post-quiz on the right.}
\begin{columns}[T]
\column{0.48\textwidth}
\textbf{Take-home notebook}
\begin{itemize}
\item File: \texttt{notebook/ethereum\_companion.ipynb}
\item Open in Colab AFTER class.
\item Reads your contract by address.
\item Decodes the block-46147 historical tx.
\item 2-minute instructor demo here, no student execution.
\end{itemize}
\column{0.48\textwidth}
\textbf{Post-quiz (5 minutes, 50 points)}
\begin{itemize}
\item 5 multiple-choice questions on concepts.
\item No question requires you to have a deployed contract address.
\item Even if you missed the deploy, you can score 100\%.
\item File: \texttt{quizzes/ethereum\_interactive\_post\_quiz.md}
\end{itemize}
\end{columns}
\bottomnote{Concept-based grading: nobody is penalised for an infrastructure failure they did not cause.}
\end{frame}

% ===== Slide 26: Recap =====
\begin{frame}{Recap, in Five Lines}
\altdescription{Closing recap of the lecture's five key takeaways.}
\begin{enumerate}
\item Ethereum is a shared, signed, append-only Google Doc.
\item Identity to write = an account = a key pair. Wallet = key manager, not a bank.
\item Every edit is a transaction. Every transaction pays gas.
\item Smart contracts = doc cells that run themselves, replicated across thousands of nodes.
\item The chain is shared. Etherscan is just a UI on the shared chain.
\end{enumerate}
\vspace{0.5em}
\textbf{What to never do.} \stopstatus{Never reuse a workshop seed for real money.} \stopstatus{Never trust class infrastructure with anything you cannot afford to lose.}
\bottomnote{security\_brief.md is the canonical version of these warnings.}
\end{frame}

% ===== Slide 27: The road ahead (single appendix slide on L2s + AA) =====
\begin{frame}{Appendix: The Road Ahead (Optional)}
\altdescription{Brief glance at L2s and account abstraction; out of scope for this lecture but signposted for next week.}
\textbf{Two big topics we did not cover today:}
\begin{itemize}
\item \textbf{Layer 2 (L2) networks.} Most real Ethereum activity in 2026 happens on rollups (Arbitrum, Optimism, Base, ZKsync). Same accounts, same Solidity, much cheaper gas. The mainnet you saw today is the settlement layer they anchor to.
\item \textbf{Account abstraction (ERC-4337).} The "account = key pair" rule is being relaxed. Smart-contract-based accounts can have multi-factor authentication, social recovery, and sponsored gas. The wallet you generated today is still an EOA (Externally Owned Account); modern wallets increasingly are not.
\end{itemize}
\textbf{Where these get covered.} Module F of this course; the existing W04 (Create Your DAO) workshop touches on contract accounts.
\bottomnote{The single optional slide of the lecture. Read for context; not on the post-quiz.}
\end{frame}

% ===== Slide 28: Closing =====
\begin{frame}{Thank You}
\altdescription{Closing slide with thank-you message and references to the security brief and lab guide.}
\begin{center}
\Huge \textbf{Questions?}\\[1em]
\end{center}
\vspace{0.3em}
\textbf{If you take one thing home:} the chain is shared, the wallet is a key, the seed is the master key, and a workshop seed is disposable.\\[0.5em]
\textbf{Files for after class.}
\begin{itemize}
\item Lab guide: \texttt{ethereum\_interactive\_lecture/lab\_guide.md}
\item Companion notebook: \texttt{ethereum\_interactive\_lecture/notebook/ethereum\_companion.ipynb}
\item Security brief: \texttt{ethereum\_interactive\_lecture/instructor\_kit/security\_brief.md}
\item Post-quiz answer key (released after the quiz): \texttt{ethereum\_interactive\_lecture/quizzes/ethereum\_interactive\_post\_quiz.md}
\end{itemize}
\bottomnote{(c) Joerg Osterrieder 2026. Educational use.}
\end{frame}

\end{document}
