メインコンテンツまでスキップ

Selector

Selectorについて学習します

selectorとは関数の識別子となる4バイト文字列のことです

主にCall,Delegatecallに利用されます

生成

selectorは関数名と引数をハッシュ化して生成する

myFunction(uint256 param1, address param2)という関数があるとき、selectorは

bytes4 selector = bytes4(keccak256("myFunction(uint256,address)"));

という形で生成される

ここで引数は型を見るが変数名を見ていないことに注意

同じ関数名・引数で異なるvisibilityをもつ関数が作成できないのは、関数の識別子がVisibilityを考慮しないからである

取得

インターフェースまたはコントラクトからselectorを取得することができる

contract Sample {
function a() {

}
}

interface ISample {
function b();
}

contract GetSample {
function getSelectors;
bytes4 sampleSelector = Sample.a.selector;
bytes4 sampleInterfaceSelector = I.b.selector;
}

Reference