EVM کے لیے آپ کوڈز
یہ wolflo/evm-opcodes (نئے ٹیب میں کھلتا ہے) پر موجود EVM حوالہ جاتی صفحہ کا اپ ڈیٹ شدہ ورژن ہے۔ اسے یلو پیپر (نئے ٹیب میں کھلتا ہے)، Jello Paper (نئے ٹیب میں کھلتا ہے)، اور geth (نئے ٹیب میں کھلتا ہے) کے نفاذ سے بھی اخذ کیا گیا ہے۔ اس کا مقصد ایک قابل رسائی حوالہ فراہم کرنا ہے، لیکن یہ خاص طور پر سخت نہیں ہے۔ اگر آپ درستگی کا یقین کرنا چاہتے ہیں اور ہر غیر معمولی صورتحال (edge case) سے آگاہ رہنا چاہتے ہیں، تو Jello Paper یا کلائنٹ کے نفاذ کا استعمال کرنا مناسب ہے۔
کیا آپ ایک انٹرایکٹو حوالہ تلاش کر رہے ہیں؟ evm.codes (نئے ٹیب میں کھلتا ہے) دیکھیں۔
متحرک گیس کی لاگت والے آپریشنز کے لیے، gas.md (نئے ٹیب میں کھلتا ہے) دیکھیں۔
💡 فوری ٹپ: پوری لائنیں دیکھنے کے لیے، ڈیسک ٹاپ پر افقی طور پر اسکرول کرنے کے لیے [shift] + scroll کا استعمال کریں۔
| اسٹیک | نام | گیس | ابتدائی اسٹیک | نتیجہ خیز اسٹیک | میموری / اسٹوریج | نوٹس |
|---|---|---|---|---|---|---|
| 00 | STOP | 0 | عمل درآمد روکیں | |||
| 01 | ADD | 3 | a, b | a + b | (u)int256 جمع موڈولو 2**256 | |
| 02 | MUL | 5 | a, b | a * b | (u)int256 ضرب موڈولو 2**256 | |
| 03 | SUB | 3 | a, b | a - b | (u)int256 تفریق موڈولو 2**256 | |
| 04 | DIV | 5 | a, b | a // b | uint256 تقسیم | |
| 05 | SDIV | 5 | a, b | a // b | int256 تقسیم | |
| 06 | MOD | 5 | a, b | a % b | uint256 موڈولس | |
| 07 | SMOD | 5 | a, b | a % b | int256 موڈولس | |
| 08 | ADDMOD | 8 | a, b, N | (a + b) % N | (u)int256 جمع موڈولو N | |
| 09 | MULMOD | 8 | a, b, N | (a * b) % N | (u)int256 ضرب موڈولو N | |
| 0A | EXP | A1 (نئے ٹیب میں کھلتا ہے) | a, b | a ** b | uint256 قوت نما موڈولو 2**256 | |
| 0B | SIGNEXTEND | 5 | b, x | SIGNEXTEND(x, b) | x کو (b+1) بائٹس سے 32 بائٹس تک سائن ایکسٹینڈ (نئے ٹیب میں کھلتا ہے) کریں | |
| 0C-0F | غیر معتبر | |||||
| 10 | LT | 3 | a, b | a < b | uint256 اس سے کم (less-than) | |
| 11 | GT | 3 | a, b | a > b | uint256 اس سے زیادہ (greater-than) | |
| 12 | SLT | 3 | a, b | a < b | int256 اس سے کم | |
| 13 | SGT | 3 | a, b | a > b | int256 اس سے زیادہ | |
| 14 | EQ | 3 | a, b | a == b | (u)int256 برابری | |
| 15 | ISZERO | 3 | a | a == 0 | (u)int256 iszero | |
| 16 | AND | 3 | a, b | a && b | بٹ وائز AND | |
| 17 | OR | 3 | a, b | a || b | بٹ وائز OR | |
| 18 | XOR | 3 | a, b | a ^ b | بٹ وائز XOR | |
| 19 | NOT | 3 | a | ~a | بٹ وائز NOT | |
| 1A | BYTE | 3 | i, x | (x >> (248 - i * 8)) && 0xFF | بائیں طرف سے، (u)int256 x کا iواں بائٹ | |
| 1B | SHL | 3 | shift, val | val << shift | بائیں شفٹ کریں | |
| 1C | SHR | 3 | shift, val | val >> shift | منطقی دائیں شفٹ | |
| 1D | SAR | 3 | shift, val | val >> shift | ریاضیاتی دائیں شفٹ | |
| 1E-1F | غیر معتبر | |||||
| 20 | KECCAK256 | A2 (نئے ٹیب میں کھلتا ہے) | ost, len | keccak256(mem[ost:ost+len-1]) | keccak256 | |
| 21-2F | غیر معتبر | |||||
| 30 | ADDRESS | 2 | . | address(this) | عمل درآمد کرنے والے کنٹریکٹ کا پتہ | |
| 31 | BALANCE | A5 (نئے ٹیب میں کھلتا ہے) | addr | addr.balance | بیلنس، Wei میں | |
| 32 | ORIGIN | 2 | . | tx.origin | وہ پتہ جہاں سے ٹرانزیکشن شروع ہوئی | |
| 33 | CALLER | 2 | . | msg.sender | msg بھیجنے والے کا پتہ | |
| 34 | CALLVALUE | 2 | . | msg.value | msg کی ویلیو، Wei میں | |
| 35 | CALLDATALOAD | 3 | idx | msg.data[idx:idx+32] | اشاریہ idx پر msg ڈیٹا سے لفظ پڑھیں | |
| 36 | CALLDATASIZE | 2 | . | len(msg.data) | msg ڈیٹا کی لمبائی، بائٹس میں | |
| 37 | CALLDATACOPY | A3 (نئے ٹیب میں کھلتا ہے) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | msg ڈیٹا کاپی کریں |
| 38 | CODESIZE | 2 | . | len(this.code) | عمل درآمد کرنے والے کنٹریکٹ کے کوڈ کی لمبائی، بائٹس میں | |
| 39 | CODECOPY | A3 (نئے ٹیب میں کھلتا ہے) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1] | |
| 3A | GASPRICE | 2 | . | tx.gasprice | ٹرانزیکشن کی گیس کی قیمت، Wei فی یونٹ گیس میں ** (نئے ٹیب میں کھلتا ہے) | |
| 3B | EXTCODESIZE | A5 (نئے ٹیب میں کھلتا ہے) | addr | len(addr.code) | addr پر کوڈ کا سائز، بائٹس میں | |
| 3C | EXTCODECOPY | A4 (نئے ٹیب میں کھلتا ہے) | addr, dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1] | addr سے کوڈ کاپی کریں |
| 3D | RETURNDATASIZE | 2 | . | size | آخری بیرونی کال سے واپس کیے گئے ڈیٹا کا سائز، بائٹس میں | |
| 3E | RETURNDATACOPY | A3 (نئے ٹیب میں کھلتا ہے) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | آخری بیرونی کال سے واپس کیا گیا ڈیٹا کاپی کریں |
| 3F | EXTCODEHASH | A5 (نئے ٹیب میں کھلتا ہے) | addr | hash | hash = addr.exists ? keccak256(addr.code) : 0 | |
| 40 | BLOCKHASH | 20 | blockNum | blockHash(blockNum) | ||
| 41 | COINBASE | 2 | . | block.coinbase | موجودہ بلاک کے تجویز کنندہ کا پتہ | |
| 42 | TIMESTAMP | 2 | . | block.timestamp | موجودہ بلاک کا ٹائم اسٹیمپ | |
| 43 | NUMBER | 2 | . | block.number | موجودہ بلاک کا نمبر | |
| 44 | PREVRANDAO | 2 | . | بے ترتیبی کا بیکن | بے ترتیبی کا بیکن | |
| 45 | GASLIMIT | 2 | . | block.gaslimit | موجودہ بلاک کی گیس کی حد | |
| 46 | CHAINID | 2 | . | chain_id | موجودہ چین کی شناخت (chain id) (نئے ٹیب میں کھلتا ہے) کو اسٹیک پر پش کریں | |
| 47 | SELFBALANCE | 5 | . | address(this).balance | عمل درآمد کرنے والے کنٹریکٹ کا بیلنس، Wei میں | |
| 48 | BASEFEE | 2 | . | block.basefee | موجودہ بلاک کی بنیادی فیس | |
| 49 | BLOBHASH | 3 | idx | tx.blob_versioned_hashes[idx] | EIP-4844 (نئے ٹیب میں کھلتا ہے) | |
| 4A | BLOBBASEFEE | 2 | . | block.blobbasefee | موجودہ بلاک کی بلاب بنیادی فیس (EIP-7516 (نئے ٹیب میں کھلتا ہے)) | |
| 4B-4F | غیر معتبر | |||||
| 50 | POP | 2 | _anon | . | اسٹیک کے اوپری حصے سے آئٹم کو ہٹائیں اور اسے ضائع کریں | |
| 51 | MLOAD | 3* (نئے ٹیب میں کھلتا ہے) | ost | mem[ost:ost+32] | آفسیٹ ost پر میموری سے لفظ پڑھیں | |
| 52 | MSTORE | 3* (نئے ٹیب میں کھلتا ہے) | ost, val | . | mem[ost:ost+32] := val | میموری میں ایک لفظ لکھیں |
| 53 | MSTORE8 | 3* (نئے ٹیب میں کھلتا ہے) | ost, val | . | mem[ost] := val && 0xFF | میموری میں ایک بائٹ لکھیں |
| 54 | SLOAD | A6 (نئے ٹیب میں کھلتا ہے) | key | storage[key] | اسٹوریج سے لفظ پڑھیں | |
| 55 | SSTORE | A7 (نئے ٹیب میں کھلتا ہے) | key, val | . | storage[key] := val | اسٹوریج میں لفظ لکھیں |
| 56 | JUMP | 8 | dst | . | $pc := dst نشان زد کریں کہ pc صرف اسی صورت میں تفویض کیا جاتا ہے جب dst ایک درست jumpdest ہو | |
| 57 | JUMPI | 10 | dst, condition | . | $pc := condition ? dst : $pc + 1 | |
| 58 | PC | 2 | . | $pc | پروگرام کاؤنٹر | |
| 59 | MSIZE | 2 | . | len(mem) | موجودہ عمل درآمد کے سیاق و سباق میں میموری کا سائز، بائٹس میں | |
| 5A | GAS | 2 | . | gasRemaining | ||
| 5B | JUMPDEST | 1 | درست جمپ کی منزل کو نشان زد کریں | ایک درست جمپ کی منزل، مثال کے طور پر ایک جمپ کی منزل جو پش ڈیٹا کے اندر نہ ہو | ||
| 5C | TLOAD | 100 | key | tstorage[key] | عارضی اسٹوریج سے لفظ پڑھیں (EIP-1153 (نئے ٹیب میں کھلتا ہے)) | |
| 5D | TSTORE | 100 | key, val | . | tstorage[key] := val | عارضی اسٹوریج میں لفظ لکھیں (EIP-1153 (نئے ٹیب میں کھلتا ہے)) |
| 5E | MCOPY | 3+3*words+A0 (نئے ٹیب میں کھلتا ہے) | dstOst, ost, len | . | mem[dstOst] := mem[ost:ost+len] | میموری کو ایک جگہ سے دوسری جگہ کاپی کریں (EIP-5656 (نئے ٹیب میں کھلتا ہے)) |
| 5F | PUSH0 | 2 | . | uint8 | مستقل ویلیو 0 کو اسٹیک پر پش کریں | |
| 60 | PUSH1 | 3 | . | uint8 | 1-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 61 | PUSH2 | 3 | . | uint16 | 2-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 62 | PUSH3 | 3 | . | uint24 | 3-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 63 | PUSH4 | 3 | . | uint32 | 4-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 64 | PUSH5 | 3 | . | uint40 | 5-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 65 | PUSH6 | 3 | . | uint48 | 6-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 66 | PUSH7 | 3 | . | uint56 | 7-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 67 | PUSH8 | 3 | . | uint64 | 8-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 68 | PUSH9 | 3 | . | uint72 | 9-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 69 | PUSH10 | 3 | . | uint80 | 10-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 6A | PUSH11 | 3 | . | uint88 | 11-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 6B | PUSH12 | 3 | . | uint96 | 12-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 6C | PUSH13 | 3 | . | uint104 | 13-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 6D | PUSH14 | 3 | . | uint112 | 14-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 6E | PUSH15 | 3 | . | uint120 | 15-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 6F | PUSH16 | 3 | . | uint128 | 16-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 70 | PUSH17 | 3 | . | uint136 | 17-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 71 | PUSH18 | 3 | . | uint144 | 18-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 72 | PUSH19 | 3 | . | uint152 | 19-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 73 | PUSH20 | 3 | . | uint160 | 20-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 74 | PUSH21 | 3 | . | uint168 | 21-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 75 | PUSH22 | 3 | . | uint176 | 22-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 76 | PUSH23 | 3 | . | uint184 | 23-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 77 | PUSH24 | 3 | . | uint192 | 24-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 78 | PUSH25 | 3 | . | uint200 | 25-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 79 | PUSH26 | 3 | . | uint208 | 26-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 7A | PUSH27 | 3 | . | uint216 | 27-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 7B | PUSH28 | 3 | . | uint224 | 28-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 7C | PUSH29 | 3 | . | uint232 | 29-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 7D | PUSH30 | 3 | . | uint240 | 30-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 7E | PUSH31 | 3 | . | uint248 | 31-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 7F | PUSH32 | 3 | . | uint256 | 32-بائٹ ویلیو کو اسٹیک پر پش کریں | |
| 80 | DUP1 | 3 | a | a, a | اسٹیک پر پہلی ویلیو کا کلون بنائیں | |
| 81 | DUP2 | 3 | _, a | a, _, a | اسٹیک پر دوسری ویلیو کا کلون بنائیں | |
| 82 | DUP3 | 3 | _, _, a | a, _, _, a | اسٹیک پر تیسری ویلیو کا کلون بنائیں | |
| 83 | DUP4 | 3 | _, _, _, a | a, _, _, _, a | اسٹیک پر چوتھی ویلیو کا کلون بنائیں | |
| 84 | DUP5 | 3 | ..., a | a, ..., a | اسٹیک پر پانچویں ویلیو کا کلون بنائیں | |
| 85 | DUP6 | 3 | ..., a | a, ..., a | اسٹیک پر چھٹی ویلیو کا کلون بنائیں | |
| 86 | DUP7 | 3 | ..., a | a, ..., a | اسٹیک پر ساتویں ویلیو کا کلون بنائیں | |
| 87 | DUP8 | 3 | ..., a | a, ..., a | اسٹیک پر آٹھویں ویلیو کا کلون بنائیں | |
| 88 | DUP9 | 3 | ..., a | a, ..., a | اسٹیک پر نویں ویلیو کا کلون بنائیں | |
| 89 | DUP10 | 3 | ..., a | a, ..., a | اسٹیک پر دسویں ویلیو کا کلون بنائیں | |
| 8A | DUP11 | 3 | ..., a | a, ..., a | اسٹیک پر گیارہویں ویلیو کا کلون بنائیں | |
| 8B | DUP12 | 3 | ..., a | a, ..., a | اسٹیک پر بارہویں ویلیو کا کلون بنائیں | |
| 8C | DUP13 | 3 | ..., a | a, ..., a | اسٹیک پر تیرہویں ویلیو کا کلون بنائیں | |
| 8D | DUP14 | 3 | ..., a | a, ..., a | اسٹیک پر چودہویں ویلیو کا کلون بنائیں | |
| 8E | DUP15 | 3 | ..., a | a, ..., a | اسٹیک پر پندرہویں ویلیو کا کلون بنائیں | |
| 8F | DUP16 | 3 | ..., a | a, ..., a | اسٹیک پر سولہویں ویلیو کا کلون بنائیں | |
| 90 | SWAP1 | 3 | a, b | b, a | ||
| 91 | SWAP2 | 3 | a, _, b | b, _, a | ||
| 92 | SWAP3 | 3 | a, _, _, b | b, _, _, a | ||
| 93 | SWAP4 | 3 | a, _, _, _, b | b, _, _, _, a | ||
| 94 | SWAP5 | 3 | a, ..., b | b, ..., a | ||
| 95 | SWAP6 | 3 | a, ..., b | b, ..., a | ||
| 96 | SWAP7 | 3 | a, ..., b | b, ..., a | ||
| 97 | SWAP8 | 3 | a, ..., b | b, ..., a | ||
| 98 | SWAP9 | 3 | a, ..., b | b, ..., a | ||
| 99 | SWAP10 | 3 | a, ..., b | b, ..., a | ||
| 9A | SWAP11 | 3 | a, ..., b | b, ..., a | ||
| 9B | SWAP12 | 3 | a, ..., b | b, ..., a | ||
| 9C | SWAP13 | 3 | a, ..., b | b, ..., a | ||
| 9D | SWAP14 | 3 | a, ..., b | b, ..., a | ||
| 9E | SWAP15 | 3 | a, ..., b | b, ..., a | ||
| 9F | SWAP16 | 3 | a, ..., b | b, ..., a | ||
| A0 | LOG0 | A8 (نئے ٹیب میں کھلتا ہے) | ost, len | . | LOG0(memory[ost:ost+len-1]) | |
| A1 | LOG1 | A8 (نئے ٹیب میں کھلتا ہے) | ost, len, topic0 | . | LOG1(memory[ost:ost+len-1], topic0) | |
| A2 | LOG2 | A8 (نئے ٹیب میں کھلتا ہے) | ost, len, topic0, topic1 | . | LOG2(memory[ost:ost+len-1], topic0, topic1) | |
| A3 | LOG3 | A8 (نئے ٹیب میں کھلتا ہے) | ost, len, topic0, topic1, topic2 | . | LOG3(memory[ost:ost+len-1], topic0, topic1, topic2) | |
| A4 | LOG4 | A8 (نئے ٹیب میں کھلتا ہے) | ost, len, topic0, topic1, topic2, topic3 | . | LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | |
| A5-EF | غیر معتبر | |||||
| F0 | CREATE | A9 (نئے ٹیب میں کھلتا ہے) | val, ost, len | addr | addr = keccak256(rlp([address(this), this.nonce])) | |
| F1 | CALL | AA (نئے ٹیب میں کھلتا ہے) | gas, addr, val, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| F2 | CALLCODE | AA (نئے ٹیب میں کھلتا ہے) | gas, addr, val, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] = returndata | DELEGATECALL کی طرح، لیکن اصل msg.sender اور msg.value کو آگے نہیں بڑھاتا |
| F3 | RETURN | 0* (نئے ٹیب میں کھلتا ہے) | ost, len | . | return mem[ost:ost+len-1] | |
| F4 | DELEGATECALL | AA (نئے ٹیب میں کھلتا ہے) | gas, addr, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| F5 | CREATE2 | A9 (نئے ٹیب میں کھلتا ہے) | val, ost, len, salt | addr | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:] | |
| F6-F9 | غیر معتبر | |||||
| FA | STATICCALL | AA (نئے ٹیب میں کھلتا ہے) | gas, addr, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| FB-FC | غیر معتبر | |||||
| FD | REVERT | 0* (نئے ٹیب میں کھلتا ہے) | ost, len | . | revert(mem[ost:ost+len-1]) | |
| FE | INVALID | AF (نئے ٹیب میں کھلتا ہے) | نامزد کردہ غیر معتبر آپ کوڈ - EIP-141 (نئے ٹیب میں کھلتا ہے) | |||
| FF | SELFDESTRUCT | AB (نئے ٹیب میں کھلتا ہے) | addr | . | تمام ETH کو addr پر بھیجتا ہے؛ اگر اسی ٹرانزیکشن میں عمل درآمد کیا جائے جس میں کنٹریکٹ بنایا گیا تھا تو یہ کنٹریکٹ کو خود تلف کر دیتا ہے |