019b3836-4070-73ff-9bdf-855dfff3d504
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 |
|---|---|---|---|---|
| 5219 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 5220 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 48668 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 48669 | capability.graph | complete | 1 / 3 | 1 week ago |
| 48670 | detector.run | complete | 1 / 3 | 1 week ago |
| 48671 | validation.fork | complete | 1 / 3 | 1 week ago |
| 113295 | report.consolidate | complete | 1 / 6 | 1 week ago |
No slither job recorded yet.
{"no_findings":false,"summary":"Bytecode suggests an ERC20-like token with owner-controlled parameters plus callback-style extensions. The strongest risk is a public allowance/callback path that writes state and then performs an external CALL to a user-supplied address without a detected reentrancy guard. A second public path also reaches a computed CALL with unresolved target/value; because this is bytecode-only analysis, that second issue is lower confidence.","findings":[{"severity":"medium","category":"reentrancy","title":"Callback-style allowance flow writes state before calling an untrusted contract","exploit_scenario":"A user invokes selector 0xcae9ca51 with an attacker-controlled spender contract. The function stores a value into a slot-8-like mapping at pc 0x364 and then calls the supplied address at pc 0x425 using callback selector 0x8f4ffcb1. Because the callee receives control after the write and no reentrancy guard was detected, the spender can reenter token logic such as transfer/transferFrom or other custom functions while the freshly written allowance/state is live.","recommendation":"Treat this path as check-effects-interactions sensitive. Add an explicit reentrancy guard around callback entrypoints, constrain callbacks to trusted targets if possible, and avoid leaving temporary approval/state live across the external call. If callback behavior is intended, document the risk and validate returndata explicitly.","evidence":"Selector 0xcae9ca51 enters at pc 0x2d1. The bytecode copies user-supplied bytes, performs an SSTORE at pc 0x364 to a keccak-derived slot, then executes CALL at pc 0x425 to the masked calldata address cd[0x4]. The artifact reports no detected auth guards, and the callsite metadata marks CALL targets/value as computed with returndata checking unknown. The call payload starts with selector 0x8f4ffcb1, consistent with a callback/approve-and-call pattern.","locations":["selector:0xcae9ca51","pc:0x364","pc:0x425"]},{"severity":"low","category":"other","title":"Public function 0xe4849b32 reaches a computed external CALL with ambiguous target/value","exploit_scenario":"An externally callable path beginning at selector 0xe4849b32 reaches CALL pc 0x856 after only a balance-like threshold check, not an owner-style check. If calldata or mutable state influence the destination or ETH amount, an attacker with the prerequisite balance could route execution into attacker-controlled code and potentially trigger unexpected side effects or reentrancy. Because only bytecode is available, the exact destination/value semantics remain uncertain.","recommendation":"Audit selector 0xe4849b32 at source level or with traces against known inputs. Constrain the destination to a trusted constant or vetted interface, avoid low-level CALL where possible, validate returndata, and add a reentrancy guard if the call is intentionally public.","evidence":"The selector table exposes public selector 0xe4849b32. Its path checks a slot-7-like balance condition around pc 0x482-0x4ad, then proceeds to CALL pc 0x856. The bundle callsite metadata marks this CALL as computed target/computed value with returndata_checked=null, and the artifact has no detected auth guards. Detector output also confirms reachable CALL sinks with variable targets, but the exact semantics of this specific path cannot be proven from bytecode alone.","locations":["selector:0xe4849b32","pc:0x4ad","pc:0x856"]}]}
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-dw1e6a6j
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5c3d-3584-7c72-b91e-c654cc50218a
--------
user
You are a security auditor. You ONLY have runtime bytecode + analysis artifacts.
You MUST read `BYTECODE_BUNDLE.json` before concluding; it contains the bytecode summary,
evidence bundle, callsites, storage slots, and detector findings.
Special cases when reasoning from bytecode (be explicit about uncertainty):
- Selector inference is best-effort; missing selectors are common.
- Fallback/receive paths may be the only entrypoints.
- CALL vs DELEGATECALL semantics differ; DELEGATECALL executes in caller storage.
- Proxy patterns (EIP-1967, minimal proxies, beacon) change which storage is authoritative.
- Storage slots are raw; mappings/arrays appear via keccak patterns, names are unknown.
- Guard detection is heuristic; absence of guards does NOT mean unguarded.
- Returndata checking is unknown unless explicitly shown in evidence.
- Precompiles (0x1..0x9) and common ERC20 transfer selectors may appear; do not over-claim.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title.
- Locations can be pc references like "pc:0x123" or selectors like "selector:0xa9059cbb".
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation,
accounting/invariant breaks, dangerous delegatecall, and untrusted external calls.
Be conservative: if evidence is weak, mark severity low/medium and explain why.
warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime.
exec
/bin/bash -lc 'pwd && rg --files' in /tmp/codex-dw1e6a6j
succeeded in 0ms:
/tmp/codex-dw1e6a6j
codex-output-schema.json
BYTECODE_BUNDLE.json
exec
/bin/bash -lc "wc -c BYTECODE_BUNDLE.json && sed -n '1,260p' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
181092 BYTECODE_BUNDLE.json
{
"analysis_artifact": {
"address": "0x47e3b185398c178c89cad8bda809d037462008a9",
"artifact_hash": "0x239f959deb52b2b0864393aafd921906fd2dce60c72fa067a478fae2b04e3cb5",
"artifact_json": {
"auth": {
"guards": []
},
"basic_blocks": [
{
"end_pc": 10,
"hash": "0xf6fa896c78200211a2ca6e1b165b4e9685d4727ad609c41f07a5d3162d788ed7",
"opcodes": [
"PUSH1",
"PUSH1",
"MSTORE",
"CALLDATASIZE",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 0
},
{
"end_pc": 30,
"hash": "0xaa8508e79922bef88de7680412ebb93d9b8132af38a790d94ddd35af4ee3a037",
"opcodes": [
"PUSH1",
"PUSH1",
"EXP",
"PUSH1",
"CALLDATALOAD",
"DIV",
"PUSH4",
"OP_81",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 11
},
{
"end_pc": 41,
"hash": "0x99719e856f48bd75b92ac93bf06034d38494c7dac1d0f3ed6653b6e1bf9750ca",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 31
},
{
"end_pc": 52,
"hash": "0x56c66b4f18ac653e3ff09ec9ac1ada47fcba82b1f13369586bb78a5e813e6bb9",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 42
},
{
"end_pc": 63,
"hash": "0x930168b52e472355110186433922de45bc8231fd780bab61206332657b096892",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 53
},
{
"end_pc": 74,
"hash": "0x4c32ba1ac8c88786fe1ca127dab04b8304545c3c5ad4f5466833986eb17b5338",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 64
},
{
"end_pc": 85,
"hash": "0x6c7273896767103e3785a54fe9673f0b1f68b1303d4aea11fad1c51e0019ffe5",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 75
},
{
"end_pc": 96,
"hash": "0x873ca376ec44d8194b32d64d75680767ae7bc46e2fc9a8ae19e3e0797b9e63c4",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 86
},
{
"end_pc": 107,
"hash": "0x13edb0156227b3456f643b34470534eb76fceec30c14f604a48e4ba8f9e6a404",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 97
},
{
"end_pc": 118,
"hash": "0x976ae12cb4a3f950fde210b0123acc4baf7764b00a36c16dcab9a4ae3da13f12",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 108
},
{
"end_pc": 129,
"hash": "0xb496755ff668dbf52227a1ce407046b77e34fd6f3d4887fbd6715e9d600ccf6e",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 119
},
{
"end_pc": 140,
"hash": "0xbf7c66d1d098246e9257d708b8e1f484663d602b6e58809e9a355b2cef164653",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 130
},
{
"end_pc": 151,
"hash": "0xbf5904f7cd1fc3795aa3da8b60d8ac86c585b167fa2b4c14cd8507889d65579a",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 141
},
{
"end_pc": 162,
"hash": "0xe5e42d2f2eb13fbd61a1f321c79cd5d6f5cafd8ea6bd76601666bcc2a78251e7",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 152
},
{
"end_pc": 173,
"hash": "0x5aeb831fb43090f6662c8f02bc5771ceb3635f318f9a3f4574f16badd9960630",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 163
},
{
"end_pc": 184,
"hash": "0x80df280cb60d437d980381bb4bd5a7022245428d86d4cc43daf10c3d8d36d24c",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 174
},
{
"end_pc": 195,
"hash": "0x73d755749374743def218e6a5c0addf73b0815477405ee90024c003de597826d",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 185
},
{
"end_pc": 206,
"hash": "0xeb4e20f1fde12488fdef13b5d832bddaff35784ed7ba34624af119f62e2dfb68",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 196
},
{
"end_pc": 217,
"hash": "0xdc92189328a98ef1669923503c5da2e19723704d405fc058c1a4d5ffd1e6d69a",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 207
},
{
"end_pc": 219,
"hash": "0x2286a7c0717c300debce089d669bb16374df7df3d8fc4fbb3b828285ee4a4fd0",
"opcodes": [
"JUMPDEST",
"STOP"
],
"start_pc": 218
},
{
"end_pc": 285,
"hash": "0xf29097d4001f65af8eb82840d868d8a949e7cd31210d4400680f7f39b70bc599",
"opcodes": [
"JUMPDEST",
"PUSH1",
exec
/bin/bash -lc "sed -n '1,200p' codex-output-schema.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
{"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"}}}}}}}
exec
/bin/bash -lc "jq 'keys' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
[
"analysis_artifact",
"analysis_run",
"artifact",
"capability_graph",
"detector_findings",
"heuristics_summary"
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json | keys' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
[
"auth",
"basic_blocks",
"callsites",
"cfg_edges",
"cfg_hash",
"dispatcher_type",
"function_entries",
"functions",
"selectors",
"sinks",
"storage",
"version"
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.dispatcher_type, .analysis_artifact.artifact_json.selectors, .analysis_artifact.artifact_json.function_entries, .analysis_artifact.artifact_json.functions' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
"selector_jump_table"
[
"0x06fdde03",
"0x18160ddd",
"0x1fe9eabc",
"0x23b872dd",
"0x313ce567",
"0x41fa4876",
"0x70a08231",
"0x8da5cb5b",
"0x95d89b41",
"0xa6f2ae3a",
"0xa9059cbb",
"0xaa295de9",
"0xcae9ca51",
"0xdc3080f2",
"0xdd62ed3e",
"0xe4849b32",
"0xf2fde38b",
"0xff9b3acf"
]
[
{
"entry_pc": null,
"selector": "0x06fdde03"
},
{
"entry_pc": 535423676,
"selector": "0x18160ddd"
},
{
"entry_pc": 599290589,
"selector": "0x1fe9eabc"
},
{
"entry_pc": 826074471,
"selector": "0x23b872dd"
},
{
"entry_pc": 1106921590,
"selector": "0x313ce567"
},
{
"entry_pc": 1889567281,
"selector": "0x41fa4876"
},
{
"entry_pc": 2376452955,
"selector": "0x70a08231"
},
{
"entry_pc": 2514000705,
"selector": "0x8da5cb5b"
},
{
"entry_pc": 2800922170,
"selector": "0x95d89b41"
},
{
"entry_pc": 2835717307,
"selector": "0xa6f2ae3a"
},
{
"entry_pc": 2854837737,
"selector": "0xa9059cbb"
},
{
"entry_pc": 3404319313,
"selector": "0xaa295de9"
},
{
"entry_pc": 3694166258,
"selector": "0xcae9ca51"
},
{
"entry_pc": 3714247998,
"selector": "0xdc3080f2"
},
{
"entry_pc": 3833895730,
"selector": "0xdd62ed3e"
},
{
"entry_pc": 4076725131,
"selector": "0xe4849b32"
},
{
"entry_pc": 4288363215,
"selector": "0xf2fde38b"
},
{
"entry_pc": null,
"selector": "0xff9b3acf"
}
]
[
{
"auth": {
"guards": []
},
"entry_pc": null,
"selector": "0x06fdde03",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 535423676,
"selector": "0x18160ddd",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 599290589,
"selector": "0x1fe9eabc",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 826074471,
"selector": "0x23b872dd",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 1106921590,
"selector": "0x313ce567",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 1889567281,
"selector": "0x41fa4876",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 2376452955,
"selector": "0x70a08231",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 2514000705,
"selector": "0x8da5cb5b",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 2800922170,
"selector": "0x95d89b41",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 2835717307,
"selector": "0xa6f2ae3a",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 2854837737,
"selector": "0xa9059cbb",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3404319313,
"selector": "0xaa295de9",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3694166258,
"selector": "0xcae9ca51",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3714247998,
"selector": "0xdc3080f2",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3833895730,
"selector": "0xdd62ed3e",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 4076725131,
"selector": "0xe4849b32",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": 4288363215,
"selector": "0xf2fde38b",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
},
{
"auth": {
"guards": []
},
"entry_pc": null,
"selector": "0xff9b3acf",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
}
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.callsites' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
[
{
"opcode": "CALL",
"pc": 993,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1061,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1307,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 2134,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALLCODE",
"pc": 2426,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 2444,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.storage' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
{
"keccak_count": 32,
"reads": 38,
"slots": [
{
"op": "SLOAD",
"pc": 228,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 299,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 319,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 331,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 412,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 534,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 553,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 643,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 718,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SSTORE",
"pc": 868,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1211,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1241,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1829,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1936,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2031,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 14
}
exec
/bin/bash -lc "jq '.detector_findings, .heuristics_summary' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
[
{
"confidence": 60,
"evidence_json": {
"call_count": 6,
"examples": [
{
"opcode": "CALL",
"pc": 993,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1061,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1307,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"guards_detected": [],
"untrusted_call_count": 6
},
"normalized_json": {
"sink": "CALL"
},
"severity": "high",
"title": "Untrusted CALL target/value reachable",
"validated": true,
"validation_json": {
"attempts": 1,
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x47e3b185398c178c89cad8bda809d037462008a9"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0xc241540bfb2ef49c158b04968ef0969216a89cb29e6e0bbd8a2eb45de1fef250",
"trace_mode": "callTracer"
}
},
{
"confidence": 55,
"evidence_json": {
"eth_value_calls": 6,
"examples": [
{
"opcode": "CALL",
"pc": 993,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1061,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1307,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"guards_detected": []
},
"normalized_json": {
"sink": "CALL",
"value": "nonzero"
},
"severity": "high",
"title": "ETH value transfer possible",
"validated": true,
"validation_json": {
"attempts": 1,
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x47e3b185398c178c89cad8bda809d037462008a9"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0xc241540bfb2ef49c158b04968ef0969216a89cb29e6e0bbd8a2eb45de1fef250",
"trace_mode": "callTracer"
}
},
{
"confidence": 45,
"evidence_json": {
"create2_count": 2,
"create_count": 0
},
"normalized_json": {
"sink": "CREATE"
},
"severity": "medium",
"title": "CREATE/CREATE2 reachable",
"validated": false,
"validation_json": {
"attempts": 32,
"call_targets": null,
"classification": "no_sink",
"confirmed": false,
"errors": 0,
"matched_probe": null,
"sink": "CREATE",
"status": "unknown",
"target_varies": null,
"trace_id": "0xf3ecd33f4407999282b3e7c7c77e8409b6cdaffd554d89b7878fe3c08047d3b0",
"trace_mode": "structLogs"
}
}
]
{
"create2_count": 2,
"delegatecall_count": 0,
"flags": [
"create_opcodes_present"
],
"selfdestruct_count": 0
}
exec
/bin/bash -lc "jq '.analysis_run' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
{
"address": "0x47e3b185398c178c89cad8bda809d037462008a9",
"block_number": null,
"chain_id": 1,
"child_links": [],
"created_at": "2025-12-19T20:03:58.000000Z",
"id": "019b3836-4070-73ff-9bdf-855dfff3d504",
"parent_links": [],
"status": "running",
"updated_at": "2026-04-04T19:59:08.000000Z"
}
exec
/bin/bash -lc "jq '.artifact | keys' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
[
"codehash",
"compiler_json",
"implementation_address",
"is_proxy",
"runtime_bytecode",
"verified_source"
]
exec
/bin/bash -lc "jq '.capability_graph | keys' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
[
"address",
"block_number",
"chain_id",
"codehash",
"created_at",
"graph_hash",
"graph_json",
"id",
"updated_at",
"version"
]
exec
/bin/bash -lc "jq '.capability_graph.graph_json | keys' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
[
"edges",
"nodes",
"version"
]
exec
/bin/bash -lc "jq '.capability_graph.graph_json' BYTECODE_BUNDLE.json | sed -n '1,260p'" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
{
"edges": [
{
"from": "bb:0",
"to": "bb:218",
"type": "control_flow"
},
{
"from": "bb:0",
"to": "bb:11",
"type": "control_flow_fallthrough"
},
{
"from": "bb:11",
"to": "bb:220",
"type": "control_flow"
},
{
"from": "bb:11",
"to": "bb:31",
"type": "control_flow_fallthrough"
},
{
"from": "bb:31",
"to": "bb:313",
"type": "control_flow"
},
{
"from": "bb:31",
"to": "bb:42",
"type": "control_flow_fallthrough"
},
{
"from": "bb:42",
"to": "bb:322",
"type": "control_flow"
},
{
"from": "bb:42",
"to": "bb:53",
"type": "control_flow_fallthrough"
},
{
"from": "bb:53",
"to": "bb:356",
"type": "control_flow"
},
{
"from": "bb:53",
"to": "bb:64",
"type": "control_flow_fallthrough"
},
{
"from": "bb:64",
"to": "bb:406",
"type": "control_flow"
},
{
"from": "bb:64",
"to": "bb:75",
"type": "control_flow_fallthrough"
},
{
"from": "bb:75",
"to": "bb:418",
"type": "control_flow"
},
{
"from": "bb:75",
"to": "bb:86",
"type": "control_flow_fallthrough"
},
{
"from": "bb:86",
"to": "bb:504",
"type": "control_flow"
},
{
"from": "bb:86",
"to": "bb:97",
"type": "control_flow_fallthrough"
},
{
"from": "bb:97",
"to": "bb:528",
"type": "control_flow"
},
{
"from": "bb:97",
"to": "bb:108",
"type": "control_flow_fallthrough"
},
{
"from": "bb:108",
"to": "bb:546",
"type": "control_flow"
},
{
"from": "bb:108",
"to": "bb:119",
"type": "control_flow_fallthrough"
},
{
"from": "bb:119",
"to": "bb:637",
"type": "control_flow"
},
{
"from": "bb:119",
"to": "bb:130",
"type": "control_flow_fallthrough"
},
{
"from": "bb:130",
"to": "bb:665",
"type": "control_flow"
},
{
"from": "bb:130",
"to": "bb:141",
"type": "control_flow_fallthrough"
},
{
"from": "bb:141",
"to": "bb:712",
"type": "control_flow"
},
{
"from": "bb:141",
"to": "bb:152",
"type": "control_flow_fallthrough"
},
{
"from": "bb:152",
"to": "bb:721",
"type": "control_flow"
},
{
"from": "bb:152",
"to": "bb:163",
"type": "control_flow_fallthrough"
},
{
"from": "bb:163",
"to": "bb:1080",
"type": "control_flow"
},
{
"from": "bb:163",
"to": "bb:174",
"type": "control_flow_fallthrough"
},
{
"from": "bb:174",
"to": "bb:1117",
"type": "control_flow"
},
{
"from": "bb:174",
"to": "bb:185",
"type": "control_flow_fallthrough"
},
{
"from": "bb:185",
"to": "bb:1154",
"type": "control_flow"
},
{
"from": "bb:185",
"to": "bb:196",
"type": "control_flow_fallthrough"
},
{
"from": "bb:196",
"to": "bb:1202",
"type": "control_flow"
},
{
"from": "bb:196",
"to": "bb:207",
"type": "control_flow_fallthrough"
},
{
"from": "bb:207",
"to": "bb:1235",
"type": "control_flow"
},
{
"from": "bb:207",
"to": "bb:218",
"type": "control_flow_fallthrough"
},
{
"from": "bb:220",
"to": "bb:1475",
"type": "control_flow"
},
{
"from": "bb:220",
"to": "bb:286",
"type": "control_flow_fallthrough"
},
{
"from": "bb:286",
"to": "bb:1432",
"type": "control_flow"
},
{
"from": "bb:286",
"to": "bb:294",
"type": "control_flow_fallthrough"
},
{
"from": "bb:294",
"to": "bb:1475",
"type": "control_flow"
},
{
"from": "bb:322",
"to": "bb:2014",
"type": "control_flow"
},
{
"from": "bb:322",
"to": "bb:352",
"type": "control_flow_fallthrough"
},
{
"from": "bb:356",
"to": "bb:2190",
"type": "control_flow"
},
{
"from": "bb:356",
"to": "bb:402",
"type": "control_flow_fallthrough"
},
{
"from": "bb:418",
"to": "bb:428",
"type": "control_flow_fallthrough"
},
{
"from": "bb:428",
"to": "bb:433",
"type": "control_flow_fallthrough"
},
{
"from": "bb:433",
"to": "bb:2019",
"type": "control_flow"
},
{
"from": "bb:433",
"to": "bb:442",
"type": "control_flow_fallthrough"
},
{
"from": "bb:442",
"to": "bb:496",
exec
/bin/bash -lc "jq '.artifact.compiler_json, .artifact.is_proxy, .artifact.implementation_address, .artifact.verified_source' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
{
"etherscan": {
"skipped": true
}
}
false
null
false
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
bytecode=obj['artifact']['runtime_bytecode']
if bytecode.startswith('0x'): bytecode=bytecode[2:]
code=bytes.fromhex(bytecode)
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for pc_target in [930,960,980,990,993,1000,1030,1061,1080,1280,1307,2100,2134,2400,2426,2444]:
start=max(0,pc_target-25); end=min(len(code),pc_target+40)
print(f'--- around pc {pc_target} ---')
pc=start
while pc<end:
op=code[pc]
name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-dw1e6a6j
exited 1 in 0ms:
Traceback (most recent call last):
File "<stdin>", line 5, in <module>
AttributeError: 'dict' object has no attribute 'startswith'
exec
/bin/bash -lc "jq '.artifact.runtime_bytecode | type, .[0:120]' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
exited 5 in 0ms:
"object"
jq: error (at BYTECODE_BUNDLE.json:6529): Cannot index object with object
exec
/bin/bash -lc "jq '.artifact.runtime_bytecode | keys' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
[
"full",
"head",
"length",
"tail",
"truncated"
]
exec
/bin/bash -lc "jq '.artifact.runtime_bytecode.length, .artifact.runtime_bytecode.truncated, .artifact.runtime_bytecode.head, .artifact.runtime_bytecode.tail' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
4916
false
null
null
exec
/bin/bash -lc "jq '.artifact.runtime_bytecode.full[0:140]' BYTECODE_BUNDLE.json" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
"0x606060405236156100da5760e060020a600035046306fdde0381146100dc57806318160ddd146101395780631fe9eabc1461014257806323b872dd14610164578063313ce5"
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
bytecode=obj['artifact']['runtime_bytecode']['full']
if bytecode.startswith('0x'): bytecode=bytecode[2:]
code=bytes.fromhex(bytecode)
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for pc_target in [930,960,980,993,1000,1030,1061,1080,1280,1307,2100,2134,2400,2426,2444]:
start=max(0,pc_target-25); end=min(len(code),pc_target+40)
print(f'--- around pc {pc_target} ---')
pc=start
while pc<end:
op=code[pc]
name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
--- around pc 930 ---
0389: DIV
038a: ADD
038b: DUP1
038c: DUP6
038d: PUSH1 0x01
038f: PUSH1 0xa0
0391: PUSH1 0x02
0393: EXP
0394: SUB
0395: AND
0396: DUP2
0397: MSTORE
0398: PUSH1 0x20
039a: ADD
039b: DUP5
039c: DUP2
039d: MSTORE
039e: PUSH1 0x20
03a0: ADD
03a1: DUP4
03a2: PUSH1 0x01
03a4: PUSH1 0xa0
03a6: PUSH1 0x02
03a8: EXP
03a9: SUB
03aa: AND
03ab: DUP2
03ac: MSTORE
03ad: PUSH1 0x20
03af: ADD
03b0: DUP1
03b1: PUSH1 0x20
03b3: ADD
03b4: DUP3
03b5: DUP2
03b6: SUB
03b7: DUP3
03b8: MSTORE
03b9: DUP4
03ba: DUP2
03bb: DUP2
03bc: MLOAD
03bd: DUP2
03be: MSTORE
03bf: PUSH1 0x20
03c1: ADD
03c2: SWAP2
03c3: POP
03c4: DUP1
03c5: MLOAD
03c6: SWAP1
03c7: PUSH1 0x20
03c9: ADD
--- around pc 960 ---
03a7: MUL
03a8: EXP
03a9: SUB
03aa: AND
03ab: DUP2
03ac: MSTORE
03ad: PUSH1 0x20
03af: ADD
03b0: DUP1
03b1: PUSH1 0x20
03b3: ADD
03b4: DUP3
03b5: DUP2
03b6: SUB
03b7: DUP3
03b8: MSTORE
03b9: DUP4
03ba: DUP2
03bb: DUP2
03bc: MLOAD
03bd: DUP2
03be: MSTORE
03bf: PUSH1 0x20
03c1: ADD
03c2: SWAP2
03c3: POP
03c4: DUP1
03c5: MLOAD
03c6: SWAP1
03c7: PUSH1 0x20
03c9: ADD
03ca: SWAP1
03cb: DUP1
03cc: DUP4
03cd: DUP4
03ce: DUP3
03cf: SWAP1
03d0: PUSH1 0x00
03d2: PUSH1 0x04
03d4: PUSH1 0x20
03d6: DUP5
03d7: PUSH1 0x1f
03d9: ADD
03da: DIV
03db: PUSH1 0x0f
03dd: MUL
03de: PUSH1 0x03
03e0: ADD
03e1: CALL
03e2: POP
03e3: SWAP1
03e4: POP
03e5: SWAP1
03e6: DUP2
03e7: ADD
--- around pc 980 ---
03bb: DUP2
03bc: MLOAD
03bd: DUP2
03be: MSTORE
03bf: PUSH1 0x20
03c1: ADD
03c2: SWAP2
03c3: POP
03c4: DUP1
03c5: MLOAD
03c6: SWAP1
03c7: PUSH1 0x20
03c9: ADD
03ca: SWAP1
03cb: DUP1
03cc: DUP4
03cd: DUP4
03ce: DUP3
03cf: SWAP1
03d0: PUSH1 0x00
03d2: PUSH1 0x04
03d4: PUSH1 0x20
03d6: DUP5
03d7: PUSH1 0x1f
03d9: ADD
03da: DIV
03db: PUSH1 0x0f
03dd: MUL
03de: PUSH1 0x03
03e0: ADD
03e1: CALL
03e2: POP
03e3: SWAP1
03e4: POP
03e5: SWAP1
03e6: DUP2
03e7: ADD
03e8: SWAP1
03e9: PUSH1 0x1f
03eb: AND
03ec: DUP1
03ed: ISZERO
03ee: PUSH2 0x040b
03f1: JUMPI
03f2: DUP1
03f3: DUP3
03f4: SUB
03f5: DUP1
03f6: MLOAD
03f7: PUSH1 0x01
03f9: DUP4
03fa: PUSH1 0x20
--- around pc 993 ---
03c8: SHA3
03c9: ADD
03ca: SWAP1
03cb: DUP1
03cc: DUP4
03cd: DUP4
03ce: DUP3
03cf: SWAP1
03d0: PUSH1 0x00
03d2: PUSH1 0x04
03d4: PUSH1 0x20
03d6: DUP5
03d7: PUSH1 0x1f
03d9: ADD
03da: DIV
03db: PUSH1 0x0f
03dd: MUL
03de: PUSH1 0x03
03e0: ADD
03e1: CALL
03e2: POP
03e3: SWAP1
03e4: POP
03e5: SWAP1
03e6: DUP2
03e7: ADD
03e8: SWAP1
03e9: PUSH1 0x1f
03eb: AND
03ec: DUP1
03ed: ISZERO
03ee: PUSH2 0x040b
03f1: JUMPI
03f2: DUP1
03f3: DUP3
03f4: SUB
03f5: DUP1
03f6: MLOAD
03f7: PUSH1 0x01
03f9: DUP4
03fa: PUSH1 0x20
03fc: SUB
03fd: PUSH2 0x0100
0400: EXP
0401: SUB
0402: NOT
0403: AND
0404: DUP2
0405: MSTORE
0406: PUSH1 0x20
0408: ADD
--- around pc 1000 ---
03cf: SWAP1
03d0: PUSH1 0x00
03d2: PUSH1 0x04
03d4: PUSH1 0x20
03d6: DUP5
03d7: PUSH1 0x1f
03d9: ADD
03da: DIV
03db: PUSH1 0x0f
03dd: MUL
03de: PUSH1 0x03
03e0: ADD
03e1: CALL
03e2: POP
03e3: SWAP1
03e4: POP
03e5: SWAP1
03e6: DUP2
03e7: ADD
03e8: SWAP1
03e9: PUSH1 0x1f
03eb: AND
03ec: DUP1
03ed: ISZERO
03ee: PUSH2 0x040b
03f1: JUMPI
03f2: DUP1
03f3: DUP3
03f4: SUB
03f5: DUP1
03f6: MLOAD
03f7: PUSH1 0x01
03f9: DUP4
03fa: PUSH1 0x20
03fc: SUB
03fd: PUSH2 0x0100
0400: EXP
0401: SUB
0402: NOT
0403: AND
0404: DUP2
0405: MSTORE
0406: PUSH1 0x20
0408: ADD
0409: SWAP2
040a: POP
040b: JUMPDEST
040c: POP
040d: SWAP6
040e: POP
040f: POP
--- around pc 1030 ---
03ed: ISZERO
03ee: PUSH2 0x040b
03f1: JUMPI
03f2: DUP1
03f3: DUP3
03f4: SUB
03f5: DUP1
03f6: MLOAD
03f7: PUSH1 0x01
03f9: DUP4
03fa: PUSH1 0x20
03fc: SUB
03fd: PUSH2 0x0100
0400: EXP
0401: SUB
0402: NOT
0403: AND
0404: DUP2
0405: MSTORE
0406: PUSH1 0x20
0408: ADD
0409: SWAP2
040a: POP
040b: JUMPDEST
040c: POP
040d: SWAP6
040e: POP
040f: POP
0410: POP
0411: POP
0412: POP
0413: POP
0414: PUSH1 0x00
0416: PUSH1 0x40
0418: MLOAD
0419: DUP1
041a: DUP4
041b: SUB
041c: DUP2
041d: PUSH1 0x00
041f: DUP8
0420: PUSH2 0x61da
0423: GAS
0424: SUB
0425: CALL
0426: ISZERO
0427: PUSH2 0x0002
042a: JUMPI
042b: POP
042c: PUSH1 0x01
--- around pc 1061 ---
040c: POP
040d: SWAP6
040e: POP
040f: POP
0410: POP
0411: POP
0412: POP
0413: POP
0414: PUSH1 0x00
0416: PUSH1 0x40
0418: MLOAD
0419: DUP1
041a: DUP4
041b: SUB
041c: DUP2
041d: PUSH1 0x00
041f: DUP8
0420: PUSH2 0x61da
0423: GAS
0424: SUB
0425: CALL
0426: ISZERO
0427: PUSH2 0x0002
042a: JUMPI
042b: POP
042c: PUSH1 0x01
042e: SWAP8
042f: SWAP7
0430: POP
0431: POP
0432: POP
0433: POP
0434: POP
0435: POP
0436: POP
0437: JUMP
0438: JUMPDEST
0439: PUSH1 0x09
043b: PUSH1 0x20
043d: SWAP1
043e: DUP2
043f: MSTORE
0440: PUSH1 0x04
0442: CALLDATALOAD
0443: PUSH1 0x00
0445: SWAP1
0446: DUP2
0447: MSTORE
0448: PUSH1 0x40
044a: DUP1
044b: DUP3
044c: SHA3
--- around pc 1080 ---
041f: DUP8
0420: PUSH2 0x61da
0423: GAS
0424: SUB
0425: CALL
0426: ISZERO
0427: PUSH2 0x0002
042a: JUMPI
042b: POP
042c: PUSH1 0x01
042e: SWAP8
042f: SWAP7
0430: POP
0431: POP
0432: POP
0433: POP
0434: POP
0435: POP
0436: POP
0437: JUMP
0438: JUMPDEST
0439: PUSH1 0x09
043b: PUSH1 0x20
043d: SWAP1
043e: DUP2
043f: MSTORE
0440: PUSH1 0x04
0442: CALLDATALOAD
0443: PUSH1 0x00
0445: SWAP1
0446: DUP2
0447: MSTORE
0448: PUSH1 0x40
044a: DUP1
044b: DUP3
044c: SHA3
044d: SWAP1
044e: SWAP3
044f: MSTORE
0450: PUSH1 0x24
0452: CALLDATALOAD
0453: DUP2
0454: MSTORE
0455: SHA3
0456: SLOAD
0457: PUSH2 0x0553
045a: SWAP1
045b: DUP2
045c: JUMP
045d: JUMPDEST
045e: PUSH1 0x08
--- around pc 1280 ---
04e7: BLOCKHASH
04e8: MLOAD
04e9: DUP1
04ea: DUP1
04eb: PUSH1 0x20
04ed: ADD
04ee: DUP3
04ef: DUP2
04f0: SUB
04f1: DUP3
04f2: MSTORE
04f3: DUP4
04f4: DUP2
04f5: DUP2
04f6: MLOAD
04f7: DUP2
04f8: MSTORE
04f9: PUSH1 0x20
04fb: ADD
04fc: SWAP2
04fd: POP
04fe: DUP1
04ff: MLOAD
0500: SWAP1
0501: PUSH1 0x20
0503: ADD
0504: SWAP1
0505: DUP1
0506: DUP4
0507: DUP4
0508: DUP3
0509: SWAP1
050a: PUSH1 0x00
050c: PUSH1 0x04
050e: PUSH1 0x20
0510: DUP5
0511: PUSH1 0x1f
0513: ADD
0514: DIV
0515: PUSH1 0x0f
0517: MUL
0518: PUSH1 0x03
051a: ADD
051b: CALL
051c: POP
051d: SWAP1
051e: POP
051f: SWAP1
0520: DUP2
0521: ADD
0522: SWAP1
0523: PUSH1 0x1f
0525: AND
0526: DUP1
0527: ISZERO
--- around pc 1307 ---
0502: SHA3
0503: ADD
0504: SWAP1
0505: DUP1
0506: DUP4
0507: DUP4
0508: DUP3
0509: SWAP1
050a: PUSH1 0x00
050c: PUSH1 0x04
050e: PUSH1 0x20
0510: DUP5
0511: PUSH1 0x1f
0513: ADD
0514: DIV
0515: PUSH1 0x0f
0517: MUL
0518: PUSH1 0x03
051a: ADD
051b: CALL
051c: POP
051d: SWAP1
051e: POP
051f: SWAP1
0520: DUP2
0521: ADD
0522: SWAP1
0523: PUSH1 0x1f
0525: AND
0526: DUP1
0527: ISZERO
0528: PUSH2 0x0545
052b: JUMPI
052c: DUP1
052d: DUP3
052e: SUB
052f: DUP1
0530: MLOAD
0531: PUSH1 0x01
0533: DUP4
0534: PUSH1 0x20
0536: SUB
0537: PUSH2 0x0100
053a: EXP
053b: SUB
053c: NOT
053d: AND
053e: DUP2
053f: MSTORE
0540: PUSH1 0x20
0542: ADD
--- around pc 2100 ---
081b: STOP
081c: SWAP1
081d: DUP2
081e: MSTORE
081f: PUSH1 0x07
0821: PUSH1 0x20
0823: MSTORE
0824: PUSH1 0x40
0826: DUP1
0827: DUP3
0828: SHA3
0829: DUP1
082a: SLOAD
082b: DUP8
082c: ADD
082d: SWAP1
082e: SSTORE
082f: CALLER
0830: SWAP1
0831: SWAP3
0832: AND
0833: DUP1
0834: DUP3
0835: MSTORE
0836: DUP3
0837: DUP3
0838: SHA3
0839: DUP1
083a: SLOAD
083b: DUP8
083c: SWAP1
083d: SUB
083e: SWAP1
083f: SSTORE
0840: SWAP2
0841: MLOAD
0842: PUSH4 0xffffffff
0847: DUP5
0848: AND
0849: DUP7
084a: MUL
084b: SWAP5
084c: POP
084d: DUP5
084e: SWAP1
084f: DUP3
0850: DUP2
0851: DUP2
0852: DUP2
0853: DUP6
0854: DUP9
0855: DUP4
0856: CALL
0857: POP
0858: POP
0859: PUSH1 0x40
085b: DUP1
--- around pc 2134 ---
083d: SUB
083e: SWAP1
083f: SSTORE
0840: SWAP2
0841: MLOAD
0842: PUSH4 0xffffffff
0847: DUP5
0848: AND
0849: DUP7
084a: MUL
084b: SWAP5
084c: POP
084d: DUP5
084e: SWAP1
084f: DUP3
0850: DUP2
0851: DUP2
0852: DUP2
0853: DUP6
0854: DUP9
0855: DUP4
0856: CALL
0857: POP
0858: POP
0859: PUSH1 0x40
085b: DUP1
085c: MLOAD
085d: DUP8
085e: DUP2
085f: MSTORE
0860: SWAP1
0861: MLOAD
0862: ADDRESS
0863: PUSH1 0x01
0865: PUSH1 0xa0
0867: PUSH1 0x02
0869: EXP
086a: SUB
086b: AND
086c: SWAP5
086d: SWAP4
086e: POP
086f: PUSH1 0x00
0871: DUP1
0872: MLOAD
0873: PUSH1 0x20
0875: PUSH2 0x0979
0878: DUP4
0879: CODECOPY
087a: DUP2
087b: MLOAD
087c: SWAP2
087d: MSTORE
--- around pc 2400 ---
0947: SWAP2
0948: DUP3
0949: SWAP1
094a: SHA3
094b: DUP1
094c: SLOAD
094d: DUP8
094e: ADD
094f: SWAP1
0950: SSTORE
0951: DUP2
0952: MLOAD
0953: DUP7
0954: DUP2
0955: MSTORE
0956: SWAP2
0957: MLOAD
0958: PUSH1 0x00
095a: DUP1
095b: MLOAD
095c: PUSH1 0x20
095e: PUSH2 0x0979
0961: DUP4
0962: CODECOPY
0963: DUP2
0964: MLOAD
0965: SWAP2
0966: MSTORE
0967: SWAP3
0968: DUP2
0969: SWAP1
096a: SUB
096b: SWAP1
096c: SWAP2
096d: ADD
096e: SWAP1
096f: LOG3
0970: POP
0971: PUSH1 0x01
0973: SWAP4
0974: SWAP3
0975: POP
0976: POP
0977: POP
0978: JUMP
0979: OP_dd
097a: CALLCODE
097b: MSTORE
097c: OP_ad
097d: SHL
097e: OP_e2
097f: OP_c8
0980: SWAP12
0981: PUSH10 0xc2b068fc378daa952ba7
--- around pc 2426 ---
0961: DUP4
0962: CODECOPY
0963: DUP2
0964: MLOAD
0965: SWAP2
0966: MSTORE
0967: SWAP3
0968: DUP2
0969: SWAP1
096a: SUB
096b: SWAP1
096c: SWAP2
096d: ADD
096e: SWAP1
096f: LOG3
0970: POP
0971: PUSH1 0x01
0973: SWAP4
0974: SWAP3
0975: POP
0976: POP
0977: POP
0978: JUMP
0979: OP_dd
097a: CALLCODE
097b: MSTORE
097c: OP_ad
097d: SHL
097e: OP_e2
097f: OP_c8
0980: SWAP12
0981: PUSH10 0xc2b068fc378daa952ba7
098c: CALL
098d: PUSH4 0xc4a11628
0992: CREATE2
0993: GAS
0994: OP_4d
0995: CREATE2
0996: OP_23
0997: OP_b3
0998: OP_ef
--- around pc 2444 ---
0973: SWAP4
0974: SWAP3
0975: POP
0976: POP
0977: POP
0978: JUMP
0979: OP_dd
097a: CALLCODE
097b: MSTORE
097c: OP_ad
097d: SHL
097e: OP_e2
097f: OP_c8
0980: SWAP12
0981: PUSH10 0xc2b068fc378daa952ba7
098c: CALL
098d: PUSH4 0xc4a11628
0992: CREATE2
0993: GAS
0994: OP_4d
0995: CREATE2
0996: OP_23
0997: OP_b3
0998: OP_ef
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
bytecode=obj['artifact']['runtime_bytecode']['full'][2:]
code=bytes.fromhex(bytecode)
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(0x60,0x80): ops[i]=f'PUSH{i-0x5f}'
for i in range(0x80,0x90): ops[i]=f'DUP{i-0x7f}'
for i in range(0x90,0xa0): ops[i]=f'SWAP{i-0x8f}'
start,end=220,760
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
00dc: JUMPDEST
00dd: PUSH1 0x40
00df: DUP1
00e0: MLOAD
00e1: PUSH1 0x01
00e3: DUP1
00e4: SLOAD
00e5: PUSH1 0x20
00e7: PUSH1 0x02
00e9: DUP3
00ea: DUP5
00eb: AND
00ec: ISZERO
00ed: PUSH2 0x0100
00f0: MUL
00f1: PUSH1 0x00
00f3: NOT
00f4: ADD
00f5: SWAP1
00f6: SWAP3
00f7: AND
00f8: SWAP2
00f9: SWAP1
00fa: SWAP2
00fb: DIV
00fc: PUSH1 0x1f
00fe: DUP2
00ff: ADD
0100: DUP3
0101: SWAP1
0102: DIV
0103: DUP3
0104: MUL
0105: DUP5
0106: ADD
0107: DUP3
0108: ADD
0109: SWAP1
010a: SWAP5
010b: MSTORE
010c: DUP4
010d: DUP4
010e: MSTORE
010f: PUSH2 0x04e5
0112: SWAP4
0113: SWAP1
0114: DUP4
0115: ADD
0116: DUP3
0117: DUP3
0118: DUP1
0119: ISZERO
011a: PUSH2 0x05c3
011d: JUMPI
011e: DUP1
011f: PUSH1 0x1f
0121: LT
0122: PUSH2 0x0598
0125: JUMPI
0126: PUSH2 0x0100
0129: DUP1
012a: DUP4
012b: SLOAD
012c: DIV
012d: MUL
012e: DUP4
012f: MSTORE
0130: SWAP2
0131: PUSH1 0x20
0133: ADD
0134: SWAP2
0135: PUSH2 0x05c3
0138: JUMP
0139: JUMPDEST
013a: PUSH2 0x0553
013d: PUSH1 0x04
013f: SLOAD
0140: DUP2
0141: JUMP
0142: JUMPDEST
0143: PUSH2 0x00da
0146: PUSH1 0x04
0148: CALLDATALOAD
0149: PUSH1 0x00
014b: SLOAD
014c: PUSH1 0x01
014e: PUSH1 0xa0
0150: PUSH1 0x02
0152: EXP
0153: SUB
0154: SWAP1
0155: DUP2
0156: AND
0157: CALLER
0158: SWAP1
0159: SWAP2
015a: AND
015b: EQ
015c: PUSH2 0x07de
015f: JUMPI
0160: PUSH2 0x0002
0163: JUMP
0164: JUMPDEST
0165: PUSH2 0x0553
0168: PUSH1 0x04
016a: CALLDATALOAD
016b: PUSH1 0x24
016d: CALLDATALOAD
016e: PUSH1 0x44
0170: CALLDATALOAD
0171: PUSH1 0x01
0173: PUSH1 0xa0
0175: PUSH1 0x02
0177: EXP
0178: SUB
0179: DUP4
017a: AND
017b: PUSH1 0x00
017d: SWAP1
017e: DUP2
017f: MSTORE
0180: PUSH1 0x07
0182: PUSH1 0x20
0184: MSTORE
0185: PUSH1 0x40
0187: DUP2
0188: SHA3
0189: SLOAD
018a: DUP3
018b: SWAP1
018c: LT
018d: ISZERO
018e: PUSH2 0x088e
0191: JUMPI
0192: PUSH2 0x0002
0195: JUMP
0196: JUMPDEST
0197: PUSH2 0x0565
019a: PUSH1 0x03
019c: SLOAD
019d: PUSH1 0xff
019f: AND
01a0: DUP2
01a1: JUMP
01a2: JUMPDEST
01a3: PUSH2 0x0553
01a6: PUSH1 0x04
01a8: CALLDATALOAD
01a9: PUSH1 0x24
01ab: CALLDATALOAD
01ac: JUMPDEST
01ad: PUSH1 0x00
01af: DUP1
01b0: DUP1
01b1: JUMPDEST
01b2: DUP4
01b3: DUP2
01b4: LT
01b5: ISZERO
01b6: PUSH2 0x07e3
01b9: JUMPI
01ba: PUSH1 0x40
01bc: DUP1
01bd: MLOAD
01be: NUMBER
01bf: DUP4
01c0: SWAP1
01c1: SUB
01c2: PUSH1 0x00
01c4: NOT
01c5: ADD
01c6: BLOCKHASH
01c7: DUP2
01c8: MSTORE
01c9: PUSH1 0x20
01cb: DUP2
01cc: ADD
01cd: DUP8
01ce: SWAP1
01cf: MSTORE
01d0: DUP2
01d1: MLOAD
01d2: SWAP1
01d3: DUP2
01d4: SWAP1
01d5: SUB
01d6: SWAP1
01d7: SWAP2
01d8: ADD
01d9: SWAP1
01da: SHA3
01db: PUSH1 0x02
01dd: SWAP1
01de: MOD
01df: PUSH1 0x00
01e1: EQ
01e2: ISZERO
01e3: PUSH2 0x01f0
01e6: JUMPI
01e7: PUSH1 0x02
01e9: DUP2
01ea: SWAP1
01eb: EXP
01ec: SWAP1
01ed: SWAP2
01ee: ADD
01ef: SWAP1
01f0: JUMPDEST
01f1: PUSH1 0x01
01f3: ADD
01f4: PUSH2 0x01b1
01f7: JUMP
01f8: JUMPDEST
01f9: PUSH2 0x0553
01fc: PUSH1 0x04
01fe: CALLDATALOAD
01ff: PUSH1 0x07
0201: PUSH1 0x20
0203: MSTORE
0204: PUSH1 0x00
0206: SWAP1
0207: DUP2
0208: MSTORE
0209: PUSH1 0x40
020b: SWAP1
020c: SHA3
020d: SLOAD
020e: DUP2
020f: JUMP
0210: JUMPDEST
0211: PUSH2 0x057b
0214: PUSH1 0x00
0216: SLOAD
0217: PUSH1 0x01
0219: PUSH1 0xa0
021b: PUSH1 0x02
021d: EXP
021e: SUB
021f: AND
0220: DUP2
0221: JUMP
0222: JUMPDEST
0223: PUSH2 0x04e5
0226: PUSH1 0x02
0228: DUP1
0229: SLOAD
022a: PUSH1 0x40
022c: DUP1
022d: MLOAD
022e: PUSH1 0x20
0230: PUSH1 0x01
0232: DUP5
0233: AND
0234: ISZERO
0235: PUSH2 0x0100
0238: MUL
0239: PUSH1 0x00
023b: NOT
023c: ADD
023d: SWAP1
023e: SWAP4
023f: AND
0240: DUP5
0241: SWAP1
0242: DIV
0243: PUSH1 0x1f
0245: DUP2
0246: ADD
0247: DUP5
0248: SWAP1
0249: DIV
024a: DUP5
024b: MUL
024c: DUP3
024d: ADD
024e: DUP5
024f: ADD
0250: SWAP1
0251: SWAP3
0252: MSTORE
0253: DUP2
0254: DUP2
0255: MSTORE
0256: SWAP3
0257: SWAP2
0258: DUP4
0259: ADD
025a: DUP3
025b: DUP3
025c: DUP1
025d: ISZERO
025e: PUSH2 0x05c3
0261: JUMPI
0262: DUP1
0263: PUSH1 0x1f
0265: LT
0266: PUSH2 0x0598
0269: JUMPI
026a: PUSH2 0x0100
026d: DUP1
026e: DUP4
026f: SLOAD
0270: DIV
0271: MUL
0272: DUP4
0273: MSTORE
0274: SWAP2
0275: PUSH1 0x20
0277: ADD
0278: SWAP2
0279: PUSH2 0x05c3
027c: JUMP
027d: JUMPDEST
027e: PUSH2 0x0553
0281: PUSH1 0x06
0283: SLOAD
0284: CALLVALUE
0285: SWAP1
0286: PUSH1 0x00
0288: SWAP1
0289: PUSH1 0x64
028b: SWAP1
028c: DUP3
028d: SWAP1
028e: DUP5
028f: GT
0290: ISZERO
0291: PUSH2 0x064c
0294: JUMPI
0295: PUSH2 0x0002
0298: JUMP
0299: JUMPDEST
029a: PUSH2 0x00da
029d: PUSH1 0x04
029f: CALLDATALOAD
02a0: PUSH1 0x24
02a2: CALLDATALOAD
02a3: CALLER
02a4: PUSH1 0x01
02a6: PUSH1 0xa0
02a8: PUSH1 0x02
02aa: EXP
02ab: SUB
02ac: AND
02ad: PUSH1 0x00
02af: SWAP1
02b0: DUP2
02b1: MSTORE
02b2: PUSH1 0x07
02b4: PUSH1 0x20
02b6: MSTORE
02b7: PUSH1 0x40
02b9: SWAP1
02ba: SHA3
02bb: SLOAD
02bc: DUP2
02bd: SWAP1
02be: LT
02bf: ISZERO
02c0: PUSH2 0x05cb
02c3: JUMPI
02c4: PUSH2 0x0002
02c7: JUMP
02c8: JUMPDEST
02c9: PUSH2 0x0553
02cc: PUSH1 0x06
02ce: SLOAD
02cf: DUP2
02d0: JUMP
02d1: JUMPDEST
02d2: PUSH1 0x40
02d4: DUP1
02d5: MLOAD
02d6: PUSH1 0x20
02d8: PUSH1 0x44
02da: CALLDATALOAD
02db: PUSH1 0x04
02dd: DUP2
02de: DUP2
02df: ADD
02e0: CALLDATALOAD
02e1: PUSH1 0x1f
02e3: DUP2
02e4: ADD
02e5: DUP5
02e6: SWAP1
02e7: DIV
02e8: DUP5
02e9: MUL
02ea: DUP6
02eb: ADD
02ec: DUP5
02ed: ADD
02ee: SWAP1
02ef: SWAP6
02f0: MSTORE
02f1: DUP5
02f2: DUP5
02f3: MSTORE
02f4: PUSH2 0x0553
02f7: SWAP5
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=bytes.fromhex(obj['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(0x60,0x80): ops[i]=f'PUSH{i-0x5f}'
for i in range(0x80,0x90): ops[i]=f'DUP{i-0x7f}'
for i in range(0x90,0xa0): ops[i]=f'SWAP{i-0x8f}'
start,end=760,1238
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
02f8: DUP2
02f9: CALLDATALOAD
02fa: SWAP5
02fb: PUSH1 0x24
02fd: DUP1
02fe: CALLDATALOAD
02ff: SWAP6
0300: SWAP4
0301: SWAP5
0302: PUSH1 0x64
0304: SWAP5
0305: SWAP3
0306: SWAP4
0307: SWAP2
0308: ADD
0309: SWAP2
030a: DUP2
030b: SWAP1
030c: DUP5
030d: ADD
030e: DUP4
030f: DUP3
0310: DUP1
0311: DUP3
0312: DUP5
0313: CALLDATACOPY
0314: POP
0315: SWAP5
0316: SWAP7
0317: POP
0318: POP
0319: POP
031a: POP
031b: POP
031c: POP
031d: POP
031e: PUSH1 0x00
0320: PUSH1 0x00
0322: DUP4
0323: PUSH1 0x08
0325: PUSH1 0x00
0327: POP
0328: PUSH1 0x00
032a: CALLER
032b: PUSH1 0x01
032d: PUSH1 0xa0
032f: PUSH1 0x02
0331: EXP
0332: SUB
0333: AND
0334: DUP2
0335: MSTORE
0336: PUSH1 0x20
0338: ADD
0339: SWAP1
033a: DUP2
033b: MSTORE
033c: PUSH1 0x20
033e: ADD
033f: PUSH1 0x00
0341: SHA3
0342: PUSH1 0x00
0344: POP
0345: PUSH1 0x00
0347: DUP8
0348: PUSH1 0x01
034a: PUSH1 0xa0
034c: PUSH1 0x02
034e: EXP
034f: SUB
0350: AND
0351: DUP2
0352: MSTORE
0353: PUSH1 0x20
0355: ADD
0356: SWAP1
0357: DUP2
0358: MSTORE
0359: PUSH1 0x20
035b: ADD
035c: PUSH1 0x00
035e: SHA3
035f: PUSH1 0x00
0361: POP
0362: DUP2
0363: SWAP1
0364: SSTORE
0365: POP
0366: DUP5
0367: SWAP1
0368: POP
0369: DUP1
036a: PUSH1 0x01
036c: PUSH1 0xa0
036e: PUSH1 0x02
0370: EXP
0371: SUB
0372: AND
0373: PUSH4 0x8f4ffcb1
0378: CALLER
0379: DUP7
037a: ADDRESS
037b: DUP8
037c: PUSH1 0x40
037e: MLOAD
037f: DUP6
0380: PUSH1 0xe0
0382: PUSH1 0x02
0384: EXP
0385: MUL
0386: DUP2
0387: MSTORE
0388: PUSH1 0x04
038a: ADD
038b: DUP1
038c: DUP6
038d: PUSH1 0x01
038f: PUSH1 0xa0
0391: PUSH1 0x02
0393: EXP
0394: SUB
0395: AND
0396: DUP2
0397: MSTORE
0398: PUSH1 0x20
039a: ADD
039b: DUP5
039c: DUP2
039d: MSTORE
039e: PUSH1 0x20
03a0: ADD
03a1: DUP4
03a2: PUSH1 0x01
03a4: PUSH1 0xa0
03a6: PUSH1 0x02
03a8: EXP
03a9: SUB
03aa: AND
03ab: DUP2
03ac: MSTORE
03ad: PUSH1 0x20
03af: ADD
03b0: DUP1
03b1: PUSH1 0x20
03b3: ADD
03b4: DUP3
03b5: DUP2
03b6: SUB
03b7: DUP3
03b8: MSTORE
03b9: DUP4
03ba: DUP2
03bb: DUP2
03bc: MLOAD
03bd: DUP2
03be: MSTORE
03bf: PUSH1 0x20
03c1: ADD
03c2: SWAP2
03c3: POP
03c4: DUP1
03c5: MLOAD
03c6: SWAP1
03c7: PUSH1 0x20
03c9: ADD
03ca: SWAP1
03cb: DUP1
03cc: DUP4
03cd: DUP4
03ce: DUP3
03cf: SWAP1
03d0: PUSH1 0x00
03d2: PUSH1 0x04
03d4: PUSH1 0x20
03d6: DUP5
03d7: PUSH1 0x1f
03d9: ADD
03da: DIV
03db: PUSH1 0x0f
03dd: MUL
03de: PUSH1 0x03
03e0: ADD
03e1: CALL
03e2: POP
03e3: SWAP1
03e4: POP
03e5: SWAP1
03e6: DUP2
03e7: ADD
03e8: SWAP1
03e9: PUSH1 0x1f
03eb: AND
03ec: DUP1
03ed: ISZERO
03ee: PUSH2 0x040b
03f1: JUMPI
03f2: DUP1
03f3: DUP3
03f4: SUB
03f5: DUP1
03f6: MLOAD
03f7: PUSH1 0x01
03f9: DUP4
03fa: PUSH1 0x20
03fc: SUB
03fd: PUSH2 0x0100
0400: EXP
0401: SUB
0402: NOT
0403: AND
0404: DUP2
0405: MSTORE
0406: PUSH1 0x20
0408: ADD
0409: SWAP2
040a: POP
040b: JUMPDEST
040c: POP
040d: SWAP6
040e: POP
040f: POP
0410: POP
0411: POP
0412: POP
0413: POP
0414: PUSH1 0x00
0416: PUSH1 0x40
0418: MLOAD
0419: DUP1
041a: DUP4
041b: SUB
041c: DUP2
041d: PUSH1 0x00
041f: DUP8
0420: PUSH2 0x61da
0423: GAS
0424: SUB
0425: CALL
0426: ISZERO
0427: PUSH2 0x0002
042a: JUMPI
042b: POP
042c: PUSH1 0x01
042e: SWAP8
042f: SWAP7
0430: POP
0431: POP
0432: POP
0433: POP
0434: POP
0435: POP
0436: POP
0437: JUMP
0438: JUMPDEST
0439: PUSH1 0x09
043b: PUSH1 0x20
043d: SWAP1
043e: DUP2
043f: MSTORE
0440: PUSH1 0x04
0442: CALLDATALOAD
0443: PUSH1 0x00
0445: SWAP1
0446: DUP2
0447: MSTORE
0448: PUSH1 0x40
044a: DUP1
044b: DUP3
044c: SHA3
044d: SWAP1
044e: SWAP3
044f: MSTORE
0450: PUSH1 0x24
0452: CALLDATALOAD
0453: DUP2
0454: MSTORE
0455: SHA3
0456: SLOAD
0457: PUSH2 0x0553
045a: SWAP1
045b: DUP2
045c: JUMP
045d: JUMPDEST
045e: PUSH1 0x08
0460: PUSH1 0x20
0462: SWAP1
0463: DUP2
0464: MSTORE
0465: PUSH1 0x04
0467: CALLDATALOAD
0468: PUSH1 0x00
046a: SWAP1
046b: DUP2
046c: MSTORE
046d: PUSH1 0x40
046f: DUP1
0470: DUP3
0471: SHA3
0472: SWAP1
0473: SWAP3
0474: MSTORE
0475: PUSH1 0x24
0477: CALLDATALOAD
0478: DUP2
0479: MSTORE
047a: SHA3
047b: SLOAD
047c: PUSH2 0x0553
047f: SWAP1
0480: DUP2
0481: JUMP
0482: JUMPDEST
0483: PUSH2 0x0553
0486: PUSH1 0x04
0488: CALLDATALOAD
0489: CALLER
048a: PUSH1 0x01
048c: PUSH1 0xa0
048e: PUSH1 0x02
0490: EXP
0491: SUB
0492: AND
0493: PUSH1 0x00
0495: SWAP1
0496: DUP2
0497: MSTORE
0498: PUSH1 0x07
049a: PUSH1 0x20
049c: MSTORE
049d: PUSH1 0x40
049f: DUP2
04a0: SHA3
04a1: SLOAD
04a2: PUSH2 0x1388
04a5: SWAP1
04a6: DUP4
04a7: SWAP1
04a8: LT
04a9: ISZERO
04aa: PUSH2 0x080d
04ad: JUMPI
04ae: PUSH2 0x0002
04b1: JUMP
04b2: JUMPDEST
04b3: PUSH2 0x00da
04b6: PUSH1 0x04
04b8: CALLDATALOAD
04b9: PUSH1 0x00
04bb: SLOAD
04bc: CALLER
04bd: PUSH1 0x01
04bf: PUSH1 0xa0
04c1: PUSH1 0x02
04c3: EXP
04c4: SUB
04c5: SWAP1
04c6: DUP2
04c7: AND
04c8: SWAP2
04c9: AND
04ca: EQ
04cb: PUSH2 0x07eb
04ce: JUMPI
04cf: PUSH2 0x0002
04d2: JUMP
04d3: JUMPDEST
04d4: PUSH2 0x057b
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=bytes.fromhex(obj['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(0x60,0x80): ops[i]=f'PUSH{i-0x5f}'
for i in range(0x80,0x90): ops[i]=f'DUP{i-0x7f}'
for i in range(0x90,0xa0): ops[i]=f'SWAP{i-0x8f}'
start,end=1235,1705
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
04d3: JUMPDEST
04d4: PUSH2 0x057b
04d7: PUSH1 0x05
04d9: SLOAD
04da: PUSH1 0x01
04dc: PUSH1 0xa0
04de: PUSH1 0x02
04e0: EXP
04e1: SUB
04e2: AND
04e3: DUP2
04e4: JUMP
04e5: JUMPDEST
04e6: PUSH1 0x40
04e8: MLOAD
04e9: DUP1
04ea: DUP1
04eb: PUSH1 0x20
04ed: ADD
04ee: DUP3
04ef: DUP2
04f0: SUB
04f1: DUP3
04f2: MSTORE
04f3: DUP4
04f4: DUP2
04f5: DUP2
04f6: MLOAD
04f7: DUP2
04f8: MSTORE
04f9: PUSH1 0x20
04fb: ADD
04fc: SWAP2
04fd: POP
04fe: DUP1
04ff: MLOAD
0500: SWAP1
0501: PUSH1 0x20
0503: ADD
0504: SWAP1
0505: DUP1
0506: DUP4
0507: DUP4
0508: DUP3
0509: SWAP1
050a: PUSH1 0x00
050c: PUSH1 0x04
050e: PUSH1 0x20
0510: DUP5
0511: PUSH1 0x1f
0513: ADD
0514: DIV
0515: PUSH1 0x0f
0517: MUL
0518: PUSH1 0x03
051a: ADD
051b: CALL
051c: POP
051d: SWAP1
051e: POP
051f: SWAP1
0520: DUP2
0521: ADD
0522: SWAP1
0523: PUSH1 0x1f
0525: AND
0526: DUP1
0527: ISZERO
0528: PUSH2 0x0545
052b: JUMPI
052c: DUP1
052d: DUP3
052e: SUB
052f: DUP1
0530: MLOAD
0531: PUSH1 0x01
0533: DUP4
0534: PUSH1 0x20
0536: SUB
0537: PUSH2 0x0100
053a: EXP
053b: SUB
053c: NOT
053d: AND
053e: DUP2
053f: MSTORE
0540: PUSH1 0x20
0542: ADD
0543: SWAP2
0544: POP
0545: JUMPDEST
0546: POP
0547: SWAP3
0548: POP
0549: POP
054a: POP
054b: PUSH1 0x40
054d: MLOAD
054e: DUP1
054f: SWAP2
0550: SUB
0551: SWAP1
0552: RETURN
0553: JUMPDEST
0554: PUSH1 0x40
0556: DUP1
0557: MLOAD
0558: SWAP2
0559: DUP3
055a: MSTORE
055b: MLOAD
055c: SWAP1
055d: DUP2
055e: SWAP1
055f: SUB
0560: PUSH1 0x20
0562: ADD
0563: SWAP1
0564: RETURN
0565: JUMPDEST
0566: PUSH1 0x40
0568: DUP1
0569: MLOAD
056a: PUSH1 0xff
056c: SWAP1
056d: SWAP3
056e: AND
056f: DUP3
0570: MSTORE
0571: MLOAD
0572: SWAP1
0573: DUP2
0574: SWAP1
0575: SUB
0576: PUSH1 0x20
0578: ADD
0579: SWAP1
057a: RETURN
057b: JUMPDEST
057c: PUSH1 0x40
057e: DUP1
057f: MLOAD
0580: PUSH1 0x01
0582: PUSH1 0xa0
0584: PUSH1 0x02
0586: EXP
0587: SUB
0588: SWAP3
0589: SWAP1
058a: SWAP3
058b: AND
058c: DUP3
058d: MSTORE
058e: MLOAD
058f: SWAP1
0590: DUP2
0591: SWAP1
0592: SUB
0593: PUSH1 0x20
0595: ADD
0596: SWAP1
0597: RETURN
0598: JUMPDEST
0599: DUP3
059a: ADD
059b: SWAP2
059c: SWAP1
059d: PUSH1 0x00
059f: MSTORE
05a0: PUSH1 0x20
05a2: PUSH1 0x00
05a4: SHA3
05a5: SWAP1
05a6: JUMPDEST
05a7: DUP2
05a8: SLOAD
05a9: DUP2
05aa: MSTORE
05ab: SWAP1
05ac: PUSH1 0x01
05ae: ADD
05af: SWAP1
05b0: PUSH1 0x20
05b2: ADD
05b3: DUP1
05b4: DUP4
05b5: GT
05b6: PUSH2 0x05a6
05b9: JUMPI
05ba: DUP3
05bb: SWAP1
05bc: SUB
05bd: PUSH1 0x1f
05bf: AND
05c0: DUP3
05c1: ADD
05c2: SWAP2
05c3: JUMPDEST
05c4: POP
05c5: POP
05c6: POP
05c7: POP
05c8: POP
05c9: DUP2
05ca: JUMP
05cb: JUMPDEST
05cc: PUSH1 0x01
05ce: PUSH1 0xa0
05d0: PUSH1 0x02
05d2: EXP
05d3: SUB
05d4: DUP3
05d5: AND
05d6: PUSH1 0x00
05d8: SWAP1
05d9: DUP2
05da: MSTORE
05db: PUSH1 0x07
05dd: PUSH1 0x20
05df: MSTORE
05e0: PUSH1 0x40
05e2: SWAP1
05e3: SHA3
05e4: SLOAD
05e5: DUP2
05e6: DUP2
05e7: ADD
05e8: LT
05e9: ISZERO
05ea: PUSH2 0x05f2
05ed: JUMPI
05ee: PUSH2 0x0002
05f1: JUMP
05f2: JUMPDEST
05f3: CALLER
05f4: PUSH1 0x01
05f6: PUSH1 0xa0
05f8: PUSH1 0x02
05fa: EXP
05fb: SUB
05fc: SWAP1
05fd: DUP2
05fe: AND
05ff: PUSH1 0x00
0601: DUP2
0602: DUP2
0603: MSTORE
0604: PUSH1 0x07
0606: PUSH1 0x20
0608: SWAP1
0609: DUP2
060a: MSTORE
060b: PUSH1 0x40
060d: DUP1
060e: DUP4
060f: SHA3
0610: DUP1
0611: SLOAD
0612: DUP8
0613: SWAP1
0614: SUB
0615: SWAP1
0616: SSTORE
0617: SWAP4
0618: DUP7
0619: AND
061a: DUP1
061b: DUP4
061c: MSTORE
061d: SWAP2
061e: DUP5
061f: SWAP1
0620: SHA3
0621: DUP1
0622: SLOAD
0623: DUP7
0624: ADD
0625: SWAP1
0626: SSTORE
0627: DUP4
0628: MLOAD
0629: DUP6
062a: DUP2
062b: MSTORE
062c: SWAP4
062d: MLOAD
062e: SWAP2
062f: SWAP4
0630: PUSH1 0x00
0632: DUP1
0633: MLOAD
0634: PUSH1 0x20
0636: PUSH2 0x0979
0639: DUP4
063a: CODECOPY
063b: DUP2
063c: MLOAD
063d: SWAP2
063e: MSTORE
063f: SWAP3
0640: SWAP1
0641: DUP2
0642: SWAP1
0643: SUB
0644: SWAP1
0645: SWAP2
0646: ADD
0647: SWAP1
0648: OP_a3
0649: POP
064a: POP
064b: JUMP
064c: JUMPDEST
064d: PUSH1 0x40
064f: DUP1
0650: MLOAD
0651: NUMBER
0652: DUP2
0653: MSTORE
0654: TIMESTAMP
0655: PUSH1 0x20
0657: DUP3
0658: ADD
0659: MSTORE
065a: DUP1
065b: DUP3
065c: ADD
065d: DUP7
065e: SWAP1
065f: MSTORE
0660: SWAP1
0661: MLOAD
0662: SWAP1
0663: DUP2
0664: SWAP1
0665: SUB
0666: PUSH1 0x60
0668: ADD
0669: SWAP1
066a: SHA3
066b: PUSH2 0x0675
066e: SWAP1
066f: PUSH1 0x0a
0671: PUSH2 0x01ac
0674: JUMP
0675: JUMPDEST
0676: SWAP1
0677: POP
0678: PUSH2 0x0200
067b: DUP2
067c: LT
067d: PUSH2 0x0687
0680: JUMPI
0681: PUSH1 0x64
0683: DUP5
0684: MUL
0685: SWAP3
0686: POP
0687: JUMPDEST
0688: PUSH2 0x0200
068b: DUP2
068c: LT
068d: ISZERO
068e: PUSH2 0x0699
0691: JUMPI
0692: PUSH2 0x2648
0695: DUP5
0696: MUL
0697: SWAP3
0698: POP
0699: JUMPDEST
069a: ADDRESS
069b: PUSH1 0x01
069d: PUSH1 0xa0
069f: PUSH1 0x02
06a1: EXP
06a2: SUB
06a3: AND
06a4: PUSH1 0x00
06a6: SWAP1
06a7: DUP2
06a8: MSTORE
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=bytes.fromhex(obj['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xa3:'LOG3',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(0x60,0x80): ops[i]=f'PUSH{i-0x5f}'
for i in range(0x80,0x90): ops[i]=f'DUP{i-0x7f}'
for i in range(0x90,0xa0): ops[i]=f'SWAP{i-0x8f}'
start,end=1705,2235
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
06a9: PUSH1 0x07
06ab: PUSH1 0x20
06ad: MSTORE
06ae: PUSH1 0x40
06b0: SWAP1
06b1: SHA3
06b2: SLOAD
06b3: DUP4
06b4: SWAP1
06b5: LT
06b6: ISZERO
06b7: PUSH2 0x06bf
06ba: JUMPI
06bb: PUSH2 0x0002
06be: JUMP
06bf: JUMPDEST
06c0: CALLER
06c1: PUSH1 0x01
06c3: PUSH1 0xa0
06c5: PUSH1 0x02
06c7: EXP
06c8: SUB
06c9: SWAP1
06ca: DUP2
06cb: AND
06cc: PUSH1 0x00
06ce: DUP2
06cf: DUP2
06d0: MSTORE
06d1: PUSH1 0x07
06d3: PUSH1 0x20
06d5: SWAP1
06d6: DUP2
06d7: MSTORE
06d8: PUSH1 0x40
06da: DUP1
06db: DUP4
06dc: SHA3
06dd: DUP1
06de: SLOAD
06df: DUP10
06e0: ADD
06e1: SWAP1
06e2: SSTORE
06e3: ADDRESS
06e4: SWAP1
06e5: SWAP5
06e6: AND
06e7: DUP1
06e8: DUP4
06e9: MSTORE
06ea: SWAP2
06eb: DUP5
06ec: SWAP1
06ed: SHA3
06ee: DUP1
06ef: SLOAD
06f0: DUP9
06f1: SWAP1
06f2: SUB
06f3: SWAP1
06f4: SSTORE
06f5: DUP4
06f6: MLOAD
06f7: DUP8
06f8: DUP2
06f9: MSTORE
06fa: SWAP4
06fb: MLOAD
06fc: SWAP3
06fd: SWAP4
06fe: SWAP2
06ff: SWAP3
0700: PUSH1 0x00
0702: DUP1
0703: MLOAD
0704: PUSH1 0x20
0706: PUSH2 0x0979
0709: DUP4
070a: CODECOPY
070b: DUP2
070c: MLOAD
070d: SWAP2
070e: MSTORE
070f: SWAP3
0710: DUP2
0711: SWAP1
0712: SUB
0713: SWAP1
0714: SWAP2
0715: ADD
0716: SWAP1
0717: LOG3
0718: DUP2
0719: PUSH1 0x07
071b: PUSH1 0x00
071d: POP
071e: PUSH1 0x00
0720: PUSH1 0x05
0722: PUSH1 0x00
0724: SWAP1
0725: SLOAD
0726: SWAP1
0727: PUSH2 0x0100
072a: EXP
072b: SWAP1
072c: DIV
072d: PUSH1 0x01
072f: PUSH1 0xa0
0731: PUSH1 0x02
0733: EXP
0734: SUB
0735: AND
0736: PUSH1 0x01
0738: PUSH1 0xa0
073a: PUSH1 0x02
073c: EXP
073d: SUB
073e: AND
073f: DUP2
0740: MSTORE
0741: PUSH1 0x20
0743: ADD
0744: SWAP1
0745: DUP2
0746: MSTORE
0747: PUSH1 0x20
0749: ADD
074a: PUSH1 0x00
074c: SHA3
074d: PUSH1 0x00
074f: DUP3
0750: DUP3
0751: DUP3
0752: POP
0753: SLOAD
0754: ADD
0755: SWAP3
0756: POP
0757: POP
0758: DUP2
0759: SWAP1
075a: SSTORE
075b: POP
075c: DUP2
075d: PUSH1 0x07
075f: PUSH1 0x00
0761: POP
0762: PUSH1 0x00
0764: ADDRESS
0765: PUSH1 0x01
0767: PUSH1 0xa0
0769: PUSH1 0x02
076b: EXP
076c: SUB
076d: AND
076e: DUP2
076f: MSTORE
0770: PUSH1 0x20
0772: ADD
0773: SWAP1
0774: DUP2
0775: MSTORE
0776: PUSH1 0x20
0778: ADD
0779: PUSH1 0x00
077b: SHA3
077c: PUSH1 0x00
077e: DUP3
077f: DUP3
0780: DUP3
0781: POP
0782: SLOAD
0783: SUB
0784: SWAP3
0785: POP
0786: POP
0787: DUP2
0788: SWAP1
0789: SSTORE
078a: POP
078b: PUSH1 0x05
078d: PUSH1 0x00
078f: SWAP1
0790: SLOAD
0791: SWAP1
0792: PUSH2 0x0100
0795: EXP
0796: SWAP1
0797: DIV
0798: PUSH1 0x01
079a: PUSH1 0xa0
079c: PUSH1 0x02
079e: EXP
079f: SUB
07a0: AND
07a1: PUSH1 0x01
07a3: PUSH1 0xa0
07a5: PUSH1 0x02
07a7: EXP
07a8: SUB
07a9: AND
07aa: ADDRESS
07ab: PUSH1 0x01
07ad: PUSH1 0xa0
07af: PUSH1 0x02
07b1: EXP
07b2: SUB
07b3: AND
07b4: PUSH1 0x00
07b6: DUP1
07b7: MLOAD
07b8: PUSH1 0x20
07ba: PUSH2 0x0979
07bd: DUP4
07be: CODECOPY
07bf: DUP2
07c0: MLOAD
07c1: SWAP2
07c2: MSTORE
07c3: DUP5
07c4: PUSH1 0x40
07c6: MLOAD
07c7: DUP1
07c8: DUP3
07c9: DUP2
07ca: MSTORE
07cb: PUSH1 0x20
07cd: ADD
07ce: SWAP2
07cf: POP
07d0: POP
07d1: PUSH1 0x40
07d3: MLOAD
07d4: DUP1
07d5: SWAP2
07d6: SUB
07d7: SWAP1
07d8: LOG3
07d9: POP
07da: POP
07db: POP
07dc: SWAP1
07dd: JUMP
07de: JUMPDEST
07df: PUSH1 0x06
07e1: SSTORE
07e2: JUMP
07e3: JUMPDEST
07e4: POP
07e5: SWAP4
07e6: SWAP3
07e7: POP
07e8: POP
07e9: POP
07ea: JUMP
07eb: JUMPDEST
07ec: PUSH1 0x00
07ee: DUP1
07ef: SLOAD
07f0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0805: NOT
0806: AND
0807: DUP3
0808: OR
0809: SWAP1
080a: SSTORE
080b: POP
080c: JUMP
080d: JUMPDEST
080e: ADDRESS
080f: PUSH1 0x01
0811: PUSH1 0xa0
0813: PUSH1 0x02
0815: EXP
0816: SUB
0817: SWAP1
0818: DUP2
0819: AND
081a: PUSH1 0x00
081c: SWAP1
081d: DUP2
081e: MSTORE
081f: PUSH1 0x07
0821: PUSH1 0x20
0823: MSTORE
0824: PUSH1 0x40
0826: DUP1
0827: DUP3
0828: SHA3
0829: DUP1
082a: SLOAD
082b: DUP8
082c: ADD
082d: SWAP1
082e: SSTORE
082f: CALLER
0830: SWAP1
0831: SWAP3
0832: AND
0833: DUP1
0834: DUP3
0835: MSTORE
0836: DUP3
0837: DUP3
0838: SHA3
0839: DUP1
083a: SLOAD
083b: DUP8
083c: SWAP1
083d: SUB
083e: SWAP1
083f: SSTORE
0840: SWAP2
0841: MLOAD
0842: PUSH4 0xffffffff
0847: DUP5
0848: AND
0849: DUP7
084a: MUL
084b: SWAP5
084c: POP
084d: DUP5
084e: SWAP1
084f: DUP3
0850: DUP2
0851: DUP2
0852: DUP2
0853: DUP6
0854: DUP9
0855: DUP4
0856: CALL
0857: POP
0858: POP
0859: PUSH1 0x40
085b: DUP1
085c: MLOAD
085d: DUP8
085e: DUP2
085f: MSTORE
0860: SWAP1
0861: MLOAD
0862: ADDRESS
0863: PUSH1 0x01
0865: PUSH1 0xa0
0867: PUSH1 0x02
0869: EXP
086a: SUB
086b: AND
086c: SWAP5
086d: SWAP4
086e: POP
086f: PUSH1 0x00
0871: DUP1
0872: MLOAD
0873: PUSH1 0x20
0875: PUSH2 0x0979
0878: DUP4
0879: CODECOPY
087a: DUP2
087b: MLOAD
087c: SWAP2
087d: MSTORE
087e: SWAP3
087f: POP
0880: SWAP1
0881: DUP2
0882: SWAP1
0883: SUB
0884: PUSH1 0x20
0886: ADD
0887: SWAP1
0888: LOG3
0889: POP
088a: SWAP2
088b: SWAP1
088c: POP
088d: JUMP
088e: JUMPDEST
088f: PUSH1 0x01
0891: PUSH1 0xa0
0893: PUSH1 0x02
0895: EXP
0896: SUB
0897: DUP4
0898: AND
0899: PUSH1 0x00
089b: SWAP1
089c: DUP2
089d: MSTORE
089e: PUSH1 0x07
08a0: PUSH1 0x20
08a2: MSTORE
08a3: PUSH1 0x40
08a5: SWAP1
08a6: SHA3
08a7: SLOAD
08a8: DUP1
08a9: DUP4
08aa: ADD
08ab: LT
08ac: ISZERO
08ad: PUSH2 0x08b5
08b0: JUMPI
08b1: PUSH2 0x0002
08b4: JUMP
08b5: JUMPDEST
08b6: PUSH1 0x01
08b8: PUSH1 0xa0
08ba: PUSH1 0x02
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=bytes.fromhex(obj['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xa3:'LOG3',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(0x60,0x80): ops[i]=f'PUSH{i-0x5f}'
for i in range(0x80,0x90): ops[i]=f'DUP{i-0x7f}'
for i in range(0x90,0xa0): ops[i]=f'SWAP{i-0x8f}'
start,end=2235,2421
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
08bb: MUL
08bc: EXP
08bd: SUB
08be: DUP5
08bf: DUP2
08c0: AND
08c1: PUSH1 0x00
08c3: DUP2
08c4: DUP2
08c5: MSTORE
08c6: PUSH1 0x08
08c8: PUSH1 0x20
08ca: SWAP1
08cb: DUP2
08cc: MSTORE
08cd: PUSH1 0x40
08cf: DUP1
08d0: DUP4
08d1: SHA3
08d2: CALLER
08d3: SWAP1
08d4: SWAP6
08d5: AND
08d6: DUP1
08d7: DUP5
08d8: MSTORE
08d9: SWAP5
08da: DUP3
08db: MSTORE
08dc: DUP1
08dd: DUP4
08de: SHA3
08df: SLOAD
08e0: SWAP4
08e1: DUP4
08e2: MSTORE
08e3: PUSH1 0x09
08e5: DUP3
08e6: MSTORE
08e7: DUP1
08e8: DUP4
08e9: SHA3
08ea: SWAP5
08eb: DUP4
08ec: MSTORE
08ed: SWAP4
08ee: SWAP1
08ef: MSTORE
08f0: SWAP2
08f1: SWAP1
08f2: SWAP2
08f3: SHA3
08f4: SLOAD
08f5: DUP4
08f6: ADD
08f7: GT
08f8: ISZERO
08f9: PUSH2 0x0901
08fc: JUMPI
08fd: PUSH2 0x0002
0900: JUMP
0901: JUMPDEST
0902: PUSH1 0x01
0904: PUSH1 0xa0
0906: PUSH1 0x02
0908: EXP
0909: SUB
090a: DUP5
090b: DUP2
090c: AND
090d: PUSH1 0x00
090f: DUP2
0910: DUP2
0911: MSTORE
0912: PUSH1 0x07
0914: PUSH1 0x20
0916: SWAP1
0917: DUP2
0918: MSTORE
0919: PUSH1 0x40
091b: DUP1
091c: DUP4
091d: SHA3
091e: DUP1
091f: SLOAD
0920: DUP9
0921: SWAP1
0922: SUB
0923: SWAP1
0924: SSTORE
0925: DUP8
0926: DUP6
0927: AND
0928: DUP1
0929: DUP5
092a: MSTORE
092b: DUP2
092c: DUP5
092d: SHA3
092e: DUP1
092f: SLOAD
0930: DUP10
0931: ADD
0932: SWAP1
0933: SSTORE
0934: DUP5
0935: DUP5
0936: MSTORE
0937: PUSH1 0x09
0939: DUP4
093a: MSTORE
093b: DUP2
093c: DUP5
093d: SHA3
093e: CALLER
093f: SWAP1
0940: SWAP7
0941: AND
0942: DUP5
0943: MSTORE
0944: SWAP5
0945: DUP3
0946: MSTORE
0947: SWAP2
0948: DUP3
0949: SWAP1
094a: SHA3
094b: DUP1
094c: SLOAD
094d: DUP8
094e: ADD
094f: SWAP1
0950: SSTORE
0951: DUP2
0952: MLOAD
0953: DUP7
0954: DUP2
0955: MSTORE
0956: SWAP2
0957: MLOAD
0958: PUSH1 0x00
095a: DUP1
095b: MLOAD
095c: PUSH1 0x20
095e: PUSH2 0x0979
0961: DUP4
0962: CODECOPY
0963: DUP2
0964: MLOAD
0965: SWAP2
0966: MSTORE
0967: SWAP3
0968: DUP2
0969: SWAP1
096a: SUB
096b: SWAP1
096c: SWAP2
096d: ADD
096e: SWAP1
096f: LOG3
0970: POP
0971: PUSH1 0x01
0973: SWAP4
0974: SWAP3
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=bytes.fromhex(obj['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xa3:'LOG3',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(0x60,0x80): ops[i]=f'PUSH{i-0x5f}'
for i in range(0x80,0x90): ops[i]=f'DUP{i-0x7f}'
for i in range(0x90,0xa0): ops[i]=f'SWAP{i-0x8f}'
start,end=2230,2420
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
08b6: PUSH1 0x01
08b8: PUSH1 0xa0
08ba: PUSH1 0x02
08bc: EXP
08bd: SUB
08be: DUP5
08bf: DUP2
08c0: AND
08c1: PUSH1 0x00
08c3: DUP2
08c4: DUP2
08c5: MSTORE
08c6: PUSH1 0x08
08c8: PUSH1 0x20
08ca: SWAP1
08cb: DUP2
08cc: MSTORE
08cd: PUSH1 0x40
08cf: DUP1
08d0: DUP4
08d1: SHA3
08d2: CALLER
08d3: SWAP1
08d4: SWAP6
08d5: AND
08d6: DUP1
08d7: DUP5
08d8: MSTORE
08d9: SWAP5
08da: DUP3
08db: MSTORE
08dc: DUP1
08dd: DUP4
08de: SHA3
08df: SLOAD
08e0: SWAP4
08e1: DUP4
08e2: MSTORE
08e3: PUSH1 0x09
08e5: DUP3
08e6: MSTORE
08e7: DUP1
08e8: DUP4
08e9: SHA3
08ea: SWAP5
08eb: DUP4
08ec: MSTORE
08ed: SWAP4
08ee: SWAP1
08ef: MSTORE
08f0: SWAP2
08f1: SWAP1
08f2: SWAP2
08f3: SHA3
08f4: SLOAD
08f5: DUP4
08f6: ADD
08f7: GT
08f8: ISZERO
08f9: PUSH2 0x0901
08fc: JUMPI
08fd: PUSH2 0x0002
0900: JUMP
0901: JUMPDEST
0902: PUSH1 0x01
0904: PUSH1 0xa0
0906: PUSH1 0x02
0908: EXP
0909: SUB
090a: DUP5
090b: DUP2
090c: AND
090d: PUSH1 0x00
090f: DUP2
0910: DUP2
0911: MSTORE
0912: PUSH1 0x07
0914: PUSH1 0x20
0916: SWAP1
0917: DUP2
0918: MSTORE
0919: PUSH1 0x40
091b: DUP1
091c: DUP4
091d: SHA3
091e: DUP1
091f: SLOAD
0920: DUP9
0921: SWAP1
0922: SUB
0923: SWAP1
0924: SSTORE
0925: DUP8
0926: DUP6
0927: AND
0928: DUP1
0929: DUP5
092a: MSTORE
092b: DUP2
092c: DUP5
092d: SHA3
092e: DUP1
092f: SLOAD
0930: DUP10
0931: ADD
0932: SWAP1
0933: SSTORE
0934: DUP5
0935: DUP5
0936: MSTORE
0937: PUSH1 0x09
0939: DUP4
093a: MSTORE
093b: DUP2
093c: DUP5
093d: SHA3
093e: CALLER
093f: SWAP1
0940: SWAP7
0941: AND
0942: DUP5
0943: MSTORE
0944: SWAP5
0945: DUP3
0946: MSTORE
0947: SWAP2
0948: DUP3
0949: SWAP1
094a: SHA3
094b: DUP1
094c: SLOAD
094d: DUP8
094e: ADD
094f: SWAP1
0950: SSTORE
0951: DUP2
0952: MLOAD
0953: DUP7
0954: DUP2
0955: MSTORE
0956: SWAP2
0957: MLOAD
0958: PUSH1 0x00
095a: DUP1
095b: MLOAD
095c: PUSH1 0x20
095e: PUSH2 0x0979
0961: DUP4
0962: CODECOPY
0963: DUP2
0964: MLOAD
0965: SWAP2
0966: MSTORE
0967: SWAP3
0968: DUP2
0969: SWAP1
096a: SUB
096b: SWAP1
096c: SWAP2
096d: ADD
096e: SWAP1
096f: LOG3
0970: POP
0971: PUSH1 0x01
0973: SWAP4
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=bytes.fromhex(obj['artifact']['runtime_bytecode']['full'][2:])
def dis(pc):
op=code[pc]
if 0x60<=op<=0x7f:
n=op-0x5f
return op, code[pc+1:pc+1+n], pc+1+n
return op, b'', pc+1
def opname(op):
base={0x00:'STOP',0x01:'ADD',0x03:'SUB',0x04:'DIV',0x10:'LT',0x11:'GT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x19:'NOT',0x20:'SHA3',0x30:'ADDRESS',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x39:'CODECOPY',0x40:'BLOCKHASH',0x42:'TIMESTAMP',0x43:'NUMBER',0x51:'MLOAD',0x52:'MSTORE',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x5b:'JUMPDEST',0x5a:'GAS',0xa3:'LOG3',0xf1:'CALL',0xf3:'RETURN'}
if 0x60<=op<=0x7f: return f'PUSH{op-0x5f}'
if 0x80<=op<=0x8f: return f'DUP{op-0x7f}'
if 0x90<=op<=0x9f: return f'SWAP{op-0x8f}'
return base.get(op,hex(op))
def binop(stack,sym):
a=stack.pop(); b=stack.pop(); stack.append(f'({b}{sym}{a})')
def run(start,end,initial):
stack=initial[:]
mem={}
pc=start
while pc<end:
op,data,npc=dis(pc)
name=opname(op)
# print(pc, name, stack)
if 0x60<=op<=0x7f:
stack.append(hex(int.from_bytes(data,'big')))
elif 0x80<=op<=0x8f:
i=op-0x7f; stack.append(stack[-i])
elif 0x90<=op<=0x9f:
i=op-0x8f; stack[-1],stack[-1-i]=stack[-1-i],stack[-1]
elif op==0x50:
stack.pop()
elif op==0x51:
off=stack.pop(); stack.append(mem.get(off,f'm[{off}]'))
elif op==0x52:
off=stack.pop(); val=stack.pop(); mem[off]=val
elif op==0x54:
slot=stack.pop(); stack.append(f's[{slot}]')
elif op==0x55:
slot=stack.pop(); val=stack.pop(); print(f'SSTORE pc {pc:x}: {slot} = {val}')
elif op==0x33:
stack.append('caller')
elif op==0x30:
stack.append('address(this)')
elif op==0x34:
stack.append('callvalue')
elif op==0x35:
off=stack.pop(); stack.append(f'cd[{off}]')
elif op==0x43:
stack.append('number')
elif op==0x42:
stack.append('timestamp')
elif op==0x40:
x=stack.pop(); stack.append(f'blockhash({x})')
elif op==0x01:
binop(stack,'+')
elif op==0x03:
binop(stack,'-')
elif op==0x04:
a=stack.pop(); b=stack.pop(); stack.append(f'({b}/{a})')
elif op==0x10:
a=stack.pop(); b=stack.pop(); stack.append(f'({b}<{a})')
elif op==0x11:
a=stack.pop(); b=stack.pop(); stack.append(f'({b}>{a})')
elif op==0x14:
a=stack.pop(); b=stack.pop(); stack.append(f'({b}=={a})')
elif op==0x15:
a=stack.pop(); stack.append(f'iszero({a})')
elif op==0x16:
binop(stack,'&')
elif op==0x19:
a=stack.pop(); stack.append(f'~{a}')
elif op==0x20:
off=stack.pop(); size=stack.pop(); stack.append(f'keccak({off},{size})')
elif op==0x36:
stack.append('calldatasize')
elif op==0x37:
dest=stack.pop(); off=stack.pop(); size=stack.pop(); print(f'CALLDATACOPY {dest} {off} {size}')
elif op==0x39:
dest=stack.pop(); off=stack.pop(); size=stack.pop(); print(f'CODECOPY {dest} {off} {size}')
elif op==0x5a:
stack.append('gas')
elif op==0x57:
dest=stack.pop(); cond=stack.pop(); print(f'JUMPI pc {pc:x} dest {dest} cond {cond}')
elif op==0x56:
dest=stack.pop(); print(f'JUMP pc {pc:x} dest {dest} stack_top={stack[-5:] if stack else []}'); break
elif op==0xf1:
gas=stack.pop(); to=stack.pop(); value=stack.pop(); in_off=stack.pop(); in_sz=stack.pop(); out_off=stack.pop(); out_sz=stack.pop();
print(f'CALL pc {pc:x}: to={to}, value={value}, in=mem[{in_off}:{in_sz}], out={out_off}:{out_sz}, gas={gas}')
stack.append(f'call({to})')
elif op==0xa3:
mstart=stack.pop(); msz=stack.pop(); t1=stack.pop(); t2=stack.pop(); t3=stack.pop(); print(f'LOG3 pc {pc:x}: topics {t1},{t2},{t3}, data {mstart}:{msz}')
elif op in (0x5b,):
pass
else:
print(f'stopping unsupported pc {pc:x} {name} stack={stack[-8:]}')
break
pc=npc
print('Final stack', stack[-12:])
print('Mem', mem)
print('=== 02d1 -> 0425 ===')
# initial stack before entry: [ret?]. From dispatcher pattern it likely pushes return helper before jumping. Use placeholders bottom->top.
run(0x02d1,0x0426,['ret'])
print('\\n=== 0482 -> 0856 ===')
run(0x0482,0x0857,['ret'])
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
=== 02d1 -> 0425 ===
stopping unsupported pc 2e9 0x2 stack=['0x40', 'm[0x40]', '0x20', 'cd[0x44]', '0x4', 'cd[(cd[0x44]+0x4)]', '(0x20/(0x1f+cd[(cd[0x44]+0x4)]))', '0x20']
Final stack ['ret', '0x40', 'm[0x40]', '0x20', 'cd[0x44]', '0x4', 'cd[(cd[0x44]+0x4)]', '(0x20/(0x1f+cd[(cd[0x44]+0x4)]))', '0x20']
Mem {}
=== 0482 -> 0856 ===
stopping unsupported pc 490 0xa stack=['ret', '0x553', 'cd[0x4]', 'caller', '0x1', '0xa0', '0x2']
Final stack ['ret', '0x553', 'cd[0x4]', 'caller', '0x1', '0xa0', '0x2']
Mem {}
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=bytes.fromhex(obj['artifact']['runtime_bytecode']['full'][2:])
def dis(pc):
op=code[pc]
if 0x60<=op<=0x7f:
n=op-0x5f
return op, code[pc+1:pc+1+n], pc+1+n
return op, b'', pc+1
def binop(stack,sym):
a=stack.pop(); b=stack.pop(); stack.append(f'({b}{sym}{a})')
def run(start,end,initial):
stack=initial[:]
mem={}
pc=start
while pc<end:
op,data,npc=dis(pc)
if 0x60<=op<=0x7f:
stack.append(hex(int.from_bytes(data,'big')))
elif 0x80<=op<=0x8f:
i=op-0x7f; stack.append(stack[-i])
elif 0x90<=op<=0x9f:
i=op-0x8f; stack[-1],stack[-1-i]=stack[-1-i],stack[-1]
elif op==0x50:
stack.pop()
elif op==0x51:
off=stack.pop(); stack.append(mem.get(off,f'm[{off}]'))
elif op==0x52:
off=stack.pop(); val=stack.pop(); mem[off]=val
elif op==0x54:
slot=stack.pop(); stack.append(f's[{slot}]')
elif op==0x55:
slot=stack.pop(); val=stack.pop(); print(f'SSTORE pc 0x{pc:x}: {slot} = {val}')
elif op==0x33: stack.append('caller')
elif op==0x30: stack.append('address(this)')
elif op==0x34: stack.append('callvalue')
elif op==0x35:
off=stack.pop(); stack.append(f'cd[{off}]')
elif op==0x43: stack.append('number')
elif op==0x42: stack.append('timestamp')
elif op==0x40:
x=stack.pop(); stack.append(f'blockhash({x})')
elif op==0x01: binop(stack,'+')
elif op==0x02: binop(stack,'*')
elif op==0x03: binop(stack,'-')
elif op==0x04:
a=stack.pop(); b=stack.pop(); stack.append(f'({b}/{a})')
elif op==0x0a:
a=stack.pop(); b=stack.pop(); stack.append(f'({b}**{a})')
elif op==0x10: binop(stack,'<')
elif op==0x11: binop(stack,'>')
elif op==0x14: binop(stack,'==')
elif op==0x15:
a=stack.pop(); stack.append(f'iszero({a})')
elif op==0x16: binop(stack,'&')
elif op==0x17: binop(stack,'|')
elif op==0x19:
a=stack.pop(); stack.append(f'~{a}')
elif op==0x20:
off=stack.pop(); size=stack.pop(); stack.append(f'keccak({off},{size})')
elif op==0x36: stack.append('calldatasize')
elif op==0x37:
dest=stack.pop(); off=stack.pop(); size=stack.pop(); mem[dest]=f'calldata[{off}:{size}]'; print(f'CALLDATACOPY pc 0x{pc:x}: {dest} <- calldata[{off}:{size}]')
elif op==0x39:
dest=stack.pop(); off=stack.pop(); size=stack.pop(); mem[dest]=f'code[{off}:{size}]'; print(f'CODECOPY pc 0x{pc:x}: {dest} <- code[{off}:{size}]')
elif op==0x5a: stack.append('gas')
elif op==0x57:
dest=stack.pop(); cond=stack.pop(); print(f'JUMPI pc 0x{pc:x} dest {dest} cond {cond}')
elif op==0x56:
dest=stack.pop(); print(f'JUMP pc 0x{pc:x} dest {dest} stack_top={stack[-8:]}'); break
elif op==0xf1:
gas=stack.pop(); to=stack.pop(); value=stack.pop(); in_off=stack.pop(); in_sz=stack.pop(); out_off=stack.pop(); out_sz=stack.pop();
print(f'CALL pc 0x{pc:x}: to={to}, value={value}, in_off={in_off}, in_sz={in_sz}, out_off={out_off}, out_sz={out_sz}, gas={gas}')
stack.append(f'call({to})')
elif op==0xa3:
mstart=stack.pop(); msz=stack.pop(); t1=stack.pop(); t2=stack.pop(); t3=stack.pop(); print(f'LOG3 pc 0x{pc:x}: topics=[{t1},{t2},{t3}] data={mstart}:{msz}')
elif op in (0x5b,):
pass
elif op==0xfd:
print(f'REVERT pc 0x{pc:x} stack={stack[-8:]}'); break
else:
print(f'stopping unsupported pc 0x{pc:x} op=0x{op:x} stack={stack[-10:]}')
break
pc=npc
print('Final stack', stack[-15:])
print('Mem keys', mem)
print('=== 02d1 -> 0425 ===')
run(0x02d1,0x0426,['ret'])
print('\\n=== 0482 -> 0856 ===')
run(0x0482,0x0857,['ret'])
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
=== 02d1 -> 0425 ===
CALLDATACOPY pc 0x313: (0x20+m[0x40]) <- calldata[(cd[0x44]+0x24):cd[(cd[0x44]+0x4)]]
SSTORE pc 0x364: keccak(0x0,((0x0+0x20)+0x20)) = cd[0x24]
CALL pc 0x3e1: to=0x4, value=0x0, in_off=(m[0x40]+0x20), in_sz=cd[(cd[0x44]+0x4)], out_off=((((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)+0x20), out_sz=cd[(cd[0x44]+0x4)], gas=(((0x20/(cd[(cd[0x44]+0x4)]+0x1f))*0xf)+0x3)
JUMPI pc 0x3f1 dest 0x40b cond iszero((cd[(cd[0x44]+0x4)]&0x1f))
CALL pc 0x425: to=(cd[0x4]&(0x1-(0xa0**0x2))), value=0x0, in_off=((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20), in_sz=(((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)-(((cd[(cd[0x44]+0x4)]&0x1f)-(((((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)+0x20)+cd[(cd[0x44]+0x4)]))+0x20)), out_off=((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20), out_sz=0x0, gas=(0x61da-gas)
Final stack ['ret', '0x553', 'cd[0x4]', 'cd[0x24]', 'm[0x40]', '0x0', 'cd[0x4]', '(cd[0x4]&(0x1-(0xa0**0x2)))', '0x8f4ffcb1', '(((cd[(cd[0x44]+0x4)]&0x1f)-(((((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)+0x20)+cd[(cd[0x44]+0x4)]))+0x20)', 'call((cd[0x4]&(0x1-(0xa0**0x2))))']
Mem keys {'0x40': '((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)', 'm[0x40]': 'cd[(cd[0x44]+0x4)]', '(0x20+m[0x40])': 'calldata[(cd[0x44]+0x24):cd[(cd[0x44]+0x4)]]', '0x0': '(cd[0x4]&(0x1-(0xa0**0x2)))', '(0x0+0x20)': 'keccak(0x0,((0x0+0x20)+0x20))', '((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)': '(0x8f4ffcb1*(0xe0**0x2))', '(((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)': '(caller&(0x1-(0xa0**0x2)))', '((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)': 'cd[0x24]', '(((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)': '(address(this)&(0x1-(0xa0**0x2)))', '((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)': '((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)-(((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20))', '(((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)': 'cd[(cd[0x44]+0x4)]', '((cd[(cd[0x44]+0x4)]&0x1f)-(((((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)+0x20)+cd[(cd[0x44]+0x4)]))': '(m[((cd[(cd[0x44]+0x4)]&0x1f)-(((((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)+0x20)+cd[(cd[0x44]+0x4)]))]&~(0x1-(((cd[(cd[0x44]+0x4)]&0x1f)-0x20)**0x100)))'}
=== 0482 -> 0856 ===
JUMPI pc 0x4ad dest 0x80d cond iszero((cd[0x4]<s[keccak(0x0,0x40)]))
JUMP pc 0x4b1 dest 0x2 stack_top=['ret', '0x553', 'cd[0x4]', '0x0', '0x1388']
Final stack ['ret', '0x553', 'cd[0x4]', '0x0', '0x1388']
Mem keys {'0x0': '(caller&(0x1-(0xa0**0x2)))', '0x20': '0x7'}
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=bytes.fromhex(obj['artifact']['runtime_bytecode']['full'][2:])
def dis(pc):
op=code[pc]
if 0x60<=op<=0x7f:
n=op-0x5f
return op, code[pc+1:pc+1+n], pc+1+n
return op, b'', pc+1
def binop(stack,sym):
a=stack.pop(); b=stack.pop(); stack.append(f'({b}{sym}{a})')
def run(start,end,initial):
stack=initial[:]
mem={}
pc=start
while pc<end:
op,data,npc=dis(pc)
if 0x60<=op<=0x7f:
stack.append(hex(int.from_bytes(data,'big')))
elif 0x80<=op<=0x8f:
i=op-0x7f; stack.append(stack[-i])
elif 0x90<=op<=0x9f:
i=op-0x8f; stack[-1],stack[-1-i]=stack[-1-i],stack[-1]
elif op==0x50: stack.pop()
elif op==0x51:
off=stack.pop(); stack.append(mem.get(off,f'm[{off}]'))
elif op==0x52:
off=stack.pop(); val=stack.pop(); mem[off]=val
elif op==0x54:
slot=stack.pop(); stack.append(f's[{slot}]')
elif op==0x55:
slot=stack.pop(); val=stack.pop(); print(f'SSTORE pc 0x{pc:x}: {slot} = {val}')
elif op==0x33: stack.append('caller')
elif op==0x30: stack.append('address(this)')
elif op==0x35:
off=stack.pop(); stack.append(f'cd[{off}]')
elif op==0x01: binop(stack,'+')
elif op==0x02: binop(stack,'*')
elif op==0x03: binop(stack,'-')
elif op==0x0a: binop(stack,'**')
elif op==0x16: binop(stack,'&')
elif op==0x20:
off=stack.pop(); size=stack.pop(); stack.append(f'keccak({off},{size})')
elif op==0x39:
dest=stack.pop(); off=stack.pop(); size=stack.pop(); mem[dest]=f'code[{off}:{size}]'; print(f'CODECOPY pc 0x{pc:x}: {dest} <- code[{off}:{size}]')
elif op==0x5a: stack.append('gas')
elif op==0xf1:
gas=stack.pop(); to=stack.pop(); value=stack.pop(); in_off=stack.pop(); in_sz=stack.pop(); out_off=stack.pop(); out_sz=stack.pop();
print(f'CALL pc 0x{pc:x}: to={to}, value={value}, in_off={in_off}, in_sz={in_sz}, out_off={out_off}, out_sz={out_sz}, gas={gas}')
stack.append(f'call({to})')
elif op==0xa3:
mstart=stack.pop(); msz=stack.pop(); t1=stack.pop(); t2=stack.pop(); t3=stack.pop(); print(f'LOG3 pc 0x{pc:x}: topics=[{t1},{t2},{t3}] data={mstart}:{msz}')
elif op in (0x5b,): pass
else:
print(f'pc 0x{pc:x} op 0x{op:x} stack_top={stack[-12:]}');
if op==0x57:
dest=stack.pop(); cond=stack.pop(); print(f'JUMPI dest={dest} cond={cond}')
elif op==0x56:
dest=stack.pop(); print(f'JUMP dest={dest}')
break
else:
break
pc=npc
print('Final stack', stack[-20:])
print('Mem', mem)
run(0x080d,0x0857,['ret','arg0','0x1388'])
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
SSTORE pc 0x82e: keccak(0x0,0x40) = (s[keccak(0x0,0x40)]+ret)
SSTORE pc 0x83f: keccak(0x0,0x40) = (ret-s[keccak(0x0,0x40)])
CALL pc 0x856: to=(caller&(0x1-(0xa0**0x2))), value=((0xffffffff&0x1388)*ret), in_off=m[0x40], in_sz=0x0, out_off=m[0x40], out_sz=0x0, gas=0x0
Final stack ['ret', '((0xffffffff&0x1388)*ret)', '0x1388', '(caller&(0x1-(0xa0**0x2)))', '0x0', '((0xffffffff&0x1388)*ret)', 'm[0x40]', 'call((caller&(0x1-(0xa0**0x2))))']
Mem {'0x0': '(caller&(0x1-(0xa0**0x2)))', '0x20': '0x7'}
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=bytes.fromhex(obj['artifact']['runtime_bytecode']['full'][2:])
def dis(pc):
op=code[pc]
if 0x60<=op<=0x7f:
n=op-0x5f
return op, code[pc+1:pc+1+n], pc+1+n
return op, b'', pc+1
def binop(stack,sym):
a=stack.pop(); b=stack.pop(); stack.append(f'({b}{sym}{a})')
def run(start,end,initial,label):
print('===',label,'===')
stack=initial[:]
mem={}
pc=start
while pc<end:
op,data,npc=dis(pc)
if 0x60<=op<=0x7f:
stack.append(hex(int.from_bytes(data,'big')))
elif 0x80<=op<=0x8f:
i=op-0x7f; stack.append(stack[-i])
elif 0x90<=op<=0x9f:
i=op-0x8f; stack[-1],stack[-1-i]=stack[-1-i],stack[-1]
elif op==0x50: stack.pop()
elif op==0x51:
off=stack.pop(); stack.append(mem.get(off,f'm[{off}]'))
elif op==0x52:
off=stack.pop(); val=stack.pop(); mem[off]=val
elif op==0x54:
slot=stack.pop(); stack.append(f's[{slot}]')
elif op==0x55:
slot=stack.pop(); val=stack.pop(); print(f'SSTORE pc 0x{pc:x}: s[{slot}] = {val}')
elif op==0x33: stack.append('caller')
elif op==0x30: stack.append('address(this)')
elif op==0x34: stack.append('callvalue')
elif op==0x35:
off=stack.pop(); stack.append(f'cd[{off}]')
elif op==0x43: stack.append('number')
elif op==0x42: stack.append('timestamp')
elif op==0x40:
x=stack.pop(); stack.append(f'blockhash({x})')
elif op==0x01: binop(stack,'+')
elif op==0x02: binop(stack,'*')
elif op==0x03: binop(stack,'-')
elif op==0x04:
a=stack.pop(); b=stack.pop(); stack.append(f'({b}/{a})')
elif op==0x06:
a=stack.pop(); b=stack.pop(); stack.append(f'({b}%{a})')
elif op==0x0a: binop(stack,'**')
elif op==0x10: binop(stack,'<')
elif op==0x11: binop(stack,'>')
elif op==0x14: binop(stack,'==')
elif op==0x15:
a=stack.pop(); stack.append(f'iszero({a})')
elif op==0x16: binop(stack,'&')
elif op==0x17: binop(stack,'|')
elif op==0x19:
a=stack.pop(); stack.append(f'~{a}')
elif op==0x20:
off=stack.pop(); size=stack.pop(); stack.append(f'keccak({off},{size})')
elif op==0x36: stack.append('calldatasize')
elif op==0x37:
dest=stack.pop(); off=stack.pop(); size=stack.pop(); mem[dest]=f'calldata[{off}:{size}]'; print(f'CALLDATACOPY pc 0x{pc:x}: m[{dest}] <- calldata[{off}:{size}]')
elif op==0x39:
dest=stack.pop(); off=stack.pop(); size=stack.pop(); mem[dest]=f'code[{off}:{size}]'; print(f'CODECOPY pc 0x{pc:x}: m[{dest}] <- code[{off}:{size}]')
elif op==0x5a: stack.append('gas')
elif op==0x57:
dest=stack.pop(); cond=stack.pop(); print(f'JUMPI pc 0x{pc:x}: dest={dest}, cond={cond}')
elif op==0x56:
dest=stack.pop(); print(f'JUMP pc 0x{pc:x}: dest={dest}, stack={stack[-8:]}'); break
elif op==0xf1:
gas=stack.pop(); to=stack.pop(); value=stack.pop(); in_off=stack.pop(); in_sz=stack.pop(); out_off=stack.pop(); out_sz=stack.pop();
print(f'CALL pc 0x{pc:x}: to={to}, value={value}, in=[{in_off}:{in_sz}], out=[{out_off}:{out_sz}], gas={gas}')
stack.append(f'call({to})')
elif op==0xa3:
mstart=stack.pop(); msz=stack.pop(); t1=stack.pop(); t2=stack.pop(); t3=stack.pop(); print(f'LOG3 pc 0x{pc:x}: topics=[{t1},{t2},{t3}] data=[{mstart}:{msz}]')
elif op in (0x5b,): pass
elif op==0xfd:
print(f'REVERT pc 0x{pc:x} stack={stack[-8:]}'); break
else:
print(f'unsupported pc 0x{pc:x} op=0x{op:x} stack={stack[-12:]}')
break
pc=npc
print('Final stack', stack[-20:])
print('Mem', mem)
run(0x02d1,0x0426,['ret'],'02d1->0425')
run(0x0482,0x04ae,['ret'],'0482 precheck')
# after branch likely [ret,arg0,0x1388]
run(0x080d,0x0857,['ret','arg0','0x1388'],'080d->0856')
PY" in /tmp/codex-dw1e6a6j
succeeded in 0ms:
=== 02d1->0425 ===
CALLDATACOPY pc 0x313: m[(0x20+m[0x40])] <- calldata[(cd[0x44]+0x24):cd[(cd[0x44]+0x4)]]
SSTORE pc 0x364: s[keccak(0x0,((0x0+0x20)+0x20))] = cd[0x24]
CALL pc 0x3e1: to=0x4, value=0x0, in=[(m[0x40]+0x20):cd[(cd[0x44]+0x4)]], out=[((((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)+0x20):cd[(cd[0x44]+0x4)]], gas=(((0x20/(cd[(cd[0x44]+0x4)]+0x1f))*0xf)+0x3)
JUMPI pc 0x3f1: dest=0x40b, cond=iszero((cd[(cd[0x44]+0x4)]&0x1f))
CALL pc 0x425: to=(cd[0x4]&(0x1-(0xa0**0x2))), value=0x0, in=[((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20):(((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)-(((cd[(cd[0x44]+0x4)]&0x1f)-(((((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)+0x20)+cd[(cd[0x44]+0x4)]))+0x20))], out=[((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20):0x0], gas=(0x61da-gas)
Final stack ['ret', '0x553', 'cd[0x4]', 'cd[0x24]', 'm[0x40]', '0x0', 'cd[0x4]', '(cd[0x4]&(0x1-(0xa0**0x2)))', '0x8f4ffcb1', '(((cd[(cd[0x44]+0x4)]&0x1f)-(((((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)+0x20)+cd[(cd[0x44]+0x4)]))+0x20)', 'call((cd[0x4]&(0x1-(0xa0**0x2))))']
Mem {'0x40': '((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)', 'm[0x40]': 'cd[(cd[0x44]+0x4)]', '(0x20+m[0x40])': 'calldata[(cd[0x44]+0x24):cd[(cd[0x44]+0x4)]]', '0x0': '(cd[0x4]&(0x1-(0xa0**0x2)))', '(0x0+0x20)': 'keccak(0x0,((0x0+0x20)+0x20))', '((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)': '(0x8f4ffcb1*(0xe0**0x2))', '(((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)': '(caller&(0x1-(0xa0**0x2)))', '((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)': 'cd[0x24]', '(((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)': '(address(this)&(0x1-(0xa0**0x2)))', '((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)': '((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)-(((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20))', '(((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)': 'cd[(cd[0x44]+0x4)]', '((cd[(cd[0x44]+0x4)]&0x1f)-(((((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)+0x20)+cd[(cd[0x44]+0x4)]))': '(m[((cd[(cd[0x44]+0x4)]&0x1f)-(((((((((((0x20/(0x1f+cd[(cd[0x44]+0x4)]))*0x20)+m[0x40])+0x20)+0x4)+0x20)+0x20)+0x20)+0x20)+0x20)+cd[(cd[0x44]+0x4)]))]&~(0x1-(((cd[(cd[0x44]+0x4)]&0x1f)-0x20)**0x100)))'}
=== 0482 precheck ===
JUMPI pc 0x4ad: dest=0x80d, cond=iszero((cd[0x4]<s[keccak(0x0,0x40)]))
Final stack ['ret', '0x553', 'cd[0x4]', '0x0', '0x1388']
Mem {'0x0': '(caller&(0x1-(0xa0**0x2)))', '0x20': '0x7'}
=== 080d->0856 ===
SSTORE pc 0x82e: s[keccak(0x0,0x40)] = (s[keccak(0x0,0x40)]+ret)
SSTORE pc 0x83f: s[keccak(0x0,0x40)] = (ret-s[keccak(0x0,0x40)])
CALL pc 0x856: to=(caller&(0x1-(0xa0**0x2))), value=((0xffffffff&0x1388)*ret), in=[m[0x40]:0x0], out=[m[0x40]:0x0], gas=0x0
Final stack ['ret', '((0xffffffff&0x1388)*ret)', '0x1388', '(caller&(0x1-(0xa0**0x2)))', '0x0', '((0xffffffff&0x1388)*ret)', 'm[0x40]', 'call((caller&(0x1-(0xa0**0x2))))']
Mem {'0x0': '(caller&(0x1-(0xa0**0x2)))', '0x20': '0x7'}
codex
{"no_findings":false,"summary":"Bytecode suggests an ERC20-like token with owner-controlled parameters plus callback-style extensions. The strongest risk is a public allowance/callback path that writes state and then performs an external CALL to a user-supplied address without a detected reentrancy guard. A second public path also reaches a computed CALL with unresolved target/value; because this is bytecode-only analysis, that second issue is lower confidence.","findings":[{"severity":"medium","category":"reentrancy","title":"Callback-style allowance flow writes state before calling an untrusted contract","exploit_scenario":"A user invokes selector 0xcae9ca51 with an attacker-controlled spender contract. The function stores a value into a slot-8-like mapping at pc 0x364 and then calls the supplied address at pc 0x425 using callback selector 0x8f4ffcb1. Because the callee receives control after the write and no reentrancy guard was detected, the spender can reenter token logic such as transfer/transferFrom or other custom functions while the freshly written allowance/state is live.","recommendation":"Treat this path as check-effects-interactions sensitive. Add an explicit reentrancy guard around callback entrypoints, constrain callbacks to trusted targets if possible, and avoid leaving temporary approval/state live across the external call. If callback behavior is intended, document the risk and validate returndata explicitly.","evidence":"Selector 0xcae9ca51 enters at pc 0x2d1. The bytecode copies user-supplied bytes, performs an SSTORE at pc 0x364 to a keccak-derived slot, then executes CALL at pc 0x425 to the masked calldata address cd[0x4]. The artifact reports no detected auth guards, and the callsite metadata marks CALL targets/value as computed with returndata checking unknown. The call payload starts with selector 0x8f4ffcb1, consistent with a callback/approve-and-call pattern.","locations":["selector:0xcae9ca51","pc:0x364","pc:0x425"]},{"severity":"low","category":"other","title":"Public function 0xe4849b32 reaches a computed external CALL with ambiguous target/value","exploit_scenario":"An externally callable path beginning at selector 0xe4849b32 reaches CALL pc 0x856 after only a balance-like threshold check, not an owner-style check. If calldata or mutable state influence the destination or ETH amount, an attacker with the prerequisite balance could route execution into attacker-controlled code and potentially trigger unexpected side effects or reentrancy. Because only bytecode is available, the exact destination/value semantics remain uncertain.","recommendation":"Audit selector 0xe4849b32 at source level or with traces against known inputs. Constrain the destination to a trusted constant or vetted interface, avoid low-level CALL where possible, validate returndata, and add a reentrancy guard if the call is intentionally public.","evidence":"The selector table exposes public selector 0xe4849b32. Its path checks a slot-7-like balance condition around pc 0x482-0x4ad, then proceeds to CALL pc 0x856. The bundle callsite metadata marks this CALL as computed target/computed value with returndata_checked=null, and the artifact has no detected auth guards. Detector output also confirms reachable CALL sinks with variable targets, but the exact semantics of this specific path cannot be proven from bytecode alone.","locations":["selector:0xe4849b32","pc:0x4ad","pc:0x856"]}]}
tokens used
114,947
{
"codex": {
"ran_at": "2026-04-05T06:10:38.380057+00:00",
"returncode": 0
},
"project": {
"mode": "bytecode",
"bytecode_length": 4916,
"bytecode_truncated": false,
"capability_graph_present": true,
"analysis_artifact_present": true
},
"summary": "Bytecode suggests an ERC20-like token with owner-controlled parameters plus callback-style extensions. The strongest risk is a public allowance/callback path that writes state and then performs an external CALL to a user-supplied address without a detected reentrancy guard. A second public path also reaches a computed CALL with unresolved target/value; because this is bytecode-only analysis, that second issue is lower confidence.",
"raw_final": {
"summary": "Bytecode suggests an ERC20-like token with owner-controlled parameters plus callback-style extensions. The strongest risk is a public allowance/callback path that writes state and then performs an external CALL to a user-supplied address without a detected reentrancy guard. A second public path also reaches a computed CALL with unresolved target/value; because this is bytecode-only analysis, that second issue is lower confidence.",
"findings": [
{
"title": "Callback-style allowance flow writes state before calling an untrusted contract",
"category": "reentrancy",
"evidence": "Selector 0xcae9ca51 enters at pc 0x2d1. The bytecode copies user-supplied bytes, performs an SSTORE at pc 0x364 to a keccak-derived slot, then executes CALL at pc 0x425 to the masked calldata address cd[0x4]. The artifact reports no detected auth guards, and the callsite metadata marks CALL targets/value as computed with returndata checking unknown. The call payload starts with selector 0x8f4ffcb1, consistent with a callback/approve-and-call pattern.",
"severity": "medium",
"locations": [
"selector:0xcae9ca51",
"pc:0x364",
"pc:0x425"
],
"recommendation": "Treat this path as check-effects-interactions sensitive. Add an explicit reentrancy guard around callback entrypoints, constrain callbacks to trusted targets if possible, and avoid leaving temporary approval/state live across the external call. If callback behavior is intended, document the risk and validate returndata explicitly.",
"exploit_scenario": "A user invokes selector 0xcae9ca51 with an attacker-controlled spender contract. The function stores a value into a slot-8-like mapping at pc 0x364 and then calls the supplied address at pc 0x425 using callback selector 0x8f4ffcb1. Because the callee receives control after the write and no reentrancy guard was detected, the spender can reenter token logic such as transfer/transferFrom or other custom functions while the freshly written allowance/state is live."
},
{
"title": "Public function 0xe4849b32 reaches a computed external CALL with ambiguous target/value",
"category": "other",
"evidence": "The selector table exposes public selector 0xe4849b32. Its path checks a slot-7-like balance condition around pc 0x482-0x4ad, then proceeds to CALL pc 0x856. The bundle callsite metadata marks this CALL as computed target/computed value with returndata_checked=null, and the artifact has no detected auth guards. Detector output also confirms reachable CALL sinks with variable targets, but the exact semantics of this specific path cannot be proven from bytecode alone.",
"severity": "low",
"locations": [
"selector:0xe4849b32",
"pc:0x4ad",
"pc:0x856"
],
"recommendation": "Audit selector 0xe4849b32 at source level or with traces against known inputs. Constrain the destination to a trusted constant or vetted interface, avoid low-level CALL where possible, validate returndata, and add a reentrancy guard if the call is intentionally public.",
"exploit_scenario": "An externally callable path beginning at selector 0xe4849b32 reaches CALL pc 0x856 after only a balance-like threshold check, not an owner-style check. If calldata or mutable state influence the destination or ETH amount, an attacker with the prerequisite balance could route execution into attacker-controlled code and potentially trigger unexpected side effects or reentrancy. Because only bytecode is available, the exact destination/value semantics remain uncertain."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x00da 0000000a: JUMPI 0000000b: PUSH1 0xe0 0000000d: PUSH1 0x02 0000000f: EXP 00000010: PUSH1 0x00 00000012: CALLDATALOAD 00000013: DIV 00000014: PUSH4 0x06fdde03 00000019: DUP2 0000001a: EQ 0000001b: PUSH2 0x00dc 0000001e: JUMPI 0000001f: DUP1 00000020: PUSH4 0x18160ddd 00000025: EQ 00000026: PUSH2 0x0139 00000029: JUMPI 0000002a: DUP1 0000002b: PUSH4 0x1fe9eabc 00000030: EQ 00000031: PUSH2 0x0142 00000034: JUMPI 00000035: DUP1 00000036: PUSH4 0x23b872dd 0000003b: EQ 0000003c: PUSH2 0x0164 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x313ce567 00000046: EQ 00000047: PUSH2 0x0196 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x41fa4876 00000051: EQ 00000052: PUSH2 0x01a2 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x70a08231 0000005c: EQ 0000005d: PUSH2 0x01f8 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x8da5cb5b 00000067: EQ 00000068: PUSH2 0x0210 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0x95d89b41 00000072: EQ 00000073: PUSH2 0x0222 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0xa6f2ae3a 0000007d: EQ 0000007e: PUSH2 0x027d 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0xa9059cbb 00000088: EQ 00000089: PUSH2 0x0299 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0xaa295de9 00000093: EQ 00000094: PUSH2 0x02c8 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xcae9ca51 0000009e: EQ 0000009f: PUSH2 0x02d1 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0xdc3080f2 000000a9: EQ 000000aa: PUSH2 0x0438 000000ad: JUMPI 000000ae: DUP1 000000af: PUSH4 0xdd62ed3e 000000b4: EQ 000000b5: PUSH2 0x045d 000000b8: JUMPI 000000b9: DUP1 000000ba: PUSH4 0xe4849b32 000000bf: EQ 000000c0: PUSH2 0x0482 000000c3: JUMPI 000000c4: DUP1 000000c5: PUSH4 0xf2fde38b 000000ca: EQ 000000cb: PUSH2 0x04b2 000000ce: JUMPI 000000cf: DUP1 000000d0: PUSH4 0xff9b3acf 000000d5: EQ 000000d6: PUSH2 0x04d3 000000d9: JUMPI 000000da: JUMPDEST 000000db: STOP 000000dc: JUMPDEST 000000dd: PUSH1 0x40 000000df: DUP1 000000e0: MLOAD 000000e1: PUSH1 0x01 000000e3: DUP1 000000e4: SLOAD 000000e5: PUSH1 0x20 000000e7: PUSH1 0x02 000000e9: DUP3 000000ea: DUP5 000000eb: AND 000000ec: ISZERO 000000ed: PUSH2 0x0100 000000f0: MUL 000000f1: PUSH1 0x00 000000f3: NOT 000000f4: ADD 000000f5: SWAP1 000000f6: SWAP3 000000f7: AND 000000f8: SWAP2 000000f9: SWAP1 000000fa: SWAP2 000000fb: DIV 000000fc: PUSH1 0x1f 000000fe: DUP2 000000ff: ADD 00000100: DUP3 00000101: SWAP1 00000102: DIV 00000103: DUP3 00000104: MUL 00000105: DUP5 00000106: ADD 00000107: DUP3 00000108: ADD 00000109: SWAP1 0000010a: SWAP5 0000010b: MSTORE 0000010c: DUP4 0000010d: DUP4 0000010e: MSTORE 0000010f: PUSH2 0x04e5 00000112: SWAP4 00000113: SWAP1 00000114: DUP4 00000115: ADD 00000116: DUP3 00000117: DUP3 00000118: DUP1 00000119: ISZERO 0000011a: PUSH2 0x05c3 0000011d: JUMPI 0000011e: DUP1 0000011f: PUSH1 0x1f 00000121: LT 00000122: PUSH2 0x0598 00000125: JUMPI 00000126: PUSH2 0x0100 00000129: DUP1 0000012a: DUP4 0000012b: SLOAD 0000012c: DIV 0000012d: MUL 0000012e: DUP4 0000012f: MSTORE 00000130: SWAP2 00000131: PUSH1 0x20 00000133: ADD 00000134: SWAP2 00000135: PUSH2 0x05c3 00000138: JUMP 00000139: JUMPDEST 0000013a: PUSH2 0x0553 0000013d: PUSH1 0x04 0000013f: SLOAD 00000140: DUP2 00000141: JUMP 00000142: JUMPDEST 00000143: PUSH2 0x00da 00000146: PUSH1 0x04 00000148: CALLDATALOAD 00000149: PUSH1 0x00 0000014b: SLOAD 0000014c: PUSH1 0x01 0000014e: PUSH1 0xa0 00000150: PUSH1 0x02 00000152: EXP 00000153: SUB 00000154: SWAP1 00000155: DUP2 00000156: AND 00000157: CALLER 00000158: SWAP1 00000159: SWAP2 0000015a: AND 0000015b: EQ 0000015c: PUSH2 0x07de 0000015f: JUMPI 00000160: PUSH2 0x0002 00000163: JUMP 00000164: JUMPDEST 00000165: PUSH2 0x0553 00000168: PUSH1 0x04 0000016a: CALLDATALOAD 0000016b: PUSH1 0x24 0000016d: CALLDATALOAD 0000016e: PUSH1 0x44 00000170: CALLDATALOAD 00000171: PUSH1 0x01 00000173: PUSH1 0xa0 00000175: PUSH1 0x02 00000177: EXP 00000178: SUB 00000179: DUP4 0000017a: AND 0000017b: PUSH1 0x00 0000017d: SWAP1 0000017e: DUP2 0000017f: MSTORE 00000180: PUSH1 0x07 00000182: PUSH1 0x20 00000184: MSTORE 00000185: PUSH1 0x40 00000187: DUP2 00000188: KECCAK256 00000189: SLOAD 0000018a: DUP3 0000018b: SWAP1 0000018c: LT 0000018d: ISZERO 0000018e: PUSH2 0x088e 00000191: JUMPI 00000192: PUSH2 0x0002 00000195: JUMP 00000196: JUMPDEST 00000197: PUSH2 0x0565 0000019a: PUSH1 0x03 0000019c: SLOAD 0000019d: PUSH1 0xff 0000019f: AND 000001a0: DUP2 000001a1: JUMP 000001a2: JUMPDEST 000001a3: PUSH2 0x0553 000001a6: PUSH1 0x04 000001a8: CALLDATALOAD 000001a9: PUSH1 0x24 000001ab: CALLDATALOAD 000001ac: JUMPDEST 000001ad: PUSH1 0x00 000001af: DUP1 000001b0: DUP1 000001b1: JUMPDEST 000001b2: DUP4 000001b3: DUP2 000001b4: LT 000001b5: ISZERO 000001b6: PUSH2 0x07e3 000001b9: JUMPI 000001ba: PUSH1 0x40 000001bc: DUP1 000001bd: MLOAD 000001be: NUMBER 000001bf: DUP4 000001c0: SWAP1 000001c1: SUB 000001c2: PUSH1 0x00 000001c4: NOT 000001c5: ADD 000001c6: BLOCKHASH 000001c7: DUP2 000001c8: MSTORE 000001c9: PUSH1 0x20 000001cb: DUP2 000001cc: ADD 000001cd: DUP8 000001ce: SWAP1 000001cf: MSTORE 000001d0: DUP2 000001d1: MLOAD 000001d2: SWAP1 000001d3: DUP2 000001d4: SWAP1 000001d5: SUB 000001d6: SWAP1 000001d7: SWAP2 000001d8: ADD 000001d9: SWAP1 000001da: KECCAK256 000001db: PUSH1 0x02 000001dd: SWAP1 000001de: MOD 000001df: PUSH1 0x00 000001e1: EQ 000001e2: ISZERO 000001e3: PUSH2 0x01f0 000001e6: JUMPI 000001e7: PUSH1 0x02 000001e9: DUP2 000001ea: SWAP1 000001eb: EXP 000001ec: SWAP1 000001ed: SWAP2 000001ee: ADD 000001ef: SWAP1 000001f0: JUMPDEST 000001f1: PUSH1 0x01 000001f3: ADD 000001f4: PUSH2 0x01b1 000001f7: JUMP 000001f8: JUMPDEST 000001f9: PUSH2 0x0553 000001fc: PUSH1 0x04 000001fe: CALLDATALOAD 000001ff: PUSH1 0x07 00000201: PUSH1 0x20 00000203: MSTORE 00000204: PUSH1 0x00 00000206: SWAP1 00000207: DUP2 00000208: MSTORE 00000209: PUSH1 0x40 0000020b: SWAP1 0000020c: KECCAK256 0000020d: SLOAD 0000020e: DUP2 0000020f: JUMP 00000210: JUMPDEST 00000211: PUSH2 0x057b 00000214: PUSH1 0x00 00000216: SLOAD 00000217: PUSH1 0x01 00000219: PUSH1 0xa0 0000021b: PUSH1 0x02 0000021d: EXP 0000021e: SUB 0000021f: AND 00000220: DUP2 00000221: JUMP 00000222: JUMPDEST 00000223: PUSH2 0x04e5 00000226: PUSH1 0x02 00000228: DUP1 00000229: SLOAD 0000022a: PUSH1 0x40 0000022c: DUP1 0000022d: MLOAD 0000022e: PUSH1 0x20 00000230: PUSH1 0x01 00000232: DUP5 00000233: AND 00000234: ISZERO 00000235: PUSH2 0x0100 00000238: MUL 00000239: PUSH1 0x00 0000023b: NOT 0000023c: ADD 0000023d: SWAP1 0000023e: SWAP4 0000023f: AND 00000240: DUP5 00000241: SWAP1 00000242: DIV 00000243: PUSH1 0x1f 00000245: DUP2 00000246: ADD 00000247: DUP5 00000248: SWAP1 00000249: DIV 0000024a: DUP5 0000024b: MUL 0000024c: DUP3 0000024d: ADD 0000024e: DUP5 0000024f: ADD 00000250: SWAP1 00000251: SWAP3 00000252: MSTORE 00000253: DUP2 00000254: DUP2 00000255: MSTORE 00000256: SWAP3 00000257: SWAP2 00000258: DUP4 00000259: ADD 0000025a: DUP3 0000025b: DUP3 0000025c: DUP1 0000025d: ISZERO 0000025e: PUSH2 0x05c3 00000261: JUMPI 00000262: DUP1 00000263: PUSH1 0x1f 00000265: LT 00000266: PUSH2 0x0598 00000269: JUMPI 0000026a: PUSH2 0x0100 0000026d: DUP1 0000026e: DUP4 0000026f: SLOAD 00000270: DIV 00000271: MUL 00000272: DUP4 00000273: MSTORE 00000274: SWAP2 00000275: PUSH1 0x20 00000277: ADD 00000278: SWAP2 00000279: PUSH2 0x05c3 0000027c: JUMP 0000027d: JUMPDEST 0000027e: PUSH2 0x0553 00000281: PUSH1 0x06 00000283: SLOAD 00000284: CALLVALUE 00000285: SWAP1 00000286: PUSH1 0x00 00000288: SWAP1 00000289: PUSH1 0x64 0000028b: SWAP1 0000028c: DUP3 0000028d: SWAP1 0000028e: DUP5 0000028f: GT 00000290: ISZERO 00000291: PUSH2 0x064c 00000294: JUMPI 00000295: PUSH2 0x0002 00000298: JUMP 00000299: JUMPDEST 0000029a: PUSH2 0x00da 0000029d: PUSH1 0x04 0000029f: CALLDATALOAD 000002a0: PUSH1 0x24 000002a2: CALLDATALOAD 000002a3: CALLER 000002a4: PUSH1 0x01 000002a6: PUSH1 0xa0 000002a8: PUSH1 0x02 000002aa: EXP 000002ab: SUB 000002ac: AND 000002ad: PUSH1 0x00 000002af: SWAP1 000002b0: DUP2 000002b1: MSTORE 000002b2: PUSH1 0x07 000002b4: PUSH1 0x20 000002b6: MSTORE 000002b7: PUSH1 0x40 000002b9: SWAP1 000002ba: KECCAK256 000002bb: SLOAD 000002bc: DUP2 000002bd: SWAP1 000002be: LT 000002bf: ISZERO 000002c0: PUSH2 0x05cb 000002c3: JUMPI 000002c4: PUSH2 0x0002 000002c7: JUMP 000002c8: JUMPDEST 000002c9: PUSH2 0x0553 000002cc: PUSH1 0x06 000002ce: SLOAD 000002cf: DUP2 000002d0: JUMP 000002d1: JUMPDEST 000002d2: PUSH1 0x40 000002d4: DUP1 000002d5: MLOAD 000002d6: PUSH1 0x20 000002d8: PUSH1 0x44 000002da: CALLDATALOAD 000002db: PUSH1 0x04 000002dd: DUP2 000002de: DUP2 000002df: ADD 000002e0: CALLDATALOAD 000002e1: PUSH1 0x1f 000002e3: DUP2 000002e4: ADD 000002e5: DUP5 000002e6: SWAP1 000002e7: DIV 000002e8: DUP5 000002e9: MUL 000002ea: DUP6 000002eb: ADD 000002ec: DUP5 000002ed: ADD 000002ee: SWAP1 000002ef: SWAP6 000002f0: MSTORE 000002f1: DUP5 000002f2: DUP5 000002f3: MSTORE 000002f4: PUSH2 0x0553 000002f7: SWAP5 000002f8: DUP2 000002f9: CALLDATALOAD 000002fa: SWAP5 000002fb: PUSH1 0x24 000002fd: DUP1 000002fe: CALLDATALOAD 000002ff: SWAP6 00000300: SWAP4 00000301: SWAP5 00000302: PUSH1 0x64 00000304: SWAP5 00000305: SWAP3 00000306: SWAP4 00000307: SWAP2 00000308: ADD 00000309: SWAP2 0000030a: DUP2 0000030b: SWAP1 0000030c: DUP5 0000030d: ADD 0000030e: DUP4 0000030f: DUP3 00000310: DUP1 00000311: DUP3 00000312: DUP5 00000313: CALLDATACOPY 00000314: POP 00000315: SWAP5 00000316: SWAP7 00000317: POP 00000318: POP 00000319: POP 0000031a: POP 0000031b: POP 0000031c: POP 0000031d: POP 0000031e: PUSH1 0x00 00000320: PUSH1 0x00 00000322: DUP4 00000323: PUSH1 0x08 00000325: PUSH1 0x00 00000327: POP 00000328: PUSH1 0x00 0000032a: CALLER 0000032b: PUSH1 0x01 0000032d: PUSH1 0xa0 0000032f: PUSH1 0x02 00000331: EXP 00000332: SUB 00000333: AND 00000334: DUP2 00000335: MSTORE 00000336: PUSH1 0x20 00000338: ADD 00000339: SWAP1 0000033a: DUP2 0000033b: MSTORE 0000033c: PUSH1 0x20 0000033e: ADD 0000033f: PUSH1 0x00 00000341: KECCAK256 00000342: PUSH1 0x00 00000344: POP 00000345: PUSH1 0x00 00000347: DUP8 00000348: PUSH1 0x01 0000034a: PUSH1 0xa0 0000034c: PUSH1 0x02 0000034e: EXP 0000034f: SUB 00000350: AND 00000351: DUP2 00000352: MSTORE 00000353: PUSH1 0x20 00000355: ADD 00000356: SWAP1 00000357: DUP2 00000358: MSTORE 00000359: PUSH1 0x20 0000035b: ADD 0000035c: PUSH1 0x00 0000035e: KECCAK256 0000035f: PUSH1 0x00 00000361: POP 00000362: DUP2 00000363: SWAP1 00000364: SSTORE 00000365: POP 00000366: DUP5 00000367: SWAP1 00000368: POP 00000369: DUP1 0000036a: PUSH1 0x01 0000036c: PUSH1 0xa0 0000036e: PUSH1 0x02 00000370: EXP 00000371: SUB 00000372: AND 00000373: PUSH4 0x8f4ffcb1 00000378: CALLER 00000379: DUP7 0000037a: ADDRESS 0000037b: DUP8 0000037c: PUSH1 0x40 0000037e: MLOAD 0000037f: DUP6 00000380: PUSH1 0xe0 00000382: PUSH1 0x02 00000384: EXP 00000385: MUL 00000386: DUP2 00000387: MSTORE 00000388: PUSH1 0x04 0000038a: ADD 0000038b: DUP1 0000038c: DUP6 0000038d: PUSH1 0x01 0000038f: PUSH1 0xa0 00000391: PUSH1 0x02 00000393: EXP 00000394: SUB 00000395: AND 00000396: DUP2 00000397: MSTORE 00000398: PUSH1 0x20 0000039a: ADD 0000039b: DUP5 0000039c: DUP2 0000039d: MSTORE 0000039e: PUSH1 0x20 000003a0: ADD 000003a1: DUP4 000003a2: PUSH1 0x01 000003a4: PUSH1 0xa0 000003a6: PUSH1 0x02 000003a8: EXP 000003a9: SUB 000003aa: AND 000003ab: DUP2 000003ac: MSTORE 000003ad: PUSH1 0x20 000003af: ADD 000003b0: DUP1 000003b1: PUSH1 0x20 000003b3: ADD 000003b4: DUP3 000003b5: DUP2 000003b6: SUB 000003b7: DUP3 000003b8: MSTORE 000003b9: DUP4 000003ba: DUP2 000003bb: DUP2 000003bc: MLOAD 000003bd: DUP2 000003be: MSTORE 000003bf: PUSH1 0x20 000003c1: ADD 000003c2: SWAP2 000003c3: POP 000003c4: DUP1 000003c5: MLOAD 000003c6: SWAP1 000003c7: PUSH1 0x20 000003c9: ADD 000003ca: SWAP1 000003cb: DUP1 000003cc: DUP4 000003cd: DUP4 000003ce: DUP3 000003cf: SWAP1 000003d0: PUSH1 0x00 000003d2: PUSH1 0x04 000003d4: PUSH1 0x20 000003d6: DUP5 000003d7: PUSH1 0x1f 000003d9: ADD 000003da: DIV 000003db: PUSH1 0x0f 000003dd: MUL 000003de: PUSH1 0x03 000003e0: ADD 000003e1: CALL 000003e2: POP 000003e3: SWAP1 000003e4: POP 000003e5: SWAP1 000003e6: DUP2 000003e7: ADD 000003e8: SWAP1 000003e9: PUSH1 0x1f 000003eb: AND 000003ec: DUP1 000003ed: ISZERO 000003ee: PUSH2 0x040b 000003f1: JUMPI 000003f2: DUP1 000003f3: DUP3 000003f4: SUB 000003f5: DUP1 000003f6: MLOAD 000003f7: PUSH1 0x01 000003f9: DUP4 000003fa: PUSH1 0x20 000003fc: SUB 000003fd: PUSH2 0x0100 00000400: EXP 00000401: SUB 00000402: NOT 00000403: AND 00000404: DUP2 00000405: MSTORE 00000406: PUSH1 0x20 00000408: ADD 00000409: SWAP2 0000040a: POP 0000040b: JUMPDEST 0000040c: POP 0000040d: SWAP6 0000040e: POP 0000040f: POP 00000410: POP 00000411: POP 00000412: POP 00000413: POP 00000414: PUSH1 0x00 00000416: PUSH1 0x40 00000418: MLOAD 00000419: DUP1 0000041a: DUP4 0000041b: SUB 0000041c: DUP2 0000041d: PUSH1 0x00 0000041f: DUP8 00000420: PUSH2 0x61da 00000423: GAS 00000424: SUB 00000425: CALL 00000426: ISZERO 00000427: PUSH2 0x0002 0000042a: JUMPI 0000042b: POP 0000042c: PUSH1 0x01 0000042e: SWAP8 0000042f: SWAP7 00000430: POP 00000431: POP 00000432: POP 00000433: POP 00000434: POP 00000435: POP 00000436: POP 00000437: JUMP 00000438: JUMPDEST 00000439: PUSH1 0x09 0000043b: PUSH1 0x20 0000043d: SWAP1 0000043e: DUP2 0000043f: MSTORE 00000440: PUSH1 0x04 00000442: CALLDATALOAD 00000443: PUSH1 0x00 00000445: SWAP1 00000446: DUP2 00000447: MSTORE 00000448: PUSH1 0x40 0000044a: DUP1 0000044b: DUP3 0000044c: KECCAK256 0000044d: SWAP1 0000044e: SWAP3 0000044f: MSTORE 00000450: PUSH1 0x24 00000452: CALLDATALOAD 00000453: DUP2 00000454: MSTORE 00000455: KECCAK256 00000456: SLOAD 00000457: PUSH2 0x0553 0000045a: SWAP1 0000045b: DUP2 0000045c: JUMP 0000045d: JUMPDEST 0000045e: PUSH1 0x08 00000460: PUSH1 0x20 00000462: SWAP1 00000463: DUP2 00000464: MSTORE 00000465: PUSH1 0x04 00000467: CALLDATALOAD 00000468: PUSH1 0x00 0000046a: SWAP1 0000046b: DUP2 0000046c: MSTORE 0000046d: PUSH1 0x40 0000046f: DUP1 00000470: DUP3 00000471: KECCAK256 00000472: SWAP1 00000473: SWAP3 00000474: MSTORE 00000475: PUSH1 0x24 00000477: CALLDATALOAD 00000478: DUP2 00000479: MSTORE 0000047a: KECCAK256 0000047b: SLOAD 0000047c: PUSH2 0x0553 0000047f: SWAP1 00000480: DUP2 00000481: JUMP 00000482: JUMPDEST 00000483: PUSH2 0x0553 00000486: PUSH1 0x04 00000488: CALLDATALOAD 00000489: CALLER 0000048a: PUSH1 0x01 0000048c: PUSH1 0xa0 0000048e: PUSH1 0x02 00000490: EXP 00000491: SUB 00000492: AND 00000493: PUSH1 0x00 00000495: SWAP1 00000496: DUP2 00000497: MSTORE 00000498: PUSH1 0x07 0000049a: PUSH1 0x20 0000049c: MSTORE 0000049d: PUSH1 0x40 0000049f: DUP2 000004a0: KECCAK256 000004a1: SLOAD 000004a2: PUSH2 0x1388 000004a5: SWAP1 000004a6: DUP4 000004a7: SWAP1 000004a8: LT 000004a9: ISZERO 000004aa: PUSH2 0x080d 000004ad: JUMPI 000004ae: PUSH2 0x0002 000004b1: JUMP 000004b2: JUMPDEST 000004b3: PUSH2 0x00da 000004b6: PUSH1 0x04 000004b8: CALLDATALOAD 000004b9: PUSH1 0x00 000004bb: SLOAD 000004bc: CALLER 000004bd: PUSH1 0x01 000004bf: PUSH1 0xa0 000004c1: PUSH1 0x02 000004c3: EXP 000004c4: SUB 000004c5: SWAP1 000004c6: DUP2 000004c7: AND 000004c8: SWAP2 000004c9: AND 000004ca: EQ 000004cb: PUSH2 0x07eb 000004ce: JUMPI 000004cf: PUSH2 0x0002 000004d2: JUMP 000004d3: JUMPDEST 000004d4: PUSH2 0x057b 000004d7: PUSH1 0x05 000004d9: SLOAD 000004da: PUSH1 0x01 000004dc: PUSH1 0xa0 000004de: PUSH1 0x02 000004e0: EXP 000004e1: SUB 000004e2: AND 000004e3: DUP2 000004e4: JUMP 000004e5: JUMPDEST 000004e6: PUSH1 0x40 000004e8: MLOAD 000004e9: DUP1 000004ea: DUP1 000004eb: PUSH1 0x20 000004ed: ADD 000004ee: DUP3 000004ef: DUP2 000004f0: SUB 000004f1: DUP3 000004f2: MSTORE 000004f3: DUP4 000004f4: DUP2 000004f5: DUP2 000004f6: MLOAD 000004f7: DUP2 000004f8: MSTORE 000004f9: PUSH1 0x20 000004fb: ADD 000004fc: SWAP2 000004fd: POP 000004fe: DUP1 000004ff: MLOAD 00000500: SWAP1 00000501: PUSH1 0x20 00000503: ADD 00000504: SWAP1 00000505: DUP1 00000506: DUP4 00000507: DUP4 00000508: DUP3 00000509: SWAP1 0000050a: PUSH1 0x00 0000050c: PUSH1 0x04 0000050e: PUSH1 0x20 00000510: DUP5 00000511: PUSH1 0x1f 00000513: ADD 00000514: DIV 00000515: PUSH1 0x0f 00000517: MUL 00000518: PUSH1 0x03 0000051a: ADD 0000051b: CALL 0000051c: POP 0000051d: SWAP1 0000051e: POP 0000051f: SWAP1 00000520: DUP2 00000521: ADD 00000522: SWAP1 00000523: PUSH1 0x1f 00000525: AND 00000526: DUP1 00000527: ISZERO 00000528: PUSH2 0x0545 0000052b: JUMPI 0000052c: DUP1 0000052d: DUP3 0000052e: SUB 0000052f: DUP1 00000530: MLOAD 00000531: PUSH1 0x01 00000533: DUP4 00000534: PUSH1 0x20 00000536: SUB 00000537: PUSH2 0x0100 0000053a: EXP 0000053b: SUB 0000053c: NOT 0000053d: AND 0000053e: DUP2 0000053f: MSTORE 00000540: PUSH1 0x20 00000542: ADD 00000543: SWAP2 00000544: POP 00000545: JUMPDEST 00000546: POP 00000547: SWAP3 00000548: POP 00000549: POP 0000054a: POP 0000054b: PUSH1 0x40 0000054d: MLOAD 0000054e: DUP1 0000054f: SWAP2 00000550: SUB 00000551: SWAP1 00000552: RETURN 00000553: JUMPDEST 00000554: PUSH1 0x40 00000556: DUP1 00000557: MLOAD 00000558: SWAP2 00000559: DUP3 0000055a: MSTORE 0000055b: MLOAD 0000055c: SWAP1 0000055d: DUP2 0000055e: SWAP1 0000055f: SUB 00000560: PUSH1 0x20 00000562: ADD 00000563: SWAP1 00000564: RETURN 00000565: JUMPDEST 00000566: PUSH1 0x40 00000568: DUP1 00000569: MLOAD 0000056a: PUSH1 0xff 0000056c: SWAP1 0000056d: SWAP3 0000056e: AND 0000056f: DUP3 00000570: MSTORE 00000571: MLOAD 00000572: SWAP1 00000573: DUP2 00000574: SWAP1 00000575: SUB 00000576: PUSH1 0x20 00000578: ADD 00000579: SWAP1 0000057a: RETURN 0000057b: JUMPDEST 0000057c: PUSH1 0x40 0000057e: DUP1 0000057f: MLOAD 00000580: PUSH1 0x01 00000582: PUSH1 0xa0 00000584: PUSH1 0x02 00000586: EXP 00000587: SUB 00000588: SWAP3 00000589: SWAP1 0000058a: SWAP3 0000058b: AND 0000058c: DUP3 0000058d: MSTORE 0000058e: MLOAD 0000058f: SWAP1 00000590: DUP2 00000591: SWAP1 00000592: SUB 00000593: PUSH1 0x20 00000595: ADD 00000596: SWAP1 00000597: RETURN 00000598: JUMPDEST 00000599: DUP3 0000059a: ADD 0000059b: SWAP2 0000059c: SWAP1 0000059d: PUSH1 0x00 0000059f: MSTORE 000005a0: PUSH1 0x20 000005a2: PUSH1 0x00 000005a4: KECCAK256 000005a5: SWAP1 000005a6: JUMPDEST 000005a7: DUP2 000005a8: SLOAD 000005a9: DUP2 000005aa: MSTORE 000005ab: SWAP1 000005ac: PUSH1 0x01 000005ae: ADD 000005af: SWAP1 000005b0: PUSH1 0x20 000005b2: ADD 000005b3: DUP1 000005b4: DUP4 000005b5: GT 000005b6: PUSH2 0x05a6 000005b9: JUMPI 000005ba: DUP3 000005bb: SWAP1 000005bc: SUB 000005bd: PUSH1 0x1f 000005bf: AND 000005c0: DUP3 000005c1: ADD 000005c2: SWAP2 000005c3: JUMPDEST 000005c4: POP 000005c5: POP 000005c6: POP 000005c7: POP 000005c8: POP 000005c9: DUP2 000005ca: JUMP 000005cb: JUMPDEST 000005cc: PUSH1 0x01 000005ce: PUSH1 0xa0 000005d0: PUSH1 0x02 000005d2: EXP 000005d3: SUB 000005d4: DUP3 000005d5: AND 000005d6: PUSH1 0x00 000005d8: SWAP1 000005d9: DUP2 000005da: MSTORE 000005db: PUSH1 0x07 000005dd: PUSH1 0x20 000005df: MSTORE 000005e0: PUSH1 0x40 000005e2: SWAP1 000005e3: KECCAK256 000005e4: SLOAD 000005e5: DUP2 000005e6: DUP2 000005e7: ADD 000005e8: LT 000005e9: ISZERO 000005ea: PUSH2 0x05f2 000005ed: JUMPI 000005ee: PUSH2 0x0002 000005f1: JUMP 000005f2: JUMPDEST 000005f3: CALLER 000005f4: PUSH1 0x01 000005f6: PUSH1 0xa0 000005f8: PUSH1 0x02 000005fa: EXP 000005fb: SUB 000005fc: SWAP1 000005fd: DUP2 000005fe: AND 000005ff: PUSH1 0x00 00000601: DUP2 00000602: DUP2 00000603: MSTORE 00000604: PUSH1 0x07 00000606: PUSH1 0x20 00000608: SWAP1 00000609: DUP2 0000060a: MSTORE 0000060b: PUSH1 0x40 0000060d: DUP1 0000060e: DUP4 0000060f: KECCAK256 00000610: DUP1 00000611: SLOAD 00000612: DUP8 00000613: SWAP1 00000614: SUB 00000615: SWAP1 00000616: SSTORE 00000617: SWAP4 00000618: DUP7 00000619: AND 0000061a: DUP1 0000061b: DUP4 0000061c: MSTORE 0000061d: SWAP2 0000061e: DUP5 0000061f: SWAP1 00000620: KECCAK256 00000621: DUP1 00000622: SLOAD 00000623: DUP7 00000624: ADD 00000625: SWAP1 00000626: SSTORE 00000627: DUP4 00000628: MLOAD 00000629: DUP6 0000062a: DUP2 0000062b: MSTORE 0000062c: SWAP4 0000062d: MLOAD 0000062e: SWAP2 0000062f: SWAP4 00000630: PUSH1 0x00 00000632: DUP1 00000633: MLOAD 00000634: PUSH1 0x20 00000636: PUSH2 0x0979 00000639: DUP4 0000063a: CODECOPY 0000063b: DUP2 0000063c: MLOAD 0000063d: SWAP2 0000063e: MSTORE 0000063f: SWAP3 00000640: SWAP1 00000641: DUP2 00000642: SWAP1 00000643: SUB 00000644: SWAP1 00000645: SWAP2 00000646: ADD 00000647: SWAP1 00000648: LOG3 00000649: POP 0000064a: POP 0000064b: JUMP 0000064c: JUMPDEST 0000064d: PUSH1 0x40 0000064f: DUP1 00000650: MLOAD 00000651: NUMBER 00000652: DUP2 00000653: MSTORE 00000654: TIMESTAMP 00000655: PUSH1 0x20 00000657: DUP3 00000658: ADD 00000659: MSTORE 0000065a: DUP1 0000065b: DUP3 0000065c: ADD 0000065d: DUP7 0000065e: SWAP1 0000065f: MSTORE 00000660: SWAP1 00000661: MLOAD 00000662: SWAP1 00000663: DUP2 00000664: SWAP1 00000665: SUB 00000666: PUSH1 0x60 00000668: ADD 00000669: SWAP1 0000066a: KECCAK256 0000066b: PUSH2 0x0675 0000066e: SWAP1 0000066f: PUSH1 0x0a 00000671: PUSH2 0x01ac 00000674: JUMP 00000675: JUMPDEST 00000676: SWAP1 00000677: POP 00000678: PUSH2 0x0200 0000067b: DUP2 0000067c: LT 0000067d: PUSH2 0x0687 00000680: JUMPI 00000681: PUSH1 0x64 00000683: DUP5 00000684: MUL 00000685: SWAP3 00000686: POP 00000687: JUMPDEST 00000688: PUSH2 0x0200 0000068b: DUP2 0000068c: LT 0000068d: ISZERO 0000068e: PUSH2 0x0699 00000691: JUMPI 00000692: PUSH2 0x2648 00000695: DUP5 00000696: MUL 00000697: SWAP3 00000698: POP 00000699: JUMPDEST 0000069a: ADDRESS 0000069b: PUSH1 0x01 0000069d: PUSH1 0xa0 0000069f: PUSH1 0x02 000006a1: EXP 000006a2: SUB 000006a3: AND 000006a4: PUSH1 0x00 000006a6: SWAP1 000006a7: DUP2 000006a8: MSTORE 000006a9: PUSH1 0x07 000006ab: PUSH1 0x20 000006ad: MSTORE 000006ae: PUSH1 0x40 000006b0: SWAP1 000006b1: KECCAK256 000006b2: SLOAD 000006b3: DUP4 000006b4: SWAP1 000006b5: LT 000006b6: ISZERO 000006b7: PUSH2 0x06bf 000006ba: JUMPI 000006bb: PUSH2 0x0002 000006be: JUMP 000006bf: JUMPDEST 000006c0: CALLER 000006c1: PUSH1 0x01 000006c3: PUSH1 0xa0 000006c5: PUSH1 0x02 000006c7: EXP 000006c8: SUB 000006c9: SWAP1 000006ca: DUP2 000006cb: AND 000006cc: PUSH1 0x00 000006ce: DUP2 000006cf: DUP2 000006d0: MSTORE 000006d1: PUSH1 0x07 000006d3: PUSH1 0x20 000006d5: SWAP1 000006d6: DUP2 000006d7: MSTORE 000006d8: PUSH1 0x40 000006da: DUP1 000006db: DUP4 000006dc: KECCAK256 000006dd: DUP1 000006de: SLOAD 000006df: DUP10 000006e0: ADD 000006e1: SWAP1 000006e2: SSTORE 000006e3: ADDRESS 000006e4: SWAP1 000006e5: SWAP5 000006e6: AND 000006e7: DUP1 000006e8: DUP4 000006e9: MSTORE 000006ea: SWAP2 000006eb: DUP5 000006ec: SWAP1 000006ed: KECCAK256 000006ee: DUP1 000006ef: SLOAD 000006f0: DUP9 000006f1: SWAP1 000006f2: SUB 000006f3: SWAP1 000006f4: SSTORE 000006f5: DUP4 000006f6: MLOAD 000006f7: DUP8 000006f8: DUP2 000006f9: MSTORE 000006fa: SWAP4 000006fb: MLOAD 000006fc: SWAP3 000006fd: SWAP4 000006fe: SWAP2 000006ff: SWAP3 00000700: PUSH1 0x00 00000702: DUP1 00000703: MLOAD 00000704: PUSH1 0x20 00000706: PUSH2 0x0979 00000709: DUP4 0000070a: CODECOPY 0000070b: DUP2 0000070c: MLOAD 0000070d: SWAP2 0000070e: MSTORE 0000070f: SWAP3 00000710: DUP2 00000711: SWAP1 00000712: SUB 00000713: SWAP1 00000714: SWAP2 00000715: ADD 00000716: SWAP1 00000717: LOG3 00000718: DUP2 00000719: PUSH1 0x07 0000071b: PUSH1 0x00 0000071d: POP 0000071e: PUSH1 0x00 00000720: PUSH1 0x05 00000722: PUSH1 0x00 00000724: SWAP1 00000725: SLOAD 00000726: SWAP1 00000727: PUSH2 0x0100 0000072a: EXP 0000072b: SWAP1 0000072c: DIV 0000072d: PUSH1 0x01 0000072f: PUSH1 0xa0 00000731: PUSH1 0x02 00000733: EXP 00000734: SUB 00000735: AND 00000736: PUSH1 0x01 00000738: PUSH1 0xa0 0000073a: PUSH1 0x02 0000073c: EXP 0000073d: SUB 0000073e: AND 0000073f: DUP2 00000740: MSTORE 00000741: PUSH1 0x20 00000743: ADD 00000744: SWAP1 00000745: DUP2 00000746: MSTORE 00000747: PUSH1 0x20 00000749: ADD 0000074a: PUSH1 0x00 0000074c: KECCAK256 0000074d: PUSH1 0x00 0000074f: DUP3 00000750: DUP3 00000751: DUP3 00000752: POP 00000753: SLOAD 00000754: ADD 00000755: SWAP3 00000756: POP 00000757: POP 00000758: DUP2 00000759: SWAP1 0000075a: SSTORE 0000075b: POP 0000075c: DUP2 0000075d: PUSH1 0x07 0000075f: PUSH1 0x00 00000761: POP 00000762: PUSH1 0x00 00000764: ADDRESS 00000765: PUSH1 0x01 00000767: PUSH1 0xa0 00000769: PUSH1 0x02 0000076b: EXP 0000076c: SUB 0000076d: AND 0000076e: DUP2 0000076f: MSTORE 00000770: PUSH1 0x20 00000772: ADD 00000773: SWAP1 00000774: DUP2 00000775: MSTORE 00000776: PUSH1 0x20 00000778: ADD 00000779: PUSH1 0x00 0000077b: KECCAK256 0000077c: PUSH1 0x00 0000077e: DUP3 0000077f: DUP3 00000780: DUP3 00000781: POP 00000782: SLOAD 00000783: SUB 00000784: SWAP3 00000785: POP 00000786: POP 00000787: DUP2 00000788: SWAP1 00000789: SSTORE 0000078a: POP 0000078b: PUSH1 0x05 0000078d: PUSH1 0x00 0000078f: SWAP1 00000790: SLOAD 00000791: SWAP1 00000792: PUSH2 0x0100 00000795: EXP 00000796: SWAP1 00000797: DIV 00000798: PUSH1 0x01 0000079a: PUSH1 0xa0 0000079c: PUSH1 0x02 0000079e: EXP 0000079f: SUB 000007a0: AND 000007a1: PUSH1 0x01 000007a3: PUSH1 0xa0 000007a5: PUSH1 0x02 000007a7: EXP 000007a8: SUB 000007a9: AND 000007aa: ADDRESS 000007ab: PUSH1 0x01 000007ad: PUSH1 0xa0 000007af: PUSH1 0x02 000007b1: EXP 000007b2: SUB 000007b3: AND 000007b4: PUSH1 0x00 000007b6: DUP1 000007b7: MLOAD 000007b8: PUSH1 0x20 000007ba: PUSH2 0x0979 000007bd: DUP4 000007be: CODECOPY 000007bf: DUP2 000007c0: MLOAD 000007c1: SWAP2 000007c2: MSTORE 000007c3: DUP5 000007c4: PUSH1 0x40 000007c6: MLOAD 000007c7: DUP1 000007c8: DUP3 000007c9: DUP2 000007ca: MSTORE 000007cb: PUSH1 0x20 000007cd: ADD 000007ce: SWAP2 000007cf: POP 000007d0: POP 000007d1: PUSH1 0x40 000007d3: MLOAD 000007d4: DUP1 000007d5: SWAP2 000007d6: SUB 000007d7: SWAP1 000007d8: LOG3 000007d9: POP 000007da: POP 000007db: POP 000007dc: SWAP1 000007dd: JUMP 000007de: JUMPDEST 000007df: PUSH1 0x06 000007e1: SSTORE 000007e2: JUMP 000007e3: JUMPDEST 000007e4: POP 000007e5: SWAP4 000007e6: SWAP3 000007e7: POP 000007e8: POP 000007e9: POP 000007ea: JUMP 000007eb: JUMPDEST 000007ec: PUSH1 0x00 000007ee: DUP1 000007ef: SLOAD 000007f0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000805: NOT 00000806: AND 00000807: DUP3 00000808: OR 00000809: SWAP1 0000080a: SSTORE 0000080b: POP 0000080c: JUMP 0000080d: JUMPDEST 0000080e: ADDRESS 0000080f: PUSH1 0x01 00000811: PUSH1 0xa0 00000813: PUSH1 0x02 00000815: EXP 00000816: SUB 00000817: SWAP1 00000818: DUP2 00000819: AND 0000081a: PUSH1 0x00 0000081c: SWAP1 0000081d: DUP2 0000081e: MSTORE 0000081f: PUSH1 0x07 00000821: PUSH1 0x20 00000823: MSTORE 00000824: PUSH1 0x40 00000826: DUP1 00000827: DUP3 00000828: KECCAK256 00000829: DUP1 0000082a: SLOAD 0000082b: DUP8 0000082c: ADD 0000082d: SWAP1 0000082e: SSTORE 0000082f: CALLER 00000830: SWAP1 00000831: SWAP3 00000832: AND 00000833: DUP1 00000834: DUP3 00000835: MSTORE 00000836: DUP3 00000837: DUP3 00000838: KECCAK256 00000839: DUP1 0000083a: SLOAD 0000083b: DUP8 0000083c: SWAP1 0000083d: SUB 0000083e: SWAP1 0000083f: SSTORE 00000840: SWAP2 00000841: MLOAD 00000842: PUSH4 0xffffffff 00000847: DUP5 00000848: AND 00000849: DUP7 0000084a: MUL 0000084b: SWAP5 0000084c: POP 0000084d: DUP5 0000084e: SWAP1 0000084f: DUP3 00000850: DUP2 00000851: DUP2 00000852: DUP2 00000853: DUP6 00000854: DUP9 00000855: DUP4 00000856: CALL 00000857: POP 00000858: POP 00000859: PUSH1 0x40 0000085b: DUP1 0000085c: MLOAD 0000085d: DUP8 0000085e: DUP2 0000085f: MSTORE 00000860: SWAP1 00000861: MLOAD 00000862: ADDRESS 00000863: PUSH1 0x01 00000865: PUSH1 0xa0 00000867: PUSH1 0x02 00000869: EXP 0000086a: SUB 0000086b: AND 0000086c: SWAP5 0000086d: SWAP4 0000086e: POP 0000086f: PUSH1 0x00 00000871: DUP1 00000872: MLOAD 00000873: PUSH1 0x20 00000875: PUSH2 0x0979 00000878: DUP4 00000879: CODECOPY 0000087a: DUP2 0000087b: MLOAD 0000087c: SWAP2 0000087d: MSTORE 0000087e: SWAP3 0000087f: POP 00000880: SWAP1 00000881: DUP2 00000882: SWAP1 00000883: SUB 00000884: PUSH1 0x20 00000886: ADD 00000887: SWAP1 00000888: LOG3 00000889: POP 0000088a: SWAP2 0000088b: SWAP1 0000088c: POP 0000088d: JUMP 0000088e: JUMPDEST 0000088f: PUSH1 0x01 00000891: PUSH1 0xa0 00000893: PUSH1 0x02 00000895: EXP 00000896: SUB 00000897: DUP4 00000898: AND 00000899: PUSH1 0x00 0000089b: SWAP1 0000089c: DUP2 0000089d: MSTORE 0000089e: PUSH1 0x07 000008a0: PUSH1 0x20 000008a2: MSTORE 000008a3: PUSH1 0x40 000008a5: SWAP1 000008a6: KECCAK256 000008a7: SLOAD 000008a8: DUP1 000008a9: DUP4 000008aa: ADD 000008ab: LT 000008ac: ISZERO 000008ad: PUSH2 0x08b5 000008b0: JUMPI 000008b1: PUSH2 0x0002 000008b4: JUMP 000008b5: JUMPDEST 000008b6: PUSH1 0x01 000008b8: PUSH1 0xa0 000008ba: PUSH1 0x02 000008bc: EXP 000008bd: SUB 000008be: DUP5 000008bf: DUP2 000008c0: AND 000008c1: PUSH1 0x00 000008c3: DUP2 000008c4: DUP2 000008c5: MSTORE 000008c6: PUSH1 0x08 000008c8: PUSH1 0x20 000008ca: SWAP1 000008cb: DUP2 000008cc: MSTORE 000008cd: PUSH1 0x40 000008cf: DUP1 000008d0: DUP4 000008d1: KECCAK256 000008d2: CALLER 000008d3: SWAP1 000008d4: SWAP6 000008d5: AND 000008d6: DUP1 000008d7: DUP5 000008d8: MSTORE 000008d9: SWAP5 000008da: DUP3 000008db: MSTORE 000008dc: DUP1 000008dd: DUP4 000008de: KECCAK256 000008df: SLOAD 000008e0: SWAP4 000008e1: DUP4 000008e2: MSTORE 000008e3: PUSH1 0x09 000008e5: DUP3 000008e6: MSTORE 000008e7: DUP1 000008e8: DUP4 000008e9: KECCAK256 000008ea: SWAP5 000008eb: DUP4 000008ec: MSTORE 000008ed: SWAP4 000008ee: SWAP1 000008ef: MSTORE 000008f0: SWAP2 000008f1: SWAP1 000008f2: SWAP2 000008f3: KECCAK256 000008f4: SLOAD 000008f5: DUP4 000008f6: ADD 000008f7: GT 000008f8: ISZERO 000008f9: PUSH2 0x0901 000008fc: JUMPI 000008fd: PUSH2 0x0002 00000900: JUMP 00000901: JUMPDEST 00000902: PUSH1 0x01 00000904: PUSH1 0xa0 00000906: PUSH1 0x02 00000908: EXP 00000909: SUB 0000090a: DUP5 0000090b: DUP2 0000090c: AND 0000090d: PUSH1 0x00 0000090f: DUP2 00000910: DUP2 00000911: MSTORE 00000912: PUSH1 0x07 00000914: PUSH1 0x20 00000916: SWAP1 00000917: DUP2 00000918: MSTORE 00000919: PUSH1 0x40 0000091b: DUP1 0000091c: DUP4 0000091d: KECCAK256 0000091e: DUP1 0000091f: SLOAD 00000920: DUP9 00000921: SWAP1 00000922: SUB 00000923: SWAP1 00000924: SSTORE 00000925: DUP8 00000926: DUP6 00000927: AND 00000928: DUP1 00000929: DUP5 0000092a: MSTORE 0000092b: DUP2 0000092c: DUP5 0000092d: KECCAK256 0000092e: DUP1 0000092f: SLOAD 00000930: DUP10 00000931: ADD 00000932: SWAP1 00000933: SSTORE 00000934: DUP5 00000935: DUP5 00000936: MSTORE 00000937: PUSH1 0x09 00000939: DUP4 0000093a: MSTORE 0000093b: DUP2 0000093c: DUP5 0000093d: KECCAK256 0000093e: CALLER 0000093f: SWAP1 00000940: SWAP7 00000941: AND 00000942: DUP5 00000943: MSTORE 00000944: SWAP5 00000945: DUP3 00000946: MSTORE 00000947: SWAP2 00000948: DUP3 00000949: SWAP1 0000094a: KECCAK256 0000094b: DUP1 0000094c: SLOAD 0000094d: DUP8 0000094e: ADD 0000094f: SWAP1 00000950: SSTORE 00000951: DUP2 00000952: MLOAD 00000953: DUP7 00000954: DUP2 00000955: MSTORE 00000956: SWAP2 00000957: MLOAD 00000958: PUSH1 0x00 0000095a: DUP1 0000095b: MLOAD 0000095c: PUSH1 0x20 0000095e: PUSH2 0x0979 00000961: DUP4 00000962: CODECOPY 00000963: DUP2 00000964: MLOAD 00000965: SWAP2 00000966: MSTORE 00000967: SWAP3 00000968: DUP2 00000969: SWAP1 0000096a: SUB 0000096b: SWAP1 0000096c: SWAP2 0000096d: ADD 0000096e: SWAP1 0000096f: LOG3 00000970: POP 00000971: PUSH1 0x01 00000973: SWAP4 00000974: SWAP3 00000975: POP 00000976: POP 00000977: POP 00000978: JUMP 00000979: UNKNOWN(0xDD) 0000097a: CALLCODE 0000097b: MSTORE 0000097c: UNKNOWN(0xAD) 0000097d: SHL 0000097e: UNKNOWN(0xE2) 0000097f: UNKNOWN(0xC8) 00000980: SWAP12 00000981: PUSH10 0xc2b068fc378daa952ba7 0000098c: CALL 0000098d: PUSH4 0xc4a11628 00000992: CREATE2 00000993: GAS 00000994: UNKNOWN(0x4D) 00000995: CREATE2 00000996: UNKNOWN(0x23) 00000997: UNKNOWN(0xB3) 00000998: UNKNOWN(0xEF)
Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment.
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | yes | yes |
viewtrace_id: 0xc241540bfb2ef49c158b04968ef0969216a89cb29e6e0bbd8a2eb45de1fef250
call_targets:
0x0000000000000000000000000000000000000004, 0x47e3b185398c178c89cad8bda809d037462008a9
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0xc241540bfb2ef49c158b04968ef0969216a89cb29e6e0bbd8a2eb45de1fef250",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x47e3b185398c178c89cad8bda809d037462008a9"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1fe9eabc",
"selector": "0x1fe9eabc",
"calldata_variants": [
"0x1fe9eabc",
"0x1fe9eabc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41fa4876",
"selector": "0x41fa4876",
"calldata_variants": [
"0x41fa4876",
"0x41fa48760000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x70a08231",
"selector": "0x70a08231",
"calldata_variants": [
"0x70a08231",
"0x70a082310000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 993,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1061,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1307,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 6,
"guards_detected": [],
"untrusted_call_count": 6
}
|
| high | other | detector | ETH value transfer possible | 55 | yes | yes |
viewtrace_id: 0xc241540bfb2ef49c158b04968ef0969216a89cb29e6e0bbd8a2eb45de1fef250
call_targets:
0x0000000000000000000000000000000000000004, 0x47e3b185398c178c89cad8bda809d037462008a9
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0xc241540bfb2ef49c158b04968ef0969216a89cb29e6e0bbd8a2eb45de1fef250",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x47e3b185398c178c89cad8bda809d037462008a9"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1fe9eabc",
"selector": "0x1fe9eabc",
"calldata_variants": [
"0x1fe9eabc",
"0x1fe9eabc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41fa4876",
"selector": "0x41fa4876",
"calldata_variants": [
"0x41fa4876",
"0x41fa48760000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x70a08231",
"selector": "0x70a08231",
"calldata_variants": [
"0x70a08231",
"0x70a082310000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 993,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1061,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1307,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 6,
"guards_detected": []
}
|
| medium | other | detector | CREATE/CREATE2 reachable | 45 | no | no |
viewtrace_id: 0xf3ecd33f4407999282b3e7c7c77e8409b6cdaffd554d89b7878fe3c08047d3b0
validation_json{
"sink": "CREATE",
"errors": 0,
"status": "unknown",
"attempts": 32,
"trace_id": "0xf3ecd33f4407999282b3e7c7c77e8409b6cdaffd554d89b7878fe3c08047d3b0",
"confirmed": false,
"trace_mode": "structLogs",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1fe9eabc",
"selector": "0x1fe9eabc",
"calldata_variants": [
"0x1fe9eabc",
"0x1fe9eabc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41fa4876",
"selector": "0x41fa4876",
"calldata_variants": [
"0x41fa4876",
"0x41fa48760000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x70a08231",
"selector": "0x70a08231",
"calldata_variants": [
"0x70a08231",
"0x70a082310000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"create_count": 0,
"create2_count": 2
}
|
| medium | reentrancy | codex | Callback-style allowance flow writes state before calling an untrusted contract | 75 | no | — |
viewevidence_json{
"evidence": "Selector 0xcae9ca51 enters at pc 0x2d1. The bytecode copies user-supplied bytes, performs an SSTORE at pc 0x364 to a keccak-derived slot, then executes CALL at pc 0x425 to the masked calldata address cd[0x4]. The artifact reports no detected auth guards, and the callsite metadata marks CALL targets/value as computed with returndata checking unknown. The call payload starts with selector 0x8f4ffcb1, consistent with a callback/approve-and-call pattern.",
"locations": [
"selector:0xcae9ca51",
"pc:0x364",
"pc:0x425"
],
"recommendation": "Treat this path as check-effects-interactions sensitive. Add an explicit reentrancy guard around callback entrypoints, constrain callbacks to trusted targets if possible, and avoid leaving temporary approval/state live across the external call. If callback behavior is intended, document the risk and validate returndata explicitly.",
"exploit_scenario": "A user invokes selector 0xcae9ca51 with an attacker-controlled spender contract. The function stores a value into a slot-8-like mapping at pc 0x364 and then calls the supplied address at pc 0x425 using callback selector 0x8f4ffcb1. Because the callee receives control after the write and no reentrancy guard was detected, the spender can reenter token logic such as transfer/transferFrom or other custom functions while the freshly written allowance/state is live."
}
|
| low | other | codex | Public function 0xe4849b32 reaches a computed external CALL with ambiguous target/value | 65 | no | — |
viewevidence_json{
"evidence": "The selector table exposes public selector 0xe4849b32. Its path checks a slot-7-like balance condition around pc 0x482-0x4ad, then proceeds to CALL pc 0x856. The bundle callsite metadata marks this CALL as computed target/computed value with returndata_checked=null, and the artifact has no detected auth guards. Detector output also confirms reachable CALL sinks with variable targets, but the exact semantics of this specific path cannot be proven from bytecode alone.",
"locations": [
"selector:0xe4849b32",
"pc:0x4ad",
"pc:0x856"
],
"recommendation": "Audit selector 0xe4849b32 at source level or with traces against known inputs. Constrain the destination to a trusted constant or vetted interface, avoid low-level CALL where possible, validate returndata, and add a reentrancy guard if the call is intentionally public.",
"exploit_scenario": "An externally callable path beginning at selector 0xe4849b32 reaches CALL pc 0x856 after only a balance-like threshold check, not an owner-style check. If calldata or mutable state influence the destination or ETH amount, an attacker with the prerequisite balance could route execution into attacker-controlled code and potentially trigger unexpected side effects or reentrancy. Because only bytecode is available, the exact destination/value semantics remain uncertain."
}
|