iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
影片教學

30天讓你從【零基礎】掌握智能合約 Solidity 入門走到飛系列 第 23

Solidity 入門走到飛🚀-【Day23】Delegatecall - 委託低級調用

  • 分享至 

  • xImage
  •  

影片教學

Yes

主要內容

Delegatecall 是 Solidity 中的一種低階函數,用於在智能合約之間進行交互。「delegate」意味著它的執行代表了另一個合約。

當一個用戶 A 通過合約 B 來調用合約 C 時,使用 delegatecall 合約 C 的函數將在合約 B 的上下文中執行,而不是在合約 C 的上下文中執行。這意味著 msg.sender 是 A 的地址,任何狀態變量的更改都會影響合約 B 的狀態。

以下是有關 delegatecall 的使用規則。

1.使用 abi.encodeWithSignature 函數來生成目標函數的簽名和參數的編碼。

2.delegatecall 可以指定執行過程中的 gas 限額,但不能指定發送的 ETH 金額。

3.delegatecall 存在一些安全風險,必須確保當前合約和目標合約的狀態變量布局相同,以及目標合約是安全的,否則可能會導致資產損失。

Delegatecall 目前主要用於兩個應用場景。

1.代理合約(Proxy Contract)

將存儲合約和邏輯合約分開,代理合約存儲相關變數並保存邏輯合約的地址,所有函數存在邏輯合約中,通過 delegatecall 執行。當需要升級時,只需將代理合約指向新的邏輯合約。

2.EIP-2535 鑽石(Diamonds)

鑽石是一種支持構建可在生產中擴展的模塊化智能合約系統的標準。鑽石是一個代理合約,具有多個實現合約。

相關連結

WTF Solidity Delegatecall


上一篇
Solidity 入門走到飛🚀-【Day22】Call - 低級調用
下一篇
Solidity 入門走到飛🚀-【Day24】在合約中創建新合約 - new
系列文
30天讓你從【零基礎】掌握智能合約 Solidity 入門走到飛30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言