Ethereum の function call データフォーマット
- マルチシグウォレットを使用して他のスマートコントラクトのメソッドを実行したりするのに必要なので調べたよ
- Solidity で書かれたスマートコントラクトに次のようなメソッドがある場合で説明します
- 以下の countUp() とか countDown() を実行するためにはどういったトランザクションを作って送ればいいか、という話
pragma solidity ^0.4.19;
contract Count {
uint256 public count;
function countUp() public {
count = count + 1;
}
function countDown() public {
count = count - 1;
}
}
- function call のデータについて、最初の4バイトはシグネチャと呼ばれる次のフォーマットにした関数のプロトタイプのようなものを Keccak256 でハッシュ化したものを使うとのこと。
- 引数は型のみを使用します。
- 引数の型はカンマで区切ります。
funtionName(type1,type2,...)
上記の countUp() の場合、Node.js で書くとつぎのような感じで、Keccak256 のハッシュが得られるので、最初の 4bytes 0x0bd8599e がトランザクションに含むべきデータになります。
const Web3 = require('web3');
console.log(Web3.version);
// => 1.0.0-beta.34
const signature = 'countUp()';
const hash = Web3.utils.keccak256(signature);
console.log(hash);
// => 0x0bd8599e08d359240ca8194d54975e0eda037fe2109af0514fc9505f2cfc9407
-
例えば、上記のコントラクトのアドレスが、
0xe126016d061369cd23de92475d04fb762b663a97
だとしたら、countUp() を実行したい場合、つぎのようなトランザクションを送る- to:
0xe126016d061369cd23de92475d04fb762b663a97
- value: 0
- data: 0x0bd8599e
- to:
実際にためしてみたtx: https://ropsten.etherscan.io/tx/0x32b415366043be03300d2fcd1acb8f3dce1f8234fa86b204f6d68e9b7c20b642
引数をとる場合については時間がなくなってしまったのでまた今度書きます。
今回はいつにもまして乱文になってしまった..
Note
- Ethereum 関連の情報は https://scrapbox.io/sushiether/ に集約することにしました。
- この記事の内容に変更・更新がある場合は、以下の URL を更新します。
- https://scrapbox.io/sushiether/Ethereum_の_function_call_データフォーマット
Author And Source
この問題について(Ethereum の function call データフォーマット), 我々は、より多くの情報をここで見つけました https://qiita.com/hm0429/items/f05a6c498e76665cb59d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .