Delegatecall 是 Solidity 中的一種低階函數,用於在智能合約之間進行交互。「delegate」意味著它的執行代表了另一個合約。
當一個用戶 A 通過合約 B 來調用合約 C 時,使用 delegatecall 合約 C 的函數將在合約 B 的上下文中執行,而不是在合約 C 的上下文中執行。這意味著 msg.sender 是 A 的地址,任何狀態變量的更改都會影響合約 B 的狀態。
以下是有關 delegatecall 的使用規則。
Delegatecall 目前主要用於兩個應用場景。
將存儲合約和邏輯合約分開,代理合約存儲相關變數並保存邏輯合約的地址,所有函數存在邏輯合約中,通過 delegatecall 執行。當需要升級時,只需將代理合約指向新的邏輯合約。
鑽石是一種支持構建可在生產中擴展的模塊化智能合約系統的標準。鑽石是一個代理合約,具有多個實現合約。