d9e06a52-bd3d-4a75-8dc3-fcde65c7345a
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 |
|---|---|---|---|---|
| 30519 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 103973 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 103974 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 103975 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 103976 | capability.graph | complete | 1 / 3 | 1 week ago |
| 103977 | detector.run | complete | 1 / 3 | 1 week ago |
| 103978 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1094450] OpenAI Codex v0.77.0 (research preview)
[codex:1094450] --------
[codex:1094450] workdir: /tmp/codex-multi-rq79bvth
[codex:1094450] model: gpt-5.2-codex
[codex:1094450] provider: openai
[codex:1094450] approval: never
[codex:1094450] sandbox: read-only
[codex:1094450] reasoning effort: xhigh
[codex:1094450] reasoning summaries: auto
[codex:1094450] session id: 019b6ad7-5468-7203-aec5-ba81f2150b7c
[codex:1094450] --------
[codex:1094450] user
[codex:1094450] You are a security auditor. You are given EVM runtime bytecode (and possibly a disassembly) for a contract with NO verified source.
[codex:1094450] This is best-effort. Do not hallucinate: only flag issues when there's a concrete, explainable angle from bytecode/disasm patterns.
[codex:1094450]
[codex:1094450] You MUST read the full `BYTECODE_BUNDLE.txt` before concluding.
[codex:1094450]
[codex:1094450] Output MUST be valid JSON matching the provided schema.
[codex:1094450] - If you cannot identify a concrete issue from bytecode/disasm alone: set no_findings=true and findings=[].
[codex:1094450] - Otherwise: include findings with severity/category/title/evidence and point locations to BYTECODE_BUNDLE.txt line ranges when possible.
[codex:1094450]
[codex:1094450] Output constraints (IMPORTANT):
[codex:1094450] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1094450] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1094450] mcp startup: no servers
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Reading BYTECODE_BUNDLE.txt contents**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc ls in /tmp/codex-multi-rq79bvth succeeded in 6ms:
[codex:1094450] BYTECODE_BUNDLE.txt
[codex:1094450] codex-output-schema.json
[codex:1094450] exec
[codex:1094450] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-rq79bvth succeeded in 5ms:
[codex:1094450] Runtime bytecode bundle for best-effort auditing.
[codex:1094450] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1094450]
[codex:1094450] FILE: runtime_bytecode.hex
[codex:1094450] 0x608060405234801561001057600080fd5b50600436106100635760003560e01c8062e71aaf1161004e578062e71aaf146100905780630f59f83a146100ae57806395ddbc58146100c957600080fd5b806207e964146100685780627a77ff1461007d575b600080fd5b61007b610076366004610775565b6100dc565b005b61007b61008b36600461080f565b61023a565b610098610359565b6040516100a59190610851565b60405180910390f35b6000546040516001600160a01b0390911681526020016100a5565b61007b6100d73660046108b3565b6103bb565b3360009081526002602052604090205460ff168061010457506000546001600160a01b031633145b6101555760405162461bcd60e51b815260206004820152600660248201527f3430333a4f53000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b848114801561016357508083145b6101af5760405162461bcd60e51b815260206004820152600560248201527f3430303a4c000000000000000000000000000000000000000000000000000000604482015260640161014c565b60005b85811015610231576102298787838181106101cf576101cf6108d0565b90506020020160208101906101e491906108b3565b8686848181106101f6576101f66108d0565b905060200201602081019061020b91906108b3565b85858581811061021d5761021d6108d0565b9050602002013561042c565b6001016101b2565b50505050505050565b6000546001600160a01b0316331461027c5760405162461bcd60e51b81526020600482015260056024820152643430333a4f60d81b604482015260640161014c565b60005b6001548110156102de57600060026000600184815481106102a2576102a26108d0565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905560010161027f565b5060005b8181101561034757600160026000858585818110610302576103026108d0565b905060200201602081019061031791906108b3565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016102e2565b50610354600183836106a4565b505050565b606060018054806020026020016040519081016040528092919081815260200182805480156103b157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610393575b5050505050905090565b6000546001600160a01b031633146103fd5760405162461bcd60e51b81526020600482015260056024820152643430333a4f60d81b604482015260640161014c565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092019092526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610354918591906000906104b89084168361051f565b905080516000141580156104dd5750808060200190518101906104db91906108ff565b155b15610354576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161014c565b606061052d83836000610534565b9392505050565b606081471015610572576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161014c565b600080856001600160a01b0316848660405161058e9190610921565b60006040518083038185875af1925050503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e08683836105ea565b9695505050505050565b6060826105ff576105fa8261065f565b61052d565b815115801561061657506001600160a01b0384163b155b15610658576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161014c565b508061052d565b80511561066f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b828054828255906000526020600020908101928215610704579160200282015b8281111561070457815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038435161782556020909201916001909101906106c4565b50610710929150610714565b5090565b5b808211156107105760008155600101610715565b60008083601f84011261073b57600080fd5b50813567ffffffffffffffff81111561075357600080fd5b6020830191508360208260051b850101111561076e57600080fd5b9250929050565b6000806000806000806060878903121561078e57600080fd5b863567ffffffffffffffff808211156107a657600080fd5b6107b28a838b01610729565b909850965060208901359150808211156107cb57600080fd5b6107d78a838b01610729565b909650945060408901359150808211156107f057600080fd5b506107fd89828a01610729565b979a9699509497509295939492505050565b6000806020838503121561082257600080fd5b823567ffffffffffffffff81111561083957600080fd5b61084585828601610729565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156108925783516001600160a01b03168352928401929184019160010161086d565b50909695505050505050565b6001600160a01b03811681146106a157600080fd5b6000602082840312156108c557600080fd5b813561052d8161089e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561091157600080fd5b8151801515811461052d57600080fd5b6000825160005b818110156109425760208186018101518583015201610928565b50600092019182525091905056fea264697066735822122018174e7c060d60c16eaa8d2621705d3326b2030eaaea0f269d8021e9ff1f4ce564736f6c63430008180033
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Preparing for bytecode audit**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-rq79bvth succeeded in 5ms:
[codex:1094450] {"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:1094450]
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Interpreting and analyzing runtime EVM bytecode**
[codex:1094450]
[codex:1094450] I'm manually decoding the contract's runtime bytecode to identify functions, selectors, storage patterns, and access control. I’m mapping selectors to functions like owner(), batchTransfer, setOperators, and transferOwnership, and parsing storage usage to understand dynamic arrays and mappings for operator whitelists. I'm examining internal calls, especially safe ERC20 transfers, to check for patterns and potential vulnerabilities like reentrancy, considering the absence of reentrancy guards and the contract's access controls. This gives me a clearer understanding of the contract’s structure and behavioral logic despite only having bytecode.
[codex:1094450] thinking
[codex:1094450] **Evaluating function argument decoding and planning disassembler script**
[codex:1094450]
[codex:1094450] I'm studying the contract’s argument decoding routines for functions handling dynamic arrays and multiple parameters, trying to understand how parameters like token address, recipients, and amounts are parsed. Since the code involves complex calldata decoding with helper functions, I'm considering running a quick in-memory disassembler script to convert hex bytecode into opcodes for clearer insight into function layouts and parameter patterns. This should help me clarify the contract’s ABI and function boundaries without modifying any files.
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] import sys
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # opcode map
[codex:1094450] opnames={
[codex:1094450] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1094450] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1094450] 0x20:'SHA3',
[codex:1094450] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450] opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450] for i in range(0,1):
[codex:1094450] pass
[codex:1094450]
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450] op=code[pc]
[codex:1094450] name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450] if name.startswith('PUSH'):
[codex:1094450] n=int(name[4:])
[codex:1094450] data=code[pc+1:pc+1+n]
[codex:1094450] out.append((pc,name,'0x'+data.hex()))
[codex:1094450] pc+=1+n
[codex:1094450] else:
[codex:1094450] out.append((pc,name,''))
[codex:1094450] pc+=1
[codex:1094450]
[codex:1094450] # print few around function selectors
[codex:1094450] for pc,name,data in out[:200]:
[codex:1094450] print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 35ms:
[codex:1094450] 0000 PUSH1 0x80
[codex:1094450] 0002 PUSH1 0x40
[codex:1094450] 0004 MSTORE
[codex:1094450] 0005 CALLVALUE
[codex:1094450] 0006 DUP1
[codex:1094450] 0007 ISZERO
[codex:1094450] 0008 PUSH2 0x0010
[codex:1094450] 000b JUMPI
[codex:1094450] 000c PUSH1 0x00
[codex:1094450] 000e DUP1
[codex:1094450] 000f REVERT
[codex:1094450] 0010 JUMPDEST
[codex:1094450] 0011 POP
[codex:1094450] 0012 PUSH1 0x04
[codex:1094450] 0014 CALLDATASIZE
[codex:1094450] 0015 LT
[codex:1094450] 0016 PUSH2 0x0063
[codex:1094450] 0019 JUMPI
[codex:1094450] 001a PUSH1 0x00
[codex:1094450] 001c CALLDATALOAD
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Requesting more disassembler output**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] opnames={
[codex:1094450] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1094450] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1094450] 0x20:'SHA3',
[codex:1094450] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450] opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450]
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450] op=code[pc]
[codex:1094450] name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450] if name.startswith('PUSH'):
[codex:1094450] n=int(name[4:])
[codex:1094450] data=code[pc+1:pc+1+n]
[codex:1094450] out.append((pc,name,'0x'+data.hex()))
[codex:1094450] pc+=1+n
[codex:1094450] else:
[codex:1094450] out.append((pc,name,''))
[codex:1094450] pc+=1
[codex:1094450]
[codex:1094450] # print region 0x00dc-0x0235
[codex:1094450] for pc,name,data in out:
[codex:1094450] if 0x00dc <= pc <= 0x0235:
[codex:1094450] print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 19ms:
[codex:1094450] 00dc JUMPDEST
[codex:1094450] 00dd CALLER
[codex:1094450] 00de PUSH1 0x00
[codex:1094450] 00e0 SWAP1
[codex:1094450] 00e1 DUP2
[codex:1094450] 00e2 MSTORE
[codex:1094450] 00e3 PUSH1 0x02
[codex:1094450] 00e5 PUSH1 0x20
[codex:1094450] 00e7 MSTORE
[codex:1094450] 00e8 PUSH1 0x40
[codex:1094450] 00ea SWAP1
[codex:1094450] 00eb SHA3
[codex:1094450] 00ec SLOAD
[codex:1094450] 00ed PUSH1 0xff
[codex:1094450] 00ef AND
[codex:1094450] 00f0 DUP1
[codex:1094450] 00f1 PUSH2 0x0104
[codex:1094450] 00f4 JUMPI
[codex:1094450] 00f5 POP
[codex:1094450] 00f6 PUSH1 0x00
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Continuing review from offset 0x023a**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # disasm function
[codex:1094450] opnames={
[codex:1094450] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1094450] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1094450] 0x20:'SHA3',
[codex:1094450] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450] opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450]
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450] op=code[pc]
[codex:1094450] name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450] if name.startswith('PUSH'):
[codex:1094450] n=int(name[4:])
[codex:1094450] data=code[pc+1:pc+1+n]
[codex:1094450] out.append((pc,name,'0x'+data.hex()))
[codex:1094450] pc+=1+n
[codex:1094450] else:
[codex:1094450] out.append((pc,name,''))
[codex:1094450] pc+=1
[codex:1094450]
[codex:1094450] for pc,name,data in out:
[codex:1094450] if 0x023a <= pc <= 0x03c5:
[codex:1094450] print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 19ms:
[codex:1094450] 023a JUMPDEST
[codex:1094450] 023b PUSH1 0x00
[codex:1094450] 023d SLOAD
[codex:1094450] 023e PUSH1 0x01
[codex:1094450] 0240 PUSH1 0x01
[codex:1094450] 0242 PUSH1 0xa0
[codex:1094450] 0244 SHL
[codex:1094450] 0245 SUB
[codex:1094450] 0246 AND
[codex:1094450] 0247 CALLER
[codex:1094450] 0248 EQ
[codex:1094450] 0249 PUSH2 0x027c
[codex:1094450] 024c JUMPI
[codex:1094450] 024d PUSH1 0x40
[codex:1094450] 024f MLOAD
[codex:1094450] 0250 PUSH3 0x461bcd
[codex:1094450] 0254 PUSH1 0xe5
[codex:1094450] 0256 SHL
[codex:1094450] 0257 DUP2
[codex:1094450] 0258 MSTORE
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Continuing code inspection near 0x3bb**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # disasm
[codex:1094450] opnames={
[codex:1094450] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1094450] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1094450] 0x20:'SHA3',
[codex:1094450] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450] opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450]
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450] op=code[pc]
[codex:1094450] name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450] if name.startswith('PUSH'):
[codex:1094450] n=int(name[4:])
[codex:1094450] data=code[pc+1:pc+1+n]
[codex:1094450] out.append((pc,name,'0x'+data.hex()))
[codex:1094450] pc+=1+n
[codex:1094450] else:
[codex:1094450] out.append((pc,name,''))
[codex:1094450] pc+=1
[codex:1094450]
[codex:1094450] for pc,name,data in out:
[codex:1094450] if 0x03bb <= pc <= 0x0530:
[codex:1094450] print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 20ms:
[codex:1094450] 03bb JUMPDEST
[codex:1094450] 03bc PUSH1 0x00
[codex:1094450] 03be SLOAD
[codex:1094450] 03bf PUSH1 0x01
[codex:1094450] 03c1 PUSH1 0x01
[codex:1094450] 03c3 PUSH1 0xa0
[codex:1094450] 03c5 SHL
[codex:1094450] 03c6 SUB
[codex:1094450] 03c7 AND
[codex:1094450] 03c8 CALLER
[codex:1094450] 03c9 EQ
[codex:1094450] 03ca PUSH2 0x03fd
[codex:1094450] 03cd JUMPI
[codex:1094450] 03ce PUSH1 0x40
[codex:1094450] 03d0 MLOAD
[codex:1094450] 03d1 PUSH3 0x461bcd
[codex:1094450] 03d5 PUSH1 0xe5
[codex:1094450] 03d7 SHL
[codex:1094450] 03d8 DUP2
[codex:1094450] 03d9 MSTORE
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Requesting more data**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] opnames={
[codex:1094450] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1094450] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1094450] 0x20:'SHA3',
[codex:1094450] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450] opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450]
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450] op=code[pc]
[codex:1094450] name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450] if name.startswith('PUSH'):
[codex:1094450] n=int(name[4:])
[codex:1094450] data=code[pc+1:pc+1+n]
[codex:1094450] out.append((pc,name,'0x'+data.hex()))
[codex:1094450] pc+=1+n
[codex:1094450] else:
[codex:1094450] out.append((pc,name,''))
[codex:1094450] pc+=1
[codex:1094450]
[codex:1094450] for pc,name,data in out:
[codex:1094450] if 0x0530 <= pc <= 0x06a8:
[codex:1094450] print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 19ms:
[codex:1094450] 0530 POP
[codex:1094450] 0531 POP
[codex:1094450] 0532 POP
[codex:1094450] 0533 JUMP
[codex:1094450] 0534 JUMPDEST
[codex:1094450] 0535 PUSH1 0x60
[codex:1094450] 0537 DUP2
[codex:1094450] 0538 SELFBALANCE
[codex:1094450] 0539 LT
[codex:1094450] 053a ISZERO
[codex:1094450] 053b PUSH2 0x0572
[codex:1094450] 053e JUMPI
[codex:1094450] 053f PUSH1 0x40
[codex:1094450] 0541 MLOAD
[codex:1094450] 0542 PUSH32 0xcd78605900000000000000000000000000000000000000000000000000000000
[codex:1094450] 0563 DUP2
[codex:1094450] 0564 MSTORE
[codex:1094450] 0565 ADDRESS
[codex:1094450] 0566 PUSH1 0x04
[codex:1094450] 0568 DUP3
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Continuing code inspection**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # disasm
[codex:1094450] opnames={
[codex:1094450] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1094450] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1094450] 0x20:'SHA3',
[codex:1094450] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450] opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450]
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450] op=code[pc]
[codex:1094450] name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450] if name.startswith('PUSH'):
[codex:1094450] n=int(name[4:])
[codex:1094450] data=code[pc+1:pc+1+n]
[codex:1094450] out.append((pc,name,'0x'+data.hex()))
[codex:1094450] pc+=1+n
[codex:1094450] else:
[codex:1094450] out.append((pc,name,''))
[codex:1094450] pc+=1
[codex:1094450]
[codex:1094450] for pc,name,data in out:
[codex:1094450] if 0x06a4 <= pc <= 0x0745:
[codex:1094450] print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 25ms:
[codex:1094450] 06a4 JUMPDEST
[codex:1094450] 06a5 DUP3
[codex:1094450] 06a6 DUP1
[codex:1094450] 06a7 SLOAD
[codex:1094450] 06a8 DUP3
[codex:1094450] 06a9 DUP3
[codex:1094450] 06aa SSTORE
[codex:1094450] 06ab SWAP1
[codex:1094450] 06ac PUSH1 0x00
[codex:1094450] 06ae MSTORE
[codex:1094450] 06af PUSH1 0x20
[codex:1094450] 06b1 PUSH1 0x00
[codex:1094450] 06b3 SHA3
[codex:1094450] 06b4 SWAP1
[codex:1094450] 06b5 DUP2
[codex:1094450] 06b6 ADD
[codex:1094450] 06b7 SWAP3
[codex:1094450] 06b8 DUP3
[codex:1094450] 06b9 ISZERO
[codex:1094450] 06ba PUSH2 0x0704
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Decoding additional opcode**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # disasm
[codex:1094450] opnames={
[codex:1094450] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1094450] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1094450] 0x20:'SHA3',
[codex:1094450] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450] opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450]
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450] op=code[pc]
[codex:1094450] name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450] if name.startswith('PUSH'):
[codex:1094450] n=int(name[4:])
[codex:1094450] data=code[pc+1:pc+1+n]
[codex:1094450] out.append((pc,name,'0x'+data.hex()))
[codex:1094450] pc+=1+n
[codex:1094450] else:
[codex:1094450] out.append((pc,name,''))
[codex:1094450] pc+=1
[codex:1094450]
[codex:1094450] for pc,name,data in out:
[codex:1094450] if 0x0729 <= pc <= 0x0830:
[codex:1094450] print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 19ms:
[codex:1094450] 0729 JUMPDEST
[codex:1094450] 072a PUSH1 0x00
[codex:1094450] 072c DUP1
[codex:1094450] 072d DUP4
[codex:1094450] 072e PUSH1 0x1f
[codex:1094450] 0730 DUP5
[codex:1094450] 0731 ADD
[codex:1094450] 0732 SLT
[codex:1094450] 0733 PUSH2 0x073b
[codex:1094450] 0736 JUMPI
[codex:1094450] 0737 PUSH1 0x00
[codex:1094450] 0739 DUP1
[codex:1094450] 073a REVERT
[codex:1094450] 073b JUMPDEST
[codex:1094450] 073c POP
[codex:1094450] 073d DUP2
[codex:1094450] 073e CALLDATALOAD
[codex:1094450] 073f PUSH8 0xffffffffffffffff
[codex:1094450] 0748 DUP2
[codex:1094450] 0749 GT
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Continuing to examine decoders**
[codex:1094450] exec
[codex:1094450] /bin/bash -lc "python - <<'PY'
[codex:1094450] from binascii import unhexlify
[codex:1094450] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].split('\\n',1)[1].strip()
[codex:1094450] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1094450] code=unhexlify(hexstr)
[codex:1094450] # disasm
[codex:1094450] opnames={
[codex:1094450] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1094450] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1094450] 0x20:'SHA3',
[codex:1094450] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1094450] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1094450] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1094450] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1094450] }
[codex:1094450] for i in range(1,33):
[codex:1094450] opnames[0x5f+i]=f'PUSH{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x7f+i]=f'DUP{i}'
[codex:1094450] for i in range(1,17):
[codex:1094450] opnames[0x8f+i]=f'SWAP{i}'
[codex:1094450]
[codex:1094450] pc=0
[codex:1094450] out=[]
[codex:1094450] while pc<len(code):
[codex:1094450] op=code[pc]
[codex:1094450] name=opnames.get(op,f'OP_{op:02x}')
[codex:1094450] if name.startswith('PUSH'):
[codex:1094450] n=int(name[4:])
[codex:1094450] data=code[pc+1:pc+1+n]
[codex:1094450] out.append((pc,name,'0x'+data.hex()))
[codex:1094450] pc+=1+n
[codex:1094450] else:
[codex:1094450] out.append((pc,name,''))
[codex:1094450] pc+=1
[codex:1094450]
[codex:1094450] for pc,name,data in out:
[codex:1094450] if 0x0830 <= pc <= 0x0950:
[codex:1094450] print(f\"{pc:04x} {name:10} {data}\")
[codex:1094450] PY" in /tmp/codex-multi-rq79bvth succeeded in 21ms:
[codex:1094450] 0830 ISZERO
[codex:1094450] 0831 PUSH2 0x0839
[codex:1094450] 0834 JUMPI
[codex:1094450] 0835 PUSH1 0x00
[codex:1094450] 0837 DUP1
[codex:1094450] 0838 REVERT
[codex:1094450] 0839 JUMPDEST
[codex:1094450] 083a PUSH2 0x0845
[codex:1094450] 083d DUP6
[codex:1094450] 083e DUP3
[codex:1094450] 083f DUP7
[codex:1094450] 0840 ADD
[codex:1094450] 0841 PUSH2 0x0729
[codex:1094450] 0844 JUMP
[codex:1094450] 0845 JUMPDEST
[codex:1094450] 0846 SWAP1
[codex:1094450] 0847 SWAP7
[codex:1094450] 0848 SWAP1
[codex:1094450] 0849 SWAP6
[codex:1094450] 084a POP
[codex:1094450]
[codex:1094450]
[codex:1094450]
[codex:1094450] thinking
[codex:1094450] **Analyzing batchTransfer function bytecode**
[codex:1094450] thinking
[codex:1094450] **Examining call result verification and access control logic**
[codex:1094450]
[codex:1094450] I’m carefully stepping through the bytecode that verifies returndata and checks call success, confirming it matches standard patterns ensuring calls to tokens are safe. Then I’m analyzing the access control checks combining operator mapping and owner checks, verifying the logic gate correctly restricts function use. I’m also reviewing array length comparisons and loops handling dynamic arrays in batchTransfer for consistent input validation and proper bounds checks.
[codex:1094450] thinking
[codex:1094450] **Summarizing bytecode analysis and findings**
[codex:1094450]
[codex:1094450] I’ve reviewed the bytecode thoroughly, checking for any concrete vulnerabilities such as access control issues, array length mismatches, reentrancy risks, or improper use of calls. The logic for owner and operator permissions appears correctly enforced, array length validations seem sound, and external calls are properly handled with call result verification. Overall, no explicit security flaws or bugs are evident from the disassembly and runtime code.
[codex:1094450] codex
[codex:1094450] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle; no concrete, explainable vulnerability patterns were identified from the bytecode/disassembly alone.","findings":[]}
[codex:1094450] tokens used
[codex:1094450] 69,336
[codex:1094450] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle; no concrete, explainable vulnerability patterns were identified from the bytecode/disassembly alone.","findings":[]}
{
"codex": {
"ran_at": "2025-12-29T16:08:53.488632+00:00",
"returncode": 0
},
"summary": "Reviewed the full runtime bytecode bundle; no concrete, explainable vulnerability patterns were identified from the bytecode/disassembly alone.",
"raw_final": {
"summary": "Reviewed the full runtime bytecode bundle; no concrete, explainable vulnerability patterns were identified from the bytecode/disassembly alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"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 0x0063 00000019: JUMPI 0000001a: PUSH1 0x00 0000001c: CALLDATALOAD 0000001d: PUSH1 0xe0 0000001f: SHR 00000020: DUP1 00000021: PUSH3 0xe71aaf 00000025: GT 00000026: PUSH2 0x004e 00000029: JUMPI 0000002a: DUP1 0000002b: PUSH3 0xe71aaf 0000002f: EQ 00000030: PUSH2 0x0090 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0x0f59f83a 0000003a: EQ 0000003b: PUSH2 0x00ae 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0x95ddbc58 00000045: EQ 00000046: PUSH2 0x00c9 00000049: JUMPI 0000004a: PUSH1 0x00 0000004c: DUP1 0000004d: REVERT 0000004e: JUMPDEST 0000004f: DUP1 00000050: PUSH3 0x07e964 00000054: EQ 00000055: PUSH2 0x0068 00000058: JUMPI 00000059: DUP1 0000005a: PUSH3 0x7a77ff 0000005e: EQ 0000005f: PUSH2 0x007d 00000062: JUMPI 00000063: JUMPDEST 00000064: PUSH1 0x00 00000066: DUP1 00000067: REVERT 00000068: JUMPDEST 00000069: PUSH2 0x007b 0000006c: PUSH2 0x0076 0000006f: CALLDATASIZE 00000070: PUSH1 0x04 00000072: PUSH2 0x0775 00000075: JUMP 00000076: JUMPDEST 00000077: PUSH2 0x00dc 0000007a: JUMP 0000007b: JUMPDEST 0000007c: STOP 0000007d: JUMPDEST 0000007e: PUSH2 0x007b 00000081: PUSH2 0x008b 00000084: CALLDATASIZE 00000085: PUSH1 0x04 00000087: PUSH2 0x080f 0000008a: JUMP 0000008b: JUMPDEST 0000008c: PUSH2 0x023a 0000008f: JUMP 00000090: JUMPDEST 00000091: PUSH2 0x0098 00000094: PUSH2 0x0359 00000097: JUMP 00000098: JUMPDEST 00000099: PUSH1 0x40 0000009b: MLOAD 0000009c: PUSH2 0x00a5 0000009f: SWAP2 000000a0: SWAP1 000000a1: PUSH2 0x0851 000000a4: JUMP 000000a5: JUMPDEST 000000a6: PUSH1 0x40 000000a8: MLOAD 000000a9: DUP1 000000aa: SWAP2 000000ab: SUB 000000ac: SWAP1 000000ad: RETURN 000000ae: JUMPDEST 000000af: PUSH1 0x00 000000b1: SLOAD 000000b2: PUSH1 0x40 000000b4: MLOAD 000000b5: PUSH1 0x01 000000b7: PUSH1 0x01 000000b9: PUSH1 0xa0 000000bb: SHL 000000bc: SUB 000000bd: SWAP1 000000be: SWAP2 000000bf: AND 000000c0: DUP2 000000c1: MSTORE 000000c2: PUSH1 0x20 000000c4: ADD 000000c5: PUSH2 0x00a5 000000c8: JUMP 000000c9: JUMPDEST 000000ca: PUSH2 0x007b 000000cd: PUSH2 0x00d7 000000d0: CALLDATASIZE 000000d1: PUSH1 0x04 000000d3: PUSH2 0x08b3 000000d6: JUMP 000000d7: JUMPDEST 000000d8: PUSH2 0x03bb 000000db: JUMP 000000dc: JUMPDEST 000000dd: CALLER 000000de: PUSH1 0x00 000000e0: SWAP1 000000e1: DUP2 000000e2: MSTORE 000000e3: PUSH1 0x02 000000e5: PUSH1 0x20 000000e7: MSTORE 000000e8: PUSH1 0x40 000000ea: SWAP1 000000eb: KECCAK256 000000ec: SLOAD 000000ed: PUSH1 0xff 000000ef: AND 000000f0: DUP1 000000f1: PUSH2 0x0104 000000f4: JUMPI 000000f5: POP 000000f6: PUSH1 0x00 000000f8: SLOAD 000000f9: PUSH1 0x01 000000fb: PUSH1 0x01 000000fd: PUSH1 0xa0 000000ff: SHL 00000100: SUB 00000101: AND 00000102: CALLER 00000103: EQ 00000104: JUMPDEST 00000105: PUSH2 0x0155 00000108: JUMPI 00000109: PUSH1 0x40 0000010b: MLOAD 0000010c: PUSH3 0x461bcd 00000110: PUSH1 0xe5 00000112: SHL 00000113: DUP2 00000114: MSTORE 00000115: PUSH1 0x20 00000117: PUSH1 0x04 00000119: DUP3 0000011a: ADD 0000011b: MSTORE 0000011c: PUSH1 0x06 0000011e: PUSH1 0x24 00000120: DUP3 00000121: ADD 00000122: MSTORE 00000123: PUSH32 0x3430333a4f530000000000000000000000000000000000000000000000000000 00000144: PUSH1 0x44 00000146: DUP3 00000147: ADD 00000148: MSTORE 00000149: PUSH1 0x64 0000014b: ADD 0000014c: JUMPDEST 0000014d: PUSH1 0x40 0000014f: MLOAD 00000150: DUP1 00000151: SWAP2 00000152: SUB 00000153: SWAP1 00000154: REVERT 00000155: JUMPDEST 00000156: DUP5 00000157: DUP2 00000158: EQ 00000159: DUP1 0000015a: ISZERO 0000015b: PUSH2 0x0163 0000015e: JUMPI 0000015f: POP 00000160: DUP1 00000161: DUP4 00000162: EQ 00000163: JUMPDEST 00000164: PUSH2 0x01af 00000167: JUMPI 00000168: PUSH1 0x40 0000016a: MLOAD 0000016b: PUSH3 0x461bcd 0000016f: PUSH1 0xe5 00000171: SHL 00000172: DUP2 00000173: MSTORE 00000174: PUSH1 0x20 00000176: PUSH1 0x04 00000178: DUP3 00000179: ADD 0000017a: MSTORE 0000017b: PUSH1 0x05 0000017d: PUSH1 0x24 0000017f: DUP3 00000180: ADD 00000181: MSTORE 00000182: PUSH32 0x3430303a4c000000000000000000000000000000000000000000000000000000 000001a3: PUSH1 0x44 000001a5: DUP3 000001a6: ADD 000001a7: MSTORE 000001a8: PUSH1 0x64 000001aa: ADD 000001ab: PUSH2 0x014c 000001ae: JUMP 000001af: JUMPDEST 000001b0: PUSH1 0x00 000001b2: JUMPDEST 000001b3: DUP6 000001b4: DUP2 000001b5: LT 000001b6: ISZERO 000001b7: PUSH2 0x0231 000001ba: JUMPI 000001bb: PUSH2 0x0229 000001be: DUP8 000001bf: DUP8 000001c0: DUP4 000001c1: DUP2 000001c2: DUP2 000001c3: LT 000001c4: PUSH2 0x01cf 000001c7: JUMPI 000001c8: PUSH2 0x01cf 000001cb: PUSH2 0x08d0 000001ce: JUMP 000001cf: JUMPDEST 000001d0: SWAP1 000001d1: POP 000001d2: PUSH1 0x20 000001d4: MUL 000001d5: ADD 000001d6: PUSH1 0x20 000001d8: DUP2 000001d9: ADD 000001da: SWAP1 000001db: PUSH2 0x01e4 000001de: SWAP2 000001df: SWAP1 000001e0: PUSH2 0x08b3 000001e3: JUMP 000001e4: JUMPDEST 000001e5: DUP7 000001e6: DUP7 000001e7: DUP5 000001e8: DUP2 000001e9: DUP2 000001ea: LT 000001eb: PUSH2 0x01f6 000001ee: JUMPI 000001ef: PUSH2 0x01f6 000001f2: PUSH2 0x08d0 000001f5: JUMP 000001f6: JUMPDEST 000001f7: SWAP1 000001f8: POP 000001f9: PUSH1 0x20 000001fb: MUL 000001fc: ADD 000001fd: PUSH1 0x20 000001ff: DUP2 00000200: ADD 00000201: SWAP1 00000202: PUSH2 0x020b 00000205: SWAP2 00000206: SWAP1 00000207: PUSH2 0x08b3 0000020a: JUMP 0000020b: JUMPDEST 0000020c: DUP6 0000020d: DUP6 0000020e: DUP6 0000020f: DUP2 00000210: DUP2 00000211: LT 00000212: PUSH2 0x021d 00000215: JUMPI 00000216: PUSH2 0x021d 00000219: PUSH2 0x08d0 0000021c: JUMP 0000021d: JUMPDEST 0000021e: SWAP1 0000021f: POP 00000220: PUSH1 0x20 00000222: MUL 00000223: ADD 00000224: CALLDATALOAD 00000225: PUSH2 0x042c 00000228: JUMP 00000229: JUMPDEST 0000022a: PUSH1 0x01 0000022c: ADD 0000022d: PUSH2 0x01b2 00000230: JUMP 00000231: JUMPDEST 00000232: POP 00000233: POP 00000234: POP 00000235: POP 00000236: POP 00000237: POP 00000238: POP 00000239: JUMP 0000023a: JUMPDEST 0000023b: PUSH1 0x00 0000023d: SLOAD 0000023e: PUSH1 0x01 00000240: PUSH1 0x01 00000242: PUSH1 0xa0 00000244: SHL 00000245: SUB 00000246: AND 00000247: CALLER 00000248: EQ 00000249: PUSH2 0x027c 0000024c: JUMPI 0000024d: PUSH1 0x40 0000024f: MLOAD 00000250: PUSH3 0x461bcd 00000254: PUSH1 0xe5 00000256: SHL 00000257: DUP2 00000258: MSTORE 00000259: PUSH1 0x20 0000025b: PUSH1 0x04 0000025d: DUP3 0000025e: ADD 0000025f: MSTORE 00000260: PUSH1 0x05 00000262: PUSH1 0x24 00000264: DUP3 00000265: ADD 00000266: MSTORE 00000267: PUSH5 0x3430333a4f 0000026d: PUSH1 0xd8 0000026f: SHL 00000270: PUSH1 0x44 00000272: DUP3 00000273: ADD 00000274: MSTORE 00000275: PUSH1 0x64 00000277: ADD 00000278: PUSH2 0x014c 0000027b: JUMP 0000027c: JUMPDEST 0000027d: PUSH1 0x00 0000027f: JUMPDEST 00000280: PUSH1 0x01 00000282: SLOAD 00000283: DUP2 00000284: LT 00000285: ISZERO 00000286: PUSH2 0x02de 00000289: JUMPI 0000028a: PUSH1 0x00 0000028c: PUSH1 0x02 0000028e: PUSH1 0x00 00000290: PUSH1 0x01 00000292: DUP5 00000293: DUP2 00000294: SLOAD 00000295: DUP2 00000296: LT 00000297: PUSH2 0x02a2 0000029a: JUMPI 0000029b: PUSH2 0x02a2 0000029e: PUSH2 0x08d0 000002a1: JUMP 000002a2: JUMPDEST 000002a3: PUSH1 0x00 000002a5: SWAP2 000002a6: DUP3 000002a7: MSTORE 000002a8: PUSH1 0x20 000002aa: DUP1 000002ab: DUP4 000002ac: KECCAK256 000002ad: SWAP2 000002ae: SWAP1 000002af: SWAP2 000002b0: ADD 000002b1: SLOAD 000002b2: PUSH1 0x01 000002b4: PUSH1 0x01 000002b6: PUSH1 0xa0 000002b8: SHL 000002b9: SUB 000002ba: AND 000002bb: DUP4 000002bc: MSTORE 000002bd: DUP3 000002be: ADD 000002bf: SWAP3 000002c0: SWAP1 000002c1: SWAP3 000002c2: MSTORE 000002c3: PUSH1 0x40 000002c5: ADD 000002c6: SWAP1 000002c7: KECCAK256 000002c8: DUP1 000002c9: SLOAD 000002ca: PUSH1 0xff 000002cc: NOT 000002cd: AND 000002ce: SWAP2 000002cf: ISZERO 000002d0: ISZERO 000002d1: SWAP2 000002d2: SWAP1 000002d3: SWAP2 000002d4: OR 000002d5: SWAP1 000002d6: SSTORE 000002d7: PUSH1 0x01 000002d9: ADD 000002da: PUSH2 0x027f 000002dd: JUMP 000002de: JUMPDEST 000002df: POP 000002e0: PUSH1 0x00 000002e2: JUMPDEST 000002e3: DUP2 000002e4: DUP2 000002e5: LT 000002e6: ISZERO 000002e7: PUSH2 0x0347 000002ea: JUMPI 000002eb: PUSH1 0x01 000002ed: PUSH1 0x02 000002ef: PUSH1 0x00 000002f1: DUP6 000002f2: DUP6 000002f3: DUP6 000002f4: DUP2 000002f5: DUP2 000002f6: LT 000002f7: PUSH2 0x0302 000002fa: JUMPI 000002fb: PUSH2 0x0302 000002fe: PUSH2 0x08d0 00000301: JUMP 00000302: JUMPDEST 00000303: SWAP1 00000304: POP 00000305: PUSH1 0x20 00000307: MUL 00000308: ADD 00000309: PUSH1 0x20 0000030b: DUP2 0000030c: ADD 0000030d: SWAP1 0000030e: PUSH2 0x0317 00000311: SWAP2 00000312: SWAP1 00000313: PUSH2 0x08b3 00000316: JUMP 00000317: JUMPDEST 00000318: PUSH1 0x01 0000031a: PUSH1 0x01 0000031c: PUSH1 0xa0 0000031e: SHL 0000031f: SUB 00000320: AND 00000321: DUP2 00000322: MSTORE 00000323: PUSH1 0x20 00000325: DUP2 00000326: ADD 00000327: SWAP2 00000328: SWAP1 00000329: SWAP2 0000032a: MSTORE 0000032b: PUSH1 0x40 0000032d: ADD 0000032e: PUSH1 0x00 00000330: KECCAK256 00000331: DUP1 00000332: SLOAD 00000333: PUSH1 0xff 00000335: NOT 00000336: AND 00000337: SWAP2 00000338: ISZERO 00000339: ISZERO 0000033a: SWAP2 0000033b: SWAP1 0000033c: SWAP2 0000033d: OR 0000033e: SWAP1 0000033f: SSTORE 00000340: PUSH1 0x01 00000342: ADD 00000343: PUSH2 0x02e2 00000346: JUMP 00000347: JUMPDEST 00000348: POP 00000349: PUSH2 0x0354 0000034c: PUSH1 0x01 0000034e: DUP4 0000034f: DUP4 00000350: PUSH2 0x06a4 00000353: JUMP 00000354: JUMPDEST 00000355: POP 00000356: POP 00000357: POP 00000358: JUMP 00000359: JUMPDEST 0000035a: PUSH1 0x60 0000035c: PUSH1 0x01 0000035e: DUP1 0000035f: SLOAD 00000360: DUP1 00000361: PUSH1 0x20 00000363: MUL 00000364: PUSH1 0x20 00000366: ADD 00000367: PUSH1 0x40 00000369: MLOAD 0000036a: SWAP1 0000036b: DUP2 0000036c: ADD 0000036d: PUSH1 0x40 0000036f: MSTORE 00000370: DUP1 00000371: SWAP3 00000372: SWAP2 00000373: SWAP1 00000374: DUP2 00000375: DUP2 00000376: MSTORE 00000377: PUSH1 0x20 00000379: ADD 0000037a: DUP3 0000037b: DUP1 0000037c: SLOAD 0000037d: DUP1 0000037e: ISZERO 0000037f: PUSH2 0x03b1 00000382: JUMPI 00000383: PUSH1 0x20 00000385: MUL 00000386: DUP3 00000387: ADD 00000388: SWAP2 00000389: SWAP1 0000038a: PUSH1 0x00 0000038c: MSTORE 0000038d: PUSH1 0x20 0000038f: PUSH1 0x00 00000391: KECCAK256 00000392: SWAP1 00000393: JUMPDEST 00000394: DUP2 00000395: SLOAD 00000396: PUSH1 0x01 00000398: PUSH1 0x01 0000039a: PUSH1 0xa0 0000039c: SHL 0000039d: SUB 0000039e: AND 0000039f: DUP2 000003a0: MSTORE 000003a1: PUSH1 0x01 000003a3: SWAP1 000003a4: SWAP2 000003a5: ADD 000003a6: SWAP1 000003a7: PUSH1 0x20 000003a9: ADD 000003aa: DUP1 000003ab: DUP4 000003ac: GT 000003ad: PUSH2 0x0393 000003b0: JUMPI 000003b1: JUMPDEST 000003b2: POP 000003b3: POP 000003b4: POP 000003b5: POP 000003b6: POP 000003b7: SWAP1 000003b8: POP 000003b9: SWAP1 000003ba: JUMP 000003bb: JUMPDEST 000003bc: PUSH1 0x00 000003be: SLOAD 000003bf: PUSH1 0x01 000003c1: PUSH1 0x01 000003c3: PUSH1 0xa0 000003c5: SHL 000003c6: SUB 000003c7: AND 000003c8: CALLER 000003c9: EQ 000003ca: PUSH2 0x03fd 000003cd: JUMPI 000003ce: PUSH1 0x40 000003d0: MLOAD 000003d1: PUSH3 0x461bcd 000003d5: PUSH1 0xe5 000003d7: SHL 000003d8: DUP2 000003d9: MSTORE 000003da: PUSH1 0x20 000003dc: PUSH1 0x04 000003de: DUP3 000003df: ADD 000003e0: MSTORE 000003e1: PUSH1 0x05 000003e3: PUSH1 0x24 000003e5: DUP3 000003e6: ADD 000003e7: MSTORE 000003e8: PUSH5 0x3430333a4f 000003ee: PUSH1 0xd8 000003f0: SHL 000003f1: PUSH1 0x44 000003f3: DUP3 000003f4: ADD 000003f5: MSTORE 000003f6: PUSH1 0x64 000003f8: ADD 000003f9: PUSH2 0x014c 000003fc: JUMP 000003fd: JUMPDEST 000003fe: PUSH1 0x00 00000400: DUP1 00000401: SLOAD 00000402: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000417: NOT 00000418: AND 00000419: PUSH1 0x01 0000041b: PUSH1 0x01 0000041d: PUSH1 0xa0 0000041f: SHL 00000420: SUB 00000421: SWAP3 00000422: SWAP1 00000423: SWAP3 00000424: AND 00000425: SWAP2 00000426: SWAP1 00000427: SWAP2 00000428: OR 00000429: SWAP1 0000042a: SSTORE 0000042b: JUMP 0000042c: JUMPDEST 0000042d: PUSH1 0x40 0000042f: DUP1 00000430: MLOAD 00000431: PUSH1 0x01 00000433: PUSH1 0x01 00000435: PUSH1 0xa0 00000437: SHL 00000438: SUB 00000439: DUP5 0000043a: DUP2 0000043b: AND 0000043c: PUSH1 0x24 0000043e: DUP4 0000043f: ADD 00000440: MSTORE 00000441: PUSH1 0x44 00000443: DUP1 00000444: DUP4 00000445: ADD 00000446: DUP6 00000447: SWAP1 00000448: MSTORE 00000449: DUP4 0000044a: MLOAD 0000044b: DUP1 0000044c: DUP5 0000044d: SUB 0000044e: SWAP1 0000044f: SWAP2 00000450: ADD 00000451: DUP2 00000452: MSTORE 00000453: PUSH1 0x64 00000455: SWAP1 00000456: SWAP3 00000457: ADD 00000458: SWAP1 00000459: SWAP3 0000045a: MSTORE 0000045b: PUSH1 0x20 0000045d: DUP2 0000045e: ADD 0000045f: DUP1 00000460: MLOAD 00000461: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0000047e: AND 0000047f: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 000004a0: OR 000004a1: SWAP1 000004a2: MSTORE 000004a3: PUSH2 0x0354 000004a6: SWAP2 000004a7: DUP6 000004a8: SWAP2 000004a9: SWAP1 000004aa: PUSH1 0x00 000004ac: SWAP1 000004ad: PUSH2 0x04b8 000004b0: SWAP1 000004b1: DUP5 000004b2: AND 000004b3: DUP4 000004b4: PUSH2 0x051f 000004b7: JUMP 000004b8: JUMPDEST 000004b9: SWAP1 000004ba: POP 000004bb: DUP1 000004bc: MLOAD 000004bd: PUSH1 0x00 000004bf: EQ 000004c0: ISZERO 000004c1: DUP1 000004c2: ISZERO 000004c3: PUSH2 0x04dd 000004c6: JUMPI 000004c7: POP 000004c8: DUP1 000004c9: DUP1 000004ca: PUSH1 0x20 000004cc: ADD 000004cd: SWAP1 000004ce: MLOAD 000004cf: DUP2 000004d0: ADD 000004d1: SWAP1 000004d2: PUSH2 0x04db 000004d5: SWAP2 000004d6: SWAP1 000004d7: PUSH2 0x08ff 000004da: JUMP 000004db: JUMPDEST 000004dc: ISZERO 000004dd: JUMPDEST 000004de: ISZERO 000004df: PUSH2 0x0354 000004e2: JUMPI 000004e3: PUSH1 0x40 000004e5: MLOAD 000004e6: PUSH32 0x5274afe700000000000000000000000000000000000000000000000000000000 00000507: DUP2 00000508: MSTORE 00000509: PUSH1 0x01 0000050b: PUSH1 0x01 0000050d: PUSH1 0xa0 0000050f: SHL 00000510: SUB 00000511: DUP5 00000512: AND 00000513: PUSH1 0x04 00000515: DUP3 00000516: ADD 00000517: MSTORE 00000518: PUSH1 0x24 0000051a: ADD 0000051b: PUSH2 0x014c 0000051e: JUMP 0000051f: JUMPDEST 00000520: PUSH1 0x60 00000522: PUSH2 0x052d 00000525: DUP4 00000526: DUP4 00000527: PUSH1 0x00 00000529: PUSH2 0x0534 0000052c: JUMP 0000052d: JUMPDEST 0000052e: SWAP4 0000052f: SWAP3 00000530: POP 00000531: POP 00000532: POP 00000533: JUMP 00000534: JUMPDEST 00000535: PUSH1 0x60 00000537: DUP2 00000538: SELFBALANCE 00000539: LT 0000053a: ISZERO 0000053b: PUSH2 0x0572 0000053e: JUMPI 0000053f: PUSH1 0x40 00000541: MLOAD 00000542: PUSH32 0xcd78605900000000000000000000000000000000000000000000000000000000 00000563: DUP2 00000564: MSTORE 00000565: ADDRESS 00000566: PUSH1 0x04 00000568: DUP3 00000569: ADD 0000056a: MSTORE 0000056b: PUSH1 0x24 0000056d: ADD 0000056e: PUSH2 0x014c 00000571: JUMP 00000572: JUMPDEST 00000573: PUSH1 0x00 00000575: DUP1 00000576: DUP6 00000577: PUSH1 0x01 00000579: PUSH1 0x01 0000057b: PUSH1 0xa0 0000057d: SHL 0000057e: SUB 0000057f: AND 00000580: DUP5 00000581: DUP7 00000582: PUSH1 0x40 00000584: MLOAD 00000585: PUSH2 0x058e 00000588: SWAP2 00000589: SWAP1 0000058a: PUSH2 0x0921 0000058d: JUMP 0000058e: JUMPDEST 0000058f: PUSH1 0x00 00000591: PUSH1 0x40 00000593: MLOAD 00000594: DUP1 00000595: DUP4 00000596: SUB 00000597: DUP2 00000598: DUP6 00000599: DUP8 0000059a: GAS 0000059b: CALL 0000059c: SWAP3 0000059d: POP 0000059e: POP 0000059f: POP 000005a0: RETURNDATASIZE 000005a1: DUP1 000005a2: PUSH1 0x00 000005a4: DUP2 000005a5: EQ 000005a6: PUSH2 0x05cb 000005a9: JUMPI 000005aa: PUSH1 0x40 000005ac: MLOAD 000005ad: SWAP2 000005ae: POP 000005af: PUSH1 0x1f 000005b1: NOT 000005b2: PUSH1 0x3f 000005b4: RETURNDATASIZE 000005b5: ADD 000005b6: AND 000005b7: DUP3 000005b8: ADD 000005b9: PUSH1 0x40 000005bb: MSTORE 000005bc: RETURNDATASIZE 000005bd: DUP3 000005be: MSTORE 000005bf: RETURNDATASIZE 000005c0: PUSH1 0x00 000005c2: PUSH1 0x20 000005c4: DUP5 000005c5: ADD 000005c6: RETURNDATACOPY 000005c7: PUSH2 0x05d0 000005ca: JUMP 000005cb: JUMPDEST 000005cc: PUSH1 0x60 000005ce: SWAP2 000005cf: POP 000005d0: JUMPDEST 000005d1: POP 000005d2: SWAP2 000005d3: POP 000005d4: SWAP2 000005d5: POP 000005d6: PUSH2 0x05e0 000005d9: DUP7 000005da: DUP4 000005db: DUP4 000005dc: PUSH2 0x05ea 000005df: JUMP 000005e0: JUMPDEST 000005e1: SWAP7 000005e2: SWAP6 000005e3: POP 000005e4: POP 000005e5: POP 000005e6: POP 000005e7: POP 000005e8: POP 000005e9: JUMP 000005ea: JUMPDEST 000005eb: PUSH1 0x60 000005ed: DUP3 000005ee: PUSH2 0x05ff 000005f1: JUMPI 000005f2: PUSH2 0x05fa 000005f5: DUP3 000005f6: PUSH2 0x065f 000005f9: JUMP 000005fa: JUMPDEST 000005fb: PUSH2 0x052d 000005fe: JUMP 000005ff: JUMPDEST 00000600: DUP2 00000601: MLOAD 00000602: ISZERO 00000603: DUP1 00000604: ISZERO 00000605: PUSH2 0x0616 00000608: JUMPI 00000609: POP 0000060a: PUSH1 0x01 0000060c: PUSH1 0x01 0000060e: PUSH1 0xa0 00000610: SHL 00000611: SUB 00000612: DUP5 00000613: AND 00000614: EXTCODESIZE 00000615: ISZERO 00000616: JUMPDEST 00000617: ISZERO 00000618: PUSH2 0x0658 0000061b: JUMPI 0000061c: PUSH1 0x40 0000061e: MLOAD 0000061f: PUSH32 0x9996b31500000000000000000000000000000000000000000000000000000000 00000640: DUP2 00000641: MSTORE 00000642: PUSH1 0x01 00000644: PUSH1 0x01 00000646: PUSH1 0xa0 00000648: SHL 00000649: SUB 0000064a: DUP6 0000064b: AND 0000064c: PUSH1 0x04 0000064e: DUP3 0000064f: ADD 00000650: MSTORE 00000651: PUSH1 0x24 00000653: ADD 00000654: PUSH2 0x014c 00000657: JUMP 00000658: JUMPDEST 00000659: POP 0000065a: DUP1 0000065b: PUSH2 0x052d 0000065e: JUMP 0000065f: JUMPDEST 00000660: DUP1 00000661: MLOAD 00000662: ISZERO 00000663: PUSH2 0x066f 00000666: JUMPI 00000667: DUP1 00000668: MLOAD 00000669: DUP1 0000066a: DUP3 0000066b: PUSH1 0x20 0000066d: ADD 0000066e: REVERT 0000066f: JUMPDEST 00000670: PUSH1 0x40 00000672: MLOAD 00000673: PUSH32 0x1425ea4200000000000000000000000000000000000000000000000000000000 00000694: DUP2 00000695: MSTORE 00000696: PUSH1 0x04 00000698: ADD 00000699: PUSH1 0x40 0000069b: MLOAD 0000069c: DUP1 0000069d: SWAP2 0000069e: SUB 0000069f: SWAP1 000006a0: REVERT 000006a1: JUMPDEST 000006a2: POP 000006a3: JUMP 000006a4: JUMPDEST 000006a5: DUP3 000006a6: DUP1 000006a7: SLOAD 000006a8: DUP3 000006a9: DUP3 000006aa: SSTORE 000006ab: SWAP1 000006ac: PUSH1 0x00 000006ae: MSTORE 000006af: PUSH1 0x20 000006b1: PUSH1 0x00 000006b3: KECCAK256 000006b4: SWAP1 000006b5: DUP2 000006b6: ADD 000006b7: SWAP3 000006b8: DUP3 000006b9: ISZERO 000006ba: PUSH2 0x0704 000006bd: JUMPI 000006be: SWAP2 000006bf: PUSH1 0x20 000006c1: MUL 000006c2: DUP3 000006c3: ADD 000006c4: JUMPDEST 000006c5: DUP3 000006c6: DUP2 000006c7: GT 000006c8: ISZERO 000006c9: PUSH2 0x0704 000006cc: JUMPI 000006cd: DUP2 000006ce: SLOAD 000006cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006e4: NOT 000006e5: AND 000006e6: PUSH1 0x01 000006e8: PUSH1 0x01 000006ea: PUSH1 0xa0 000006ec: SHL 000006ed: SUB 000006ee: DUP5 000006ef: CALLDATALOAD 000006f0: AND 000006f1: OR 000006f2: DUP3 000006f3: SSTORE 000006f4: PUSH1 0x20 000006f6: SWAP1 000006f7: SWAP3 000006f8: ADD 000006f9: SWAP2 000006fa: PUSH1 0x01 000006fc: SWAP1 000006fd: SWAP2 000006fe: ADD 000006ff: SWAP1 00000700: PUSH2 0x06c4 00000703: JUMP 00000704: JUMPDEST 00000705: POP 00000706: PUSH2 0x0710 00000709: SWAP3 0000070a: SWAP2 0000070b: POP 0000070c: PUSH2 0x0714 0000070f: JUMP 00000710: JUMPDEST 00000711: POP 00000712: SWAP1 00000713: JUMP 00000714: JUMPDEST 00000715: JUMPDEST 00000716: DUP1 00000717: DUP3 00000718: GT 00000719: ISZERO 0000071a: PUSH2 0x0710 0000071d: JUMPI 0000071e: PUSH1 0x00 00000720: DUP2 00000721: SSTORE 00000722: PUSH1 0x01 00000724: ADD 00000725: PUSH2 0x0715 00000728: JUMP 00000729: JUMPDEST 0000072a: PUSH1 0x00 0000072c: DUP1 0000072d: DUP4 0000072e: PUSH1 0x1f 00000730: DUP5 00000731: ADD 00000732: SLT 00000733: PUSH2 0x073b 00000736: JUMPI 00000737: PUSH1 0x00 00000739: DUP1 0000073a: REVERT 0000073b: JUMPDEST 0000073c: POP 0000073d: DUP2 0000073e: CALLDATALOAD 0000073f: PUSH8 0xffffffffffffffff 00000748: DUP2 00000749: GT 0000074a: ISZERO 0000074b: PUSH2 0x0753 0000074e: JUMPI 0000074f: PUSH1 0x00 00000751: DUP1 00000752: REVERT 00000753: JUMPDEST 00000754: PUSH1 0x20 00000756: DUP4 00000757: ADD 00000758: SWAP2 00000759: POP 0000075a: DUP4 0000075b: PUSH1 0x20 0000075d: DUP3 0000075e: PUSH1 0x05 00000760: SHL 00000761: DUP6 00000762: ADD 00000763: ADD 00000764: GT 00000765: ISZERO 00000766: PUSH2 0x076e 00000769: JUMPI 0000076a: PUSH1 0x00 0000076c: DUP1 0000076d: REVERT 0000076e: JUMPDEST 0000076f: SWAP3 00000770: POP 00000771: SWAP3 00000772: SWAP1 00000773: POP 00000774: JUMP 00000775: JUMPDEST 00000776: PUSH1 0x00 00000778: DUP1 00000779: PUSH1 0x00 0000077b: DUP1 0000077c: PUSH1 0x00 0000077e: DUP1 0000077f: PUSH1 0x60 00000781: DUP8 00000782: DUP10 00000783: SUB 00000784: SLT 00000785: ISZERO 00000786: PUSH2 0x078e 00000789: JUMPI 0000078a: PUSH1 0x00 0000078c: DUP1 0000078d: REVERT 0000078e: JUMPDEST 0000078f: DUP7 00000790: CALLDATALOAD 00000791: PUSH8 0xffffffffffffffff 0000079a: DUP1 0000079b: DUP3 0000079c: GT 0000079d: ISZERO 0000079e: PUSH2 0x07a6 000007a1: JUMPI 000007a2: PUSH1 0x00 000007a4: DUP1 000007a5: REVERT 000007a6: JUMPDEST 000007a7: PUSH2 0x07b2 000007aa: DUP11 000007ab: DUP4 000007ac: DUP12 000007ad: ADD 000007ae: PUSH2 0x0729 000007b1: JUMP 000007b2: JUMPDEST 000007b3: SWAP1 000007b4: SWAP9 000007b5: POP 000007b6: SWAP7 000007b7: POP 000007b8: PUSH1 0x20 000007ba: DUP10 000007bb: ADD 000007bc: CALLDATALOAD 000007bd: SWAP2 000007be: POP 000007bf: DUP1 000007c0: DUP3 000007c1: GT 000007c2: ISZERO 000007c3: PUSH2 0x07cb 000007c6: JUMPI 000007c7: PUSH1 0x00 000007c9: DUP1 000007ca: REVERT 000007cb: JUMPDEST 000007cc: PUSH2 0x07d7 000007cf: DUP11 000007d0: DUP4 000007d1: DUP12 000007d2: ADD 000007d3: PUSH2 0x0729 000007d6: JUMP 000007d7: JUMPDEST 000007d8: SWAP1 000007d9: SWAP7 000007da: POP 000007db: SWAP5 000007dc: POP 000007dd: PUSH1 0x40 000007df: DUP10 000007e0: ADD 000007e1: CALLDATALOAD 000007e2: SWAP2 000007e3: POP 000007e4: DUP1 000007e5: DUP3 000007e6: GT 000007e7: ISZERO 000007e8: PUSH2 0x07f0 000007eb: JUMPI 000007ec: PUSH1 0x00 000007ee: DUP1 000007ef: REVERT 000007f0: JUMPDEST 000007f1: POP 000007f2: PUSH2 0x07fd 000007f5: DUP10 000007f6: DUP3 000007f7: DUP11 000007f8: ADD 000007f9: PUSH2 0x0729 000007fc: JUMP 000007fd: JUMPDEST 000007fe: SWAP8 000007ff: SWAP11 00000800: SWAP7 00000801: SWAP10 00000802: POP 00000803: SWAP5 00000804: SWAP8 00000805: POP 00000806: SWAP3 00000807: SWAP6 00000808: SWAP4 00000809: SWAP5 0000080a: SWAP3 0000080b: POP 0000080c: POP 0000080d: POP 0000080e: JUMP 0000080f: JUMPDEST 00000810: PUSH1 0x00 00000812: DUP1 00000813: PUSH1 0x20 00000815: DUP4 00000816: DUP6 00000817: SUB 00000818: SLT 00000819: ISZERO 0000081a: PUSH2 0x0822 0000081d: JUMPI 0000081e: PUSH1 0x00 00000820: DUP1 00000821: REVERT 00000822: JUMPDEST 00000823: DUP3 00000824: CALLDATALOAD 00000825: PUSH8 0xffffffffffffffff 0000082e: DUP2 0000082f: GT 00000830: ISZERO 00000831: PUSH2 0x0839 00000834: JUMPI 00000835: PUSH1 0x00 00000837: DUP1 00000838: REVERT 00000839: JUMPDEST 0000083a: PUSH2 0x0845 0000083d: DUP6 0000083e: DUP3 0000083f: DUP7 00000840: ADD 00000841: PUSH2 0x0729 00000844: JUMP 00000845: JUMPDEST 00000846: SWAP1 00000847: SWAP7 00000848: SWAP1 00000849: SWAP6 0000084a: POP 0000084b: SWAP4 0000084c: POP 0000084d: POP 0000084e: POP 0000084f: POP 00000850: JUMP 00000851: JUMPDEST 00000852: PUSH1 0x20 00000854: DUP1 00000855: DUP3 00000856: MSTORE 00000857: DUP3 00000858: MLOAD 00000859: DUP3 0000085a: DUP3 0000085b: ADD 0000085c: DUP2 0000085d: SWAP1 0000085e: MSTORE 0000085f: PUSH1 0x00 00000861: SWAP2 00000862: SWAP1 00000863: DUP5 00000864: DUP3 00000865: ADD 00000866: SWAP1 00000867: PUSH1 0x40 00000869: DUP6 0000086a: ADD 0000086b: SWAP1 0000086c: DUP5 0000086d: JUMPDEST 0000086e: DUP2 0000086f: DUP2 00000870: LT 00000871: ISZERO 00000872: PUSH2 0x0892 00000875: JUMPI 00000876: DUP4 00000877: MLOAD 00000878: PUSH1 0x01 0000087a: PUSH1 0x01 0000087c: PUSH1 0xa0 0000087e: SHL 0000087f: SUB 00000880: AND 00000881: DUP4 00000882: MSTORE 00000883: SWAP3 00000884: DUP5 00000885: ADD 00000886: SWAP3 00000887: SWAP2 00000888: DUP5 00000889: ADD 0000088a: SWAP2 0000088b: PUSH1 0x01 0000088d: ADD 0000088e: PUSH2 0x086d 00000891: JUMP 00000892: JUMPDEST 00000893: POP 00000894: SWAP1 00000895: SWAP7 00000896: SWAP6 00000897: POP 00000898: POP 00000899: POP 0000089a: POP 0000089b: POP 0000089c: POP 0000089d: JUMP 0000089e: JUMPDEST 0000089f: PUSH1 0x01 000008a1: PUSH1 0x01 000008a3: PUSH1 0xa0 000008a5: SHL 000008a6: SUB 000008a7: DUP2 000008a8: AND 000008a9: DUP2 000008aa: EQ 000008ab: PUSH2 0x06a1 000008ae: JUMPI 000008af: PUSH1 0x00 000008b1: DUP1 000008b2: REVERT 000008b3: JUMPDEST 000008b4: PUSH1 0x00 000008b6: PUSH1 0x20 000008b8: DUP3 000008b9: DUP5 000008ba: SUB 000008bb: SLT 000008bc: ISZERO 000008bd: PUSH2 0x08c5 000008c0: JUMPI 000008c1: PUSH1 0x00 000008c3: DUP1 000008c4: REVERT 000008c5: JUMPDEST 000008c6: DUP2 000008c7: CALLDATALOAD 000008c8: PUSH2 0x052d 000008cb: DUP2 000008cc: PUSH2 0x089e 000008cf: JUMP 000008d0: JUMPDEST 000008d1: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 000008f2: PUSH1 0x00 000008f4: MSTORE 000008f5: PUSH1 0x32 000008f7: PUSH1 0x04 000008f9: MSTORE 000008fa: PUSH1 0x24 000008fc: PUSH1 0x00 000008fe: REVERT 000008ff: JUMPDEST 00000900: PUSH1 0x00 00000902: PUSH1 0x20 00000904: DUP3 00000905: DUP5 00000906: SUB 00000907: SLT 00000908: ISZERO 00000909: PUSH2 0x0911 0000090c: JUMPI 0000090d: PUSH1 0x00 0000090f: DUP1 00000910: REVERT 00000911: JUMPDEST 00000912: DUP2 00000913: MLOAD 00000914: DUP1 00000915: ISZERO 00000916: ISZERO 00000917: DUP2 00000918: EQ 00000919: PUSH2 0x052d 0000091c: JUMPI 0000091d: PUSH1 0x00 0000091f: DUP1 00000920: REVERT 00000921: JUMPDEST 00000922: PUSH1 0x00 00000924: DUP3 00000925: MLOAD 00000926: PUSH1 0x00 00000928: JUMPDEST 00000929: DUP2 0000092a: DUP2 0000092b: LT 0000092c: ISZERO 0000092d: PUSH2 0x0942 00000930: JUMPI 00000931: PUSH1 0x20 00000933: DUP2 00000934: DUP7 00000935: ADD 00000936: DUP2 00000937: ADD 00000938: MLOAD 00000939: DUP6 0000093a: DUP4 0000093b: ADD 0000093c: MSTORE 0000093d: ADD 0000093e: PUSH2 0x0928 00000941: JUMP 00000942: JUMPDEST 00000943: POP 00000944: PUSH1 0x00 00000946: SWAP3 00000947: ADD 00000948: SWAP2 00000949: DUP3 0000094a: MSTORE 0000094b: POP 0000094c: SWAP2 0000094d: SWAP1 0000094e: POP 0000094f: JUMP 00000950: INVALID 00000951: LOG2 00000952: PUSH5 0x6970667358 00000958: UNKNOWN(0x22) 00000959: SLT 0000095a: KECCAK256 0000095b: XOR 0000095c: OR 0000095d: UNKNOWN(0x4E) 0000095e: PUSH29 0x060d60c16eaa8d2621705d3326b2030eaaea0f269d8021e9ff1f4ce564 0000097c: PUSH20
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0xae67178c6a68dcf6f6417eb32a5f4387496a0b3086d4ce5f5817912d9102d208
call_targets:
0xa3222357a0eccf60c73606170be6c99adecb59b3
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xae67178c6a68dcf6f6417eb32a5f4387496a0b3086d4ce5f5817912d9102d208",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xa3222357a0eccf60c73606170be6c99adecb59b3"
],
"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": "0x0f59f83a",
"selector": "0x0f59f83a",
"calldata_variants": [
"0x0f59f83a",
"0x0f59f83a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x95ddbc58",
"selector": "0x95ddbc58",
"calldata_variants": [
"0x95ddbc58",
"0x95ddbc580000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1435,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 1,
"guards_detected": [],
"untrusted_call_count": 1
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0xae67178c6a68dcf6f6417eb32a5f4387496a0b3086d4ce5f5817912d9102d208
call_targets:
0xa3222357a0eccf60c73606170be6c99adecb59b3
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xae67178c6a68dcf6f6417eb32a5f4387496a0b3086d4ce5f5817912d9102d208",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xa3222357a0eccf60c73606170be6c99adecb59b3"
],
"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": "0x0f59f83a",
"selector": "0x0f59f83a",
"calldata_variants": [
"0x0f59f83a",
"0x0f59f83a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x95ddbc58",
"selector": "0x95ddbc58",
"calldata_variants": [
"0x95ddbc58",
"0x95ddbc580000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1435,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": []
}
|