Function Selector

Yan Ru Su

什麼是 Function Selector?

呼叫智能合約時,告述互動的合約要調用哪個函式,長度是4個bytes(前 8 個 16 進制)。

Function Selector怎麼計算

將函數的名稱與型別做keccak256取前8位16進制

1
functionName(type1,type2,type3,...)

只取型別跟函數名稱、引數名稱、空格、return、modifier都不看

會不會有相同的function selector?

因為是Hahs Function出來的,因此有機會發生但機率極小

transfer(address,uint256) 的 selector是什麼

keccak256(”transfer(address,uint256)”)
a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b
取前8位 -> a9059cbb
截圖 2025-12-29 13.33.12.png
transfer(address,uint256)的selector :a9059cbb

什麼是 Calldata,他的結構是什麼?

Calldata來自 ETH 發送交易 Data 欄位,傳給帳戶的資料,前4 bytes是 Function Selector,後每32bytes是參數。

如果只有 Calldata 沒有合約 ABI,還能解析函數呼叫嗎

合約ABI,紀錄某個合約有哪些函數,如果沒有 ABI 的話很難解析,只能用猜的。

找出一個例子是不同的 Function,但是 Function Selector一樣

可以到以下網站看,Hahs相同的Function Selector。
Ethereum Signature Database

解析這個 CallData

1
0xa9059cbb0000000000000000000000004b3eff0aba7a17bb82ebda009a2e1bbcf4afe4920000000000000000000000000000000000000000000000002d7cfb3dca13ff08

前8位是Function Selector,後每32位是傳入資料。
0xa9059cbb (Function Selector)
0000000000000000000000004b3eff0aba7a17bb82ebda009a2e1bbcf4afe492 (arg1)
0000000000000000000000000000000000000000000000002d7cfb3dca13ff08 (arg2)
算出Function Selector後,查表a9059cbb,transfer(address,uint256)。