+ {/* ============================================================
+ RainbowKit의 ConnectButton
+ ============================================================
+ 지갑 연결 UI를 자동으로 제공합니다:
+ - 연결되지 않음: "Connect Wallet" 버튼
+ - 연결됨: 주소, 잔액, 네트워크 표시 + 드롭다운 메뉴
+
+ 커스터마이징:
+ - showBalance={false} : 잔액 숨기기
+ - chainStatus="icon" : 체인을 아이콘으로만 표시
+ - accountStatus="avatar" : 주소를 아바타로만 표시
+ ============================================================ */}
+
+
+ {/* ============================================================
+ 연결된 지갑 정보 표시
+ ============================================================
+ isConnected가 true일 때만 렌더링됩니다.
+ 이 섹션을 커스터마이징하여 원하는 정보를 표시하세요.
+ ============================================================ */}
+ {isConnected && (
+
+
연결된 지갑
+
+ {/* 지갑 주소 */}
+
+ 주소: {address?.slice(0, 6)}...{address?.slice(-4)}
+
+
+ {/* ETH 잔액 */}
+
+ 잔액: {isBalanceLoading
+ ? '로딩 중...'
+ : `${balance?.formatted ?? '0'} ${balance?.symbol ?? 'ETH'}`
+ }
+
+
+ {/* ============================================================
+ TODO: 추가 기능 구현
+ ============================================================
+ - 컨트랙트 상태 읽기 (useReadContract)
+ - 컨트랙트 함수 호출 (useWriteContract)
+ - 트랜잭션 히스토리 표시
+ - 토큰 잔액 표시 (ERC20)
+ ============================================================ */}
+
+ )}
+
+ );
+}
diff --git a/week-04/theory/quiz-04-solution.md b/week-04/theory/quiz-04-solution.md
new file mode 100644
index 0000000..748d4b2
--- /dev/null
+++ b/week-04/theory/quiz-04-solution.md
@@ -0,0 +1,456 @@
+# Week 4 Quiz: Network/Block + wagmi
+
+> **제출 방법:** 이 파일을 복사하여 답변을 작성한 후, PR로 제출하세요.
+> **평가 기준:** 개념 이해도 중심 - 문법 오류보다 논리적 설명을 중시합니다.
+
+---
+
+## 문제 1: 블록 헤더 필드 (객관식)
+
+다음 상황을 고려하세요:
+
+```
+블록 100의 해시: 0xabc123...
+블록 101의 해시: 0xdef456...
+```
+
+블록 101의 `parentHash` 필드에는 어떤 값이 저장되어 있나요? 그리고 **왜** 이런 방식으로 연결하나요?
+
+**보기:**
+A) 0xdef456... - 자기 자신의 해시를 저장하여 무결성을 보장한다
+B) 0xabc123... - 이전 블록의 해시를 저장하여 체인 연결과 불변성을 보장한다
+C) 블록 번호 100 - 숫자로 순서를 추적한다
+D) 빈 값 - 헤더에는 해시가 저장되지 않는다
+
+**답변:**
+
+B 이전 블록의 해시를 포함시켜 과거 블록이 변경되면 이후 블록 해시가 연쇄적으로 변하게 되어 체인의 불변성을 보장한다.
+다른 값들은 이전 블록과 연결 되어있다는것을 보장하지 않는다.
+
+
+---
+
+## 문제 2: MPT 목적 (객관식)
+
+이더리움에서 Merkle Patricia Trie(MPT)를 사용하는 **가장 중요한 이유**는 무엇인가요?
+
+**보기:**
+A) 데이터를 암호화하여 외부에서 읽을 수 없게 한다
+B) 트랜잭션 처리 속도를 10배 이상 높인다
+C) 전체 데이터 없이도 특정 데이터의 존재와 정확성을 효율적으로 증명한다
+D) 블록 크기를 줄여서 저장 공간을 절약한다
+
+**답변:**
+
+C, MPT는 블록헤더의 stateRoot를 통해 Light Node가 전체 상태를 저장하지 않고도 특정 데이터의 존재와 무결성을 검증 하기 위해 사용된다.
+
+
+---
+
+## 문제 3: 체인 연결과 보안 (객관식)
+
+공격자가 블록 50의 트랜잭션을 수정하려고 합니다. 현재 체인의 최신 블록은 100입니다. 이 공격이 **왜** 어려운가요?
+
+**보기:**
+A) 블록 50은 너무 오래되어서 시스템에서 접근할 수 없다
+B) 블록 50을 수정하면 해시가 바뀌고, 블록 51부터 100까지 모든 블록의 parentHash가 불일치하게 된다
+C) 블록 50은 이미 암호화되어 있어서 복호화 키가 필요하다
+D) 네트워크 관리자만 과거 블록을 수정할 수 있다
+
+**답변:**
+
+B, 블록 50을 수정하면 해시가 바뀌고, 이후 블록의 parentHash가 연쇄적으로 무효화 된다.
+공격자는 51~100까지 모든 블록을 다시 채굴하고 동시에 네트워크의 정직한 체인을 추월해야 하므로 현실적으로 매우 어렵다.
+
+---
+
+## 문제 4: MPT 진화 과정 (단답형)
+
+MPT(Merkle Patricia Trie)는 세 가지 자료구조의 장점을 결합한 것입니다:
+1. **Trie** -> 2. **Patricia Trie** -> 3. **Merkle Patricia Trie**
+
+**왜** 각 단계의 발전이 필요했나요? 각 단계가 해결하는 문제를 간단히 설명하세요.
+
+**답변:**
+
+1. Trie는 공통 prefix는 하나의 경로로 공유하게끔하여 키 기반 검색을 효율적으로 하게 해주었다.
+2. Patricia는 단일 경로를 하나의 노드로 압축하여 단일 자식 노드가 길게 이어지면 노드 낭비가 발생하는 것을 해결
+3. Merkle Patricia는 각 노드에 해시를 추가 하고 부모 노드는 자식 노드들의 해시를 포함해 해시하여 데이터의 무결성을 증명할 수 있음 이를 통해 Light Node가 전체 데이터를 저장하지 않고도 상태를 검증할 수 있게됨
+
+---
+
+## 문제 5: Eclipse Attack 방어 (단답형)
+
+Eclipse Attack은 공격자가 피해자 노드의 **모든 피어 연결**을 자신이 통제하는 노드로 바꾸는 공격입니다.
+
+1) 이 공격이 성공하면 피해자에게 **어떤 피해**가 발생할 수 있나요?
+2) 개인 노드 운영자가 이 공격을 **방어**하기 위해 할 수 있는 행동은 무엇인가요?
+
+**답변:**
+
+1. 가능한 피해
+- 공격자가 가짜 체인을 보여줘 오래된 체인에 머무르게 할 수 있음
+- 채굴자를 고립시켜 블록 전파 지연을 유도한다.
+- 공격자가 특정 트랜잭션을 전달하지 않는다.
+
+2. 방어방법
+- 다양한 IP 대역 피어를 연결한다. (계속해서 같은 피어만 연결하지 않기)
+- 피어 수를 충분히 유지한다. (연결 수 적으면 공격 쉬움)
+
+
+---
+
+## 문제 6: 노드 종류 선택 (단답형)
+
+친구가 이더리움 개발을 시작하려고 합니다. 다음 세 가지 상황에서 각각 어떤 노드 타입(Full, Light, Archive)을 추천하시겠습니까? **왜** 그 노드를 추천하는지도 설명하세요.
+
+1) 모바일 지갑 앱 개발
+2) 블록체인 데이터 분석 서비스 개발
+3) 일반적인 dApp 백엔드 개발
+
+**답변:**
+
+1) 모바일 지갑 앱:
+ 추천 노드: Light 노드
+ 이유: 모바일 환경은 저장 공간과 메모리 자원이 제한적이므로 풀 노드를 돌리긴 어렵다. 라이트 노드는 블록 헤더와 Merkle Proof를 통해 전체 데이터를 저장하지 않고도 계정 잔액과 트랜잭션 상태를 검증할 수 있어 모바일 지갑에 적합하다.
+
+2) 블록체인 데이터 분석:
+ 추천 노드: Archive 노드
+ 이유:데이터 분석 서비스는 과거 특정 블록 시점의 계정 상태나 스마트 컨트랙트 storage 값을 조회해야 하는 경우가 많다. 아카이브 노드는 모든 과거 상태를 보존하므로 히스토리 데이터 분석, 잔액 변화 추적, 온체인 통계 계산에 좋다.
+
+3) dApp 백엔드:
+ 추천 노드: Full 노드
+ 이유: 일반적인 dApp 백엔드는 최신상태 조회, 트랜잭션 전송, 이벤트 로그 구독 등 현재 체인 상태를 기반으로 동작한다. 과거 모든 상태는 필요 없지만, 최신 상태를 독립적으로 검증하고 안정적으로 RPC 요청을 처리하기 위해 풀노드가 적절하다.
+
+
+---
+
+## 문제 7: useAccount Hook (빈칸 채우기)
+
+다음 코드의 빈칸을 채워서 지갑 연결 상태를 표시하는 컴포넌트를 완성하세요:
+
+```typescript
+import { _________________ } from 'wagmi';
+
+function WalletStatus() {
+ // TODO: useAccount hook에서 필요한 값들을 가져오세요
+ const { _________________, _________________ } = useAccount();
+
+ if (!isConnected) {
+ return 로딩 중...
;
+ if (error) return 로딩 중...
;
+ if (error) return