7450153f-7c91-4384-9071-59cc3b2b264a
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30680 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 75076 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 75077 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 75078 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 75079 | capability.graph | complete | 1 / 3 | 1 week ago |
| 75080 | detector.run | complete | 1 / 3 | 1 week ago |
| 75081 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1518361] OpenAI Codex v0.77.0 (research preview)
[codex:1518361] --------
[codex:1518361] workdir: /tmp/codex-multi-f9gsu1ks
[codex:1518361] model: gpt-5.2-codex
[codex:1518361] provider: openai
[codex:1518361] approval: never
[codex:1518361] sandbox: read-only
[codex:1518361] reasoning effort: xhigh
[codex:1518361] reasoning summaries: auto
[codex:1518361] session id: 019b6d45-0013-7660-8c11-5653e6b26990
[codex:1518361] --------
[codex:1518361] user
[codex:1518361] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1518361] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1518361] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1518361]
[codex:1518361] Scope rules:
[codex:1518361] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1518361] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1518361]
[codex:1518361] Output MUST be valid JSON matching the provided schema.
[codex:1518361] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1518361] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1518361]
[codex:1518361] Output constraints (IMPORTANT):
[codex:1518361] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1518361] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1518361] mcp startup: no servers
[codex:1518361]
[codex:1518361] thinking
[codex:1518361] **Reading AUDIT_BUNDLE.txt**
[codex:1518361] exec
[codex:1518361] /bin/bash -lc ls in /tmp/codex-multi-f9gsu1ks succeeded in 5ms:
[codex:1518361] AUDIT_BUNDLE.txt
[codex:1518361] codex-output-schema.json
[codex:1518361] contracts
[codex:1518361] exec
[codex:1518361] /bin/bash -lc 'rg --files' in /tmp/codex-multi-f9gsu1ks succeeded in 8ms:
[codex:1518361] codex-output-schema.json
[codex:1518361] AUDIT_BUNDLE.txt
[codex:1518361] contracts/contracts/TokenBatchTransfer.sol
[codex:1518361] contracts/@openzeppelin/contracts/math/SafeMath.sol
[codex:1518361] contracts/@openzeppelin/contracts/access/Ownable.sol
[codex:1518361] contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:1518361] contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol
[codex:1518361] contracts/@openzeppelin/contracts/utils/Context.sol
[codex:1518361]
[codex:1518361] thinking
[codex:1518361] **Reading AUDIT_BUNDLE.txt**
[codex:1518361] exec
[codex:1518361] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-f9gsu1ks succeeded in 6ms:
[codex:1518361] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1518361]
[codex:1518361] ================================================================================
[codex:1518361] FILE: contracts/@openzeppelin/contracts/access/Ownable.sol
[codex:1518361] ================================================================================
[codex:1518361] // SPDX-License-Identifier: MIT
[codex:1518361]
[codex:1518361] pragma solidity >=0.6.0 <0.8.0;
[codex:1518361]
[codex:1518361] import "../utils/Context.sol";
[codex:1518361] /**
[codex:1518361] * @dev Contract module which provides a basic access control mechanism, where
[codex:1518361] * there is an account (an owner) that can be granted exclusive access to
[codex:1518361] * specific functions.
[codex:1518361] *
[codex:1518361] * By default, the owner account will be the one that deploys the contract. This
[codex:1518361] * can later be changed with {transferOwnership}.
[codex:1518361] *
[codex:1518361] * This module is used through inheritance. It will make available the modifier
[codex:1518361] * `onlyOwner`, which can be applied to your functions to restrict their use to
[codex:1518361]
[codex:1518361] thinking
[codex:1518361] **Analyzing TokenBatchTransfer security**
[codex:1518361] exec
[codex:1518361] /bin/bash -lc 'nl -ba contracts/contracts/TokenBatchTransfer.sol' in /tmp/codex-multi-f9gsu1ks succeeded in 6ms:
[codex:1518361] 1 pragma solidity ^0.6.0;
[codex:1518361] 2
[codex:1518361] 3 import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
[codex:1518361] 4 import "@openzeppelin/contracts/math/SafeMath.sol";
[codex:1518361] 5 import "@openzeppelin/contracts/access/Ownable.sol";
[codex:1518361] 6
[codex:1518361] 7 contract TokenBatchTransfer is Ownable {
[codex:1518361] 8
[codex:1518361] 9 using SafeMath for uint256;
[codex:1518361] 10
[codex:1518361] 11 ERC20 public token; // Address of token contract
[codex:1518361] 12 address public transferOperator; // Address to manage the Transfers
[codex:1518361] 13
[codex:1518361] 14 // Modifiers
[codex:1518361] 15 modifier onlyOperator() {
[codex:1518361] 16 require(
[codex:1518361] 17 msg.sender == transferOperator,
[codex:1518361] 18 "Only operator can call this function."
[codex:1518361] 19 );
[codex:1518361] 20 _;
[codex:1518361]
[codex:1518361]
[codex:1518361] thinking
[codex:1518361] **Summarizing security findings and analysis**
[codex:1518361]
[codex:1518361] I'll carefully review the token batch transfer contract for potential vulnerabilities, focusing on access control, reentrancy, and ERC20 compatibility issues. There’s a notable low-severity footgun where the operator role isn’t reset on ownership transfer, potentially letting the previous owner still withdraw tokens unexpectedly. Other concerns like missing zero address checks or token standard compatibility seem informational rather than exploitable. Overall, the issues look minimal but worth flagging to the user for awareness.
[codex:1518361] thinking
[codex:1518361] **Preparing structured vulnerability report**
[codex:1518361]
[codex:1518361] I'm assembling a JSON report that highlights the key low-severity access control issue: the operator role isn't revoked on ownership transfer, which can let a previous owner still move funds unexpectedly. I'll ensure the JSON includes severity, category, a clear exploit scenario, recommendation, and precise code locations. The summary will reflect this one meaningful finding, adhering strictly to the output schema.
[codex:1518361] exec
[codex:1518361] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-f9gsu1ks succeeded in 6ms:
[codex:1518361] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:1518361]
[codex:1518361] thinking
[codex:1518361] **Generating JSON report for access control issue**
[codex:1518361]
[codex:1518361] I’m putting together a clean JSON object summarizing a low-severity access control concern where operator privileges persist after ownership transfer. It includes a concise summary, a detailed finding with severity, exploit scenario, recommendation, evidence, and five relevant source locations. I’m making sure the output is valid JSON with proper escaping and no extra commentary.
[codex:1518361] codex
[codex:1518361] {"no_findings":false,"summary":"Found 1 low-severity access control issue where operator privileges persist across ownership transfers.","findings":[{"severity":"low","category":"access_control","title":"Operator privileges persist after ownership transfer","exploit_scenario":"Alice deploys the contract and is both owner and operator. She later transfers ownership to Bob (e.g., to hand over the airdrop). Because transferOperator is unchanged, Alice still passes onlyOperator and can call withdrawToken or batchTransfer to drain or redirect tokens, even though she is no longer owner.","recommendation":"When ownership changes, also update or revoke the operator role (e.g., set transferOperator = newOwner inside a custom ownership transfer flow) or allow the owner to set operator to address(0) to disable the role until a new operator is chosen.","evidence":"transferOperator is set in the constructor and only updated via updateOperator; withdrawToken and batchTransfer gate on onlyOperator without checking ownership.","locations":["contracts/contracts/TokenBatchTransfer.sol:11","contracts/contracts/TokenBatchTransfer.sol:23","contracts/contracts/TokenBatchTransfer.sol:35","contracts/contracts/TokenBatchTransfer.sol:45","contracts/contracts/TokenBatchTransfer.sol:57"]}]}
[codex:1518361] tokens used
[codex:1518361] 18,264
[codex:1518361] {"no_findings":false,"summary":"Found 1 low-severity access control issue where operator privileges persist across ownership transfers.","findings":[{"severity":"low","category":"access_control","title":"Operator privileges persist after ownership transfer","exploit_scenario":"Alice deploys the contract and is both owner and operator. She later transfers ownership to Bob (e.g., to hand over the airdrop). Because transferOperator is unchanged, Alice still passes onlyOperator and can call withdrawToken or batchTransfer to drain or redirect tokens, even though she is no longer owner.","recommendation":"When ownership changes, also update or revoke the operator role (e.g., set transferOperator = newOwner inside a custom ownership transfer flow) or allow the owner to set operator to address(0) to disable the role until a new operator is chosen.","evidence":"transferOperator is set in the constructor and only updated via updateOperator; withdrawToken and batchTransfer gate on onlyOperator without checking ownership.","locations":["contracts/contracts/TokenBatchTransfer.sol:11","contracts/contracts/TokenBatchTransfer.sol:23","contracts/contracts/TokenBatchTransfer.sol:35","contracts/contracts/TokenBatchTransfer.sol:45","contracts/contracts/TokenBatchTransfer.sol:57"]}]}
{
"codex": {
"ran_at": "2025-12-30T03:22:32.309939+00:00",
"returncode": 0
},
"summary": "Found 1 low-severity access control issue where operator privileges persist across ownership transfers.",
"raw_final": {
"summary": "Found 1 low-severity access control issue where operator privileges persist across ownership transfers.",
"findings": [
{
"title": "Operator privileges persist after ownership transfer",
"category": "access_control",
"evidence": "transferOperator is set in the constructor and only updated via updateOperator; withdrawToken and batchTransfer gate on onlyOperator without checking ownership.",
"severity": "low",
"locations": [
"contracts/contracts/TokenBatchTransfer.sol:11",
"contracts/contracts/TokenBatchTransfer.sol:23",
"contracts/contracts/TokenBatchTransfer.sol:35",
"contracts/contracts/TokenBatchTransfer.sol:45",
"contracts/contracts/TokenBatchTransfer.sol:57"
],
"recommendation": "When ownership changes, also update or revoke the operator role (e.g., set transferOperator = newOwner inside a custom ownership transfer flow) or allow the owner to set operator to address(0) to disable the role until a new operator is chosen.",
"exploit_scenario": "Alice deploys the contract and is both owner and operator. She later transfers ownership to Bob (e.g., to hand over the airdrop). Because transferOperator is unchanged, Alice still passes onlyOperator and can call withdrawToken or batchTransfer to drain or redirect tokens, even though she is no longer owner."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLVALUE 00000006: DUP1 00000007: ISZERO 00000008: PUSH2 0x0010 0000000b: JUMPI 0000000c: PUSH1 0x00 0000000e: DUP1 0000000f: REVERT 00000010: JUMPDEST 00000011: POP 00000012: PUSH1 0x04 00000014: CALLDATASIZE 00000015: LT 00000016: PUSH2 0x0088 00000019: JUMPI 0000001a: PUSH1 0x00 0000001c: CALLDATALOAD 0000001d: PUSH1 0xe0 0000001f: SHR 00000020: DUP1 00000021: PUSH4 0xac7475ed 00000026: GT 00000027: PUSH2 0x005b 0000002a: JUMPI 0000002b: DUP1 0000002c: PUSH4 0xac7475ed 00000031: EQ 00000032: PUSH2 0x019a 00000035: JUMPI 00000036: DUP1 00000037: PUSH4 0xd0835895 0000003c: EQ 0000003d: PUSH2 0x01c0 00000040: JUMPI 00000041: DUP1 00000042: PUSH4 0xf2fde38b 00000047: EQ 00000048: PUSH2 0x01c8 0000004b: JUMPI 0000004c: DUP1 0000004d: PUSH4 0xfc0c546a 00000052: EQ 00000053: PUSH2 0x01ee 00000056: JUMPI 00000057: PUSH2 0x0088 0000005a: JUMP 0000005b: JUMPDEST 0000005c: DUP1 0000005d: PUSH4 0x50baa622 00000062: EQ 00000063: PUSH2 0x008d 00000066: JUMPI 00000067: DUP1 00000068: PUSH4 0x715018a6 0000006d: EQ 0000006e: PUSH2 0x00ac 00000071: JUMPI 00000072: DUP1 00000073: PUSH4 0x88d695b2 00000078: EQ 00000079: PUSH2 0x00b4 0000007c: JUMPI 0000007d: DUP1 0000007e: PUSH4 0x8da5cb5b 00000083: EQ 00000084: PUSH2 0x0176 00000087: JUMPI 00000088: JUMPDEST 00000089: PUSH1 0x00 0000008b: DUP1 0000008c: REVERT 0000008d: JUMPDEST 0000008e: PUSH2 0x00aa 00000091: PUSH1 0x04 00000093: DUP1 00000094: CALLDATASIZE 00000095: SUB 00000096: PUSH1 0x20 00000098: DUP2 00000099: LT 0000009a: ISZERO 0000009b: PUSH2 0x00a3 0000009e: JUMPI 0000009f: PUSH1 0x00 000000a1: DUP1 000000a2: REVERT 000000a3: JUMPDEST 000000a4: POP 000000a5: CALLDATALOAD 000000a6: PUSH2 0x01f6 000000a9: JUMP 000000aa: JUMPDEST 000000ab: STOP 000000ac: JUMPDEST 000000ad: PUSH2 0x00aa 000000b0: PUSH2 0x03e6 000000b3: JUMP 000000b4: JUMPDEST 000000b5: PUSH2 0x00aa 000000b8: PUSH1 0x04 000000ba: DUP1 000000bb: CALLDATASIZE 000000bc: SUB 000000bd: PUSH1 0x40 000000bf: DUP2 000000c0: LT 000000c1: ISZERO 000000c2: PUSH2 0x00ca 000000c5: JUMPI 000000c6: PUSH1 0x00 000000c8: DUP1 000000c9: REVERT 000000ca: JUMPDEST 000000cb: DUP2 000000cc: ADD 000000cd: SWAP1 000000ce: PUSH1 0x20 000000d0: DUP2 000000d1: ADD 000000d2: DUP2 000000d3: CALLDATALOAD 000000d4: PUSH5 0x0100000000 000000da: DUP2 000000db: GT 000000dc: ISZERO 000000dd: PUSH2 0x00e5 000000e0: JUMPI 000000e1: PUSH1 0x00 000000e3: DUP1 000000e4: REVERT 000000e5: JUMPDEST 000000e6: DUP3 000000e7: ADD 000000e8: DUP4 000000e9: PUSH1 0x20 000000eb: DUP3 000000ec: ADD 000000ed: GT 000000ee: ISZERO 000000ef: PUSH2 0x00f7 000000f2: JUMPI 000000f3: PUSH1 0x00 000000f5: DUP1 000000f6: REVERT 000000f7: JUMPDEST 000000f8: DUP1 000000f9: CALLDATALOAD 000000fa: SWAP1 000000fb: PUSH1 0x20 000000fd: ADD 000000fe: SWAP2 000000ff: DUP5 00000100: PUSH1 0x20 00000102: DUP4 00000103: MUL 00000104: DUP5 00000105: ADD 00000106: GT 00000107: PUSH5 0x0100000000 0000010d: DUP4 0000010e: GT 0000010f: OR 00000110: ISZERO 00000111: PUSH2 0x0119 00000114: JUMPI 00000115: PUSH1 0x00 00000117: DUP1 00000118: REVERT 00000119: JUMPDEST 0000011a: SWAP2 0000011b: SWAP4 0000011c: SWAP1 0000011d: SWAP3 0000011e: SWAP1 0000011f: SWAP2 00000120: PUSH1 0x20 00000122: DUP2 00000123: ADD 00000124: SWAP1 00000125: CALLDATALOAD 00000126: PUSH5 0x0100000000 0000012c: DUP2 0000012d: GT 0000012e: ISZERO 0000012f: PUSH2 0x0137 00000132: JUMPI 00000133: PUSH1 0x00 00000135: DUP1 00000136: REVERT 00000137: JUMPDEST 00000138: DUP3 00000139: ADD 0000013a: DUP4 0000013b: PUSH1 0x20 0000013d: DUP3 0000013e: ADD 0000013f: GT 00000140: ISZERO 00000141: PUSH2 0x0149 00000144: JUMPI 00000145: PUSH1 0x00 00000147: DUP1 00000148: REVERT 00000149: JUMPDEST 0000014a: DUP1 0000014b: CALLDATALOAD 0000014c: SWAP1 0000014d: PUSH1 0x20 0000014f: ADD 00000150: SWAP2 00000151: DUP5 00000152: PUSH1 0x20 00000154: DUP4 00000155: MUL 00000156: DUP5 00000157: ADD 00000158: GT 00000159: PUSH5 0x0100000000 0000015f: DUP4 00000160: GT 00000161: OR 00000162: ISZERO 00000163: PUSH2 0x016b 00000166: JUMPI 00000167: PUSH1 0x00 00000169: DUP1 0000016a: REVERT 0000016b: JUMPDEST 0000016c: POP 0000016d: SWAP1 0000016e: SWAP3 0000016f: POP 00000170: SWAP1 00000171: POP 00000172: PUSH2 0x04a4 00000175: JUMP 00000176: JUMPDEST 00000177: PUSH2 0x017e 0000017a: PUSH2 0x0651 0000017d: JUMP 0000017e: JUMPDEST 0000017f: PUSH1 0x40 00000181: DUP1 00000182: MLOAD 00000183: PUSH1 0x01 00000185: PUSH1 0x01 00000187: PUSH1 0xa0 00000189: SHL 0000018a: SUB 0000018b: SWAP1 0000018c: SWAP3 0000018d: AND 0000018e: DUP3 0000018f: MSTORE 00000190: MLOAD 00000191: SWAP1 00000192: DUP2 00000193: SWAP1 00000194: SUB 00000195: PUSH1 0x20 00000197: ADD 00000198: SWAP1 00000199: RETURN 0000019a: JUMPDEST 0000019b: PUSH2 0x00aa 0000019e: PUSH1 0x04 000001a0: DUP1 000001a1: CALLDATASIZE 000001a2: SUB 000001a3: PUSH1 0x20 000001a5: DUP2 000001a6: LT 000001a7: ISZERO 000001a8: PUSH2 0x01b0 000001ab: JUMPI 000001ac: PUSH1 0x00 000001ae: DUP1 000001af: REVERT 000001b0: JUMPDEST 000001b1: POP 000001b2: CALLDATALOAD 000001b3: PUSH1 0x01 000001b5: PUSH1 0x01 000001b7: PUSH1 0xa0 000001b9: SHL 000001ba: SUB 000001bb: AND 000001bc: PUSH2 0x0660 000001bf: JUMP 000001c0: JUMPDEST 000001c1: PUSH2 0x017e 000001c4: PUSH2 0x0783 000001c7: JUMP 000001c8: JUMPDEST 000001c9: PUSH2 0x00aa 000001cc: PUSH1 0x04 000001ce: DUP1 000001cf: CALLDATASIZE 000001d0: SUB 000001d1: PUSH1 0x20 000001d3: DUP2 000001d4: LT 000001d5: ISZERO 000001d6: PUSH2 0x01de 000001d9: JUMPI 000001da: PUSH1 0x00 000001dc: DUP1 000001dd: REVERT 000001de: JUMPDEST 000001df: POP 000001e0: CALLDATALOAD 000001e1: PUSH1 0x01 000001e3: PUSH1 0x01 000001e5: PUSH1 0xa0 000001e7: SHL 000001e8: SUB 000001e9: AND 000001ea: PUSH2 0x0792 000001ed: JUMP 000001ee: JUMPDEST 000001ef: PUSH2 0x017e 000001f2: PUSH2 0x08a6 000001f5: JUMP 000001f6: JUMPDEST 000001f7: PUSH1 0x02 000001f9: SLOAD 000001fa: PUSH1 0x01 000001fc: PUSH1 0x01 000001fe: PUSH1 0xa0 00000200: SHL 00000201: SUB 00000202: AND 00000203: CALLER 00000204: EQ 00000205: PUSH2 0x023f 00000208: JUMPI 00000209: PUSH1 0x40 0000020b: MLOAD 0000020c: PUSH3 0x461bcd 00000210: PUSH1 0xe5 00000212: SHL 00000213: DUP2 00000214: MSTORE 00000215: PUSH1 0x04 00000217: ADD 00000218: DUP1 00000219: DUP1 0000021a: PUSH1 0x20 0000021c: ADD 0000021d: DUP3 0000021e: DUP2 0000021f: SUB 00000220: DUP3 00000221: MSTORE 00000222: PUSH1 0x25 00000224: DUP2 00000225: MSTORE 00000226: PUSH1 0x20 00000228: ADD 00000229: DUP1 0000022a: PUSH2 0x0956 0000022d: PUSH1 0x25 0000022f: SWAP2 00000230: CODECOPY 00000231: PUSH1 0x40 00000233: ADD 00000234: SWAP2 00000235: POP 00000236: POP 00000237: PUSH1 0x40 00000239: MLOAD 0000023a: DUP1 0000023b: SWAP2 0000023c: SUB 0000023d: SWAP1 0000023e: REVERT 0000023f: JUMPDEST 00000240: PUSH1 0x01 00000242: SLOAD 00000243: PUSH1 0x40 00000245: DUP1 00000246: MLOAD 00000247: PUSH4 0x70a08231 0000024c: PUSH1 0xe0 0000024e: SHL 0000024f: DUP2 00000250: MSTORE 00000251: ADDRESS 00000252: PUSH1 0x04 00000254: DUP3 00000255: ADD 00000256: MSTORE 00000257: SWAP1 00000258: MLOAD 00000259: DUP4 0000025a: SWAP3 0000025b: PUSH1 0x01 0000025d: PUSH1 0x01 0000025f: PUSH1 0xa0 00000261: SHL 00000262: SUB 00000263: AND 00000264: SWAP2 00000265: PUSH4 0x70a08231 0000026a: SWAP2 0000026b: PUSH1 0x24 0000026d: DUP1 0000026e: DUP4 0000026f: ADD 00000270: SWAP3 00000271: PUSH1 0x20 00000273: SWAP3 00000274: SWAP2 00000275: SWAP1 00000276: DUP3 00000277: SWAP1 00000278: SUB 00000279: ADD 0000027a: DUP2 0000027b: DUP7 0000027c: DUP1 0000027d: EXTCODESIZE 0000027e: ISZERO 0000027f: DUP1 00000280: ISZERO 00000281: PUSH2 0x0289 00000284: JUMPI 00000285: PUSH1 0x00 00000287: DUP1 00000288: REVERT 00000289: JUMPDEST 0000028a: POP 0000028b: GAS 0000028c: STATICCALL 0000028d: ISZERO 0000028e: DUP1 0000028f: ISZERO 00000290: PUSH2 0x029d 00000293: JUMPI 00000294: RETURNDATASIZE 00000295: PUSH1 0x00 00000297: DUP1 00000298: RETURNDATACOPY 00000299: RETURNDATASIZE 0000029a: PUSH1 0x00 0000029c: REVERT 0000029d: JUMPDEST 0000029e: POP 0000029f: POP 000002a0: POP 000002a1: POP 000002a2: PUSH1 0x40 000002a4: MLOAD 000002a5: RETURNDATASIZE 000002a6: PUSH1 0x20 000002a8: DUP2 000002a9: LT 000002aa: ISZERO 000002ab: PUSH2 0x02b3 000002ae: JUMPI 000002af: PUSH1 0x00 000002b1: DUP1 000002b2: REVERT 000002b3: JUMPDEST 000002b4: POP 000002b5: MLOAD 000002b6: LT 000002b7: ISZERO 000002b8: PUSH2 0x02f2 000002bb: JUMPI 000002bc: PUSH1 0x40 000002be: MLOAD 000002bf: PUSH3 0x461bcd 000002c3: PUSH1 0xe5 000002c5: SHL 000002c6: DUP2 000002c7: MSTORE 000002c8: PUSH1 0x04 000002ca: ADD 000002cb: DUP1 000002cc: DUP1 000002cd: PUSH1 0x20 000002cf: ADD 000002d0: DUP3 000002d1: DUP2 000002d2: SUB 000002d3: DUP3 000002d4: MSTORE 000002d5: PUSH1 0x22 000002d7: DUP2 000002d8: MSTORE 000002d9: PUSH1 0x20 000002db: ADD 000002dc: DUP1 000002dd: PUSH2 0x0934 000002e0: PUSH1 0x22 000002e2: SWAP2 000002e3: CODECOPY 000002e4: PUSH1 0x40 000002e6: ADD 000002e7: SWAP2 000002e8: POP 000002e9: POP 000002ea: PUSH1 0x40 000002ec: MLOAD 000002ed: DUP1 000002ee: SWAP2 000002ef: SUB 000002f0: SWAP1 000002f1: REVERT 000002f2: JUMPDEST 000002f3: PUSH1 0x01 000002f5: SLOAD 000002f6: PUSH1 0x40 000002f8: DUP1 000002f9: MLOAD 000002fa: PUSH4 0xa9059cbb 000002ff: PUSH1 0xe0 00000301: SHL 00000302: DUP2 00000303: MSTORE 00000304: CALLER 00000305: PUSH1 0x04 00000307: DUP3 00000308: ADD 00000309: MSTORE 0000030a: PUSH1 0x24 0000030c: DUP2 0000030d: ADD 0000030e: DUP5 0000030f: SWAP1 00000310: MSTORE 00000311: SWAP1 00000312: MLOAD 00000313: PUSH1 0x01 00000315: PUSH1 0x01 00000317: PUSH1 0xa0 00000319: SHL 0000031a: SUB 0000031b: SWAP1 0000031c: SWAP3 0000031d: AND 0000031e: SWAP2 0000031f: PUSH4 0xa9059cbb 00000324: SWAP2 00000325: PUSH1 0x44 00000327: DUP1 00000328: DUP3 00000329: ADD 0000032a: SWAP3 0000032b: PUSH1 0x20 0000032d: SWAP3 0000032e: SWAP1 0000032f: SWAP2 00000330: SWAP1 00000331: DUP3 00000332: SWAP1 00000333: SUB 00000334: ADD 00000335: DUP2 00000336: PUSH1 0x00 00000338: DUP8 00000339: DUP1 0000033a: EXTCODESIZE 0000033b: ISZERO 0000033c: DUP1 0000033d: ISZERO 0000033e: PUSH2 0x0346 00000341: JUMPI 00000342: PUSH1 0x00 00000344: DUP1 00000345: REVERT 00000346: JUMPDEST 00000347: POP 00000348: GAS 00000349: CALL 0000034a: ISZERO 0000034b: DUP1 0000034c: ISZERO 0000034d: PUSH2 0x035a 00000350: JUMPI 00000351: RETURNDATASIZE 00000352: PUSH1 0x00 00000354: DUP1 00000355: RETURNDATACOPY 00000356: RETURNDATASIZE 00000357: PUSH1 0x00 00000359: REVERT 0000035a: JUMPDEST 0000035b: POP 0000035c: POP 0000035d: POP 0000035e: POP 0000035f: PUSH1 0x40 00000361: MLOAD 00000362: RETURNDATASIZE 00000363: PUSH1 0x20 00000365: DUP2 00000366: LT 00000367: ISZERO 00000368: PUSH2 0x0370 0000036b: JUMPI 0000036c: PUSH1 0x00 0000036e: DUP1 0000036f: REVERT 00000370: JUMPDEST 00000371: POP 00000372: MLOAD 00000373: PUSH2 0x03ad 00000376: JUMPI 00000377: PUSH1 0x40 00000379: MLOAD 0000037a: PUSH3 0x461bcd 0000037e: PUSH1 0xe5 00000380: SHL 00000381: DUP2 00000382: MSTORE 00000383: PUSH1 0x04 00000385: ADD 00000386: DUP1 00000387: DUP1 00000388: PUSH1 0x20 0000038a: ADD 0000038b: DUP3 0000038c: DUP2 0000038d: SUB 0000038e: DUP3 0000038f: MSTORE 00000390: PUSH1 0x2d 00000392: DUP2 00000393: MSTORE 00000394: PUSH1 0x20 00000396: ADD 00000397: DUP1 00000398: PUSH2 0x08e0 0000039b: PUSH1 0x2d 0000039d: SWAP2 0000039e: CODECOPY 0000039f: PUSH1 0x40 000003a1: ADD 000003a2: SWAP2 000003a3: POP 000003a4: POP 000003a5: PUSH1 0x40 000003a7: MLOAD 000003a8: DUP1 000003a9: SWAP2 000003aa: SUB 000003ab: SWAP1 000003ac: REVERT 000003ad: JUMPDEST 000003ae: PUSH1 0x40 000003b0: DUP1 000003b1: MLOAD 000003b2: DUP3 000003b3: DUP2 000003b4: MSTORE 000003b5: SWAP1 000003b6: MLOAD 000003b7: CALLER 000003b8: SWAP2 000003b9: PUSH32 0x992ee874049a42cae0757a765cd7f641b6028cc35c3478bde8330bf417c3a7a9 000003da: SWAP2 000003db: SWAP1 000003dc: DUP2 000003dd: SWAP1 000003de: SUB 000003df: PUSH1 0x20 000003e1: ADD 000003e2: SWAP1 000003e3: LOG2 000003e4: POP 000003e5: JUMP 000003e6: JUMPDEST 000003e7: PUSH2 0x03ee 000003ea: PUSH2 0x08b5 000003ed: JUMP 000003ee: JUMPDEST 000003ef: PUSH1 0x01 000003f1: PUSH1 0x01 000003f3: PUSH1 0xa0 000003f5: SHL 000003f6: SUB 000003f7: AND 000003f8: PUSH2 0x03ff 000003fb: PUSH2 0x0651 000003fe: JUMP 000003ff: JUMPDEST 00000400: PUSH1 0x01 00000402: PUSH1 0x01 00000404: PUSH1 0xa0 00000406: SHL 00000407: SUB 00000408: AND 00000409: EQ 0000040a: PUSH2 0x045a 0000040d: JUMPI 0000040e: PUSH1 0x40 00000410: DUP1 00000411: MLOAD 00000412: PUSH3 0x461bcd 00000416: PUSH1 0xe5 00000418: SHL 00000419: DUP2 0000041a: MSTORE 0000041b: PUSH1 0x20 0000041d: PUSH1 0x04 0000041f: DUP3 00000420: ADD 00000421: DUP2 00000422: SWAP1 00000423: MSTORE 00000424: PUSH1 0x24 00000426: DUP3 00000427: ADD 00000428: MSTORE 00000429: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 0000044a: PUSH1 0x44 0000044c: DUP3 0000044d: ADD 0000044e: MSTORE 0000044f: SWAP1 00000450: MLOAD 00000451: SWAP1 00000452: DUP2 00000453: SWAP1 00000454: SUB 00000455: PUSH1 0x64 00000457: ADD 00000458: SWAP1 00000459: REVERT 0000045a: JUMPDEST 0000045b: PUSH1 0x00 0000045d: DUP1 0000045e: SLOAD 0000045f: PUSH1 0x40 00000461: MLOAD 00000462: PUSH1 0x01 00000464: PUSH1 0x01 00000466: PUSH1 0xa0 00000468: SHL 00000469: SUB 0000046a: SWAP1 0000046b: SWAP2 0000046c: AND 0000046d: SWAP1 0000046e: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 0000048f: SWAP1 00000490: DUP4 00000491: SWAP1 00000492: LOG3 00000493: PUSH1 0x00 00000495: DUP1 00000496: SLOAD 00000497: PUSH1 0x01 00000499: PUSH1 0x01 0000049b: PUSH1 0xa0 0000049d: SHL 0000049e: SUB 0000049f: NOT 000004a0: AND 000004a1: SWAP1 000004a2: SSTORE 000004a3: JUMP 000004a4: JUMPDEST 000004a5: PUSH1 0x02 000004a7: SLOAD 000004a8: PUSH1 0x01 000004aa: PUSH1 0x01 000004ac: PUSH1 0xa0 000004ae: SHL 000004af: SUB 000004b0: AND 000004b1: CALLER 000004b2: EQ 000004b3: PUSH2 0x04ed 000004b6: JUMPI 000004b7: PUSH1 0x40 000004b9: MLOAD 000004ba: PUSH3 0x461bcd 000004be: PUSH1 0xe5 000004c0: SHL 000004c1: DUP2 000004c2: MSTORE 000004c3: PUSH1 0x04 000004c5: ADD 000004c6: DUP1 000004c7: DUP1 000004c8: PUSH1 0x20 000004ca: ADD 000004cb: DUP3 000004cc: DUP2 000004cd: SUB 000004ce: DUP3 000004cf: MSTORE 000004d0: PUSH1 0x25 000004d2: DUP2 000004d3: MSTORE 000004d4: PUSH1 0x20 000004d6: ADD 000004d7: DUP1 000004d8: PUSH2 0x0956 000004db: PUSH1 0x25 000004dd: SWAP2 000004de: CODECOPY 000004df: PUSH1 0x40 000004e1: ADD 000004e2: SWAP2 000004e3: POP 000004e4: POP 000004e5: PUSH1 0x40 000004e7: MLOAD 000004e8: DUP1 000004e9: SWAP2 000004ea: SUB 000004eb: SWAP1 000004ec: REVERT 000004ed: JUMPDEST 000004ee: DUP3 000004ef: DUP2 000004f0: EQ 000004f1: PUSH2 0x0541 000004f4: JUMPI 000004f5: PUSH1 0x40 000004f7: DUP1 000004f8: MLOAD 000004f9: PUSH3 0x461bcd 000004fd: PUSH1 0xe5 000004ff: SHL 00000500: DUP2 00000501: MSTORE 00000502: PUSH1 0x20 00000504: PUSH1 0x04 00000506: DUP3 00000507: ADD 00000508: MSTORE 00000509: PUSH1 0x18 0000050b: PUSH1 0x24 0000050d: DUP3 0000050e: ADD 0000050f: MSTORE 00000510: PUSH32 0x496e76616c696420696e70757420706172616d65746572730000000000000000 00000531: PUSH1 0x44 00000533: DUP3 00000534: ADD 00000535: MSTORE 00000536: SWAP1 00000537: MLOAD 00000538: SWAP1 00000539: DUP2 0000053a: SWAP1 0000053b: SUB 0000053c: PUSH1 0x64 0000053e: ADD 0000053f: SWAP1 00000540: REVERT 00000541: JUMPDEST 00000542: PUSH1 0x00 00000544: JUMPDEST 00000545: DUP4 00000546: DUP2 00000547: LT 00000548: ISZERO 00000549: PUSH2 0x064a 0000054c: JUMPI 0000054d: PUSH1 0x01 0000054f: SLOAD 00000550: PUSH1 0x01 00000552: PUSH1 0x01 00000554: PUSH1 0xa0 00000556: SHL 00000557: SUB 00000558: AND 00000559: PUSH4 0xa9059cbb 0000055e: DUP7 0000055f: DUP7 00000560: DUP5 00000561: DUP2 00000562: DUP2 00000563: LT 00000564: PUSH2 0x0569 00000567: JUMPI 00000568: INVALID 00000569: JUMPDEST 0000056a: SWAP1 0000056b: POP 0000056c: PUSH1 0x20 0000056e: MUL 0000056f: ADD 00000570: CALLDATALOAD 00000571: PUSH1 0x01 00000573: PUSH1 0x01 00000575: PUSH1 0xa0 00000577: SHL 00000578: SUB 00000579: AND 0000057a: DUP6 0000057b: DUP6 0000057c: DUP6 0000057d: DUP2 0000057e: DUP2 0000057f: LT 00000580: PUSH2 0x0585 00000583: JUMPI 00000584: INVALID 00000585: JUMPDEST 00000586: SWAP1 00000587: POP 00000588: PUSH1 0x20 0000058a: MUL 0000058b: ADD 0000058c: CALLDATALOAD 0000058d: PUSH1 0x40 0000058f: MLOAD 00000590: DUP4 00000591: PUSH4 0xffffffff 00000596: AND 00000597: PUSH1 0xe0 00000599: SHL 0000059a: DUP2 0000059b: MSTORE 0000059c: PUSH1 0x04 0000059e: ADD 0000059f: DUP1 000005a0: DUP4 000005a1: PUSH1 0x01 000005a3: PUSH1 0x01 000005a5: PUSH1 0xa0 000005a7: SHL 000005a8: SUB 000005a9: AND 000005aa: PUSH1 0x01 000005ac: PUSH1 0x01 000005ae: PUSH1 0xa0 000005b0: SHL 000005b1: SUB 000005b2: AND 000005b3: DUP2 000005b4: MSTORE 000005b5: PUSH1 0x20 000005b7: ADD 000005b8: DUP3 000005b9: DUP2 000005ba: MSTORE 000005bb: PUSH1 0x20 000005bd: ADD 000005be: SWAP3 000005bf: POP 000005c0: POP 000005c1: POP 000005c2: PUSH1 0x20 000005c4: PUSH1 0x40 000005c6: MLOAD 000005c7: DUP1 000005c8: DUP4 000005c9: SUB 000005ca: DUP2 000005cb: PUSH1 0x00 000005cd: DUP8 000005ce: DUP1 000005cf: EXTCODESIZE 000005d0: ISZERO 000005d1: DUP1 000005d2: ISZERO 000005d3: PUSH2 0x05db 000005d6: JUMPI 000005d7: PUSH1 0x00 000005d9: DUP1 000005da: REVERT 000005db: JUMPDEST 000005dc: POP 000005dd: GAS 000005de: CALL 000005df: ISZERO 000005e0: DUP1 000005e1: ISZERO 000005e2: PUSH2 0x05ef 000005e5: JUMPI 000005e6: RETURNDATASIZE 000005e7: PUSH1 0x00 000005e9: DUP1 000005ea: RETURNDATACOPY 000005eb: RETURNDATASIZE 000005ec: PUSH1 0x00 000005ee: REVERT 000005ef: JUMPDEST 000005f0: POP 000005f1: POP 000005f2: POP 000005f3: POP 000005f4: PUSH1 0x40 000005f6: MLOAD 000005f7: RETURNDATASIZE 000005f8: PUSH1 0x20 000005fa: DUP2 000005fb: LT 000005fc: ISZERO 000005fd: PUSH2 0x0605 00000600: JUMPI 00000601: PUSH1 0x00 00000603: DUP1 00000604: REVERT 00000605: JUMPDEST 00000606: POP 00000607: MLOAD 00000608: PUSH2 0x0642 0000060b: JUMPI 0000060c: PUSH1 0x40 0000060e: MLOAD 0000060f: PUSH3 0x461bcd 00000613: PUSH1 0xe5 00000615: SHL 00000616: DUP2 00000617: MSTORE 00000618: PUSH1 0x04 0000061a: ADD 0000061b: DUP1 0000061c: DUP1 0000061d: PUSH1 0x20 0000061f: ADD 00000620: DUP3 00000621: DUP2 00000622: SUB 00000623: DUP3 00000624: MSTORE 00000625: PUSH1 0x27 00000627: DUP2 00000628: MSTORE 00000629: PUSH1 0x20 0000062b: ADD 0000062c: DUP1 0000062d: PUSH2 0x090d 00000630: PUSH1 0x27 00000632: SWAP2 00000633: CODECOPY 00000634: PUSH1 0x40 00000636: ADD 00000637: SWAP2 00000638: POP 00000639: POP 0000063a: PUSH1 0x40 0000063c: MLOAD 0000063d: DUP1 0000063e: SWAP2 0000063f: SUB 00000640: SWAP1 00000641: REVERT 00000642: JUMPDEST 00000643: PUSH1 0x01 00000645: ADD 00000646: PUSH2 0x0544 00000649: JUMP 0000064a: JUMPDEST 0000064b: POP 0000064c: POP 0000064d: POP 0000064e: POP 0000064f: POP 00000650: JUMP 00000651: JUMPDEST 00000652: PUSH1 0x00 00000654: SLOAD 00000655: PUSH1 0x01 00000657: PUSH1 0x01 00000659: PUSH1 0xa0 0000065b: SHL 0000065c: SUB 0000065d: AND 0000065e: SWAP1 0000065f: JUMP 00000660: JUMPDEST 00000661: PUSH2 0x0668 00000664: PUSH2 0x08b5 00000667: JUMP 00000668: JUMPDEST 00000669: PUSH1 0x01 0000066b: PUSH1 0x01 0000066d: PUSH1 0xa0 0000066f: SHL 00000670: SUB 00000671: AND 00000672: PUSH2 0x0679 00000675: PUSH2 0x0651 00000678: JUMP 00000679: JUMPDEST 0000067a: PUSH1 0x01 0000067c: PUSH1 0x01 0000067e: PUSH1 0xa0 00000680: SHL 00000681: SUB 00000682: AND 00000683: EQ 00000684: PUSH2 0x06d4 00000687: JUMPI 00000688: PUSH1 0x40 0000068a: DUP1 0000068b: MLOAD 0000068c: PUSH3 0x461bcd 00000690: PUSH1 0xe5 00000692: SHL 00000693: DUP2 00000694: MSTORE 00000695: PUSH1 0x20 00000697: PUSH1 0x04 00000699: DUP3 0000069a: ADD 0000069b: DUP2 0000069c: SWAP1 0000069d: MSTORE 0000069e: PUSH1 0x24 000006a0: DUP3 000006a1: ADD 000006a2: MSTORE 000006a3: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 000006c4: PUSH1 0x44 000006c6: DUP3 000006c7: ADD 000006c8: MSTORE 000006c9: SWAP1 000006ca: MLOAD 000006cb: SWAP1 000006cc: DUP2 000006cd: SWAP1 000006ce: SUB 000006cf: PUSH1 0x64 000006d1: ADD 000006d2: SWAP1 000006d3: REVERT 000006d4: JUMPDEST 000006d5: PUSH1 0x01 000006d7: PUSH1 0x01 000006d9: PUSH1 0xa0 000006db: SHL 000006dc: SUB 000006dd: DUP2 000006de: AND 000006df: PUSH2 0x072f 000006e2: JUMPI 000006e3: PUSH1 0x40 000006e5: DUP1 000006e6: MLOAD 000006e7: PUSH3 0x461bcd 000006eb: PUSH1 0xe5 000006ed: SHL 000006ee: DUP2 000006ef: MSTORE 000006f0: PUSH1 0x20 000006f2: PUSH1 0x04 000006f4: DUP3 000006f5: ADD 000006f6: MSTORE 000006f7: PUSH1 0x18 000006f9: PUSH1 0x24 000006fb: DUP3 000006fc: ADD 000006fd: MSTORE 000006fe: PUSH32 0x496e76616c6964206f70657261746f7220616464726573730000000000000000 0000071f: PUSH1 0x44 00000721: DUP3 00000722: ADD 00000723: MSTORE 00000724: SWAP1 00000725: MLOAD 00000726: SWAP1 00000727: DUP2 00000728: SWAP1 00000729: SUB 0000072a: PUSH1 0x64 0000072c: ADD 0000072d: SWAP1 0000072e: REVERT 0000072f: JUMPDEST 00000730: PUSH1 0x02 00000732: DUP1 00000733: SLOAD 00000734: PUSH1 0x01 00000736: PUSH1 0x01 00000738: PUSH1 0xa0 0000073a: SHL 0000073b: SUB 0000073c: DUP4 0000073d: AND 0000073e: PUSH1 0x01 00000740: PUSH1 0x01 00000742: PUSH1 0xa0 00000744: SHL 00000745: SUB 00000746: NOT 00000747: SWAP1 00000748: SWAP2 00000749: AND 0000074a: DUP2 0000074b: OR 0000074c: SWAP1 0000074d: SWAP2 0000074e: SSTORE 0000074f: PUSH1 0x40 00000751: DUP1 00000752: MLOAD 00000753: SWAP2 00000754: DUP3 00000755: MSTORE 00000756: MLOAD 00000757: PUSH32 0xda12ee837e6978172aaf54b16145ffe08414fd8710092ef033c71b8eb6ec189a 00000778: SWAP2 00000779: DUP2 0000077a: SWAP1 0000077b: SUB 0000077c: PUSH1 0x20 0000077e: ADD 0000077f: SWAP1 00000780: LOG1 00000781: POP 00000782: JUMP 00000783: JUMPDEST 00000784: PUSH1 0x02 00000786: SLOAD 00000787: PUSH1 0x01 00000789: PUSH1 0x01 0000078b: PUSH1 0xa0 0000078d: SHL 0000078e: SUB 0000078f: AND 00000790: DUP2 00000791: JUMP 00000792: JUMPDEST 00000793: PUSH2 0x079a 00000796: PUSH2 0x08b5 00000799: JUMP 0000079a: JUMPDEST 0000079b: PUSH1 0x01 0000079d: PUSH1 0x01 0000079f: PUSH1 0xa0 000007a1: SHL 000007a2: SUB 000007a3: AND 000007a4: PUSH2 0x07ab 000007a7: PUSH2 0x0651 000007aa: JUMP 000007ab: JUMPDEST 000007ac: PUSH1 0x01 000007ae: PUSH1 0x01 000007b0: PUSH1 0xa0 000007b2: SHL 000007b3: SUB 000007b4: AND 000007b5: EQ 000007b6: PUSH2 0x0806 000007b9: JUMPI 000007ba: PUSH1 0x40 000007bc: DUP1 000007bd: MLOAD 000007be: PUSH3 0x461bcd 000007c2: PUSH1 0xe5 000007c4: SHL 000007c5: DUP2 000007c6: MSTORE 000007c7: PUSH1 0x20 000007c9: PUSH1 0x04 000007cb: DUP3 000007cc: ADD 000007cd: DUP2 000007ce: SWAP1 000007cf: MSTORE 000007d0: PUSH1 0x24 000007d2: DUP3 000007d3: ADD 000007d4: MSTORE 000007d5: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 000007f6: PUSH1 0x44 000007f8: DUP3 000007f9: ADD 000007fa: MSTORE 000007fb: SWAP1 000007fc: MLOAD 000007fd: SWAP1 000007fe: DUP2 000007ff: SWAP1 00000800: SUB 00000801: PUSH1 0x64 00000803: ADD 00000804: SWAP1 00000805: REVERT 00000806: JUMPDEST 00000807: PUSH1 0x01 00000809: PUSH1 0x01 0000080b: PUSH1 0xa0 0000080d: SHL 0000080e: SUB 0000080f: DUP2 00000810: AND 00000811: PUSH2 0x084b 00000814: JUMPI 00000815: PUSH1 0x40 00000817: MLOAD 00000818: PUSH3 0x461bcd 0000081c: PUSH1 0xe5 0000081e: SHL 0000081f: DUP2 00000820: MSTORE 00000821: PUSH1 0x04 00000823: ADD 00000824: DUP1 00000825: DUP1 00000826: PUSH1 0x20 00000828: ADD 00000829: DUP3 0000082a: DUP2 0000082b: SUB 0000082c: DUP3 0000082d: MSTORE 0000082e: PUSH1 0x26 00000830: DUP2 00000831: MSTORE 00000832: PUSH1 0x20 00000834: ADD 00000835: DUP1 00000836: PUSH2 0x08ba 00000839: PUSH1 0x26 0000083b: SWAP2 0000083c: CODECOPY 0000083d: PUSH1 0x40 0000083f: ADD 00000840: SWAP2 00000841: POP 00000842: POP 00000843: PUSH1 0x40 00000845: MLOAD 00000846: DUP1 00000847: SWAP2 00000848: SUB 00000849: SWAP1 0000084a: REVERT 0000084b: JUMPDEST 0000084c: PUSH1 0x00 0000084e: DUP1 0000084f: SLOAD 00000850: PUSH1 0x40 00000852: MLOAD 00000853: PUSH1 0x01 00000855: PUSH1 0x01 00000857: PUSH1 0xa0 00000859: SHL 0000085a: SUB 0000085b: DUP1 0000085c: DUP6 0000085d: AND 0000085e: SWAP4 0000085f: SWAP3 00000860: AND 00000861: SWAP2 00000862: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00000883: SWAP2 00000884: LOG3 00000885: PUSH1 0x00 00000887: DUP1 00000888: SLOAD 00000889: PUSH1 0x01 0000088b: PUSH1 0x01 0000088d: PUSH1 0xa0 0000088f: SHL 00000890: SUB 00000891: NOT 00000892: AND 00000893: PUSH1 0x01 00000895: PUSH1 0x01 00000897: PUSH1 0xa0 00000899: SHL 0000089a: SUB 0000089b: SWAP3 0000089c: SWAP1 0000089d: SWAP3 0000089e: AND 0000089f: SWAP2 000008a0: SWAP1 000008a1: SWAP2 000008a2: OR 000008a3: SWAP1 000008a4: SSTORE 000008a5: JUMP 000008a6: JUMPDEST 000008a7: PUSH1 0x01 000008a9: SLOAD 000008aa: PUSH1 0x01 000008ac: PUSH1 0x01 000008ae: PUSH1 0xa0 000008b0: SHL 000008b1: SUB 000008b2: AND 000008b3: DUP2 000008b4: JUMP 000008b5: JUMPDEST 000008b6: CALLER 000008b7: SWAP1 000008b8: JUMP 000008b9: INVALID 000008ba: UNKNOWN(0x4F) 000008bb: PUSH24 0x6e61626c653a206e6577206f776e65722069732074686520 000008d4: PUSH27 0x65726f2061646472657373556e61626c6520746f207472616e7366 000008f0: PUSH6 0x7220746f6b65 000008f7: PUSH15 0x20746f20746865206f776e65722061 00000907: PUSH4 0x636f756e 0000090c: PUSH21 0x556e61626c6520746f207472616e7366657220746f 00000922: PUSH12 0x656e20746f20746865206163 0000092f: PUSH4 0x6f756e74 00000934: UNKNOWN(0x4E) 00000935: PUSH16 0x7420656e6f7567682062616c616e6365 00000946: KECCAK256 00000947: PUSH10 0x6e2074686520636f6e74 00000952: PUSH19 0x6163744f6e6c79206f70657261746f72206361 00000966: PUSH15 0x2063616c6c20746869732066756e63 00000976: PUSH21 0x696f6e2ea26469706673582212206b94b0de213b51 0000098c: UNKNOWN(0xCC) 0000098d: TLOAD 0000098e: ADDMOD 0000098f: PUSH21 0xe4e215bf7300489645a4e902dd1ad7c0f64d7af8d8 000009a5: PUSH5 0x736f6c6343 000009ab: STOP 000009ac: MOD 000009ad: MUL 000009ae: STOP 000009af: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x03468f19d7607191d3939ad0296f427d244227c8b1da2f43b5d19221b0b3b4c0
call_targets:
0x7ffe1ec3b0733e6455c790c6bbf8579e9552566b
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x03468f19d7607191d3939ad0296f427d244227c8b1da2f43b5d19221b0b3b4c0",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x7ffe1ec3b0733e6455c790c6bbf8579e9552566b"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xac7475ed",
"selector": "0xac7475ed",
"calldata_variants": [
"0xac7475ed",
"0xac7475ed0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd0835895",
"selector": "0xd0835895",
"calldata_variants": [
"0xd0835895",
"0xd08358950000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x50baa622",
"selector": "0x50baa622",
"calldata_variants": [
"0x50baa622",
"0x50baa6220000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x88d695b2",
"selector": "0x88d695b2",
"calldata_variants": [
"0x88d695b2",
"0x88d695b20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 841,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1502,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 2,
"guards_detected": [],
"untrusted_call_count": 2
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x03468f19d7607191d3939ad0296f427d244227c8b1da2f43b5d19221b0b3b4c0
call_targets:
0x7ffe1ec3b0733e6455c790c6bbf8579e9552566b
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x03468f19d7607191d3939ad0296f427d244227c8b1da2f43b5d19221b0b3b4c0",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x7ffe1ec3b0733e6455c790c6bbf8579e9552566b"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xac7475ed",
"selector": "0xac7475ed",
"calldata_variants": [
"0xac7475ed",
"0xac7475ed0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd0835895",
"selector": "0xd0835895",
"calldata_variants": [
"0xd0835895",
"0xd08358950000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x50baa622",
"selector": "0x50baa622",
"calldata_variants": [
"0x50baa622",
"0x50baa6220000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x88d695b2",
"selector": "0x88d695b2",
"calldata_variants": [
"0x88d695b2",
"0x88d695b20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 841,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1502,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": []
}
|
| low | access_control | codex | Operator privileges persist after ownership transfer | 65 | no | — |
viewevidence_json{
"evidence": "transferOperator is set in the constructor and only updated via updateOperator; withdrawToken and batchTransfer gate on onlyOperator without checking ownership.",
"locations": [
"contracts/contracts/TokenBatchTransfer.sol:11",
"contracts/contracts/TokenBatchTransfer.sol:23",
"contracts/contracts/TokenBatchTransfer.sol:35",
"contracts/contracts/TokenBatchTransfer.sol:45",
"contracts/contracts/TokenBatchTransfer.sol:57"
],
"recommendation": "When ownership changes, also update or revoke the operator role (e.g., set transferOperator = newOwner inside a custom ownership transfer flow) or allow the owner to set operator to address(0) to disable the role until a new operator is chosen.",
"exploit_scenario": "Alice deploys the contract and is both owner and operator. She later transfers ownership to Bob (e.g., to hand over the airdrop). Because transferOperator is unchanged, Alice still passes onlyOperator and can call withdrawToken or batchTransfer to drain or redirect tokens, even though she is no longer owner."
}
|