﻿---
title: "未初始化的可升級代理：initializer 接管風險"
description: "可升級代理透過初始化呼叫設定自身儲存，而不是依賴實作合約建構函式。本文說明搶跑、實作鎖定和部署檢查。"
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 未初始化的可升級代理：initializer 接管風險

> 僅供教育參考，不構成投資建議；投資可能產生損失。

<a id="answer"></a>

## 直接答案

可升級代理透過初始化呼叫設定自身儲存，而不是依賴實作合約建構函式。本文說明搶跑、實作鎖定和部署檢查。

新代理地址部署完成但初始化交易尚未確認時，任何人都可能嘗試搶先調用公開initializer並成為Owner。

代理部署時建構函式不會在代理儲存中執行實作合約的初始化邏輯，因此可升級系統常使用只能呼叫一次的initializer設定Owner、代幣參數和模組。若函數沒有正確保護，或部署與初始化分成兩筆交易，攻擊者可能先呼叫。

<a id="mechanism"></a>

## 機制

安全流程將部署和初始化calldata放在同一原子交易中，並在實現合約構造時停用初始化，防止實作本身被接管。 reinitializer用於新版本新增狀態，也必須限製版本和呼叫權限。只檢查代理Owner而不檢查實現初始化狀態仍可能漏風險。

鏈上操作要分成四層：錢包負責展示和簽名，RPC負責讀取與廣播，合約代碼決定狀態變化，區塊共識決定交易是否最終確認。任一層顯示「成功」都不能取代其他層核驗。

<a id="example"></a>

## 例子

專案先部署代理，規劃下一筆呼叫initialize(team)。攻擊者監控記憶體池並以更高費用先呼叫initialize(attacker)，成為管理員，隨後升級到惡意實作並轉走資金。團隊自己的初始化交易回滾，但此時控制權已失去。

案例中的Gas、滑點和區塊時間用於展示計算方法。真實操作前應讀取目前鏈、目前區塊的價格、流動性、權限和合約狀態。金額同時記錄代幣數量、美元價值和鏈上原始整數。

<a id="risks"></a>

## 風險

收益必須以真實可退出價值計算：

淨退出價值 = 資產市值 - 價格衝擊 - 協議費用 - 轉帳稅 - Gas - 等待風險折價

建立網絡擁塞、預言機異常和管理員升級三種壓力情境。假設Gas擴大五倍、池深下降50%、穩定幣折價5%，加入一天無法退出。若一個月收益無法覆蓋壓力摩擦，高收益沒有提供足夠補償。

單一協議、單鏈、單橋和單一穩定幣分別設定上限。任何需要管理員、預言機、橋、前端與單一RPC同時正常才能退出的部位應進一步縮小，不能把多個相關依賴誤認為分散。

<a id="misconceptions"></a>

## 常見誤區

- 迷思1：前端餘額就是鏈上事實。 前端可能快取、索引延遲或連接錯誤網絡，必須用合約讀取交叉驗證。

- 迷思2：提高Gas或滑點能解決任何失敗。 Gas只影響排序，滑點只放寬價格；權限、Nonce和合約條件錯誤不會自動修復。

- 迷思3：小額測試成功代表永久安全。 管理者升級、動態參數和流動性變化會改變結果，每次擴大部位前都要重複檢查。

<a id="related"></a>

## 相關主題

- [ERC-4626首存膨脹攻擊：Vault份額為何可能被四捨五入](/zh-tw/crypto/erc4626-inflation-attack/)
- [代理合約](/zh-tw/crypto/proxy-contract/)
- [智慧合約](/zh-tw/crypto/smart-contract/)
- [可升級合約](/zh-tw/crypto/upgradeable-contract/)
- [有效性證明Validity Proof](/zh-tw/crypto/validity-proof/)

<a id="sources"></a>

## 來源

- [Proxy 與 Initializable API](https://docs.openzeppelin.com/contracts/5.x/api/proxy) - OpenZeppelin（查閱日期：2026-08-20）
- [撰寫可升級合約](https://docs.openzeppelin.com/upgrades-plugins/writing-upgradeable) - OpenZeppelin（查閱日期：2026-08-20）
- [升級智慧合約](https://ethereum.org/developers/docs/smart-contracts/upgrading/) - Ethereum.org（查閱日期：2026-08-20）

Source: https://wiki.fcontext.com/zh-tw/crypto/initializer-takeover/index.mdx
