- Ethereum スマートコントラクトのエンコードされた関数シグネチャを得る方法のメモです。
エンコードされた関数シグネチャとは
- スマートコントラクトの関数を call するコードをローレベルで書いたり、マルチシグウォレットからスマートコントラクトの関数を call する際に必要となります。
functionName(type1,type2,...)
という関数のプロトタイプ文字列を、Keccak256 でハッシュ化したあとの最初の4バイトがエンコードされた関数シグネチャになります。- たとえば、
sendMessage(string message, address to)
という関数の場合、エンコードされた関数シグネチャはsendMessage(string,address)
を Keccak256 でハッシュ化した最初の4バイト0xc48d6d5e
です。
Web3 を使用して関数シグネチャを得る
- Web3 1.0.0 では、エンコードされた関数シグネチャを簡単に得ることのできる関数が用意されています。
let encodedFunctionSignature = web3.eth.abi.encodeFunctionSignature('sendMessage(string,address)'); console.log(encodedFunctionSignature); // => 0xc48d6d5e