(日:オペコード)
イーサリアムのOPCODEとは、Operation Codeの略でEVMの動作を実行する演算コードです。EVMでのOPCODEは演算ビットコインスクリプト、伝統的なアッセンブリーとLispを足して割った様なバイトコード言語となっています。
PUSH1 0 CALLDATALOAD SLOAD NOT PUSH1 9 JUMPI STOP JUMPDEST PUSH1 32 CALLDATALOAD PUSH1 0 CALLDATALOAD SSTORE
目次
1.OPCODEを変更するハードフォーク
OPCODEのガスコストを変更、新たに追加するにはハードフォークが必要となり、ネットワーク攻撃への対策やネットワークバージョンのアップデート時に通常は変更または追加を行います。
2016年10月14日、2,457,000ブロックにてトランザクションスパムアタック対策のためEVMのOPCODEのガスプライスを変更するハードフォークを行いました。
詳細は下記を参照してください。
2.EVMのOPCODE一覧
EVMのOPCODEはイーサリアムのイエローペーパーによると73個あり、メトロポリス Pt.1ビザンチウムではEIP-140の「割り振ったガスを全てドレインすることなく例外処理を実行する」”REVERT”、EIP-214の「コントラクトを呼び出し中にステート変更を許可しない変わりに別のコントラクトを呼び出す」”STATICCALL”が追加されました。
2-1.実行停止と基礎的演算
| 値 | ニーモニック | 詳細 |
|---|---|---|
| 0x00 | STOP | 実行停止 |
| 0x01 | ADD | 加算演算 |
| 0x02 | MUL | 乗算演算 |
| 0x03 | SUB | 減算演算 |
| 0x04 | DIV | 整数除算演算 |
| 0x05 | SDIV | 符号付き整数除算演算 |
| 0x06 | MOD | モジュロ演算 |
| 0x07 | SMOD | 符号付きモジュロ演算 |
| 0x08 | ADDMOD | モジュロ加算演算 |
| 0x09 | MULMOD | モジュロ乗算演算 |
| 0x0a | EXP | 指数演算 |
| 0X0B | SUGBEXTEBD | 2の補数の符号付き整数を拡張する |
2-2.比較とビット論理演算とsha3の演算
| 値 | ニーモニック | 詳細 |
|---|---|---|
| 0x10 | LT | 小なり比較 |
| 0x11 | GT | 大なり比較 |
| 0x12 | SLT | 符号付き小なり比較 |
| 0x13 | SGT | 符号付き大なり比較 |
| 0x14 | EQ | 等価性比較 |
| 0x15 | ISZERO | シンプルなNOT演算子 |
| 0x16 | AND | ビットAND演算 |
| 0x17 | OR | ビットOR演算 |
| 0x18 | XOR | ビットXOR演算 |
| 0x19 | NOT | ビットNOT演算 |
| 0x1a | BYTE | 文字列から1バイトの検索 |
| 0x20 | SHA2 | Keccak-256ハッシュの演算 |
2-3.環境情報を取得する
| 値 | ニーモニック | 詳細 |
|---|---|---|
| 0x30 | ADDRESS | 現在実行しているアカウントのバランス取得 |
| 0x31 | BALANCE | 特定のアカウントのバランスを取得 |
| 0x32 | ORIGIN | 実行した元のアドレスを取得 |
| 0x33 | CALLER | Callerのアドレスを取得 |
| 0x34 | CALLVALUE | 実行の命令とトランザクションを担当するデポジットされた値を取得 |
| 0x35 | CALLDATALOAD | 現在の環境のインプットデータを取得 |
| 0x36 | CALLDATASIZE | 現在の環境のインプットデータのサイズを取得 |
| 0x37 | CALLDATACOPY | メモリーへ現在の環境にあるインプットデータをコピー |
| 0x38 | CODESIZE | 現在の環境で実行されているコードのサイズを取得 |
| 0x39 | CODECOPY | 現在の環境で実行されているコードをメモリーへコピー |
| 0x3a | GASPRICE | 原罪の環境のガス価格を取得 |
| 0x3b | EXTCODESIZE | アカウントのコードサイズを取得 |
| 0x3c | EXTCODECOPY | メモリーへアカウントのコードをコピー |
2-4.システムオペレーション
| 値 | ニーモニック | 詳細 |
|---|---|---|
| 0xf0 | CREATE | 新しいアカウントを関連したコードと生成 |
| 0xf1 | CALL | アカウントへMessage-call |
| 0xf2 | CALLCODE | 代替えアカウントコードとアカウントへMessage-call |
| 0xf3 | RETURN | 実行を停止しアウトプットデータへ返す |
| 0xf4 | DELEGATECALL | 代替えアカウントコードとアカウントへMessage-call ただし送金者と値へ現在の値が持続する |
| 0xfe | INVALID | 指定された無効な命令 |
| 0xff | SELFDESTRUCT | 実行を停止し後で消去するためアカウントを登録 |
スポンサーリンク


