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;
}