iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
影片教學

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

Solidity 入門走到飛🚀-【Day29】函數選擇器 - Selector

  • 分享至 

  • xImage
  •  

影片教學

Yes

主要內容

當我們呼叫一個函數時,實際上是向目標合約發送了一段 "calldata",而這段 "calldata" 會包含很多資訊,其中的前 4 個位元組被稱為 "selector"(函數選擇器)

"msg.data" 是一個全域變數,它包含了完整的 "calldata",也就是呼叫函數時傳入的資料

0x6a6278420000000000000000000000002c44b726adf1963ca47af88b284c06f30380fc78
這段雜亂的位元組碼可以分成兩部分

1.前 4 個位元組是函數選擇器 selector

"0x6a627842"

2.32 個位元組是輸入的參數 "0x0000000000000000000000002c44b726adf1963ca47af88b284c06f30380fc78"

函數選擇器的類型也被稱為方法 ID(method id)。方法 ID 定義為函數簽名的 Keccak 哈希後的前 4 個位元組,當 selector 與方法 ID 相匹配時,表示呼叫該函數。方法簽名的格式是 "函數名(逗號分隔的參數類型)"。

你可以使用 "abi.encodeWithSelector" 將方法 ID 作為 selector 和參數打包編碼,然後傳遞給 "call" 函數以呼叫目標函數。這樣,你可以透過函數選擇器來確定要呼叫哪個函數。

相關連結

WTF Solidity Selector
4byte Directory
Sig Samczsun


上一篇
Solidity 入門走到飛🚀-【Day28】Hash - 哈希
下一篇
Solidity 入門走到飛🚀-【Day30】Try Catch - 處理異常
系列文
30天讓你從【零基礎】掌握智能合約 Solidity 入門走到飛30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言