第 5 週:Web3 數位帳戶與安全防護
上一堂課我們談的是「Web3 的商業模式」——五年下來,哪些商業模式活了、哪些收攤了。這一週要把鏡頭轉到另一邊,問一個更貼身的問題:我們的數位加密錢包,裡面到底有什麼?誰有辦法把錢,甚至把錢包拿走?憑什麼?我要先講一件不太舒服的事:2025 年 2 月,一家全球排名前幾大的加密貨幣交易所被搬走了約 15 億美元,而他們的私鑰沒有被破解、硬體錢包沒有被打開、多簽機制也沒有被繞過——每一位簽名的人,都簽下了他們以為自己正在簽署的交易。這一週我們要把「簽名」這件事情拆開來看,因為在 Web3 裡,簽名就是同意,而同意就是授權。
📋 本週學習目標
- 說明私鑰、公鑰、地址三者的單向推導關係,並解釋為什麼「單向」就是安全的全部基礎
- 解釋助記詞(BIP-39)與 HD 錢包派生機制,說明一組 12 個英文單字為什麼能代表無限多個地址
- 比較 EOA 與智慧合約錢包(ERC-4337)的差異,指出帳戶抽象解開了哪三件原本被焊死的事
- 說明 EIP-7702(Pectra 升級,2025 年 5 月)如何讓既有的 EOA 不搬家就升級為智慧帳戶,並用公開數據判斷它是否已經進入主流
- 分辨三種把資產拿走的路徑——授權、簽名、盲簽與前端劫持——並各舉一個真實案例
- 完成一次簽名鑑識與錢包授權健檢,寫出屬於自己的自保守則
⏱ 預估閱讀時間:約 70~90 分鐘 | 關鍵詞:私鑰、公鑰、地址、簽章、助記詞、BIP-39、HD 錢包、冷熱錢包、EOA、帳戶抽象、ERC-4337、EIP-7702、UserOperation、Bundler、Paymaster、approve、Permit、Permit2、盲簽、前端劫持、錢包清空器
5.1 開場 — 15 億美元的手術:他們簽下的每一筆都是「合法」交易
上一週結束時,我們留下了一個懸念。在第 3 章的結尾我問過大家:Reddit 頭像的持有者最後必須把 12 個字的助記詞用雙手抄下來,因為平台要退出代管了。當時我說那是「擁有」的代價——現在我們要來探討這個代價。這一週沒有商業模式分析,也沒有代幣經濟學;這一週只講一件我們在 Web3 世界裡每天都要做的事,而且每一次做錯都可能讓我們歸零的事:簽名。
先講一個真實的開場。2025 年 2 月,全球交易量數一數二的加密貨幣交易所 Bybit,發生了一件至今仍被稱為「史上最大單筆竊案」的事件。被拿走的是約 40 萬顆以太幣,及相關的質押衍生代幣,以事件當時的市價計算約 15 億美元(不同來源的公開估值落在 14.6 億至 15 億美元之間,本教材後續統一以「約 15 億美元」表述)[10]。消息傳出的當天,整個市場的鏈上分析師、交易所風控部門、各國執法單位同時進入最高警戒,因為這種規模的資金外流,往往牽動的是整個產業的信任基礎。
但這個案子之所以值得放進教科書的第一頁,不是因為金額,而是因為它被偷的方式。請注意,以下這幾件事通通沒有發生:Bybit 的私鑰沒有被破解,他們的冷錢包沒有被實體入侵,他們的多重簽名機制(需要多把鑰匙才能動用資金)也沒有被繞過。也就是說,所有我們在這一週前半段要講的密碼學防線——256 位元的私鑰、橢圓曲線的單向性、硬體錢包的離線簽章——在這個案子上全部正常運作,一把鎖都沒有被撬開。
這起攻擊的實體路徑是這樣的:攻擊者先駭進 Safe{Wallet} 開發人員的電腦,拿下開發環境後,直接在 Bybit 簽署交易的網頁前端,埋了一段惡意的 JavaScript。結果,當 Bybit 的操作人員看著螢幕,確認是一筆「收件人正確、金額正確」的例行交易並準備簽名時,資料被瞬間調包。真正送進硬體錢包裡執行的,是另一筆轉給攻擊者的交易。操作人員眼睛看到的畫面,和晶片裡處理的,根本不是同一件事[10]。
這一段值得你把畫面記牢:你看到的,和你簽下的,不一定是同一個東西。
拿另一個數字來對比
為了讓你知道這 15 億美元有多誇張,我們拿一個全年統計當對照。區塊鏈安全公司 ScamSniffer 每年追蹤「簽名釣魚」(誘使你簽下一個有害的簽名)造成的損失,並在 2026 年 1 月發布了 2025 年的年度報告:這一年,全 EVM 生態系(含以太坊主網與 BSC、Polygon 等相容鏈)因簽名釣魚損失的金額是 8,385 萬美元,受害人數 10 萬 6 千人[9]。換句話說,Bybit 這一場社交工程操作的代價,大約是全世界一整年所有簽名釣魚損失的 17 倍。它不是「又一次簽名釣魚」,它是完全不同量級的攻擊手法——而它的技術本質是「讓人在正確的畫面上簽下錯誤的交易」。
本週的核心提問:如果防線(密碼學)沒有被攻破,那麼漏洞一定在別的地方——在「人」與「畫面」之間的某個環節。這一週我們要把那個環節找出來,並且了解怎麼在它面前站穩。我們會依序走三條路:先看鑰匙的物理學(5.2,私鑰、公鑰、助記詞是怎麼運作的),再看錢包這個載體本身正在怎麼被重新設計(5.3,帳戶抽象把「一把鑰匙管一切」改成可編程的規則),最後才進到真實的攻擊現場(5.4,授權、簽名、盲簽三種把錢拿走的方法)。5.5 你們要分組動手,做一次真實的簽名鑑識與授權健檢。
5.2 錢包的物理學 — 私鑰、公鑰、地址與簽章
這一節的任務,是把「錢包」這個詞從你的日常直覺裡拆開。你手機裡的其他 App 都是帳號密碼制:忘記密碼可以重設,帳號被盜可以找客服。Web3 的錢包不是這樣運作的——它不是「一個帳號」,而是一組數學關係。把它想成物理定律會比想成軟體更貼近事實,因為這裡沒有客服、沒有後台、沒有「重設」按鈕,只有數學。
一、私鑰:一把 256 位元的鑰匙
一切從「私鑰」(private key)開始。私鑰不是一個檔案,也不是一組我們過去熟悉的密碼,而是一個256 位元的隨機數字。我們可以把它想像成擲一枚硬幣 256 次,把正反面記錄下來——只不過在電腦裡,它是一串 64 個十六進位字元的字串,長得像這樣:0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80(這是開發工具 Hardhat 的公開測試帳號第 0 號,不是真實資產帳號)[17]。
這個數字有多大?2 的 256 次方,大約是 1.16 乘以 10 的 77 次方——也就是 1 後面接 77 個零。這個數量有多荒唐,值得我們花十秒感受一下:在我們物理上能觀測到的極限範圍內,宇宙中所有星系、塵埃與生命的原子總和,大約就是 10 的 80 次方。這已經是人類所能理解的最大實體基數。也就是說,地球上的每一台電腦、每一顆硬碟、每一個資料中心能儲存的位元數加起來,都遠遠不及「所有可能的私鑰」的數量。所以當有人說「暴力破解私鑰」時,我們要能判斷這句話是不是胡說:假設有一台超級電腦每秒可以猜測 10 億組私鑰,讓它從宇宙誕生那一刻開始跑,跑到今天也才試過 10 的 26 次方種組合——連全部分佈的兆分之一都不到。
理解這個數量等級有兩個實用價值:
第一,你可以放心:真正的風險從來不是「私鑰被算出來」,而是「私鑰被拿走」——被騙走、被偷走、被你自己存到雲端硬碟裡同步出去。
第二,你可以馬上識破一類常見的詐騙話術:任何聲稱「可透過算力猜出你的私鑰」的服務,在數學上就是不可能的;反過來說,任何要你把私鑰或助記詞「輸入到某個網站驗證」的人,就是在直接索取你的全部資產。
二、公鑰與地址:只有一條單向的路
有了私鑰,接下來是兩個由它推導出來的東西。用橢圓曲線密碼學(以太坊使用的是名為 secp256k1 的曲線)的一個單向函數,可以從私鑰算出「公鑰」(public key);再把公鑰做一次雜湊運算(Keccak-256,取結果的後 20 位元組),就得到你平常在錢包裡看到的那串「地址」(address)——長得像 0xf39f...2266 的 42 個字元[16]。請注意:上一個小節那個 0xac09 開頭的測試私鑰,把它丟進單向函數裡,再算出來精準的地址正是 0xf39f...2266。兩個字串長得完全不一樣——這不是巧合,這就是「單向」的意思:把我們手上的私鑰丟進去,瞬間就能產出地址;但要是有人想拿著地址回頭去反推私鑰,那是一條在物理上完全走不通的道路。
整條路徑的關鍵字是「單向」:私鑰可以算出公鑰,公鑰可以算出地址,但反向推不回來。這是刻意的設計,不是實作偷懶。橢圓曲線上的乘法很容易做(電腦瞬間完成),但要從乘積反推乘數,目前已知最快的演算法需要的時間遠超過宇宙年齡。這件事的意義在於:我們的地址可以公開給全世界,公鑰可以在鏈上被任何人看到,而我們的私鑰依然安全——單向的路回不了頭。
三、簽章:簽名不是交易,但一樣能拿走我們的錢
現在講這一節最重要的一件事。我們持有私鑰最實際的用途,不是「解鎖錢包」,而是簽章(signature):用私鑰對一段訊息產生一組數學證明,而任何人只要拿到我們的公鑰與那段訊息,就能驗證「這段訊息確實是由這個私鑰的持有人同意的」。注意這句話裡的兩個角色——產生簽章需要私鑰,驗證簽章只需要公鑰。這就是為什麼鏈上交易可以被全世界的節點獨立驗證:驗證方不需要知道你的秘密。
接下來是關鍵,請慢慢看:簽章不等於交易。一筆鏈上交易要成立,需要付 Gas 費(手續費)、需要被打包進區塊,需要真的上鏈。但一個簽章可以先在鏈下產生,此時沒有上鏈,不付任何手續費。然而只要那個簽章的內容是「我同意某個合約動用我某個代幣的某個額度」,那麼拿到這個簽章的人,隨時可以自己付 Gas 把它送上鏈,把你錢包裡的東西搬走。這裡必須徹底打破我們用傳統軟體的直覺。我們把這兩個動作在物理上拆開看:
・「送出」交易:主動連網、付 Gas 費,把資料推上區塊鏈。
・「簽名」授權:只是在裝置上用私鑰蓋個章,不上鏈、不扣手續費。
這一小段是 5.4 整節的伏筆,也是整個 Web3 資安教育裡最該被提早教的一件事:錢包跳出的「確認」有兩種,一種會讓你付手續費,一種不會;而後者才是詐騙最愛的那一種。最常見的錯誤直覺是「我又沒按送出,應該沒事吧」——這一句話,就是 2025 年最大單筆釣魚案(650 萬美元)的完整成因。
四、助記詞:12 個英文單字是怎麼回事(BIP-39)
私鑰是 64 個十六進位字元,要你抄下來並保存 20 年,顯然不人性化。所以業界用一個巧妙的辦法把它「人性化」:把一個隨機數字轉換成 12 個(或 24 個)英文單字。我們打開任何一個錢包 App,選擇「建立新錢包」時看到的那 12 個詞,就是這個東西——它叫「助記詞」(mnemonic phrase),標準名稱是 BIP-39[6]。
它的運作方式其實比想像中簡單,而且值得我們搞懂,因為懂了才不會被騙。
第一,電腦先產生 128 位元的隨機資料(稱為「熵」,entropy)。
第二,把這 128 位元做一次 SHA-256 雜湊,取結果最前面的 4 位元,當作「校驗碼」(checksum)接在後面——所以總共是 132 位元。
第三,把這 132 位元每 11 位元切一段,一共切出 12 段;每一段是一個 0 到 2047 之間的數字。
第四,BIP-39 規格定義了一份剛好 2,048 個英文單字的詞表,第 0 號是 abandon、第 2047 號是 zoo,每個數字對應一個單字。把 12 個數字換成 12 個單字,你就得到了那串英文[6]。
這裡有兩個重點。👀第一個是詞表的設計:2,048 個字是刻意挑過的,每個字的前四個字母在整份詞表裡都是唯一的。這是為了讓你在紙上抄寫時,只要寫下前四個字母(例如 abando、zoo)就能唯一還原——因為這個標準誕生的年代,人們是真的把它寫在紙上的。👀第二個是那個 4 位元的校驗碼:它讓「順序寫錯」或「其中一個字抄錯」這種失誤,在還原錢包時有 15/16 的機率被立刻偵測出來並拒絕。這是 BIP-39 留給人類的一道人為防線,因為人類一定會抄錯。
而這 12 個字的最終用途,是當作「種子」再推導出私鑰:實際運作上,助記詞經過一組標準化的延伸與雜湊流程(BIP-39 的 seed 推導),產生一個 512 位元的種子,再往下生成無窮多個私鑰。所以助記詞的位階比私鑰更高——私鑰只是它派生出來的其中一個結果。這就是為什麼資安鐵則是「助記詞等於全部資產」,也是為什麼任何要我們輸入助記詞的網頁、客服或表單,無論理由多合理,都是詐騙。唯一的例外是 5.5 課堂活動用的那組示範字串——它背後沒有任何真實資產,而且網址由老師在投影片上明示;除此之外,沒有第二個例外。
五、HD 錢包:為什麼一個 App 裡有一堆地址
現在回答前面埋的那個問題。假設我們的助記詞可以生成無限多個私鑰,那要怎麼管理「第幾個私鑰」?答案是透過一套稱為 HD 錢包(Hierarchical Deterministic Wallet,階層式決定性錢包)的標準:BIP-32 定義了「一棵樹」的推導規則,BIP-44 則定義了樹上每一層的編號慣例[14][15]。
用日常語言說:種子(助記詞)是樹根,往下每一層都有一個編號。具體來說,我們在錢包裡看到的「推導路徑」通常長這樣:m/44'/60'/0'/0/0。這其實就是一串數位門牌,由大到小層層定位:
m:樹根(代表你的助記詞本身)。44':標準代號(代表這是一把可以開多個帳戶的萬能鑰匙)。60':指定區塊鏈(60 代表以太坊,0 則是比特幣)。0':第幾個帳戶(從 0 開始算,這是你的第一個帳戶)。0:用途分類(0 是對外收錢用,1 是內部找零用)。0:第幾個地址(這個帳戶底下的第 0 號門牌)。
所以同一組助記詞,可以在比特幣、以太坊和Solana 上各自有一整排地址;也可以在同一個鏈上開出多個帳戶。12 個詞是身分,路徑是門牌號碼——這是我希望大家帶走的那個比喻。
這件事有一個很實務的後果,也是詐騙集團最愛利用的認知落差:「把助記詞匯入另一個錢包 App,資產就會出現在那裡」,這是對的,因為資產從來不在 App 裡,而在鏈上,App 只是那把鑰匙的介面。反過來說,當一個網站說「請你輸入助記詞以同步資產」時,它其實是在說「請你把鑰匙交給我」——而它拿到鑰匙之後,會在你自己的錢包裡把你的資產全部轉走,你也會在鏈上看到一筆完全合法,而且由你的私鑰簽名的交易紀錄。上鏈後,沒有任何機構能撤銷它。
m/44'/60'/0'/0/3。請問它是「第幾個帳戶」的第「幾個地址」?寫完之後,回頭對照前面那句「12 個詞是身分,路徑是門牌號碼」——同一個身分,可以掛上多少個門牌號碼?
六、冷錢包與熱錢包:一條光譜,不是二分法
把以上學到的東西整理成一個實務問題:既然私鑰是唯一的那把鑰匙,那把鑰匙平常應該放在哪裡?業界慣用的分類是「冷錢包」與「熱錢包」,但我在課堂上更希望你把它們理解成一條「連網程度」的光譜,因為真正決定風險的不是名詞,而是「私鑰有沒有接觸過網路」。
| 型態 | 私鑰存在哪 | 適合放多少 | 主要風險 |
|---|---|---|---|
| 交易所託管 | 不在我們手上(交易所代管) | 交易用週轉金 | 交易所倒閉或被駭,我們只是債權人 |
| 手機/瀏覽器熱錢包 | 我們的手機(連網) | 零錢包、互動用 | 惡意網站、假 App、手機遺失或中毒 |
| 硬體錢包 | 專用晶片(離線簽章) | 主要資產 | 盲簽(畫面沒顯示交易內容)、供應鏈詐騙、助記詞自己抄錯 |
| 多簽錢包 | 分散在多把鑰匙/多台裝置 | 組織資產 | 前端被劫持、簽署人數門檻設太低 |
這張表有個重點:往光譜的下方走,安全性提高,但「使用者體驗」變差,而且「人為失誤」的權重變大。硬體錢包的晶片不會在網路上被偷走私鑰——這是真的——但硬體錢包仍然可能敗在最後一步:當它請你「確認這筆交易」時,如果你按下的是一筆自己看不懂的交易,你等於是在一張自己讀不懂的授權書上簽名——金額或權限早就寫好了,只是你沒有能力核對。2024 年 10 月,一家叫 Radiant Capital 的 DeFi 協議被拿走超過 5,000 萬美元,用的正是多簽加上硬體錢包——他們每一道密碼學防線都是完整的,卻在最後的「確認」上失守[11]。這個案子是 5.4 節第三小節的主角。
5.3 從 EOA 到帳戶抽象 — 錢包為什麼正在被改寫
上一節的最後一句話:光譜越往安全端走,「人為失誤」的比重越大。這句話聽起來像廢話——人本來就會失誤。但對設計系統的人來說,它是一個非常具體的工程問題:如果一把私鑰決定一切,那麼任何一次失誤都沒有補救的空間。這一節要講的,正是業界花了整整十年在修補的一個設計缺陷,以及它現在的進展。
一、EOA 的代價:一把鑰匙決定一切
在 5.2 講到的帳戶,標準名稱叫 EOA(Externally Owned Account,外部持有帳戶)。「外部」的意思是:這個帳戶由區塊鏈之外的東西(私鑰)控制,它本身沒有程式碼、不會思考,也不能拒絕任何由正確私鑰簽出的交易。這個「外部」是相對於「鏈上的智慧合約帳戶」來說的——後者的程式碼就住在鏈上,自己就是一個帳戶;而 EOA 沒有程式碼,控制它的東西在鏈外。它就像一扇只有一個鑰匙孔的門——鑰匙是對的門就會開,不會管你是誰、什麼時間以及為了什麼。
這個設計非常優雅,也確實支撐了比特幣與以太坊最初的十年。但把它放到一般人的日常使用上,代價就一項一項浮出來,而且每一項我們都會覺得「太不合理了吧」:
- 遺失即歸零。沒有「忘記密碼」、沒有「客服申訴」,以及沒有「本人持證件臨櫃辦理」。助記詞掉了就是掉了。
- 不能有權限分層。沒辦法設定「這把鑰匙一天最多只能動 100 元」或「這把鑰匙只能簽收,不能轉出」。私鑰就是全權,沒有中間選項。
- 不能請別人代付手續費。新用戶的第一道障礙往往是「我還沒有 ETH,所以什麼都不能做」——而「買 ETH」本身就是一道很高的牆。
- 簽章的驗證規則被寫死在協議裡。EOA 只認一種簽章方式(secp256k1 的橢圓曲線簽章)。如果我們想用指紋、用 Passkey,或用手機的人臉辨識來簽名,協議層不認。
- 一筆交易只能做一件事。「授權 A 後再交換 B」須分成兩筆交易,需付兩次手續費且等兩次確認,中間還可能失敗。
把這五項並排看,你會發現它們不是五個 bug,而是同一個根源:EOA 把「誰付費」、「什麼算有效簽章」、「一筆交易能做幾件事」這三件事,全部寫死在協議層。這是「帳戶抽象」要解決的問題——不是把安全拆掉,而是把這三件事解耦,讓錢包開發者可以自由設計。
二、ERC-4337:把三件寫死的事拆開
以太坊社群為此提出了一個不需要改動底層協議的標準:ERC-4337(帳戶抽象,Account Abstraction Using Alt Mempool)。它在 2023 年 3 月正式在主網上線[1],核心想法很聰明——既然不能改協議,那就在協議之上,用一套「影子交易系統」繞過去。
它的運作有三個角色,請依序記住:
第一,UserOperation(使用者操作)。這是一個「長得像交易、但不是交易」的資料結構。它裝著使用者的意圖:要做什麼(callData)、願意付多少手續費、用什麼簽章,以及要不要請人代付。它被丟進一個獨立的記憶池(alt mempool),和一般的以太坊交易分開排隊[1]。
第二,Bundler(打包者)。這是網路上的一種節點,工作是把記憶池裡的一大堆 UserOperation 收集起來,先離線模擬確認它們會成功,然後打包成一筆真正的以太坊交易送出。Bundler 賺的是「使用者付的手續費」與「實際上鏈的成本」之間的差價[1]。
第三,EntryPoint(入口合約)。這是每個鏈上的一個固定合約,所有打包好的操作都送進這裡。它的工作按順序做三件事:先請每一個智慧合約帳戶驗證(這筆操作是否被正確授權)、再執行(做那些操作要做的事),最後結算手續費。驗證與執行被拆成兩個階段,是這個設計最關鍵的地方——因為「驗證邏輯」現在是由我們的錢包合約自己決定的,不再是協議寫死的[1]。
另外還有一個可選角色:Paymaster(付費者)。它是一份合約,可以代替使用者付手續費。應用程式可以存一筆錢在裡面,讓新用戶「不用先買 ETH 就能用」。所以抽象帳戶的第一個殺手級體驗就是:Gas 代付[1]。
三、帳戶抽象解鎖了什麼
一旦「誰付 gas、什麼算有效簽章和一筆交易能做幾件事」可以被程式設計,前面那五項 EOA 的限制就一條一條鬆開了。以下這幾種能力,是從此以後判斷「這個錢包是不是新世代產物」的依據:
- 社交恢復(Social Recovery)。把帳戶的「找回權」交給幾位信任的朋友或家人的地址;手機掉了,他們可以共同確認,把控制權移到我們的新裝置。對照一下:這很像忘記 Instagram 密碼時,請三位好友幫你按確認的機制。但兩者有一個關鍵差別——Instagram 的三位好友只是幫你「作證」,最後由平台把帳號還給你,必要時還有客服可以介入;社群恢復的守護者(guardians)則是直接持有「能更動帳戶控制權」的力量,他們合意就能動到我們的資產,鏈上也沒有平台可以推翻。所以「找誰當守護者」本身就是一個安全決策,不是社交決策。
- Gas 代付。由應用程式或第三方替我們付手續費,新用戶不必先持有 ETH 才能開始用。
- 用任何代幣付手續費。付費者(Paymaster )可以收 USDC,替我們在後台付 ETH 手續費。
- 批次交易(Batched Operations)。「授權+交換+質押」三個動作合成一筆交易,一次確認後原子性完成;任何一步失敗就整批回滾,不會留下半完成的狀態。
- Session Key(階段性授權金鑰)。給一個遊戲 App 一把限時限額的臨時鑰匙,例如「未來 24 小時內最多動用 10 美元」——主鑰匙完全不暴露,額度由錢包合約自己執行。
- 額度與規則限制。例如「這把鑰匙只能動穩定幣,不能授權新代幣」、「這是給小孩用的錢包,每天上限 300 元」。這些規則寫在錢包合約裡,不是寫在應用程式的介面上——介面可以被混騙,合約不行。
四、EIP-7702:不搬家也能升級
ERC-4337 有一個推廣上的現實困難:舊錢包都是 EOA。若要要享受抽象帳戶的新功能,就必須「搬家」——把資產轉到一個新地址。實務上沒幾個人願意。為了解決這群不想搬家的使用者,以太坊在 2025 年 5 月的 Pectra 升級中,從側面硬生生開出了一條新路:EIP-7702[2][5]。
它做的事說起來很簡單,但後果很深遠:讓一個 EOA 可以「暫時」把自己的帳戶委託給一份智慧合約。我們簽下一份授權,指向某一份合約程式碼;從那一刻起,當有交易送到這個地址時,執行的是那份合約的邏輯。地址沒變,資產沒變,但帳戶行為開始像一個智慧錢包[2]。
三個必須記住的細節:
第一,私鑰仍然握有完全控制權——這不是把帳戶交出去,而是「允許自己在這個地址上跑某段程式」。
第二,委託可以隨時解除,只要把委託指向空地址(零地址)就會恢復成一般 EOA[5]。
第三,這件事有一個容易被忽略的副作用:過去開發者有兩個很方便的假設——「有程式碼的就是合約,不是個人」,以及「一筆交易的發起者(tx.origin)一定是一般帳戶」。EIP-7702 之後,這兩個假設都不再成立,因為一個屬於個人的帳戶現在也能掛上合約程式碼。官方指引因此要求開發者改用更保守的前提:「系統中的任何參與者都可能是智慧合約」[5]。你會在 5.4 看到這個「副作用」如何立刻被攻擊者拿來利用。
五、這條路走到哪了:2026 年的實測數字
一個新標準如果只是「技術上可行」,對我們沒有意義。所以看數字,追蹤智慧帳戶生態的公開儀表板 BundleBear,我在 2026 年 10 月 13 日讀到的數據是這樣:
| 指標 | 數值 | 怎麼讀它 |
|---|---|---|
| ERC-4337 累計 UserOperation | 約 13.2 億筆 | 這條路不是實驗,是每天在跑的產線 |
| 曾發出 UserOperation 的帳戶數 | 約 6,900 萬個 | 約當台灣總人口(約 2,300 萬)的 3 倍;注意這是累計帳戶數,不是人數 |
| EIP-7702 有效委託的錢包數 | 約 6,550 萬個 | 上線約一年半,委託中的錢包數已接近 ERC-4337 累積三年半的帳戶規模 |
| EIP-7702 累計授權筆數 | 約 2.66 億筆 | 「不搬家也能升級」確實打得中真實需求 |
| Paymaster 代付的 Gas 總額 | 約 1,488 萬美元 | 企業真的願意出錢替使用者付手續費 |
(以上數字取自 BundleBear 的 ERC-4337 Overview 與 EIP-7702 Overview 兩個公開儀表板[7][8],會隨時間變動,此處標明讀取日期為 2026 年 10 月 13 日。)
帳戶抽象已經是主流基礎建設,但這不代表它沒有代價。兩個誠實的提醒留給你。第一,Bundler 有集中化風險:雖然協議上任何人都能當 Bundler,實務上絕大多數的量集中在少數幾家服務商手上;若這些服務商停擺或選擇審查,使用者的操作會被卡住[1]。第二,能力就是攻擊面:帳戶抽象讓「一筆簽名可以做很多事」,而 2025 年 8 月就出現了攻擊者利用 EIP-7702 把多個惡意動作打包成一筆簽名的案例,兩件合計造成 254 萬美元損失[9]。這正好接到下一節。
5.4 資安現場 — 三種把錢拿走的方法
這一節要教一件很具體的技能:分辨三種「把錢拿走」的路徑。它們的共同點是不需要破解密碼學;它們的差別在於「必須配合攻擊者做什麼動作」。請先把這張總表看過一遍,後面三小節逐一拆解。
先預告一個最容易被搞混的地方:A 類與 B 類在畫面上幾乎一模一樣。你看到的都是一個錢包彈窗、按鈕都寫著「簽署」,感覺都是「按下確認就送出」。但代價完全不同——A 類送出的是一筆要付 Gas 的鏈上交易,手續費由你付;B 類送出的只是一組不上鏈的結構化資料,它要等到攻擊者自己付 Gas 把它送上鏈的那一刻才會生效。差別不在你按了什麼,而在你簽下的東西是什麼。
| 路徑 | 你會做的動作 | 要不要付 Gas | 事後補救? | 代表性大額案(金額見下方) |
|---|---|---|---|---|
| A. 授權類 (簽一筆鏈上交易) |
簽 approve 把額度給出去;或被誘導簽一筆看起來像「確認」的轉帳 | 要(你付) | 授權可在被動用前撤銷;轉帳則不可能 | 5 件、共 1,049 萬美元 (approve/increaseApproval 3 件 562 萬 + transfer 2 件 487 萬) |
| B. 簽名類 (簽一組鏈下資料) |
在彈出視窗上按「簽署」——不上鏈、不付 Gas,但效力相同 | 不用(攻擊者付) | 幾乎來不及 | 6 件、共 1,249 萬美元 (Permit/Permit2 3 件 872 萬,占大額損失 38%;setApprovalForAll 1 件 123 萬;EIP-7702 批次 2 件 254 萬) |
| C. 盲簽與前端劫持 (你相信你看見的畫面) |
在硬體錢包上按下確認 | 看情境 | 不可能 | 不在同一統計類別(本表件數與金額只統計 A、B 兩類):Bybit、Radiant 等前端入侵案,手法與金額見第三小節 |
| 合計 | 以上 A、B 兩類,即 ScamSniffer 2025 年全部的大額釣魚案 | 11 件、共 2,298 萬美元 | ||
讀這張表要注意的第一件事是「資料來源」。A、B 兩類的件數與金額都取自 ScamSniffer 的 2025 年度報告,而那份報告的統計範圍只包含「透過釣魚網站」造成的損失;C 類的 Bybit 與 Radiant 是交易所與協議的前端入侵,不在同一份統計裡,把它們並列只是為了讓你比較手法。學會分辨「計算標準」,是我們在這個領域讀任何數字時的第一個動作。這裡的標準是什麼?
一、授權(approve):簽給合約的「提款額度」
第一種路徑最古老也最直觀。以太坊上的代幣(例如 USDC)本身是一份智慧合約,它的原始設計裡有一條規則:你的代幣存放在合約的帳本上,但任何人要動用你的代幣,都必須先取得你的「同意額度」(allowance)。這個「同意」的動作,就叫做 approve。
如果覺得抽象,先想一個你已經很熟的版本:你把某張信用卡的「固定扣款」授權給一個訂閱服務——服務商之後不必再問你一次,就能直接從那張卡扣款。但請注意:信用卡授權有爭議款可以申訴、可以打電話給銀行撤銷。鏈上的 approve 全都都沒有——它沒有到期日,一旦被動用也不可回復。approve 就是這個授權動作,只是它發生在鏈上,對象是一份合約,而「額度」這個參數由你自己填。為什麼要有這個設計?因為去中心化交易所必須代你操作:我們把 USDC 換成 ETH,本質上是「我們把 USDC 給交易所的合約,它把 ETH 給我們」,而合約需要被授權才能從帳戶扣款。所以 approve 不是廠商貪婪的設計,而是必要的機制——問題出在「額度」這個參數怎麼填。
理論上你可以只授權「這一次交易需要的金額」,例如 100 USDC。但每次交易都必須先簽一筆 approve、付一次手續費及等一次確認,體驗很差。於是絕大多數去中心化應用程式的介面,都直接請你授權「無限大」(unlimited,一個 2 的 256 次方減一的數字),一次授權,以後都不用再簽。省下的是手續費與時間,押上去的是我們這個代幣的全部餘額,而且是永久有效的[12]。
這裡有一個非常容易被忽略的時間差:授權當下我們沒有損失,但損失發生在「未來某一天」。合約正常運作時,那個無限額度就靜靜躺著;但合約一旦被升級成惡意版本、被發現漏洞,或那個網站從第一天就是偽造的,攻擊者就能用我們三年前簽下的那一筆授權,把現在的餘額一次搬空——而且不需要再按任何一下送出[12]。2025 年金額超過 100 萬美元的釣魚案一共有 11 件;其中 5 件屬於 A 類,approve 與 increaseApproval 類型 3 件合計 562 萬美元,另外 2 件則是被誘導直接簽下一筆轉帳(transfer),合計 487 萬美元[9]。也就是說,即使整個產業都在談新型的簽名詐騙,最古老的 approve 與轉帳依然年年佔據大額案名單。
二、簽名(Permit/Permit2/setApprovalForAll):不付手續費的同意書
第二種路徑是最危險的一種,因為它完全違反直覺。它建立在 5.2 學到的那個伏筆上:簽章可以不上鏈,不付手續費。
事情的起點是「授權要付手續費」這件事很煩。於是以太坊社群提出了 EIP-2612(permit 擴充),把授權從「鏈上交易」搬到「鏈下簽名」:我們不再需要發一筆 approve 交易,只要簽一組結構化資料,內容包含對象(spender)、金額(value)和期限(deadline),而合約看到這組簽名後會直接認帳[4]。Uniswap 進一步做了 Permit2,把這個機制一般化,讓所有代幣都能用同一套流程[3]。而錢包之所以能顯示出一張「看得懂的表格」讓你確認,靠的是另一份標準 EIP-712(結構化資料簽名),它定義了這些欄位要怎麼呈現給人類看——這份 2017 年提出的呈現標準,後來被 Permit 與 Permit2 沿用,並不是另外發明的表格[3]。總結來說,Permit 是「要求新代幣出廠時自帶簽名授權功能」的官方規格;而 Permit2 是 Uniswap 為了「讓舊代幣也能享有簽名授權體驗」,硬生生架出來的一個第三方基礎建設。
這整套設計在體驗上是巨大的進步:不用付手續費,不用等確認,交易流程從兩筆變一筆。但代價是把風險高度集中到「簽名」這個動作上——因為只要簽名了,攻擊者自己付手續費把這組簽名送上鏈,就能在一筆交易之內把你的代幣全部搬走[12]。
這裡是這一節最重要的一句話:「我只是按了個確認,又沒按送出」——因為這句話很昂貴。簽名不會跳出一筆交易,不會扣手續費,也不會感覺到「我正在付錢」;它只是請你確認一張表格。但它在鏈上的效力,和一筆轉帳完全一樣。
數字說得很清楚。2025 年金額超過 100 萬美元的案例中,Permit 與 Permit2 類型占了大額損失的 38%(3 件、872 萬美元);而全年最大的一筆單一釣魚案,就是 9 月的一筆 Permit 簽名,損失 650 萬美元[9]。另外還有一類必須認識的變形:setApprovalForAll,它不是授權某個代幣的額度,而是「把你名下整個系列的 NFT 全部授權出去」——2025 年 7 月有一件就是這樣被拿走 123 萬美元的 Uniswap V3 部位[9]。
三、盲簽與前端劫持:連專業團隊都會輸
第三種路徑最難防,因為它不需要你做錯任何事——它攻擊的是「你接收到的畫面」。這一小節的第一個案子,我在 5.2 已經提過一次,現在把它完整拆開。
Radiant Capital(2024 年 10 月,超過 5,000 萬美元)。Radiant 是一個跨鏈借貸協議,他們對資金的管理並不馬虎:採用 3-of-11 的多重簽名機制(十一把鑰匙中任意三把同意才能動用資金),而且簽名者使用的是硬體錢包。聽起來這應該是教科書等級的安全配置。但攻擊者先用惡意程式感染了簽名者的電腦,然後做了一件事:讓名為 Safe 的多簽錢包的前端顯示「正常的交易內容」,而實際送到硬體錢包裡等待簽名的,是另一筆惡意交易。團隊在事前還用模擬工具檢視過,仍然沒有發現問題——因為他們按下確認時,靠的是「盲簽」(blind signing):硬體錢包的小螢幕只顯示一團看不清的資料,使用者只能選擇相信電腦上顯示的那個畫面[11]。
事後 Radiant 自己的檢討報告寫得很直白:關鍵交易不應使用盲簽;若真的無法避免,也必須有另一層獨立於電腦之外的驗證方式[11]。這句話之所以重要,是因為它推翻了我們最常見的一種想像——「我用了冷錢包就安全了」。冷錢包保證的是「私鑰沒被偷走」;它不保證「簽下的東西是我們以為的東西」。
這個攻擊手法的極大化版本,就是本週開場的 Bybit:同樣是入侵開發環境,同樣是在前端注入惡意 JavaScript,同樣是讓簽署畫面顯示合法交易。差別在於規模——15 億美元,約當 ScamSniffer 統計的 2025 年全年簽名釣魚總損失(8,385 萬美元)的 17 倍[9][10]。
而第三種路徑最新的變形,正是 5.3 提到的副作用被拿來利用:EIP-7702 於 2025 年 5 月隨 Pectra 上線後,攻擊者很快發展出「一筆簽名打包多個惡意動作」的手法。過去一個簽名只能授權一件事,現在一個簽名可以同時完成好幾件事——包含「把你的帳戶委託給一份惡意合約」。2025 年 8 月出現的兩件案例,合計損失 254 萬美元[9]。這件事的意義是:協議的每一次升級,都會被攻擊者在幾個月內測試完畢;我們不可能靠「等技術成熟」來保護自己,只能靠理解機制。
四、2025 年的全景:數字說了什麼
上面三種路徑的整體趨勢看,會得到比單一案例更有用的判斷。以下數據都來自 ScamSniffer 的 2025 年度報告[9]:
| 指標 | 2023 年 | 2024 年 | 2025 年 |
|---|---|---|---|
| 全年損失 | 2.95 億美元 | 4.94 億美元 | 8,385 萬美元 |
| 受害人數 | 約 324,000 人 | 約 332,000 人 | 約 106,106 人 |
| 平均每人損失 | 910 美元 | 1,488 美元 | 790 美元 |
| 最大單筆 | 2,405 萬美元 | 5,548 萬美元 | 650 萬美元(Permit 簽名) |
| 超過 100 萬美元的案件數 | 13 件 | 30 件 | 11 件 |
三個判讀。第一,損失金額大幅下降,但這不代表威脅消失。報告特別指出,釣魚活動與市場活躍度同步:2025 年第三季(正好是以太幣全年最強的一波漲勢)損失高達 3,104 萬美元,是全年最高的一季;最低的 12 月只有 204 萬美元。報告的原話是——「釣魚是使用者活躍度的機率函數」[9]。意思不是「行情好就會被騙」,而是:你越活躍、越常簽名,就越該在按下確認之前停三秒。
第二,攻擊者正在從「大額單筆」轉向「低金額、高頻率」。超過 100 萬美元的案件從 2024 年的 30 件降到 2025 年的 11 件;平均每人損失降到 790 美元[9]。這代表一件事:自保不是有錢人的事,而是每一個持有錢包的人的事。你不是因為資產多才被盯上,而是因為「有在簽名」而被隨機到。
第三,報告的方法論本身也值得學:它明確標示只統計「透過釣魚網站」造成的錢包清空損失,不含交易所被駭、私鑰洩漏、合約漏洞等其他類型[9]。這是一個負責任的統計應有的樣子——以後看到任何「加密貨幣犯罪損失多少億」的新聞,都應該先問一句:這份數字包含的範圍是什麼?把不同口徑的數字相加,是這個領域最常見的錯誤引用。
那要怎麼自保?把本節學到的東西收成四條可以立刻執行的規則:① 定期做授權健檢——用 Revoke.cash 這類工具查看你的地址對哪些合約簽過授權,把不認得的、額度無限的、已經不用的撤銷掉[13]。② 簽名前看四個欄位:對象(spender / to)、金額(value / amount)、期限(deadline)、以及簽名的來源網域(domain)。③ 不要盲簽——如果硬體錢包上的內容你看不懂,就不要按確認;把它當成「這筆交易有問題」的預設值。④ 帳戶分層——把「日常互動用的零錢包」和「存放長期資產的錢包」分開,讓一次失手的最大代價被限制住。
5.5 全班分組活動 — 簽名鑑識庭
這一節沒有新理論。前四節你已經拿到了判斷的所有材料——單向推導、簽章的鏈下效力、授權的參數、盲簽的風險——現在要做的是把它變成肌肉記憶。今天我們試著分組,而且會用一個和平常不太一樣的方式分組:你們這一組,本身就是一把助記詞。
分組:掃碼領卡(約 2 分鐘)
請掃描投影片上的 QR code,在網頁上輸入學號,領取你的卡片。規則如下:
- 六個人一組,每一組對應一組真正有效的助記詞(12 個英文單字,含 BIP-39 的校驗碼)。
- 你領到的卡片上會有你的位置(例如
#11 · #12)與你的兩個詞。全組到齊,才會湊出完整且順序正確的 12 個詞。 - 卡片上有「驗證器」:把 12 個詞依序輸入,系統會告訴你們這一組是否成立。
- 請注意:這是課堂練習用的示範助記詞,不可以拿去當真實錢包使用。但請把它當成真的對待——今天所有關於「順序錯了會怎樣」的討論,都要在這裡體驗。
這裡要先解掉一個你可能已經發現的矛盾。5.2 的資安鐵則是「任何要你輸入助記詞的網頁都是詐騙」,而我們現在卻要你把 12 個詞輸進一個網頁。分辨的關鍵在三件事:① 這一組助記詞是課堂當場產生的示範字串,背後沒有任何真實資產;② 你輸入的那個網址是老師在投影片上明示的驗證器,不是任何人私訊給你的連結;③ 真實世界的原則完全不變——凡是「要你輸入會動到真資產的助記詞」的網頁、客服或表單,無論理由多合理,一概是詐騙。三個條件缺任何一個,就不要輸入。活動結束後,請把畫面收掉,不要把那一組詞留在手機截圖裡當紀念。
關卡一:「這張簽名單,你敢簽嗎?」(10 分鐘)
每一組會拿到三張簽名請求,一張是正常的交易授權,一張是惡意的無限額授權,一張是範圍更大的「整批授權」。你們的任務有三個:
- 判斷哪一張是惡意的,並說出你判斷的依據。
- 指出最致命的那一個欄位——是對象(spender)、金額(value)、期限(deadline),還是來源網域(domain)?
- 寫下一個句子:如果你當時只花三秒,你會看哪一個欄位?
這裡先給你們一個閱讀簽名請求的方法。EIP-712 的結構化資料在錢包裡會呈現成類似這樣的表格(這是一個示範,不是真實案例):
Permit2 · Token Approval
對象(spender):0x7a25...3F9c
金額(value):Unlimited | 期限(deadline):無
來源網域(domain):uni-swap-airdrop[.]xyz
錢包跳出的簽名請求(示範格式)
看出來了嗎?這張表上有三個線索:金額寫著「無限」、期限沒填、而來源網域是一個長得像 Uniswap 但不是 Uniswap 的網址。你們在關卡一要做的事,就是把這種「三秒內看得出來」的破口找出來——因為真實世界的詐騙,絕大多數不是設計得多精巧,而是設計得足夠多話術、足夠趕時間,讓你不看那三行。
公布判準(請先完成小組判斷並寫下依據,再展開)
★ 誠信規則:全組完成判斷、把依據寫在回報單上之後再展開。先展開的組,本關的判斷不予計分。
| 簽名單 | 判定 | 致命欄位與對應機制 |
|---|---|---|
| 第一張:正常的 Swap Permit | 可簽 | 對象是熟悉的交換合約、金額有限、有期限。這一張的重點不是「安全」,而是讓你看到正常的 Permit 長什麼樣——沒有 Unlimited,deadline 有填。 |
| 第二張:無限額 Permit2 | 惡意 | 金額寫著 Unlimited、期限空白,來源網域是仿冒的。對應 5.4 第二小節的簽名類路徑:你不上鏈、不付 Gas,但攻擊者會拿這組簽名自己送上鏈,在一筆交易內搬空你的代幣。 |
| 第三張:setApprovalForAll | 惡意 | 授權的是「一整個系列」而不是「一個金額」——這是最容易被忽略的一種,因為它不寫數字,往往只看到「approve」就按下去。對應 5.4 第二小節提到的整批授權變形(2025 年 7 月那筆 123 萬美元的 Uniswap V3 部位就是這樣被拿走的)。 |
最重要的一句:今天這三張是「教科書情境」——我們看得到欄位、可以慢慢比對。真實世界的原則是 5.4 的第三條:看不懂就不要按確認。能讀懂欄位是本事;願意在讀不懂的時候停手,才是保命。
關卡二:「授權健檢」(10 分鐘)
關卡二把鏡頭轉回我們自己。這一關不需要事先準備任何錢包——查授權清單是唯讀的動作,貼上地址就能看,不必連錢包,也不必簽任何東西。三條路,自己選一條:
- 有帶著錢包的同學:打開授權審查工具 Revoke.cash,貼上你自己的地址,看你自己簽過哪些授權。這是最有感的一條路。
- 沒帶錢包、或錢包裡沒有東西的同學:看老師投影的示範地址,全班一起讀同一份清單。
不論走哪一條路,要讀的東西都一樣:
- 讀清單:第一件事是先確認你看的是哪一條鏈——免費版一次只顯示一條鏈(預設是 Ethereum 主網)。如果你的授權是在 BSC、Polygon、Base 這些鏈上,要切到那條鏈才看得見。確認鏈之後再讀:這個地址對哪些合約簽過授權?金額是「無限」還是有限?授權是多久以前簽的?
- 找風險:有沒有你完全認不得的合約?有沒有早就沒在用的服務,卻還留著無限額度?
為什麼這件事要動手做?因為「授權」這個概念在腦子裡是抽象的,但在畫面上是一份清單。當我們看到一份真實的清單上面掛著十幾筆授權、其中三筆寫著無限大、日期是三年前——這個畫面的說服力,比我在 5.4 寫的十個段落加起來都強。而且這個動作可以帶回家做:你們真正的錢包同樣可以用同一個工具檢查。
回報與解讀(約 12 分鐘)
時間到之前,每一組請交回一份回報單(線上表單,每組一筆),內容包含:關卡一判斷的結果與最致命欄位、關卡二記錄到幾個無限額授權、以及一句話——今天學到最有用的一條自保守則。接著我們一起做三個層次的解讀:
- 簽名是一種同意,不是一種動能。它不需要你「送出」什麼,你只要表示同意,鏈上就會有人替你完成剩下的所有動作。這是 5.2 那句「簽章不等於交易」的實務結論。
- 授權是有參數的。對象、額度、期限——沒有參數概念的「同意」,等於一張空白支票。你們在關卡一看到的「Unlimited + 無期限」,就是把支票金額欄留空。
- 每一次簽名前的三秒,要花在固定的地方。不是花在「這個網站看起來很專業」,而是花在「金額與對象」這兩欄。這是可以練成反射動作的。
最後一個追問(口頭回答,不用寫):如果這三張簽名單不是出現在電腦螢幕上,而是出現在硬體錢包那個小小的黑白螢幕上——你還看得到「Unlimited」這四個字嗎?你只會看到一長串看不懂的十六進位數字。這就是 5.4 第三小節講的盲簽,也是為什麼「用了硬體錢包就安全了」這句話只對了一半:硬體錢包保護的是你的私鑰,不是你的判斷。
5.6 本週總結+課後任務
本週總結:從一把鑰匙到一個可編程的帳戶
| 階段 | 你學到什麼 | 最該記住的一句 |
|---|---|---|
| 鑰匙的物理學(5.2) | 私鑰、公鑰、地址的單向推導;簽章與交易的差別;助記詞與 HD 錢包;冷熱錢包光譜 | 私鑰不會被算出來,只會被拿走;而簽章不上鏈也能致命 |
| 帳戶正在被改寫(5.3) | EOA 的限制;ERC-4337 的 UserOperation/Bundler/EntryPoint;EIP-7702 的委託式升級;2026 年的實測規模 | 把「誰付費、什麼算有效簽章、一筆交易做幾件事」解耦,就是帳戶抽象 |
| 三種把錢拿走的方法(5.4) | 授權(approve)、簽名(Permit/Permit2)、盲簽與前端劫持;以及 2025 年的整體數據 | 「我只是按了個確認,又沒按送出」——這是最貴的一句話 |
| 實作(5.5) | 分組=一把助記詞;簽名鑑識;授權健檢與撤銷 | 簽名前那三秒,要花在「金額與對象」上 |
如果只能帶走一句話,是這句:在 Web3,你不是在管理密碼,而是在管理授權——每一次簽名,都是一次同意。上一週你學的是「錢怎麼流」;這一週你學的是「錢會被誰拿走」。而答案出乎意料地簡單:不是被破解,是被你自己同意的。這句話聽起來像是在責備使用者,但它的真正意義是——這也代表你握有全部的防守權。你不需要相信任何平台、不需要等監管、不需要靠誰來保護你;你只需要在每一次按下確認之前,看懂那三行字。
📅 下週預告(10/23 第 6 週)
第 6 週的主題是專案發想與智慧合約設計思維:我們要把 3.6 的五問檢核表,加上這一週的資安視角,一起用在你們自己的專案構想上——你要開始想「我的專案需要哪些簽名、需要哪些授權、哪一步最脆弱」。
請帶著兩樣東西回來:① 3.6 的五問檢核表(前一次上課已寫過一次初稿);② 這一週你對「簽名」的理解。下週之後,第 8 週就要進開發環境、真的開始寫智慧合約了。
課後任務
- 用自己的話寫出四者關係(150 字以內):私鑰、公鑰、地址、助記詞,誰推導出誰、誰可以公開、誰絕對不能外流。這一題是基本功,下週之後每一次寫合約、部署、測試都會用到。
- 盤點你手機上的授權(約 200 字):挑三個你常用的 App 或服務(例如 Google 帳號的第三方應用授權、外送平台的付款授權、社群平台的連動),列出它們各自拿到你什麼權限、你什麼時候同意的。然後寫下它和 Web3 的 approve 有什麼相同、有什麼不同——這一題沒有標準答案,但它是你未來設計任何系統時的第一課。
提交方式:以上二題請寫進本週的開發日誌,於 10/20前在 iClass 提交。開發日誌是教學計畫表明定的每週作業,也是平時評量的主要依據——請照平常的格式寫。