KeyFrame內部研究專用

Leveraging knowledge to transition between blockchain stacks | Jonatas Martines - DSS 101 2024

DeFi Security Summit - DSS·12月17日週二·55 min英文

三句話摘要

Ethereum開發者如何快速遷移至Solana生態,透過系統化開發思維與駭客思維的迭代循環學習Rust和Solana智能合約編程。 不必完全掌握即可開始,透過快速掌握架構、反覆在真實專案中邊讀邊查,即使業餘時間也能在一兩週內快速跨越技術棧遷移並積累審計能力。 架構差異決定思維轉變,不只是語法轉換:Ethereum的單一合約模式完全改為程序+帳戶分離,每筆使用者操作都需建立獨立資料帳戶(如Token Airdrop中每次claim建立claim status帳戶),這意味著初始化邏輯、帳戶所有權驗證、帳戶生命週期管理都要重新設計。

重點整理

重點
  • 1

    架構差異決定思維轉變,不只是語法轉換:Ethereum的單一合約模式完全改為程序+帳戶分離,每筆使用者操作都需建立獨立資料帳戶(如Token Airdrop中每次claim建立claim status帳戶),這意味著初始化邏輯、帳戶所有權驗證、帳戶生命週期管理都要重新設計。

  • 2

    實戰優於教學的核心原因是架構差異:講者指出花30小時看Rust教學後到實際專案時完全不同,因此策略應是快速掌握基礎概念(變數宣告、函式語法),立即進入真實專案程式碼,邊讀邊在Google查詢不懂的部分,形成「讀程式碼→查文檔→理解邏輯→繼續讀」的反饋迴圈。

  • 3

    安全審計的知識可跨棧複用但需擴展:Ethereum時代已知的漏洞(存取控制缺陷、underflow/overflow、邏輯漏洞)在Solana中仍存在且模式相同,但需額外學習Solana特有的10項常見漏洞(帳戶未正確關閉導致重開、帳戶型別驗證缺失、型別交叉污染)。

  • 4

    視覺化和模式識別加速理解的效果:透過繪製資料流圖、標記每個函式的帳戶互動、對比多個lending協議找共同模式,能快速從「完全陌生」進展到「能識別邏輯漏洞」的程度,且一週內就能在競賽中發現他人遺漏的安全問題。

實用技巧與重點

乾貨
  • Ethereum vs Solana核心差異表
  • 貨幣單位:ETH(18小數) vs SOL(9小數,稱為Lamports)
  • 程式模式:單一智能合約 vs 程序(邏輯) + 帳戶(資料)分離
  • 交易函式:單一函式調用 vs 同筆交易多函式調用+多簽署者
  • 程式庫:precompiled contracts vs Solana Program Library (SPL)
  • 帳戶清理:selfdestruct vs 正確的close account操作
  • 地址推導:create2 vs PDA (Program Derived Address)
  • Rust語言基礎清單
  • 原始型別:u8/u16/u32/u64/u128、i8到i128、bool、bytes、String
  • 變數宣告:`let mut name: type = value;`(mut表示可變)
  • 陣列:`let mut arr: [u8; 3] = [1, 2, 3];`訪問用索引
  • 結構體:`struct User { active: bool, username: String }`
  • 列舉:`enum Transaction { Deposit, Withdrawal }`
  • 函式:`pub fn add(a: u64, b: u64) -> u64 { a + b }`
  • 控制流:if/else if/else、match(如switch case)、for迴圈(`for i in 0..10`)、while迴圈
  • Anchor框架專案結構
  • ```
  • programs/program_name/
  • ├── src/lib.rs (程序宣告declare_id、巨集、入口點)
  • ├── instructions/ (各函式邏輯分離)
  • │ ├── initialize.rs
  • │ ├── claim.rs
  • │ └── lock.rs
  • ├── state/ (資料帳戶結構定義)
  • │ ├── distributor.rs
  • │ └── claim_status.rs
  • └── error.rs (自訂錯誤)
  • ```
  • Token Airdrop程式案例(真實競賽程式)
  • new_distributor:初始化Merkle樹分配器,設定版本、根雜湊、鑄幣權限、代幣程式
  • claim:使用者傳入proof和allocation數額,驗證Merkle proof、檢查claim status、轉帳代幣
  • lock_claims:管理員鎖定後續領取
  • set_admin:轉移管理員權限
  • 發現的邏輯漏洞:claim函式未檢查distributor帳戶是否已關閉,導致可重開帳戶重複領取
  • Solana常見10大漏洞清單
  • Account closure attack:未正確關閉帳戶導致重開
  • Account type mismatch:未驗證帳戶型別、讀取錯誤值
  • Type confusion/crossplay:帳戶型別交叉污染
  • Reinitialization attack:未防止帳戶重初始化
  • Underflow/overflow:數值計算溢位(需型別轉換+檢查)
  • Missing access control:缺少簽署者或所有者驗證
  • Incorrect calculations:利息、罰款等計算邏輯錯誤
  • Bad liquidation logic:清算價格設定過高或過低

結論

結論

不必完全掌握即可開始,透過快速掌握架構、反覆在真實專案中邊讀邊查,即使業餘時間也能在一兩週內快速跨越技術棧遷移並積累審計能力。

完整解析

詳細

講者Jatas擁有五年網頁和行動應用開發經驗,現職Spearb安全公司的安全研究員。他特別提及從React Native轉向Flutter的一個月轉換經驗,啟發他開發一套可用於任何技術棧遷移的學習方法。這個方法分為開發者思維和駭客思維兩個階段。

開發者思維的第一步是理解Ethereum和Solana的根本架構差異,不能只視為語言轉換。在Ethereum中,貨幣單位是ETH(最小單位wei),擁有18位小數;一筆交易只能調用單一函式;所有邏輯和資料存儲在同一智能合約。Solana則使用SOL(最小單位Lamports、9位小數),採用程序加帳戶架構——程序是無狀態的邏輯容器,資料儲存在獨立的帳戶中;一筆交易可調用多個函式,甚至多個簽署者;透過PDA(程序衍生地址)而非create2預測帳戶地址;帳戶需要正確關閉而非自毀。

第二步是掌握Rust語言基礎,但講者強調不需要精通,只需快速理解語法。Rust的原始型別包括u8到u128的無符號整數、對應的有符號整數、布林值、字節和字串。變數宣告使用let關鍵字,與Solidity不同的是型別置於變數名後,使用mut修飾符表示可變。陣列、結構體、列舉的宣告遵循相同邏輯但語法不同。函式使用fn開頭,輸入參數的型別也是後置,返回值用->標記。控制流使用if/else if/else進行條件判斷,match類似Solidity的switch但更強大,for迴圈用`for i in range`,while迴圈語法相似。

第三步是理解Anchor框架結構。與Foundry的簡潔(scripts、tests、source三個資料夾)相比,Anchor看似複雜,但核心相同:programs資料夾下的src目錄包含lib.rs(入口點)、instructions資料夾分離各函式邏輯、state資料夾定義資料帳戶結構。lib.rs包含declare_id宣告程序地址和各種巨集(如program巨集);instructions資料夾按功能分檔,如initialize.rs、claim.rs;state資料夾定義結構體,如distributor和claim_status。關鍵是巨集隱藏了許多驗證邏輯(如account巨集驗證帳戶所有者),初學者不需完全理解巨集,只需知道它們的作用。

講者展示了Token Airdrop和Staking兩個真實競賽專案的代碼分析。Token Airdrop使用Merkle樹驗證使用者合法性,流程為:(1)管理員初始化分配器,儲存Merkle根雜湊;(2)使用者調用claim,傳入Merkle proof和分配額度;(3)程式驗證proof有效性,建立獨立的claim_status帳戶記錄該使用者已領取,並轉帳代幣;(4)管理員可lock_claims防止後續領取;(5)可轉移管理員權限。每個操作涉及多個帳戶——分配器帳戶存儲全域狀態、claim_status帳戶追蹤個別使用者狀態、SPL代幣程式執行轉帳。講者在審視該程式碼時發現邏輯漏洞:claim函式未檢查distributor帳戶是否已關閉,使用者可利用Solana帳戶租賃機制重新開啟已關閉的分配器並重複領取。

Staking程式更複雜,涉及獎勵池和質押狀態。使用者存入代幣並鎖定一段時間(一天到數週不等),系統根據鎖定期限計算有效質押量和獎勵。每筆使用者存入都建立獨立帳戶記錄該存入的詳細資訊(所有者、池子、金額、鎖定時長、時間戳)。管理員可執行slash懲罰違規質押者。

講者強調實戰學習的必要性。他指出花30小時看Rust教學後,進入真實專案時架構完全不同,導致之前的學習低效。他的策略是:(1)快速學習語言基礎(一兩天);(2)找出Anchor專案的入口點(lib.rs和instructions);(3)直接閱讀真實程式碼,每行逐行理解;(4)遇到不懂的部分(如macro、CPI調用、Solana-specific函式),立即Google查詢或查閱官方文檔,然後返回程式碼繼續;(5)重複此迴圈直至全部理解。這種循環比連續學習更有效,因為實踐中的背景讓新概念更易記憶。

駭客思維階段將Ethereum的安全知識遷移到Solana。Ethereum中的已知漏洞模式(缺少存取控制、underflow/overflow、邏輯漏洞)在Solana中仍然存在。例如landing協議在Ethereum中常見的清算邏輯錯誤,Solana的staking程式中也會出現獎勵計算或slash邏輯不當。此外,Solana有特有的10大漏洞:帳戶未正確關閉導致重開、帳戶型別驗證缺失、型別交叉污染、重初始化攻擊等。講者建議透過繪製資料流圖、對比多個landing或staking協議實現找出共同模式、查閱以往審計報告尋找已知漏洞模式,來加速漏洞尋找。

講者坦言PoC(概念驗證程式碼)在Solana比Ethereum困難。Ethereum可用Foundry fork主網狀態並在特定區塊重現漏洞;Solana無此功能,必須從零建構整個狀態測試。儘管困難,透過手工編寫測試狀態仍可驗證邏輯漏洞。最重要的建議是持續實踐。講者在競賽中提交一個漏洞獲得15個反饋漏洞,這反應式學習使他快速認識自己的知識盲點,進而改進審計方法。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「Web3 安全」的內容

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️
8 min
Web3 安全英文8月14日

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️

Zach Humphries

  • 機構支撐的積極意義:價格操縱常被視為負面,但Ripple掌握大量XRP供應與escrow,在熊市期間提高價格下限,實際上替零售投資者鎖定了低風險的積累區間,這不是剝削而是市場穩定機制。
  • 歷史模式驗證:2024年7月至11月XRP在50美分附近橫盤整理,低點觸及42美分(wick),高點65美分;隨後11月5日至12月5日單月上漲456%,年底到2025年初累計漲幅534%,這個歷史周期正在1美元價位重演。
  • 比特幣聯動邏輯:講者在4-5月就預測「如果比特幣跌至60k以下,XRP會跌至1美元或更低」,此預測精準應驗,反映出熊市中兩者的明確連動關係。
Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady
72 min
Web3 安全英文PODCAST8月5日

Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady

Zero Knowledge

  • 反向 Linux 架構:Commonware 刻意暴露棧各層級控制,讓開發者自訂執行環境、共識機制、密碼學實現,而非像 Cosmos SDK 只允許應用層以上定制。2-3 個月能組裝一條定製鏈,代價是額外深度但回報是長期維護成本降低及效能優化彈性。
  • 容錯假設的典範轉移:Alpine Glow(Solana 2025)實現單輪投票定終的關鍵是將容錯預算分離為獨立的 Byzantine 和 Crash 容限。傳統系統把 33% 當一個整體預算;新模型允許 20% 惡意加 20% 崩潰,打破了 PBFT 理論界線,釋放單輪設計空間。
  • Minimet 與 Multimet 的遞進:Minimet 是 5F+1 設定下的乾淨構造,實現更短視圖延遲;Multimet(剛發布)進一步允許並行 mini-commits 且驗證者可推翻領導者審查,使用者交易在全球分布式網路達到 200-300 毫秒端到端定終。
Private Information Retrieval (PIR) with Alex Hoover
64 min
Web3 安全英文PODCAST7月29日

Private Information Retrieval (PIR) with Alex Hoover

Zero Knowledge

  • PIR 保護的是訪問模式,不是資料本身
  • PIR 與加密不同,它關注的是隱藏「客戶端查詢了什麼」,而非「資料是否加密」。在公開資料庫(如區塊鏈)上,客戶端可以在不洩露查詢對象給伺服器的情況下檢索特定條目,解決了輕量級客戶端的隱私和防審查問題。
  • 客戶端預處理方案是突破瓶頸的關鍵