019b3836-35f6-70f6-b91f-9db2da6f60d7
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 |
|---|---|---|---|---|
| 3503 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 3504 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 46420 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 46421 | capability.graph | complete | 1 / 3 | 1 week ago |
| 46422 | detector.run | complete | 1 / 3 | 1 week ago |
| 46423 | validation.fork | complete | 1 / 3 | 1 week ago |
| 113263 | report.consolidate | complete | 1 / 6 | 1 week ago |
No slither job recorded yet.
{"no_findings":false,"summary":"The bytecode bundle is not consistent with a normal ERC20 implementation. The strongest issue is that selector 0xa9059cbb dispatches into approval/callback-style logic rather than an obvious balance-moving transfer path, and that path performs a state write before an unguarded external CALL. No proxy, delegatecall, or upgrade-slot behavior was evidenced in the bundle.","findings":[{"severity":"high","category":"auth","title":"Selector 0xa9059cbb appears to grant authorization and invoke a callback instead of performing an ERC20 transfer","exploit_scenario":"An integration or user that treats this contract as ERC20-compatible may call selector 0xa9059cbb expecting `transfer(address,uint256)`. In this bytecode, that selector reaches a path that decodes extra dynamic calldata, writes state, then constructs calldata headed by 0x8f4ffcb1 and CALLs a computed target. A malicious recipient/spender contract could use that callback to act on the newly granted authorization, so the caller can end up approving and interacting with an external contract instead of transferring tokens.","recommendation":"Do not expose non-transfer semantics behind 0xa9059cbb. If this is intended approval/callback behavior, move it to a distinct selector and keep 0xa9059cbb as a pure balance-moving transfer. Add explicit eventing and clear ABI separation so wallets/integrations cannot be tricked into granting approvals.","evidence":"Dispatcher bytes at pc 0x56-0x60 route selector 0xa9059cbb to pc 0x2c5. That branch checks caller balance (pc 0x2c5-0x2ef), decodes a dynamic bytes payload from calldata offset 0x44 (pc 0x2f4-0x336), performs an SSTORE before any external interaction (pc 0x387), then builds calldata with selector 0x8f4ffcb1 (pc 0x396) and issues CALL at pc 0x448. By contrast, the evident balance-moving Transfer-event path is elsewhere, around pc 0x765-0x7cc. This semantic mismatch is inferred from bytecode, but the inference is strong.","locations":["selector:0xa9059cbb","pc:0x2c5","pc:0x387","pc:0x396","pc:0x448"]},{"severity":"medium","category":"reentrancy","title":"Approval/callback path performs external CALL after state mutation with no detected guard","exploit_scenario":"A malicious callback target can be passed into the 0xa9059cbb path. Because state is written before the external CALL, the callee can reenter during the callback and attempt follow-on actions such as `transferFrom` or other state-dependent flows while the contract is mid-execution. The exact slot names are unknown from raw bytecode, so the full impact is somewhat uncertain, but the bundle shows no guard detection and confirms a computed CALL target.","recommendation":"Apply checks-effects-interactions discipline: finish all validation, minimize or defer external callbacks, and add an explicit reentrancy guard around any path that both mutates authorization/accounting state and CALLs an untrusted address. If callbacks are required, isolate them behind dedicated functions with narrowly scoped state changes.","evidence":"In the 0xa9059cbb branch, an SSTORE occurs at pc 0x387 before the external CALL at pc 0x448. `auth.guards` is empty in the artifact, and detector findings validate an untrusted computed CALL target/value path. The callsite list shows the relevant CALL at pc 1096 with `target_expression_category: computed` and `returndata_checked: null`. The two other CALLs (pc 1028 and pc 1241) are consistent with identity-precompile copies, so pc 0x448 is the security-relevant callback.","locations":["selector:0xa9059cbb","pc:0x387","pc:0x448","pc:0x404","pc:0x4d9"]}]}
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-catjv7v7
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5bcb-af92-74e1-91bd-118c96bd1876
--------
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 && ls -la && printf '\\n--- FILES ---\\n' && rg --files" in /tmp/codex-catjv7v7
succeeded in 0ms:
/tmp/codex-catjv7v7
total 144
drwx------ 2 noahkuhn noahkuhn 4096 Apr 5 03:59 .
drwxrwxrwt 270 nobody nogroup 24576 Apr 5 03:59 ..
-rw-rw-r-- 1 noahkuhn noahkuhn 109623 Apr 5 03:59 BYTECODE_BUNDLE.json
-rw-rw-r-- 1 noahkuhn noahkuhn 815 Apr 5 03:59 codex-output-schema.json
--- FILES ---
codex-output-schema.json
BYTECODE_BUNDLE.json
exec
/bin/bash -lc "sed -n '1,220p' BYTECODE_BUNDLE.json" in /tmp/codex-catjv7v7
succeeded in 0ms:
{
"analysis_artifact": {
"address": "0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9",
"artifact_hash": "0x31c2f09f5d948f84176769dc48891bec15e6285f975a966084426369b0dbfe17",
"artifact_json": {
"auth": {
"guards": []
},
"basic_blocks": [
{
"end_pc": 10,
"hash": "0xea84cd9b520f9ac15ee69facebf0514d237ae3f350495e573c06816e7e3d08cf",
"opcodes": [
"PUSH1",
"PUSH1",
"MSTORE",
"CALLDATASIZE",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 0
},
{
"end_pc": 30,
"hash": "0x8351f5fd39e1769e53f7b93891e5bf598f6939b3ca7289b6c03bc34019c93201",
"opcodes": [
"PUSH1",
"PUSH1",
"EXP",
"PUSH1",
"CALLDATALOAD",
"DIV",
"PUSH4",
"OP_81",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 11
},
{
"end_pc": 41,
"hash": "0xc6fd74ad853f095f612f149f1918dd822cd863808f0ce7f2b76117fb4ea5344f",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 31
},
{
"end_pc": 52,
"hash": "0x5d2d40f32d4f9058207b0d6f7903f63d039ea51495b4c51d350b92843e2df549",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 42
},
{
"end_pc": 63,
"hash": "0x6395fbbf8e31545534f4e272460cc45680fcefdbedad9b2d765f1767162723de",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 53
},
{
"end_pc": 74,
"hash": "0x7e55a1563caa02cce17917c451d16972c56457930e2cb4b94eab14d1a67fd190",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 64
},
{
"end_pc": 85,
"hash": "0xc7260eb437dd2999867d7a05454629fa3cf0fba947283b4da04ceb9c54acd901",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 75
},
{
"end_pc": 96,
"hash": "0x0683887794df32b997fb5fc7010a8a5250ef4079db97801f09d5ce49fc9b8d64",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 86
},
{
"end_pc": 107,
"hash": "0xfa8456f64a3efe7ea003fb11275ded537fdc6154d7ea7a4ee58b535f3e612e23",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 97
},
{
"end_pc": 118,
"hash": "0x5dba4d1c7ecbe5d8f6b856b2b99e5debf1e79e68b0000b67109b625402c4f8db",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 108
},
{
"end_pc": 129,
"hash": "0xfd7f4763566007c2c10de3028e4b7bbdfe1ad730834b111926541fa701e7acfd",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 119
},
{
"end_pc": 137,
"hash": "0x6973f42d8c76df908ce1f6241be0a07398300f020b60d29939b266c56d831038",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH2",
"JUMP"
],
"start_pc": 130
},
{
"end_pc": 204,
"hash": "0xa1430ae9677b5455ef3c4d76059d21d26db7f04ea69b827f63d906f1e4ebab3a",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"OP_80",
"MLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"OP_85",
"AND",
"ISZERO",
"PUSH2",
"MUL",
"PUSH1",
"NOT",
"ADD",
"OP_90",
"OP_94",
"AND",
"OP_93",
"OP_90",
"OP_93",
"DIV",
"PUSH1",
"OP_81",
"ADD",
"OP_84",
"OP_90",
"DIV",
"OP_84",
"MUL",
"OP_82",
"ADD",
"OP_84",
"ADD",
"OP_90",
"OP_92",
"MSTORE",
"OP_81",
"OP_81",
"MSTORE",
"OP_92",
"OP_91",
"OP_83",
"ADD",
"OP_82",
"OP_82",
"OP_80",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 138
exec
/bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-catjv7v7
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, .analysis_artifact.artifact_json | keys' BYTECODE_BUNDLE.json" in /tmp/codex-catjv7v7
succeeded in 0ms:
[
0,
1,
2,
3,
4,
5
]
[
"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.selectors, .analysis_artifact.artifact_json.function_entries, .analysis_artifact.artifact_json.functions' BYTECODE_BUNDLE.json" in /tmp/codex-catjv7v7
succeeded in 0ms:
[
"0x06fdde03",
"0x1d2bca17",
"0x23b872dd",
"0x313ce567",
"0x70a08231",
"0x95d89b41",
"0xa9059cbb",
"0xcae9ca51",
"0xdc3080f2",
"0xdd62ed3e"
]
[
{
"entry_pc": null,
"selector": "0x06fdde03"
},
{
"entry_pc": 599290589,
"selector": "0x1d2bca17"
},
{
"entry_pc": 826074471,
"selector": "0x23b872dd"
},
{
"entry_pc": 1889567281,
"selector": "0x313ce567"
},
{
"entry_pc": 2514000705,
"selector": "0x70a08231"
},
{
"entry_pc": 2835717307,
"selector": "0x95d89b41"
},
{
"entry_pc": 3404319313,
"selector": "0xa9059cbb"
},
{
"entry_pc": 3694166258,
"selector": "0xcae9ca51"
},
{
"entry_pc": 3714247998,
"selector": "0xdc3080f2"
},
{
"entry_pc": 1185,
"selector": "0xdd62ed3e"
}
]
[
{
"auth": {
"guards": []
},
"entry_pc": null,
"selector": "0x06fdde03",
"sinks": {
"call": 3,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 599290589,
"selector": "0x1d2bca17",
"sinks": {
"call": 3,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 826074471,
"selector": "0x23b872dd",
"sinks": {
"call": 3,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 1889567281,
"selector": "0x313ce567",
"sinks": {
"call": 3,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 2514000705,
"selector": "0x70a08231",
"sinks": {
"call": 3,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 2835717307,
"selector": "0x95d89b41",
"sinks": {
"call": 3,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3404319313,
"selector": "0xa9059cbb",
"sinks": {
"call": 3,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3694166258,
"selector": "0xcae9ca51",
"sinks": {
"call": 3,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3714247998,
"selector": "0xdc3080f2",
"sinks": {
"call": 3,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 1185,
"selector": "0xdd62ed3e",
"sinks": {
"call": 3,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
}
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.callsites, .analysis_artifact.artifact_json.sinks, .analysis_artifact.artifact_json.storage' BYTECODE_BUNDLE.json" in /tmp/codex-catjv7v7
succeeded in 0ms:
[
{
"opcode": "CALL",
"pc": 1028,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1096,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1241,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
]
{
"call": 3,
"create": 0,
"create2": 0,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0,
"upgrade_slot_write_suspected": false
}
{
"keccak_count": 24,
"reads": 23,
"slots": [
{
"op": "SLOAD",
"pc": 145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 218,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 586,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 623,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 695,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SSTORE",
"pc": 903,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1840,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
],
"writes": 15
}
exec
/bin/bash -lc "jq 'del(.analysis_artifact) | .' BYTECODE_BUNDLE.json" in /tmp/codex-catjv7v7
succeeded in 0ms:
{
"analysis_run": {
"address": "0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9",
"block_number": null,
"chain_id": 1,
"child_links": [],
"created_at": "2025-12-19T20:03:55.000000Z",
"id": "019b3836-35f6-70f6-b91f-9db2da6f60d7",
"parent_links": [],
"status": "running",
"updated_at": "2026-04-04T19:55:29.000000Z"
},
"artifact": {
"codehash": "0xd389ff5b897bddbe186c7d13c7e314324a7c27366140c648b241eea08a496ef5",
"compiler_json": {
"etherscan": {
"skipped": true
}
},
"implementation_address": null,
"is_proxy": false,
"runtime_bytecode": {
"full": "0x606060405236156100825760e060020a600035046306fdde03811461008a5780631d2bca17146100e857806323b872dd14610212578063313ce5671461024457806370a082311461025057806395d89b4114610268578063a9059cbb146102c5578063cae9ca51146102f4578063dc3080f214610458578063dd62ed3e1461047d575b6104a1610002565b6104a36000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105655780601f1061053a57610100808354040283529160200191610565565b60408051602060248035600481810135601f81018590048502860185019096528585526104a1958135959194604494929390920191819084018382808284375050604080516020606435808b0135601f81018390048302840183019094528383529799983598976084975091955060249190910193509091508190840183828082843750949650505050505050600160a060020a033316600090815260036020908152604082208690558154855183805260026001831615610100026000190190921691909104601f9081018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5639081019390919088019083901061066d57805160ff19168380011785555b5061069d9291505b808211156106f657600081556001016101fe565b610511600435602435604435600160a060020a0383166000908152600360205260408120548290101561056d57610002565b61052360025460ff1681565b61051160043560036020526000908152604090205481565b6104a360018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105655780601f1061053a57610100808354040283529160200191610565565b6104a1600435602435600160a060020a0333166000908152600360205260409020548190101561073e57610002565b604080516020604435600481810135601f810184900484028501840190955284845261051194813594602480359593946064949293910191819084018382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561042e5780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546105119081565b60046020818152903560009081526040808220909252602435815220546105119081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156105035780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6040805160ff929092168252519081900360200190f35b820191906000526020600020905b81548152906001019060200180831161054857829003601f168201915b505050505081565b600160a060020a038316600090815260036020526040902054828101101561059457610002565b600160a060020a038481166000818152600460209081526040808320339590951680845294825280832054938352600582528083209483529390529190912054830111156105e157610002565b600160a060020a0384811660008181526003602090815260408083208054889003905587851680845281842080548901905593835260058252808320339590951680845294825291829020805487019055815186815291519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a39392505050565b828001600101855582156101f6579182015b828111156101f657825182600050559160200191906001019061067f565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106106fa57805160ff19168380011785555b5061072a9291506101fe565b5090565b828001600101855582156106ea579182015b828111156106ea57825182600050559160200191906001019061070c565b50506002805460ff19168317905550505050565b600160a060020a038216600090815260036020526040902054818101101561076557610002565b600160a060020a03338116600081815260036020908152604080832080548790039055938616808352918490208054860190558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505056",
"head": null,
"length": 4002,
"tail": null,
"truncated": false
},
"verified_source": false
},
"capability_graph": {
"address": "0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9",
"block_number": null,
"chain_id": 1,
"codehash": "0xd389ff5b897bddbe186c7d13c7e314324a7c27366140c648b241eea08a496ef5",
"created_at": "2026-04-04T19:55:29.000000Z",
"graph_hash": "0x32cec1bc6ace7f872c2267fa5e640c9248ad93d91100a3fd7a1da9a14b073cdd",
"graph_json": {
"edges": [
{
"from": "bb:0",
"to": "bb:130",
"type": "control_flow"
},
{
"from": "bb:0",
"to": "bb:11",
"type": "control_flow_fallthrough"
},
{
"from": "bb:11",
"to": "bb:138",
"type": "control_flow"
},
{
"from": "bb:11",
"to": "bb:31",
"type": "control_flow_fallthrough"
},
{
"from": "bb:31",
"to": "bb:232",
"type": "control_flow"
},
{
"from": "bb:31",
"to": "bb:42",
"type": "control_flow_fallthrough"
},
{
"from": "bb:42",
"to": "bb:530",
"type": "control_flow"
},
{
"from": "bb:42",
"to": "bb:53",
"type": "control_flow_fallthrough"
},
{
"from": "bb:53",
"to": "bb:580",
"type": "control_flow"
},
{
"from": "bb:53",
"to": "bb:64",
"type": "control_flow_fallthrough"
},
{
"from": "bb:64",
"to": "bb:592",
"type": "control_flow"
},
{
"from": "bb:64",
"to": "bb:75",
"type": "control_flow_fallthrough"
},
{
"from": "bb:75",
"to": "bb:616",
"type": "control_flow"
},
{
"from": "bb:75",
"to": "bb:86",
"type": "control_flow_fallthrough"
},
{
"from": "bb:86",
"to": "bb:709",
"type": "control_flow"
},
{
"from": "bb:86",
"to": "bb:97",
"type": "control_flow_fallthrough"
},
{
"from": "bb:97",
"to": "bb:756",
"type": "control_flow"
},
{
"from": "bb:97",
"to": "bb:108",
"type": "control_flow_fallthrough"
},
{
"from": "bb:108",
"to": "bb:1112",
"type": "control_flow"
},
{
"from": "bb:108",
"to": "bb:119",
"type": "control_flow_fallthrough"
},
{
"from": "bb:119",
"to": "bb:1149",
"type": "control_flow"
},
{
"from": "bb:119",
"to": "bb:130",
"type": "control_flow_fallthrough"
},
{
"from": "bb:138",
"to": "bb:1381",
"type": "control_flow"
},
{
"from": "bb:138",
"to": "bb:205",
"type": "control_flow_fallthrough"
},
{
"from": "bb:205",
"to": "bb:1338",
"type": "control_flow"
},
{
"from": "bb:205",
"to": "bb:213",
"type": "control_flow_fallthrough"
},
{
"from": "bb:213",
"to": "bb:1381",
"type": "control_flow"
},
{
"from": "bb:232",
"to": "bb:1645",
"type": "control_flow"
},
{
"from": "bb:232",
"to": "bb:490",
"type": "control_flow_fallthrough"
},
{
"from": "bb:490",
"to": "bb:502",
"type": "control_flow_fallthrough"
},
{
"from": "bb:502",
"to": "bb:510",
"type": "control_flow_fallthrough"
},
{
"from": "bb:510",
"to": "bb:1782",
"type": "control_flow"
},
{
"from": "bb:510",
"to": "bb:519",
"type": "control_flow_fallthrough"
},
{
"from": "bb:519",
"to": "bb:510",
"type": "control_flow"
},
{
"from": "bb:530",
"to": "bb:1389",
"type": "control_flow"
},
{
"from": "bb:530",
"to": "bb:576",
"type": "control_flow_fallthrough"
},
{
"from": "bb:616",
"to": "bb:1381",
"type": "control_flow"
},
{
"from": "bb:616",
"to": "bb:682",
"type": "control_flow_fallthrough"
},
{
"from": "bb:682",
"to": "bb:1338",
"type": "control_flow"
},
{
"from": "bb:682",
"to": "bb:690",
"type": "control_flow_fallthrough"
},
{
"from": "bb:690",
"to": "bb:1381",
"type": "control_flow"
},
{
"from": "bb:709",
"to": "bb:1854",
"type": "control_flow"
},
{
"from": "bb:709",
"to": "bb:752",
"type": "control_flow_fallthrough"
},
{
"from": "bb:756",
"to": "bb:1070",
"type": "control_flow"
},
{
"from": "bb:756",
"to": "bb:1045",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1045",
"to": "bb:1070",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1070",
"to": "bb:1102",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1187",
"to": "bb:1283",
"type": "control_flow"
},
{
"from": "bb:1187",
"to": "bb:1258",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1258",
"to": "bb:1283",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1338",
"to": "bb:1352",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1352",
"to": "bb:1352",
"type": "control_flow"
},
{
"from": "bb:1352",
"to": "bb:1372",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1372",
"to": "bb:1381",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1389",
"to": "bb:1428",
"type": "control_flow"
},
{
"from": "bb:1389",
"to": "bb:1424",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1428",
"to": "bb:1505",
"type": "control_flow"
},
{
"from": "bb:1428",
"to": "bb:1501",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1645",
"to": "bb:502",
"type": "control_flow"
},
{
"from": "bb:1645",
"to": "bb:1660",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1660",
"to": "bb:1663",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1663",
"to": "bb:502",
"type": "control_flow"
},
{
"from": "bb:1663",
"to": "bb:1672",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1672",
"to": "bb:1663",
"type": "control_flow"
},
{
"from": "bb:1693",
"to": "bb:1786",
"type": "control_flow"
},
{
"from": "bb:1693",
"to": "bb:1758",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1758",
"to": "bb:1770",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1770",
"to": "bb:510",
"type": "control_flow"
},
{
"from": "bb:1786",
"to": "bb:1770",
"type": "control_flow"
},
{
"from": "bb:1786",
"to": "bb:1801",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1801",
"to": "bb:1804",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1804",
"to": "bb:1770",
"type": "control_flow"
},
{
"from": "bb:1804",
"to": "bb:1813",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1813",
"to": "bb:1804",
"type": "control_flow"
},
{
"from": "bb:1854",
"to": "bb:1893",
"type": "control_flow"
},
{
"from": "bb:1854",
"to": "bb:1889",
"type": "control_flow_fallthrough"
},
{
"from": "fn:0x1d2bca17",
"to": "bb:599290589",
"type": "entry"
},
{
"from": "fn:0x23b872dd",
"to": "bb:826074471",
"type": "entry"
},
{
"from": "fn:0x313ce567",
"to": "bb:1889567281",
"type": "entry"
},
{
"from": "fn:0x70a08231",
"to": "bb:2514000705",
"type": "entry"
},
{
"from": "fn:0x95d89b41",
"to": "bb:2835717307",
"type": "entry"
},
{
"from": "fn:0xa9059cbb",
"to": "bb:3404319313",
"type": "entry"
},
{
"from": "fn:0xcae9ca51",
"to": "bb:3694166258",
"type": "entry"
},
{
"from": "fn:0xdc3080f2",
"to": "bb:3714247998",
"type": "entry"
},
{
"from": "fn:0xdd62ed3e",
"to": "bb:1185",
"type": "entry"
},
{
"from": "bb:756",
"to": "call:1028",
"type": "contains"
},
{
"from": "call:1028",
"to": "sink:call",
"type": "capability"
},
{
"from": "bb:1070",
"to": "call:1096",
"type": "contains"
},
{
"from": "call:1096",
"to": "sink:call",
"type": "capability"
},
{
"from": "bb:1187",
"to": "call:1241",
"type": "contains"
},
{
"from": "call:1241",
"to": "sink:call",
"type": "capability"
}
],
"nodes": [
{
"end_pc": 10,
"hash": "0xea84cd9b520f9ac15ee69facebf0514d237ae3f350495e573c06816e7e3d08cf",
"id": "bb:0",
"start_pc": 0,
"type": "basic_block"
},
{
"end_pc": 30,
"hash": "0x8351f5fd39e1769e53f7b93891e5bf598f6939b3ca7289b6c03bc34019c93201",
"id": "bb:11",
"start_pc": 11,
"type": "basic_block"
},
{
"end_pc": 41,
"hash": "0xc6fd74ad853f095f612f149f1918dd822cd863808f0ce7f2b76117fb4ea5344f",
"id": "bb:31",
"start_pc": 31,
"type": "basic_block"
},
{
"end_pc": 52,
"hash": "0x5d2d40f32d4f9058207b0d6f7903f63d039ea51495b4c51d350b92843e2df549",
"id": "bb:42",
"start_pc": 42,
"type": "basic_block"
},
{
"end_pc": 63,
"hash": "0x6395fbbf8e31545534f4e272460cc45680fcefdbedad9b2d765f1767162723de",
"id": "bb:53",
"start_pc": 53,
"type": "basic_block"
},
{
"end_pc": 74,
"hash": "0x7e55a1563caa02cce17917c451d16972c56457930e2cb4b94eab14d1a67fd190",
"id": "bb:64",
"start_pc": 64,
"type": "basic_block"
},
{
"end_pc": 85,
"hash": "0xc7260eb437dd2999867d7a05454629fa3cf0fba947283b4da04ceb9c54acd901",
"id": "bb:75",
"start_pc": 75,
"type": "basic_block"
},
{
"end_pc": 96,
"hash": "0x0683887794df32b997fb5fc7010a8a5250ef4079db97801f09d5ce49fc9b8d64",
"id": "bb:86",
"start_pc": 86,
"type": "basic_block"
},
{
"end_pc": 107,
"hash": "0xfa8456f64a3efe7ea003fb11275ded537fdc6154d7ea7a4ee58b535f3e612e23",
"id": "bb:97",
"start_pc": 97,
"type": "basic_block"
},
{
"end_pc": 118,
"hash": "0x5dba4d1c7ecbe5d8f6b856b2b99e5debf1e79e68b0000b67109b625402c4f8db",
"id": "bb:108",
"start_pc": 108,
"type": "basic_block"
},
{
"end_pc": 129,
"hash": "0xfd7f4763566007c2c10de3028e4b7bbdfe1ad730834b111926541fa701e7acfd",
"id": "bb:119",
"start_pc": 119,
"type": "basic_block"
},
{
"end_pc": 137,
"hash": "0x6973f42d8c76df908ce1f6241be0a07398300f020b60d29939b266c56d831038",
"id": "bb:130",
"start_pc": 130,
"type": "basic_block"
},
{
"end_pc": 204,
"hash": "0xa1430ae9677b5455ef3c4d76059d21d26db7f04ea69b827f63d906f1e4ebab3a",
"id": "bb:138",
"start_pc": 138,
"type": "basic_block"
},
{
"end_pc": 212,
"hash": "0x30ed60a8101b93a007d51b2b67a35c97e26a1c71be58a64f9b97c1f714f775eb",
"id": "bb:205",
"start_pc": 205,
"type": "basic_block"
},
{
"end_pc": 231,
"hash": "0x7a8ae9709127fd4398a9bd91e810c4f44c2f333c88d3b44f7b85ca6ad5198f40",
"id": "bb:213",
"start_pc": 213,
"type": "basic_block"
},
{
"end_pc": 489,
"hash": "0xd1e01b7030cbc37007c0d1336178bab70d82e6a701f1cd29bf4bd0cdbbf3a22d",
"id": "bb:232",
"start_pc": 232,
"type": "basic_block"
},
{
"end_pc": 501,
"hash": "0x7a92991e2844497658847a2ea74aed5ba324e57c97dbddb9b52877c26fd98416",
"id": "bb:490",
"start_pc": 490,
"type": "basic_block"
},
{
"end_pc": 509,
"hash": "0x0b9b6bb4eea7a785f127cf35f9a2f23da7d9e15bad91641d45b4e0cdd02f84de",
"id": "bb:502",
"start_pc": 502,
"type": "basic_block"
},
{
"end_pc": 518,
"hash": "0xe443861e6458ce6eccbd83ff74b3e6f4f7c1a12bf13bac84df8dded0e9675adf",
"id": "bb:510",
"start_pc": 510,
"type": "basic_block"
},
{
"end_pc": 529,
"hash": "0xb9d2ccbb9e6ccfba96248ccbe328247f2b6305aade2627c20b34f16ed436b301",
"id": "bb:519",
"start_pc": 519,
"type": "basic_block"
},
{
"end_pc": 575,
"hash": "0x0ccd47193cfaff13763aebf675c48000d1f36b2bbc2839817bcffb6c577a59fd",
"id": "bb:530",
"start_pc": 530,
"type": "basic_block"
},
{
"end_pc": 579,
"hash": "0xe3d0abb290b1434c0882a4a475beab8f5c637ee13c376a90a982814bc687e0aa",
"id": "bb:576",
"start_pc": 576,
"type": "basic_block"
},
{
"end_pc": 591,
"hash": "0x14e5b1deb83da415d342fb4496ad805f5b47b7768e71e4d7367b74c3af477522",
"id": "bb:580",
"start_pc": 580,
"type": "basic_block"
},
{
"end_pc": 615,
"hash": "0x3292d8469ee1e8a23b7e950aa87c05613e781cd5d7617960da01a4d9f1f48ac9",
"id": "bb:592",
"start_pc": 592,
"type": "basic_block"
},
{
"end_pc": 681,
"hash": "0xaf1fb4ca1f53f339a48fb0fd45fa7568b6ef991617cec8f22973d50dba010943",
"id": "bb:616",
"start_pc": 616,
"type": "basic_block"
},
{
"end_pc": 689,
"hash": "0xb660d9458316a2af7017919ffdb2f4ce09eb54be2d2468443c8c424916fccc48",
"id": "bb:682",
"start_pc": 682,
"type": "basic_block"
},
{
"end_pc": 708,
"hash": "0x5a73966c5f1be4607c05384c381dda4ed564c51880a2edbb61cd07317011b069",
"id": "bb:690",
"start_pc": 690,
"type": "basic_block"
},
{
"end_pc": 751,
"hash": "0x94345c68c3603b6d5e2c73da4cb0095a8210c15d5704d9ed47b3fe971d9f829c",
"id": "bb:709",
"start_pc": 709,
"type": "basic_block"
},
{
"end_pc": 755,
"hash": "0x01a7be615724532b6d9f92d06b8b10086f1a57e436301fad0dd825cb1c48eb9a",
"id": "bb:752",
"start_pc": 752,
"type": "basic_block"
},
{
"end_pc": 1044,
"hash": "0x9798ed6431b096de023c4c62617057ae5618b51692365c29d021fd4ddb825475",
"id": "bb:756",
"start_pc": 756,
"type": "basic_block"
},
{
"end_pc": 1069,
"hash": "0x8f2b0b05cb85d42f3ce25478c001897ee00539595d918267c269d425fdb409a7",
"id": "bb:1045",
"start_pc": 1045,
"type": "basic_block"
},
{
"end_pc": 1101,
"hash": "0xa684bf531378853015bf9c755222452e24b9ff9e99faf0904863f47f6c0bbb72",
"id": "bb:1070",
"start_pc": 1070,
"type": "basic_block"
},
{
"end_pc": 1111,
"hash": "0x0add245c08f7a33cdc9b0f81478a43b3ad6e89572486870fca2740c9ea257f50",
"id": "bb:1102",
"start_pc": 1102,
"type": "basic_block"
},
{
"end_pc": 1148,
"hash": "0x0c84a1357f39db41fc75ce9afbeac670bb348970569d4ed0c6bafa0cb884d869",
"id": "bb:1112",
"start_pc": 1112,
"type": "basic_block"
},
{
"end_pc": 1184,
"hash": "0x47843f54b42b5122207989009f90d32d2b5dd9d036e2ab4d417aad7f7cba02b2",
"id": "bb:1149",
"start_pc": 1149,
"type": "basic_block"
},
{
"end_pc": 1186,
"hash": "0xbb1a7eb3bff17df02c566c4d97223f08e5f2634fdfe4eb9baf580cd05f8f73d2",
"id": "bb:1185",
"start_pc": 1185,
"type": "basic_block"
},
{
"end_pc": 1257,
"hash": "0xbaa13a0bafc7a2e5e446975919eadb5e17a01dbe0dd698b2528ab28fc7b8687b",
"id": "bb:1187",
"start_pc": 1187,
"type": "basic_block"
},
{
"end_pc": 1282,
"hash": "0x21a4e5112b9c0682ee02098a59ac8f5b900d5cff95e3b8c5fe821522bd12c94f",
"id": "bb:1258",
"start_pc": 1258,
"type": "basic_block"
},
{
"end_pc": 1296,
"hash": "0xccbe2197fd4fbdd66d973701e239b2c909920edd3ee89b4242f487537fa9868d",
"id": "bb:1283",
"start_pc": 1283,
"type": "basic_block"
},
{
"end_pc": 1314,
"hash": "0x47b3df7dc35690599492f510b5a1e889d3dd1eee11b8cb92d54297bac368e909",
"id": "bb:1297",
"start_pc": 1297,
"type": "basic_block"
},
{
"end_pc": 1337,
"hash": "0xaa6350875dac9906fa750b7bb5312c9cb71db936c33372d3ef30773aa56e785b",
"id": "bb:1315",
"start_pc": 1315,
"type": "basic_block"
},
{
"end_pc": 1351,
"hash": "0xf4903fe5cad1b1ad373badf968a52c1fc5943a7e5956b88f4748577d94afda6b",
"id": "bb:1338",
"start_pc": 1338,
"type": "basic_block"
},
{
"end_pc": 1371,
"hash": "0xee297038bf3fdb728338054e09625f0c4432a297fa5f2d985ced2f3a20ec50c5",
"id": "bb:1352",
"start_pc": 1352,
"type": "basic_block"
},
{
"end_pc": 1380,
"hash": "0xd4c6bd57e590fe79082cf35638ce0f7b6e144608f848af0a06ae8948d8ae16a0",
"id": "bb:1372",
"start_pc": 1372,
"type": "basic_block"
},
{
"end_pc": 1388,
"hash": "0xcac967ae3ce05276d6736956aba0c9457e7d365e634c70c072d1efcfc60b1580",
"id": "bb:1381",
"start_pc": 1381,
"type": "basic_block"
},
{
"end_pc": 1423,
"hash": "0xd18b7920aabe0f5f4cad1e6358aa54f3663770d259e8107fcf8246cd42ccbb18",
"id": "bb:1389",
"start_pc": 1389,
"type": "basic_block"
},
{
"end_pc": 1427,
"hash": "0x936219ef931bb3c4b71b9097d02a5d37473e2418583b8408fdd34bb3eb9a64f0",
"id": "bb:1424",
"start_pc": 1424,
"type": "basic_block"
},
{
"end_pc": 1500,
"hash": "0x2b5aeba7f5225c712d05d5f5b6c174573d037652809bfd8cae1f7eb847a157f3",
"id": "bb:1428",
"start_pc": 1428,
"type": "basic_block"
},
{
"end_pc": 1504,
"hash": "0x89cef420c61dcc82ab748242aa7a9e51cf1a3521ee2820d24e5eb7b7eaa4c158",
"id": "bb:1501",
"start_pc": 1501,
"type": "basic_block"
},
{
"end_pc": 1644,
"hash": "0xd097779df27a55eadc50bd6b78b57f5b074cb3ac74f9264c3465e760d08695ad",
"id": "bb:1505",
"start_pc": 1505,
"type": "basic_block"
},
{
"end_pc": 1659,
"hash": "0xadb54743287476494b173dae7375820b0b41f17c9cbfa5198b7f97c6a0f45ecf",
"id": "bb:1645",
"start_pc": 1645,
"type": "basic_block"
},
{
"end_pc": 1662,
"hash": "0xeb5c81be944faed446c6914cd562759c42a8520202049e5522911c693d442423",
"id": "bb:1660",
"start_pc": 1660,
"type": "basic_block"
},
{
"end_pc": 1671,
"hash": "0x21994052f3cdd7441cb075ad3c1a437c7d50f93c34bec00a345f526fe682399d",
"id": "bb:1663",
"start_pc": 1663,
"type": "basic_block"
},
{
"end_pc": 1692,
"hash": "0x0f9dd4bccfc810ee1b4d2d3dec8805d5f87337887332936536cb29f895a20a4b",
"id": "bb:1672",
"start_pc": 1672,
"type": "basic_block"
},
{
"end_pc": 1757,
"hash": "0x32fffc7993a20118ca7b0dcbeca941f3db57c8d9d28c790aba202e1aa8e2a345",
"id": "bb:1693",
"start_pc": 1693,
"type": "basic_block"
},
{
"end_pc": 1769,
"hash": "0x8df8896786fba98c81fd087d823f0e09f7282f3323c65d74f2f02e75d14094bd",
"id": "bb:1758",
"start_pc": 1758,
"type": "basic_block"
},
{
"end_pc": 1781,
"hash": "0x914b9a50e772f72bb04a411cbc02769ab6cb989a5083abb6dc4b2f1f24184a94",
"id": "bb:1770",
"start_pc": 1770,
"type": "basic_block"
},
{
"end_pc": 1785,
"hash": "0x96f8d5b4fd1adeda192e1a6ec0411cfec2a3c924c73611a02d4afbdd0438ca98",
"id": "bb:1782",
"start_pc": 1782,
"type": "basic_block"
},
{
"end_pc": 1800,
"hash": "0xc41c2c82c396eea2ba115ebfeaff6155b93171622b6ef9ab34531bf7e8b51ce9",
"id": "bb:1786",
"start_pc": 1786,
"type": "basic_block"
},
{
"end_pc": 1803,
"hash": "0x31e26db4020cecc869e086979ecb6c45272922d8cc1e8a0d33521d130444f110",
"id": "bb:1801",
"start_pc": 1801,
"type": "basic_block"
},
{
"end_pc": 1812,
"hash": "0x7954ee97bacd78f39bffea4ee8a8b6d4e3810bd7c31bce9539e7bb15e6a7de26",
"id": "bb:1804",
"start_pc": 1804,
"type": "basic_block"
},
{
"end_pc": 1833,
"hash": "0x8d144305adeb51b9b2fe3fd06017cc90dc0ea439d50a6b647f171d7d57f2a1da",
"id": "bb:1813",
"start_pc": 1813,
"type": "basic_block"
},
{
"end_pc": 1853,
"hash": "0x995d4ac13f2a7259574ad05d417830f29e43bb7bd8cae77c744fbd4f1fec6886",
"id": "bb:1834",
"start_pc": 1834,
"type": "basic_block"
},
{
"end_pc": 1888,
"hash": "0x6d64f4638ddda92228233f53f7abbec98f8e81c5e42f7b66707fcef7eb6cb256",
"id": "bb:1854",
"start_pc": 1854,
"type": "basic_block"
},
{
"end_pc": 1892,
"hash": "0xbaf4c67be1f2f3ef6fb3ba8235c49b0a041c66f6a97b43a1163138a5ee5e0389",
"id": "bb:1889",
"start_pc": 1889,
"type": "basic_block"
},
{
"end_pc": 1999,
"hash": "0x794176e06f507b6dc27cd193a2fd640879cc4bc6f6d81dcf9caa34a58ffa5dfe",
"id": "bb:1893",
"start_pc": 1893,
"type": "basic_block"
},
{
"id": "call:1028",
"opcode": "CALL",
"pc": 1028,
"type": "callsite"
},
{
"id": "call:1096",
"opcode": "CALL",
"pc": 1096,
"type": "callsite"
},
{
"id": "call:1241",
"opcode": "CALL",
"pc": 1241,
"type": "callsite"
},
{
"id": "sink:call",
"type": "sink"
},
{
"entry_pc": null,
"id": "fn:0x06fdde03",
"selector": "0x06fdde03",
"type": "function"
},
{
"entry_pc": 599290589,
"id": "fn:0x1d2bca17",
"selector": "0x1d2bca17",
"type": "function"
},
{
"entry_pc": 826074471,
"id": "fn:0x23b872dd",
"selector": "0x23b872dd",
"type": "function"
},
{
"entry_pc": 1889567281,
"id": "fn:0x313ce567",
"selector": "0x313ce567",
"type": "function"
},
{
"entry_pc": 2514000705,
"id": "fn:0x70a08231",
"selector": "0x70a08231",
"type": "function"
},
{
"entry_pc": 2835717307,
"id": "fn:0x95d89b41",
"selector": "0x95d89b41",
"type": "function"
},
{
"entry_pc": 3404319313,
"id": "fn:0xa9059cbb",
"selector": "0xa9059cbb",
"type": "function"
},
{
"entry_pc": 3694166258,
"id": "fn:0xcae9ca51",
"selector": "0xcae9ca51",
"type": "function"
},
{
"entry_pc": 3714247998,
"id": "fn:0xdc3080f2",
"selector": "0xdc3080f2",
"type": "function"
},
{
"entry_pc": 1185,
"id": "fn:0xdd62ed3e",
"selector": "0xdd62ed3e",
"type": "function"
}
],
"version": "capability_graph_v1"
},
"id": 2262,
"updated_at": "2026-04-04T19:55:29.000000Z",
"version": "capability_graph_v1"
},
"detector_findings": [
{
"confidence": 60,
"evidence_json": {
"call_count": 3,
"examples": [
{
"opcode": "CALL",
"pc": 1028,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1096,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1241,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"guards_detected": [],
"untrusted_call_count": 3
},
"normalized_json": {
"sink": "CALL"
},
"severity": "high",
"title": "Untrusted CALL target/value reachable",
"validated": true,
"validation_json": {
"attempts": 1,
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f",
"trace_mode": "callTracer"
}
},
{
"confidence": 55,
"evidence_json": {
"eth_value_calls": 3,
"examples": [
{
"opcode": "CALL",
"pc": 1028,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1096,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1241,
"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",
"0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f",
"trace_mode": "callTracer"
}
}
],
"heuristics_summary": {
"create2_count": 0,
"delegatecall_count": 0,
"flags": [],
"selfdestruct_count": 0
}
}
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const opcodes={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',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',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',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'};
let pc=0; const out=[]; while(pc<hex.length/2){ const b=parseInt(hex.slice(pc*2,pc*2+2),16); const name=opcodes[b]||('OP_'+b.toString(16)); if(b>=0x60&&b<=0x7f){ const n=b-0x5f; const data=hex.slice(pc*2+2, pc*2+2+n*2); out.push({pc,op:name,arg:'0x'+data}); pc+=1+n; } else { out.push({pc,op:name}); pc++; } }
for (const start of [740,756,1000,1020,1060,1080,1170,1220,1380,1500,1680,1840]) {
console.log('\\n-- from',start,'--');
for (const ins of out.filter(x=>x.pc>=start && x.pc<start+80)) console.log(String(ins.pc).padStart(4), ins.op, ins.arg||'');
}
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
-- from 740 --
741 SWAP1
742 SHA3
743 SLOAD
744 DUP2
745 SWAP1
746 LT
747 ISZERO
748 PUSH2 0x073e
751 JUMPI
752 PUSH2 0x0002
755 JUMP
756 JUMPDEST
757 PUSH1 0x40
759 DUP1
760 MLOAD
761 PUSH1 0x20
763 PUSH1 0x44
765 CALLDATALOAD
766 PUSH1 0x04
768 DUP2
769 DUP2
770 ADD
771 CALLDATALOAD
772 PUSH1 0x1f
774 DUP2
775 ADD
776 DUP5
777 SWAP1
778 DIV
779 DUP5
780 MUL
781 DUP6
782 ADD
783 DUP5
784 ADD
785 SWAP1
786 SWAP6
787 MSTORE
788 DUP5
789 DUP5
790 MSTORE
791 PUSH2 0x0511
794 SWAP5
795 DUP2
796 CALLDATALOAD
797 SWAP5
798 PUSH1 0x24
800 DUP1
801 CALLDATALOAD
802 SWAP6
803 SWAP4
804 SWAP5
805 PUSH1 0x64
807 SWAP5
808 SWAP3
809 SWAP4
810 SWAP2
811 ADD
812 SWAP2
813 DUP2
814 SWAP1
815 DUP5
816 ADD
817 DUP4
818 DUP3
819 DUP1
-- from 756 --
756 JUMPDEST
757 PUSH1 0x40
759 DUP1
760 MLOAD
761 PUSH1 0x20
763 PUSH1 0x44
765 CALLDATALOAD
766 PUSH1 0x04
768 DUP2
769 DUP2
770 ADD
771 CALLDATALOAD
772 PUSH1 0x1f
774 DUP2
775 ADD
776 DUP5
777 SWAP1
778 DIV
779 DUP5
780 MUL
781 DUP6
782 ADD
783 DUP5
784 ADD
785 SWAP1
786 SWAP6
787 MSTORE
788 DUP5
789 DUP5
790 MSTORE
791 PUSH2 0x0511
794 SWAP5
795 DUP2
796 CALLDATALOAD
797 SWAP5
798 PUSH1 0x24
800 DUP1
801 CALLDATALOAD
802 SWAP6
803 SWAP4
804 SWAP5
805 PUSH1 0x64
807 SWAP5
808 SWAP3
809 SWAP4
810 SWAP2
811 ADD
812 SWAP2
813 DUP2
814 SWAP1
815 DUP5
816 ADD
817 DUP4
818 DUP3
819 DUP1
820 DUP3
821 DUP5
822 CALLDATACOPY
823 POP
824 SWAP5
825 SWAP7
826 POP
827 POP
828 POP
829 POP
830 POP
831 POP
832 POP
833 PUSH1 0x00
835 PUSH1 0x00
-- from 1000 --
1000 MLOAD
1001 SWAP1
1002 PUSH1 0x20
1004 ADD
1005 SWAP1
1006 DUP1
1007 DUP4
1008 DUP4
1009 DUP3
1010 SWAP1
1011 PUSH1 0x00
1013 PUSH1 0x04
1015 PUSH1 0x20
1017 DUP5
1018 PUSH1 0x1f
1020 ADD
1021 DIV
1022 PUSH1 0x0f
1024 MUL
1025 PUSH1 0x03
1027 ADD
1028 CALL
1029 POP
1030 SWAP1
1031 POP
1032 SWAP1
1033 DUP2
1034 ADD
1035 SWAP1
1036 PUSH1 0x1f
1038 AND
1039 DUP1
1040 ISZERO
1041 PUSH2 0x042e
1044 JUMPI
1045 DUP1
1046 DUP3
1047 SUB
1048 DUP1
1049 MLOAD
1050 PUSH1 0x01
1052 DUP4
1053 PUSH1 0x20
1055 SUB
1056 PUSH2 0x0100
1059 EXP
1060 SUB
1061 NOT
1062 AND
1063 DUP2
1064 MSTORE
1065 PUSH1 0x20
1067 ADD
1068 SWAP2
1069 POP
1070 JUMPDEST
1071 POP
1072 SWAP6
1073 POP
1074 POP
1075 POP
1076 POP
1077 POP
1078 POP
1079 PUSH1 0x00
-- from 1020 --
1020 ADD
1021 DIV
1022 PUSH1 0x0f
1024 MUL
1025 PUSH1 0x03
1027 ADD
1028 CALL
1029 POP
1030 SWAP1
1031 POP
1032 SWAP1
1033 DUP2
1034 ADD
1035 SWAP1
1036 PUSH1 0x1f
1038 AND
1039 DUP1
1040 ISZERO
1041 PUSH2 0x042e
1044 JUMPI
1045 DUP1
1046 DUP3
1047 SUB
1048 DUP1
1049 MLOAD
1050 PUSH1 0x01
1052 DUP4
1053 PUSH1 0x20
1055 SUB
1056 PUSH2 0x0100
1059 EXP
1060 SUB
1061 NOT
1062 AND
1063 DUP2
1064 MSTORE
1065 PUSH1 0x20
1067 ADD
1068 SWAP2
1069 POP
1070 JUMPDEST
1071 POP
1072 SWAP6
1073 POP
1074 POP
1075 POP
1076 POP
1077 POP
1078 POP
1079 PUSH1 0x00
1081 PUSH1 0x40
1083 MLOAD
1084 DUP1
1085 DUP4
1086 SUB
1087 DUP2
1088 PUSH1 0x00
1090 DUP8
1091 PUSH2 0x61da
1094 GAS
1095 SUB
1096 CALL
1097 ISZERO
1098 PUSH2 0x0002
-- from 1060 --
1060 SUB
1061 NOT
1062 AND
1063 DUP2
1064 MSTORE
1065 PUSH1 0x20
1067 ADD
1068 SWAP2
1069 POP
1070 JUMPDEST
1071 POP
1072 SWAP6
1073 POP
1074 POP
1075 POP
1076 POP
1077 POP
1078 POP
1079 PUSH1 0x00
1081 PUSH1 0x40
1083 MLOAD
1084 DUP1
1085 DUP4
1086 SUB
1087 DUP2
1088 PUSH1 0x00
1090 DUP8
1091 PUSH2 0x61da
1094 GAS
1095 SUB
1096 CALL
1097 ISZERO
1098 PUSH2 0x0002
1101 JUMPI
1102 POP
1103 POP
1104 POP
1105 POP
1106 SWAP4
1107 SWAP3
1108 POP
1109 POP
1110 POP
1111 JUMP
1112 JUMPDEST
1113 PUSH1 0x05
1115 PUSH1 0x20
1117 SWAP1
1118 DUP2
1119 MSTORE
1120 PUSH1 0x04
1122 CALLDATALOAD
1123 PUSH1 0x00
1125 SWAP1
1126 DUP2
1127 MSTORE
1128 PUSH1 0x40
1130 DUP1
1131 DUP3
1132 SHA3
1133 SWAP1
1134 SWAP3
1135 MSTORE
1136 PUSH1 0x24
1138 CALLDATALOAD
1139 DUP2
-- from 1080 --
1081 PUSH1 0x40
1083 MLOAD
1084 DUP1
1085 DUP4
1086 SUB
1087 DUP2
1088 PUSH1 0x00
1090 DUP8
1091 PUSH2 0x61da
1094 GAS
1095 SUB
1096 CALL
1097 ISZERO
1098 PUSH2 0x0002
1101 JUMPI
1102 POP
1103 POP
1104 POP
1105 POP
1106 SWAP4
1107 SWAP3
1108 POP
1109 POP
1110 POP
1111 JUMP
1112 JUMPDEST
1113 PUSH1 0x05
1115 PUSH1 0x20
1117 SWAP1
1118 DUP2
1119 MSTORE
1120 PUSH1 0x04
1122 CALLDATALOAD
1123 PUSH1 0x00
1125 SWAP1
1126 DUP2
1127 MSTORE
1128 PUSH1 0x40
1130 DUP1
1131 DUP3
1132 SHA3
1133 SWAP1
1134 SWAP3
1135 MSTORE
1136 PUSH1 0x24
1138 CALLDATALOAD
1139 DUP2
1140 MSTORE
1141 SHA3
1142 SLOAD
1143 PUSH2 0x0511
1146 SWAP1
1147 DUP2
1148 JUMP
1149 JUMPDEST
1150 PUSH1 0x04
1152 PUSH1 0x20
1154 DUP2
1155 DUP2
1156 MSTORE
1157 SWAP1
1158 CALLDATALOAD
1159 PUSH1 0x00
-- from 1170 --
1170 SWAP3
1171 MSTORE
1172 PUSH1 0x24
1174 CALLDATALOAD
1175 DUP2
1176 MSTORE
1177 SHA3
1178 SLOAD
1179 PUSH2 0x0511
1182 SWAP1
1183 DUP2
1184 JUMP
1185 JUMPDEST
1186 STOP
1187 JUMPDEST
1188 PUSH1 0x40
1190 MLOAD
1191 DUP1
1192 DUP1
1193 PUSH1 0x20
1195 ADD
1196 DUP3
1197 DUP2
1198 SUB
1199 DUP3
1200 MSTORE
1201 DUP4
1202 DUP2
1203 DUP2
1204 MLOAD
1205 DUP2
1206 MSTORE
1207 PUSH1 0x20
1209 ADD
1210 SWAP2
1211 POP
1212 DUP1
1213 MLOAD
1214 SWAP1
1215 PUSH1 0x20
1217 ADD
1218 SWAP1
1219 DUP1
1220 DUP4
1221 DUP4
1222 DUP3
1223 SWAP1
1224 PUSH1 0x00
1226 PUSH1 0x04
1228 PUSH1 0x20
1230 DUP5
1231 PUSH1 0x1f
1233 ADD
1234 DIV
1235 PUSH1 0x0f
1237 MUL
1238 PUSH1 0x03
1240 ADD
1241 CALL
1242 POP
1243 SWAP1
1244 POP
1245 SWAP1
1246 DUP2
1247 ADD
1248 SWAP1
1249 PUSH1 0x1f
-- from 1220 --
1220 DUP4
1221 DUP4
1222 DUP3
1223 SWAP1
1224 PUSH1 0x00
1226 PUSH1 0x04
1228 PUSH1 0x20
1230 DUP5
1231 PUSH1 0x1f
1233 ADD
1234 DIV
1235 PUSH1 0x0f
1237 MUL
1238 PUSH1 0x03
1240 ADD
1241 CALL
1242 POP
1243 SWAP1
1244 POP
1245 SWAP1
1246 DUP2
1247 ADD
1248 SWAP1
1249 PUSH1 0x1f
1251 AND
1252 DUP1
1253 ISZERO
1254 PUSH2 0x0503
1257 JUMPI
1258 DUP1
1259 DUP3
1260 SUB
1261 DUP1
1262 MLOAD
1263 PUSH1 0x01
1265 DUP4
1266 PUSH1 0x20
1268 SUB
1269 PUSH2 0x0100
1272 EXP
1273 SUB
1274 NOT
1275 AND
1276 DUP2
1277 MSTORE
1278 PUSH1 0x20
1280 ADD
1281 SWAP2
1282 POP
1283 JUMPDEST
1284 POP
1285 SWAP3
1286 POP
1287 POP
1288 POP
1289 PUSH1 0x40
1291 MLOAD
1292 DUP1
1293 SWAP2
1294 SUB
1295 SWAP1
1296 RETURN
1297 JUMPDEST
1298 PUSH1 0x40
-- from 1380 --
1380 SWAP2
1381 JUMPDEST
1382 POP
1383 POP
1384 POP
1385 POP
1386 POP
1387 DUP2
1388 JUMP
1389 JUMPDEST
1390 PUSH1 0x01
1392 PUSH1 0xa0
1394 PUSH1 0x02
1396 EXP
1397 SUB
1398 DUP4
1399 AND
1400 PUSH1 0x00
1402 SWAP1
1403 DUP2
1404 MSTORE
1405 PUSH1 0x03
1407 PUSH1 0x20
1409 MSTORE
1410 PUSH1 0x40
1412 SWAP1
1413 SHA3
1414 SLOAD
1415 DUP3
1416 DUP2
1417 ADD
1418 LT
1419 ISZERO
1420 PUSH2 0x0594
1423 JUMPI
1424 PUSH2 0x0002
1427 JUMP
1428 JUMPDEST
1429 PUSH1 0x01
1431 PUSH1 0xa0
1433 PUSH1 0x02
1435 EXP
1436 SUB
1437 DUP5
1438 DUP2
1439 AND
1440 PUSH1 0x00
1442 DUP2
1443 DUP2
1444 MSTORE
1445 PUSH1 0x04
1447 PUSH1 0x20
1449 SWAP1
1450 DUP2
1451 MSTORE
1452 PUSH1 0x40
1454 DUP1
1455 DUP4
1456 SHA3
1457 CALLER
1458 SWAP6
1459 SWAP1
-- from 1500 --
1500 JUMPI
1501 PUSH2 0x0002
1504 JUMP
1505 JUMPDEST
1506 PUSH1 0x01
1508 PUSH1 0xa0
1510 PUSH1 0x02
1512 EXP
1513 SUB
1514 DUP5
1515 DUP2
1516 AND
1517 PUSH1 0x00
1519 DUP2
1520 DUP2
1521 MSTORE
1522 PUSH1 0x03
1524 PUSH1 0x20
1526 SWAP1
1527 DUP2
1528 MSTORE
1529 PUSH1 0x40
1531 DUP1
1532 DUP4
1533 SHA3
1534 DUP1
1535 SLOAD
1536 DUP9
1537 SWAP1
1538 SUB
1539 SWAP1
1540 SSTORE
1541 DUP8
1542 DUP6
1543 AND
1544 DUP1
1545 DUP5
1546 MSTORE
1547 DUP2
1548 DUP5
1549 SHA3
1550 DUP1
1551 SLOAD
1552 DUP10
1553 ADD
1554 SWAP1
1555 SSTORE
1556 SWAP4
1557 DUP4
1558 MSTORE
1559 PUSH1 0x05
1561 DUP3
1562 MSTORE
1563 DUP1
1564 DUP4
1565 SHA3
1566 CALLER
1567 SWAP6
1568 SWAP1
1569 SWAP6
1570 AND
1571 DUP1
1572 DUP5
1573 MSTORE
1574 SWAP5
1575 DUP3
1576 MSTORE
1577 SWAP2
1578 DUP3
1579 SWAP1
-- from 1680 --
1680 PUSH1 0x20
1682 ADD
1683 SWAP2
1684 SWAP1
1685 PUSH1 0x01
1687 ADD
1688 SWAP1
1689 PUSH2 0x067f
1692 JUMP
1693 JUMPDEST
1694 POP
1695 POP
1696 DUP1
1697 PUSH1 0x01
1699 PUSH1 0x00
1701 POP
1702 SWAP1
1703 DUP1
1704 MLOAD
1705 SWAP1
1706 PUSH1 0x20
1708 ADD
1709 SWAP1
1710 DUP3
1711 DUP1
1712 SLOAD
1713 PUSH1 0x01
1715 DUP2
1716 PUSH1 0x01
1718 AND
1719 ISZERO
1720 PUSH2 0x0100
1723 MUL
1724 SUB
1725 AND
1726 PUSH1 0x02
1728 SWAP1
1729 DIV
1730 SWAP1
1731 PUSH1 0x00
1733 MSTORE
1734 PUSH1 0x20
1736 PUSH1 0x00
1738 SHA3
1739 SWAP1
1740 PUSH1 0x1f
1742 ADD
1743 PUSH1 0x20
1745 SWAP1
1746 DIV
1747 DUP2
1748 ADD
1749 SWAP3
1750 DUP3
1751 PUSH1 0x1f
1753 LT
1754 PUSH2 0x06fa
1757 JUMPI
1758 DUP1
1759 MLOAD
-- from 1840 --
1840 SLOAD
1841 PUSH1 0xff
1843 NOT
1844 AND
1845 DUP4
1846 OR
1847 SWAP1
1848 SSTORE
1849 POP
1850 POP
1851 POP
1852 POP
1853 JUMP
1854 JUMPDEST
1855 PUSH1 0x01
1857 PUSH1 0xa0
1859 PUSH1 0x02
1861 EXP
1862 SUB
1863 DUP3
1864 AND
1865 PUSH1 0x00
1867 SWAP1
1868 DUP2
1869 MSTORE
1870 PUSH1 0x03
1872 PUSH1 0x20
1874 MSTORE
1875 PUSH1 0x40
1877 SWAP1
1878 SHA3
1879 SLOAD
1880 DUP2
1881 DUP2
1882 ADD
1883 LT
1884 ISZERO
1885 PUSH2 0x0765
1888 JUMPI
1889 PUSH2 0x0002
1892 JUMP
1893 JUMPDEST
1894 PUSH1 0x01
1896 PUSH1 0xa0
1898 PUSH1 0x02
1900 EXP
1901 SUB
1902 CALLER
1903 DUP2
1904 AND
1905 PUSH1 0x00
1907 DUP2
1908 DUP2
1909 MSTORE
1910 PUSH1 0x03
1912 PUSH1 0x20
1914 SWAP1
1915 DUP2
1916 MSTORE
1917 PUSH1 0x40
1919 DUP1
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);['SHA3'].forEach((n,i)=>ops[0x20+i]=n);['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0, out=[]; while(pc<hex.length/2){ const b=parseInt(hex.slice(pc*2,pc*2+2),16); const name=ops[b]||('OP_'+b.toString(16)); if(b>=0x60&&b<=0x7f){ const n=b-0x5f; out.push({pc,op:name,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)}); pc+=1+n; } else { out.push({pc,op:name}); pc++; }}
for (const start of [1890]) {
console.log('\\n-- from',start,'--');
for (const ins of out.filter(x=>x.pc>=start && x.pc<2005)) console.log(String(ins.pc).padStart(4), ins.op, ins.arg||'');
}
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
-- from 1890 --
1892 JUMP
1893 JUMPDEST
1894 PUSH1 0x01
1896 PUSH1 0xa0
1898 PUSH1 0x02
1900 EXP
1901 SUB
1902 CALLER
1903 DUP2
1904 AND
1905 PUSH1 0x00
1907 DUP2
1908 DUP2
1909 MSTORE
1910 PUSH1 0x03
1912 PUSH1 0x20
1914 SWAP1
1915 DUP2
1916 MSTORE
1917 PUSH1 0x40
1919 DUP1
1920 DUP4
1921 SHA3
1922 DUP1
1923 SLOAD
1924 DUP8
1925 SWAP1
1926 SUB
1927 SWAP1
1928 SSTORE
1929 SWAP4
1930 DUP7
1931 AND
1932 DUP1
1933 DUP4
1934 MSTORE
1935 SWAP2
1936 DUP5
1937 SWAP1
1938 SHA3
1939 DUP1
1940 SLOAD
1941 DUP7
1942 ADD
1943 SWAP1
1944 SSTORE
1945 DUP4
1946 MLOAD
1947 DUP6
1948 DUP2
1949 MSTORE
1950 SWAP4
1951 MLOAD
1952 SWAP2
1953 SWAP4
1954 PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1987 SWAP3
1988 SWAP1
1989 DUP2
1990 SWAP1
1991 SUB
1992 SWAP1
1993 SWAP2
1994 ADD
1995 SWAP1
1996 LOG3
1997 POP
1998 POP
1999 JUMP
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
for(const ins of out.filter(x=>x.pc<140)) console.log(String(ins.pc).padStart(4),ins.op,ins.arg||'');
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
0 PUSH1 0x60
2 PUSH1 0x40
4 MSTORE
5 CALLDATASIZE
6 ISZERO
7 PUSH2 0x0082
10 JUMPI
11 PUSH1 0xe0
13 PUSH1 0x02
15 EXP
16 PUSH1 0x00
18 CALLDATALOAD
19 DIV
20 PUSH4 0x06fdde03
25 DUP2
26 EQ
27 PUSH2 0x008a
30 JUMPI
31 DUP1
32 PUSH4 0x1d2bca17
37 EQ
38 PUSH2 0x00e8
41 JUMPI
42 DUP1
43 PUSH4 0x23b872dd
48 EQ
49 PUSH2 0x0212
52 JUMPI
53 DUP1
54 PUSH4 0x313ce567
59 EQ
60 PUSH2 0x0244
63 JUMPI
64 DUP1
65 PUSH4 0x70a08231
70 EQ
71 PUSH2 0x0250
74 JUMPI
75 DUP1
76 PUSH4 0x95d89b41
81 EQ
82 PUSH2 0x0268
85 JUMPI
86 DUP1
87 PUSH4 0xa9059cbb
92 EQ
93 PUSH2 0x02c5
96 JUMPI
97 DUP1
98 PUSH4 0xcae9ca51
103 EQ
104 PUSH2 0x02f4
107 JUMPI
108 DUP1
109 PUSH4 0xdc3080f2
114 EQ
115 PUSH2 0x0458
118 JUMPI
119 DUP1
120 PUSH4 0xdd62ed3e
125 EQ
126 PUSH2 0x047d
129 JUMPI
130 JUMPDEST
131 PUSH2 0x04a1
134 PUSH2 0x0002
137 JUMP
138 JUMPDEST
139 PUSH2 0x04a3
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
for(const start of [138,232,530,580,592,616,709,756,1112,1149]){console.log('\\n-- from',start,'--'); for(const ins of out.filter(x=>x.pc>=start && x.pc<start+80)) console.log(String(ins.pc).padStart(4),ins.op,ins.arg||'');}
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
-- from 138 --
138 JUMPDEST
139 PUSH2 0x04a3
142 PUSH1 0x00
144 DUP1
145 SLOAD
146 PUSH1 0x40
148 DUP1
149 MLOAD
150 PUSH1 0x20
152 PUSH1 0x02
154 PUSH1 0x01
156 DUP6
157 AND
158 ISZERO
159 PUSH2 0x0100
162 MUL
163 PUSH1 0x00
165 NOT
166 ADD
167 SWAP1
168 SWAP5
169 AND
170 SWAP4
171 SWAP1
172 SWAP4
173 DIV
174 PUSH1 0x1f
176 DUP2
177 ADD
178 DUP5
179 SWAP1
180 DIV
181 DUP5
182 MUL
183 DUP3
184 ADD
185 DUP5
186 ADD
187 SWAP1
188 SWAP3
189 MSTORE
190 DUP2
191 DUP2
192 MSTORE
193 SWAP3
194 SWAP2
195 DUP4
196 ADD
197 DUP3
198 DUP3
199 DUP1
200 ISZERO
201 PUSH2 0x0565
204 JUMPI
205 DUP1
206 PUSH1 0x1f
208 LT
209 PUSH2 0x053a
212 JUMPI
213 PUSH2 0x0100
216 DUP1
217 DUP4
-- from 232 --
232 JUMPDEST
233 PUSH1 0x40
235 DUP1
236 MLOAD
237 PUSH1 0x20
239 PUSH1 0x24
241 DUP1
242 CALLDATALOAD
243 PUSH1 0x04
245 DUP2
246 DUP2
247 ADD
248 CALLDATALOAD
249 PUSH1 0x1f
251 DUP2
252 ADD
253 DUP6
254 SWAP1
255 DIV
256 DUP6
257 MUL
258 DUP7
259 ADD
260 DUP6
261 ADD
262 SWAP1
263 SWAP7
264 MSTORE
265 DUP6
266 DUP6
267 MSTORE
268 PUSH2 0x04a1
271 SWAP6
272 DUP2
273 CALLDATALOAD
274 SWAP6
275 SWAP2
276 SWAP5
277 PUSH1 0x44
279 SWAP5
280 SWAP3
281 SWAP4
282 SWAP1
283 SWAP3
284 ADD
285 SWAP2
286 DUP2
287 SWAP1
288 DUP5
289 ADD
290 DUP4
291 DUP3
292 DUP1
293 DUP3
294 DUP5
295 CALLDATACOPY
296 POP
297 POP
298 PUSH1 0x40
300 DUP1
301 MLOAD
302 PUSH1 0x20
304 PUSH1 0x64
306 CALLDATALOAD
307 DUP1
308 DUP12
309 ADD
310 CALLDATALOAD
311 PUSH1 0x1f
-- from 530 --
530 JUMPDEST
531 PUSH2 0x0511
534 PUSH1 0x04
536 CALLDATALOAD
537 PUSH1 0x24
539 CALLDATALOAD
540 PUSH1 0x44
542 CALLDATALOAD
543 PUSH1 0x01
545 PUSH1 0xa0
547 PUSH1 0x02
549 EXP
550 SUB
551 DUP4
552 AND
553 PUSH1 0x00
555 SWAP1
556 DUP2
557 MSTORE
558 PUSH1 0x03
560 PUSH1 0x20
562 MSTORE
563 PUSH1 0x40
565 DUP2
566 SHA3
567 SLOAD
568 DUP3
569 SWAP1
570 LT
571 ISZERO
572 PUSH2 0x056d
575 JUMPI
576 PUSH2 0x0002
579 JUMP
580 JUMPDEST
581 PUSH2 0x0523
584 PUSH1 0x02
586 SLOAD
587 PUSH1 0xff
589 AND
590 DUP2
591 JUMP
592 JUMPDEST
593 PUSH2 0x0511
596 PUSH1 0x04
598 CALLDATALOAD
599 PUSH1 0x03
601 PUSH1 0x20
603 MSTORE
604 PUSH1 0x00
606 SWAP1
607 DUP2
608 MSTORE
609 PUSH1 0x40
-- from 580 --
580 JUMPDEST
581 PUSH2 0x0523
584 PUSH1 0x02
586 SLOAD
587 PUSH1 0xff
589 AND
590 DUP2
591 JUMP
592 JUMPDEST
593 PUSH2 0x0511
596 PUSH1 0x04
598 CALLDATALOAD
599 PUSH1 0x03
601 PUSH1 0x20
603 MSTORE
604 PUSH1 0x00
606 SWAP1
607 DUP2
608 MSTORE
609 PUSH1 0x40
611 SWAP1
612 SHA3
613 SLOAD
614 DUP2
615 JUMP
616 JUMPDEST
617 PUSH2 0x04a3
620 PUSH1 0x01
622 DUP1
623 SLOAD
624 PUSH1 0x40
626 DUP1
627 MLOAD
628 PUSH1 0x20
630 PUSH1 0x02
632 DUP5
633 DUP7
634 AND
635 ISZERO
636 PUSH2 0x0100
639 MUL
640 PUSH1 0x00
642 NOT
643 ADD
644 SWAP1
645 SWAP5
646 AND
647 SWAP4
648 SWAP1
649 SWAP4
650 DIV
651 PUSH1 0x1f
653 DUP2
654 ADD
655 DUP5
656 SWAP1
657 DIV
658 DUP5
659 MUL
-- from 592 --
592 JUMPDEST
593 PUSH2 0x0511
596 PUSH1 0x04
598 CALLDATALOAD
599 PUSH1 0x03
601 PUSH1 0x20
603 MSTORE
604 PUSH1 0x00
606 SWAP1
607 DUP2
608 MSTORE
609 PUSH1 0x40
611 SWAP1
612 SHA3
613 SLOAD
614 DUP2
615 JUMP
616 JUMPDEST
617 PUSH2 0x04a3
620 PUSH1 0x01
622 DUP1
623 SLOAD
624 PUSH1 0x40
626 DUP1
627 MLOAD
628 PUSH1 0x20
630 PUSH1 0x02
632 DUP5
633 DUP7
634 AND
635 ISZERO
636 PUSH2 0x0100
639 MUL
640 PUSH1 0x00
642 NOT
643 ADD
644 SWAP1
645 SWAP5
646 AND
647 SWAP4
648 SWAP1
649 SWAP4
650 DIV
651 PUSH1 0x1f
653 DUP2
654 ADD
655 DUP5
656 SWAP1
657 DIV
658 DUP5
659 MUL
660 DUP3
661 ADD
662 DUP5
663 ADD
664 SWAP1
665 SWAP3
666 MSTORE
667 DUP2
668 DUP2
669 MSTORE
670 SWAP3
671 SWAP2
-- from 616 --
616 JUMPDEST
617 PUSH2 0x04a3
620 PUSH1 0x01
622 DUP1
623 SLOAD
624 PUSH1 0x40
626 DUP1
627 MLOAD
628 PUSH1 0x20
630 PUSH1 0x02
632 DUP5
633 DUP7
634 AND
635 ISZERO
636 PUSH2 0x0100
639 MUL
640 PUSH1 0x00
642 NOT
643 ADD
644 SWAP1
645 SWAP5
646 AND
647 SWAP4
648 SWAP1
649 SWAP4
650 DIV
651 PUSH1 0x1f
653 DUP2
654 ADD
655 DUP5
656 SWAP1
657 DIV
658 DUP5
659 MUL
660 DUP3
661 ADD
662 DUP5
663 ADD
664 SWAP1
665 SWAP3
666 MSTORE
667 DUP2
668 DUP2
669 MSTORE
670 SWAP3
671 SWAP2
672 DUP4
673 ADD
674 DUP3
675 DUP3
676 DUP1
677 ISZERO
678 PUSH2 0x0565
681 JUMPI
682 DUP1
683 PUSH1 0x1f
685 LT
686 PUSH2 0x053a
689 JUMPI
690 PUSH2 0x0100
693 DUP1
694 DUP4
695 SLOAD
-- from 709 --
709 JUMPDEST
710 PUSH2 0x04a1
713 PUSH1 0x04
715 CALLDATALOAD
716 PUSH1 0x24
718 CALLDATALOAD
719 PUSH1 0x01
721 PUSH1 0xa0
723 PUSH1 0x02
725 EXP
726 SUB
727 CALLER
728 AND
729 PUSH1 0x00
731 SWAP1
732 DUP2
733 MSTORE
734 PUSH1 0x03
736 PUSH1 0x20
738 MSTORE
739 PUSH1 0x40
741 SWAP1
742 SHA3
743 SLOAD
744 DUP2
745 SWAP1
746 LT
747 ISZERO
748 PUSH2 0x073e
751 JUMPI
752 PUSH2 0x0002
755 JUMP
756 JUMPDEST
757 PUSH1 0x40
759 DUP1
760 MLOAD
761 PUSH1 0x20
763 PUSH1 0x44
765 CALLDATALOAD
766 PUSH1 0x04
768 DUP2
769 DUP2
770 ADD
771 CALLDATALOAD
772 PUSH1 0x1f
774 DUP2
775 ADD
776 DUP5
777 SWAP1
778 DIV
779 DUP5
780 MUL
781 DUP6
782 ADD
783 DUP5
784 ADD
785 SWAP1
786 SWAP6
787 MSTORE
788 DUP5
-- from 756 --
756 JUMPDEST
757 PUSH1 0x40
759 DUP1
760 MLOAD
761 PUSH1 0x20
763 PUSH1 0x44
765 CALLDATALOAD
766 PUSH1 0x04
768 DUP2
769 DUP2
770 ADD
771 CALLDATALOAD
772 PUSH1 0x1f
774 DUP2
775 ADD
776 DUP5
777 SWAP1
778 DIV
779 DUP5
780 MUL
781 DUP6
782 ADD
783 DUP5
784 ADD
785 SWAP1
786 SWAP6
787 MSTORE
788 DUP5
789 DUP5
790 MSTORE
791 PUSH2 0x0511
794 SWAP5
795 DUP2
796 CALLDATALOAD
797 SWAP5
798 PUSH1 0x24
800 DUP1
801 CALLDATALOAD
802 SWAP6
803 SWAP4
804 SWAP5
805 PUSH1 0x64
807 SWAP5
808 SWAP3
809 SWAP4
810 SWAP2
811 ADD
812 SWAP2
813 DUP2
814 SWAP1
815 DUP5
816 ADD
817 DUP4
818 DUP3
819 DUP1
820 DUP3
821 DUP5
822 CALLDATACOPY
823 POP
824 SWAP5
825 SWAP7
826 POP
827 POP
828 POP
829 POP
830 POP
831 POP
832 POP
833 PUSH1 0x00
835 PUSH1 0x00
-- from 1112 --
1112 JUMPDEST
1113 PUSH1 0x05
1115 PUSH1 0x20
1117 SWAP1
1118 DUP2
1119 MSTORE
1120 PUSH1 0x04
1122 CALLDATALOAD
1123 PUSH1 0x00
1125 SWAP1
1126 DUP2
1127 MSTORE
1128 PUSH1 0x40
1130 DUP1
1131 DUP3
1132 SHA3
1133 SWAP1
1134 SWAP3
1135 MSTORE
1136 PUSH1 0x24
1138 CALLDATALOAD
1139 DUP2
1140 MSTORE
1141 SHA3
1142 SLOAD
1143 PUSH2 0x0511
1146 SWAP1
1147 DUP2
1148 JUMP
1149 JUMPDEST
1150 PUSH1 0x04
1152 PUSH1 0x20
1154 DUP2
1155 DUP2
1156 MSTORE
1157 SWAP1
1158 CALLDATALOAD
1159 PUSH1 0x00
1161 SWAP1
1162 DUP2
1163 MSTORE
1164 PUSH1 0x40
1166 DUP1
1167 DUP3
1168 SHA3
1169 SWAP1
1170 SWAP3
1171 MSTORE
1172 PUSH1 0x24
1174 CALLDATALOAD
1175 DUP2
1176 MSTORE
1177 SHA3
1178 SLOAD
1179 PUSH2 0x0511
1182 SWAP1
1183 DUP2
1184 JUMP
1185 JUMPDEST
1186 STOP
1187 JUMPDEST
1188 PUSH1 0x40
1190 MLOAD
1191 DUP1
-- from 1149 --
1149 JUMPDEST
1150 PUSH1 0x04
1152 PUSH1 0x20
1154 DUP2
1155 DUP2
1156 MSTORE
1157 SWAP1
1158 CALLDATALOAD
1159 PUSH1 0x00
1161 SWAP1
1162 DUP2
1163 MSTORE
1164 PUSH1 0x40
1166 DUP1
1167 DUP3
1168 SHA3
1169 SWAP1
1170 SWAP3
1171 MSTORE
1172 PUSH1 0x24
1174 CALLDATALOAD
1175 DUP2
1176 MSTORE
1177 SHA3
1178 SLOAD
1179 PUSH2 0x0511
1182 SWAP1
1183 DUP2
1184 JUMP
1185 JUMPDEST
1186 STOP
1187 JUMPDEST
1188 PUSH1 0x40
1190 MLOAD
1191 DUP1
1192 DUP1
1193 PUSH1 0x20
1195 ADD
1196 DUP3
1197 DUP2
1198 SUB
1199 DUP3
1200 MSTORE
1201 DUP4
1202 DUP2
1203 DUP2
1204 MLOAD
1205 DUP2
1206 MSTORE
1207 PUSH1 0x20
1209 ADD
1210 SWAP2
1211 POP
1212 DUP1
1213 MLOAD
1214 SWAP1
1215 PUSH1 0x20
1217 ADD
1218 SWAP1
1219 DUP1
1220 DUP4
1221 DUP4
1222 DUP3
1223 SWAP1
1224 PUSH1 0x00
1226 PUSH1 0x04
1228 PUSH1 0x20
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
for(const ins of out.filter(x=>x.pc>=1428 && x.pc<1506)) console.log(String(ins.pc).padStart(4),ins.op,ins.arg||'');
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
1428 JUMPDEST
1429 PUSH1 0x01
1431 PUSH1 0xa0
1433 PUSH1 0x02
1435 EXP
1436 SUB
1437 DUP5
1438 DUP2
1439 AND
1440 PUSH1 0x00
1442 DUP2
1443 DUP2
1444 MSTORE
1445 PUSH1 0x04
1447 PUSH1 0x20
1449 SWAP1
1450 DUP2
1451 MSTORE
1452 PUSH1 0x40
1454 DUP1
1455 DUP4
1456 SHA3
1457 CALLER
1458 SWAP6
1459 SWAP1
1460 SWAP6
1461 AND
1462 DUP1
1463 DUP5
1464 MSTORE
1465 SWAP5
1466 DUP3
1467 MSTORE
1468 DUP1
1469 DUP4
1470 SHA3
1471 SLOAD
1472 SWAP4
1473 DUP4
1474 MSTORE
1475 PUSH1 0x05
1477 DUP3
1478 MSTORE
1479 DUP1
1480 DUP4
1481 SHA3
1482 SWAP5
1483 DUP4
1484 MSTORE
1485 SWAP4
1486 SWAP1
1487 MSTORE
1488 SWAP2
1489 SWAP1
1490 SWAP2
1491 SHA3
1492 SLOAD
1493 DUP4
1494 ADD
1495 GT
1496 ISZERO
1497 PUSH2 0x05e1
1500 JUMPI
1501 PUSH2 0x0002
1504 JUMP
1505 JUMPDEST
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
for(const ins of out.filter(x=>x.pc>=232 && x.pc<530)) console.log(String(ins.pc).padStart(4),ins.op,ins.arg||'');
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
232 JUMPDEST
233 PUSH1 0x40
235 DUP1
236 MLOAD
237 PUSH1 0x20
239 PUSH1 0x24
241 DUP1
242 CALLDATALOAD
243 PUSH1 0x04
245 DUP2
246 DUP2
247 ADD
248 CALLDATALOAD
249 PUSH1 0x1f
251 DUP2
252 ADD
253 DUP6
254 SWAP1
255 DIV
256 DUP6
257 MUL
258 DUP7
259 ADD
260 DUP6
261 ADD
262 SWAP1
263 SWAP7
264 MSTORE
265 DUP6
266 DUP6
267 MSTORE
268 PUSH2 0x04a1
271 SWAP6
272 DUP2
273 CALLDATALOAD
274 SWAP6
275 SWAP2
276 SWAP5
277 PUSH1 0x44
279 SWAP5
280 SWAP3
281 SWAP4
282 SWAP1
283 SWAP3
284 ADD
285 SWAP2
286 DUP2
287 SWAP1
288 DUP5
289 ADD
290 DUP4
291 DUP3
292 DUP1
293 DUP3
294 DUP5
295 CALLDATACOPY
296 POP
297 POP
298 PUSH1 0x40
300 DUP1
301 MLOAD
302 PUSH1 0x20
304 PUSH1 0x64
306 CALLDATALOAD
307 DUP1
308 DUP12
309 ADD
310 CALLDATALOAD
311 PUSH1 0x1f
313 DUP2
314 ADD
315 DUP4
316 SWAP1
317 DIV
318 DUP4
319 MUL
320 DUP5
321 ADD
322 DUP4
323 ADD
324 SWAP1
325 SWAP5
326 MSTORE
327 DUP4
328 DUP4
329 MSTORE
330 SWAP8
331 SWAP10
332 SWAP9
333 CALLDATALOAD
334 SWAP9
335 SWAP8
336 PUSH1 0x84
338 SWAP8
339 POP
340 SWAP2
341 SWAP6
342 POP
343 PUSH1 0x24
345 SWAP2
346 SWAP1
347 SWAP2
348 ADD
349 SWAP4
350 POP
351 SWAP1
352 SWAP2
353 POP
354 DUP2
355 SWAP1
356 DUP5
357 ADD
358 DUP4
359 DUP3
360 DUP1
361 DUP3
362 DUP5
363 CALLDATACOPY
364 POP
365 SWAP5
366 SWAP7
367 POP
368 POP
369 POP
370 POP
371 POP
372 POP
373 POP
374 PUSH1 0x01
376 PUSH1 0xa0
378 PUSH1 0x02
380 EXP
381 SUB
382 CALLER
383 AND
384 PUSH1 0x00
386 SWAP1
387 DUP2
388 MSTORE
389 PUSH1 0x03
391 PUSH1 0x20
393 SWAP1
394 DUP2
395 MSTORE
396 PUSH1 0x40
398 DUP3
399 SHA3
400 DUP7
401 SWAP1
402 SSTORE
403 DUP2
404 SLOAD
405 DUP6
406 MLOAD
407 DUP4
408 DUP1
409 MSTORE
410 PUSH1 0x02
412 PUSH1 0x01
414 DUP4
415 AND
416 ISZERO
417 PUSH2 0x0100
420 MUL
421 PUSH1 0x00
423 NOT
424 ADD
425 SWAP1
426 SWAP3
427 AND
428 SWAP2
429 SWAP1
430 SWAP2
431 DIV
432 PUSH1 0x1f
434 SWAP1
435 DUP2
436 ADD
437 DUP4
438 SWAP1
439 DIV
440 PUSH32 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563
473 SWAP1
474 DUP2
475 ADD
476 SWAP4
477 SWAP1
478 SWAP2
479 SWAP1
480 DUP9
481 ADD
482 SWAP1
483 DUP4
484 SWAP1
485 LT
486 PUSH2 0x066d
489 JUMPI
490 DUP1
491 MLOAD
492 PUSH1 0xff
494 NOT
495 AND
496 DUP4
497 DUP1
498 ADD
499 OR
500 DUP6
501 SSTORE
502 JUMPDEST
503 POP
504 PUSH2 0x069d
507 SWAP3
508 SWAP2
509 POP
510 JUMPDEST
511 DUP1
512 DUP3
513 GT
514 ISZERO
515 PUSH2 0x06f6
518 JUMPI
519 PUSH1 0x00
521 DUP2
522 SSTORE
523 PUSH1 0x01
525 ADD
526 PUSH2 0x01fe
529 JUMP
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
for(const ins of out.filter(x=>x.pc>=833 && x.pc<1112)) console.log(String(ins.pc).padStart(4),ins.op,ins.arg||'');
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
833 PUSH1 0x00
835 PUSH1 0x00
837 DUP4
838 PUSH1 0x04
840 PUSH1 0x00
842 POP
843 PUSH1 0x00
845 CALLER
846 PUSH1 0x01
848 PUSH1 0xa0
850 PUSH1 0x02
852 EXP
853 SUB
854 AND
855 DUP2
856 MSTORE
857 PUSH1 0x20
859 ADD
860 SWAP1
861 DUP2
862 MSTORE
863 PUSH1 0x20
865 ADD
866 PUSH1 0x00
868 SHA3
869 PUSH1 0x00
871 POP
872 PUSH1 0x00
874 DUP8
875 PUSH1 0x01
877 PUSH1 0xa0
879 PUSH1 0x02
881 EXP
882 SUB
883 AND
884 DUP2
885 MSTORE
886 PUSH1 0x20
888 ADD
889 SWAP1
890 DUP2
891 MSTORE
892 PUSH1 0x20
894 ADD
895 PUSH1 0x00
897 SHA3
898 PUSH1 0x00
900 POP
901 DUP2
902 SWAP1
903 SSTORE
904 POP
905 DUP5
906 SWAP1
907 POP
908 DUP1
909 PUSH1 0x01
911 PUSH1 0xa0
913 PUSH1 0x02
915 EXP
916 SUB
917 AND
918 PUSH4 0x8f4ffcb1
923 CALLER
924 DUP7
925 ADDRESS
926 DUP8
927 PUSH1 0x40
929 MLOAD
930 DUP6
931 PUSH1 0xe0
933 PUSH1 0x02
935 EXP
936 MUL
937 DUP2
938 MSTORE
939 PUSH1 0x04
941 ADD
942 DUP1
943 DUP6
944 PUSH1 0x01
946 PUSH1 0xa0
948 PUSH1 0x02
950 EXP
951 SUB
952 AND
953 DUP2
954 MSTORE
955 PUSH1 0x20
957 ADD
958 DUP5
959 DUP2
960 MSTORE
961 PUSH1 0x20
963 ADD
964 DUP4
965 PUSH1 0x01
967 PUSH1 0xa0
969 PUSH1 0x02
971 EXP
972 SUB
973 AND
974 DUP2
975 MSTORE
976 PUSH1 0x20
978 ADD
979 DUP1
980 PUSH1 0x20
982 ADD
983 DUP3
984 DUP2
985 SUB
986 DUP3
987 MSTORE
988 DUP4
989 DUP2
990 DUP2
991 MLOAD
992 DUP2
993 MSTORE
994 PUSH1 0x20
996 ADD
997 SWAP2
998 POP
999 DUP1
1000 MLOAD
1001 SWAP1
1002 PUSH1 0x20
1004 ADD
1005 SWAP1
1006 DUP1
1007 DUP4
1008 DUP4
1009 DUP3
1010 SWAP1
1011 PUSH1 0x00
1013 PUSH1 0x04
1015 PUSH1 0x20
1017 DUP5
1018 PUSH1 0x1f
1020 ADD
1021 DIV
1022 PUSH1 0x0f
1024 MUL
1025 PUSH1 0x03
1027 ADD
1028 CALL
1029 POP
1030 SWAP1
1031 POP
1032 SWAP1
1033 DUP2
1034 ADD
1035 SWAP1
1036 PUSH1 0x1f
1038 AND
1039 DUP1
1040 ISZERO
1041 PUSH2 0x042e
1044 JUMPI
1045 DUP1
1046 DUP3
1047 SUB
1048 DUP1
1049 MLOAD
1050 PUSH1 0x01
1052 DUP4
1053 PUSH1 0x20
1055 SUB
1056 PUSH2 0x0100
1059 EXP
1060 SUB
1061 NOT
1062 AND
1063 DUP2
1064 MSTORE
1065 PUSH1 0x20
1067 ADD
1068 SWAP2
1069 POP
1070 JUMPDEST
1071 POP
1072 SWAP6
1073 POP
1074 POP
1075 POP
1076 POP
1077 POP
1078 POP
1079 PUSH1 0x00
1081 PUSH1 0x40
1083 MLOAD
1084 DUP1
1085 DUP4
1086 SUB
1087 DUP2
1088 PUSH1 0x00
1090 DUP8
1091 PUSH2 0x61da
1094 GAS
1095 SUB
1096 CALL
1097 ISZERO
1098 PUSH2 0x0002
1101 JUMPI
1102 POP
1103 POP
1104 POP
1105 POP
1106 SWAP4
1107 SWAP3
1108 POP
1109 POP
1110 POP
1111 JUMP
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=833&&x.pc<=903);
let stack=[]; for(let i=0;i<12;i++) stack.push('s'+i); // s0 top
stack=stack.reverse(); // internal end is top
let mem={};
function pop(){return stack.pop()}
function push(x){stack.push(x)}
function peek(n){return stack[stack.length-1-n]}
for (const ins of seg){
const op=ins.op;
const before=stack.slice(-8);
if(op.startsWith('PUSH')) push(ins.arg);
else if(op.startsWith('DUP')) {const n=Number(op.slice(3)); push(peek(n-1));}
else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1; const j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];}
else if(op==='POP') pop();
else if(op==='AND'||op==='ADD'||op==='SUB'||op==='DIV'||op==='MUL'||op==='EXP') {const a=pop(), b=pop(); push('('+b+' '+op+' '+a+')');}
else if(op==='MSTORE') {const off=pop(), val=pop(); mem[off]=val;}
else if(op==='MLOAD') {const off=pop(); push('mem['+off+']');}
else if(op==='SHA3') {const off=pop(), len=pop(); push('keccak(mem['+off+'..+'+len+'])');}
else if(op==='SSTORE') {const slot=pop(), val=pop(); console.log('pc',ins.pc,'SSTORE slot=',slot,'val=',val);}
else if(op==='CALLER') push('CALLER');
else if(op==='ADDRESS') push('ADDRESS');
else if(op==='GAS') push('GAS');
else if(op==='CALLDATALOAD') {const off=pop(); push('calldata['+off+']');}
else {console.log('unhandled',ins); break;}
console.log(String(ins.pc).padStart(4), op, ins.arg||'', ' stackTop=>', stack.slice(-6));
}
console.log('mem',mem);
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
833 PUSH1 0x00 stackTop=> [ 's4', 's3', 's2', 's1', 's0', '0x00' ]
835 PUSH1 0x00 stackTop=> [ 's3', 's2', 's1', 's0', '0x00', '0x00' ]
837 DUP4 stackTop=> [ 's2', 's1', 's0', '0x00', '0x00', 's1' ]
838 PUSH1 0x04 stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '0x04' ]
840 PUSH1 0x00 stackTop=> [ 's0', '0x00', '0x00', 's1', '0x04', '0x00' ]
842 POP stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '0x04' ]
843 PUSH1 0x00 stackTop=> [ 's0', '0x00', '0x00', 's1', '0x04', '0x00' ]
845 CALLER stackTop=> [ '0x00', '0x00', 's1', '0x04', '0x00', 'CALLER' ]
846 PUSH1 0x01 stackTop=> [ '0x00', 's1', '0x04', '0x00', 'CALLER', '0x01' ]
848 PUSH1 0xa0 stackTop=> [ 's1', '0x04', '0x00', 'CALLER', '0x01', '0xa0' ]
850 PUSH1 0x02 stackTop=> [ '0x04', '0x00', 'CALLER', '0x01', '0xa0', '0x02' ]
852 EXP stackTop=> [ 's1', '0x04', '0x00', 'CALLER', '0x01', '(0xa0 EXP 0x02)' ]
853 SUB stackTop=> [
'0x00',
's1',
'0x04',
'0x00',
'CALLER',
'(0x01 SUB (0xa0 EXP 0x02))'
]
854 AND stackTop=> [
'0x00',
'0x00',
's1',
'0x04',
'0x00',
'(CALLER AND (0x01 SUB (0xa0 EXP 0x02)))'
]
855 DUP2 stackTop=> [
'0x00',
's1',
'0x04',
'0x00',
'(CALLER AND (0x01 SUB (0xa0 EXP 0x02)))',
'0x00'
]
856 MSTORE stackTop=> [ 's0', '0x00', '0x00', 's1', '0x04', '0x00' ]
857 PUSH1 0x20 stackTop=> [ '0x00', '0x00', 's1', '0x04', '0x00', '0x20' ]
859 ADD stackTop=> [ 's0', '0x00', '0x00', 's1', '0x04', '(0x00 ADD 0x20)' ]
860 SWAP1 stackTop=> [ 's0', '0x00', '0x00', 's1', '(0x00 ADD 0x20)', '0x04' ]
861 DUP2 stackTop=> [ '0x00', '0x00', 's1', '(0x00 ADD 0x20)', '0x04', '(0x00 ADD 0x20)' ]
862 MSTORE stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '(0x00 ADD 0x20)' ]
863 PUSH1 0x20 stackTop=> [ 's0', '0x00', '0x00', 's1', '(0x00 ADD 0x20)', '0x20' ]
865 ADD stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '((0x00 ADD 0x20) ADD 0x20)' ]
866 PUSH1 0x00 stackTop=> [ 's0', '0x00', '0x00', 's1', '((0x00 ADD 0x20) ADD 0x20)', '0x00' ]
868 SHA3 stackTop=> [
's1',
's0',
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
869 PUSH1 0x00 stackTop=> [
's0',
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00'
]
871 POP stackTop=> [
's1',
's0',
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
872 PUSH1 0x00 stackTop=> [
's0',
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00'
]
874 DUP8 stackTop=> [
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00',
's2'
]
875 PUSH1 0x01 stackTop=> [
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00',
's2',
'0x01'
]
877 PUSH1 0xa0 stackTop=> [
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00',
's2',
'0x01',
'0xa0'
]
879 PUSH1 0x02 stackTop=> [
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00',
's2',
'0x01',
'0xa0',
'0x02'
]
881 EXP stackTop=> [
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00',
's2',
'0x01',
'(0xa0 EXP 0x02)'
]
882 SUB stackTop=> [
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00',
's2',
'(0x01 SUB (0xa0 EXP 0x02))'
]
883 AND stackTop=> [
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00',
'(s2 AND (0x01 SUB (0xa0 EXP 0x02)))'
]
884 DUP2 stackTop=> [
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00',
'(s2 AND (0x01 SUB (0xa0 EXP 0x02)))',
'0x00'
]
885 MSTORE stackTop=> [
's0',
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00'
]
886 PUSH1 0x20 stackTop=> [
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00',
'0x20'
]
888 ADD stackTop=> [
's0',
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'(0x00 ADD 0x20)'
]
889 SWAP1 stackTop=> [
's0',
'0x00',
'0x00',
's1',
'(0x00 ADD 0x20)',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
890 DUP2 stackTop=> [
'0x00',
'0x00',
's1',
'(0x00 ADD 0x20)',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'(0x00 ADD 0x20)'
]
891 MSTORE stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '(0x00 ADD 0x20)' ]
892 PUSH1 0x20 stackTop=> [ 's0', '0x00', '0x00', 's1', '(0x00 ADD 0x20)', '0x20' ]
894 ADD stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '((0x00 ADD 0x20) ADD 0x20)' ]
895 PUSH1 0x00 stackTop=> [ 's0', '0x00', '0x00', 's1', '((0x00 ADD 0x20) ADD 0x20)', '0x00' ]
897 SHA3 stackTop=> [
's1',
's0',
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
898 PUSH1 0x00 stackTop=> [
's0',
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
'0x00'
]
900 POP stackTop=> [
's1',
's0',
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
901 DUP2 stackTop=> [
's0',
'0x00',
'0x00',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
's1'
]
902 SWAP1 stackTop=> [
's0',
'0x00',
'0x00',
's1',
's1',
'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
pc 903 SSTORE slot= keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)]) val= s1
903 SSTORE stackTop=> [ 's2', 's1', 's0', '0x00', '0x00', 's1' ]
mem {
'0x00': '(s2 AND (0x01 SUB (0xa0 EXP 0x02)))',
'(0x00 ADD 0x20)': 'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
}
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=833&&x.pc<=1096);
let stack=[]; for(let i=0;i<16;i++) stack.push('s'+i); stack=stack.reverse();
let mem={};
function pop(){return stack.pop()}
function push(x){stack.push(x)}
function peek(n){return stack[stack.length-1-n]}
function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for (const ins of seg){
const op=ins.op;
if(op.startsWith('PUSH')) push(ins.arg);
else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1));
else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];}
else if(op==='POP') pop();
else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op);
else if(op==='ISZERO'||op==='NOT') {const a=pop(); push(op+'('+a+')');}
else if(op==='MSTORE') {const off=pop(), val=pop(); mem[off]=val;}
else if(op==='MLOAD') {const off=pop(); push('mem['+off+']');}
else if(op==='SHA3') {const off=pop(), len=pop(); push('keccak(mem['+off+'..+'+len+'])');}
else if(op==='SLOAD') {const slot=pop(); push('sload['+slot+']');}
else if(op==='SSTORE') {const slot=pop(), val=pop(); push('SSTORE('+slot+','+val+')');}
else if(op==='CALLER') push('CALLER');
else if(op==='ADDRESS') push('ADDRESS');
else if(op==='GAS') push('GAS');
else if(op==='CALLDATALOAD') {const off=pop(); push('calldata['+off+']');}
else if(op==='CALLDATACOPY') {const m=pop(), c=pop(), l=pop(); mem[m]='calldata['+c+'..+'+l+']'; }
else if(op==='CALL') {const gas=pop(), to=pop(), value=pop(), inOff=pop(), inSize=pop(), outOff=pop(), outSize=pop(); console.log('CALL at',ins.pc,{gas,to,value,inOff,inSize,outOff,outSize,memIn:mem[inOff]}); push('callret');}
else if(op==='JUMPDEST') {}
else {console.log('unhandled',ins.pc,op); break;}
}
console.log('final top', stack.slice(-12));
console.log('mem keys', Object.keys(mem).slice(0,10));
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
CALL at 1028 {
gas: '(((0x20 DIV (mem[0x00] ADD 0x1f)) MUL 0x0f) ADD 0x03)',
to: '0x04',
value: '0x00',
inOff: '(0x00 ADD 0x20)',
inSize: 'mem[0x00]',
outOff: '((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)',
outSize: 'mem[0x00]',
memIn: 'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
}
unhandled 1044 JUMPI
final top [
'(s1 AND (0x01 SUB (0xa0 EXP 0x02)))',
'0x8f4ffcb1',
'CALLER',
's0',
'ADDRESS',
'0x00',
'(mem[0x40] ADD 0x04)',
'((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20)',
'(((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[0x00])',
'(mem[0x00] AND 0x1f)',
'ISZERO((mem[0x00] AND 0x1f))',
'0x042e'
]
mem keys [
'0x00',
'(0x00 ADD 0x20)',
'mem[0x40]',
'(mem[0x40] ADD 0x04)',
'((mem[0x40] ADD 0x04) ADD 0x20)',
'(((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20)',
'((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20)',
'(((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)'
]
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=833&&x.pc<=1096);
for (const branch of ['taken','not']) {
console.log('\\nbranch',branch);
let stack=[]; for(let i=0;i<16;i++) stack.push('s'+i); stack=stack.reverse();
let mem={};
function pop(){return stack.pop()}
function push(x){stack.push(x)}
function peek(n){return stack[stack.length-1-n]}
function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for (const ins of seg){
const op=ins.op;
if(op.startsWith('PUSH')) push(ins.arg);
else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1));
else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];}
else if(op==='POP') pop();
else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op);
else if(op==='ISZERO'||op==='NOT') {const a=pop(); push(op+'('+a+')');}
else if(op==='MSTORE') {const off=pop(), val=pop(); mem[off]=val;}
else if(op==='MLOAD') {const off=pop(); push('mem['+off+']');}
else if(op==='SHA3') {const off=pop(), len=pop(); push('keccak(mem['+off+'..+'+len+'])');}
else if(op==='SLOAD') {const slot=pop(); push('sload['+slot+']');}
else if(op==='SSTORE') {const slot=pop(), val=pop(); push('SSTORE('+slot+','+val+')');}
else if(op==='CALLER') push('CALLER');
else if(op==='ADDRESS') push('ADDRESS');
else if(op==='GAS') push('GAS');
else if(op==='CALLDATALOAD') {const off=pop(); push('calldata['+off+']');}
else if(op==='CALLDATACOPY') {const m=pop(), c=pop(), l=pop(); mem[m]='calldata['+c+'..+'+l+']'; }
else if(op==='JUMPI') { const dest=pop(), cond=pop(); if(branch==='taken' && ins.pc===1044){/*skip until 1070*/} }
else if(op==='CALL') {const gas=pop(), to=pop(), value=pop(), inOff=pop(), inSize=pop(), outOff=pop(), outSize=pop(); console.log('CALL at',ins.pc,{gas,to,value,inOff,inSize,outOff,outSize}); push('callret');}
else if(op==='JUMPDEST') {}
else {console.log('unhandled',ins.pc,op); break;}
}
}
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
branch taken
CALL at 1028 {
gas: '(((0x20 DIV (mem[0x00] ADD 0x1f)) MUL 0x0f) ADD 0x03)',
to: '0x04',
value: '0x00',
inOff: '(0x00 ADD 0x20)',
inSize: 'mem[0x00]',
outOff: '((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)',
outSize: 'mem[0x00]'
}
CALL at 1096 {
gas: '(0x61da SUB GAS)',
to: '(s1 AND (0x01 SUB (0xa0 EXP 0x02)))',
value: '0x00',
inOff: 'mem[0x40]',
inSize: '(mem[0x40] SUB (((mem[0x00] AND 0x1f) SUB (((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[0x00])) ADD 0x20))',
outOff: 'mem[0x40]',
outSize: '0x00'
}
branch not
CALL at 1028 {
gas: '(((0x20 DIV (mem[0x00] ADD 0x1f)) MUL 0x0f) ADD 0x03)',
to: '0x04',
value: '0x00',
inOff: '(0x00 ADD 0x20)',
inSize: 'mem[0x00]',
outOff: '((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)',
outSize: 'mem[0x00]'
}
CALL at 1096 {
gas: '(0x61da SUB GAS)',
to: '(s1 AND (0x01 SUB (0xa0 EXP 0x02)))',
value: '0x00',
inOff: 'mem[0x40]',
inSize: '(mem[0x40] SUB (((mem[0x00] AND 0x1f) SUB (((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[0x00])) ADD 0x20))',
outOff: 'mem[0x40]',
outSize: '0x00'
}
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=709&&x.pc<=833);
let stack=[]; for(let i=0;i<8;i++) stack.push('r'+i); stack=stack.reverse();
let mem={};
function pop(){return stack.pop()} function push(x){stack.push(x)} function peek(n){return stack[stack.length-1-n]} function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for(const ins of seg){const op=ins.op; if(op.startsWith('PUSH')) push(ins.arg); else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1)); else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];} else if(op==='POP') pop(); else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op); else if(op==='ISZERO') {const a=pop(); push('ISZERO('+a+')');} else if(op==='MSTORE'){const off=pop(),val=pop(); mem[off]=val;} else if(op==='MLOAD'){const off=pop(); push('mem['+off+']');} else if(op==='SHA3'){const off=pop(),len=pop(); push('keccak(mem['+off+'..+'+len+'])');} else if(op==='SLOAD'){const slot=pop(); push('sload['+slot+']');} else if(op==='CALLDATALOAD'){const off=pop(); push('calldata['+off+']');} else if(op==='CALLDATACOPY'){const m=pop(), c=pop(), l=pop(); mem[m]='calldata['+c+'..+'+l+']'; } else if(op==='CALLER'){push('CALLER')} else if(op==='JUMPDEST'){} else if(op==='JUMPI'){const dest=pop(),cond=pop(); console.log('JUMPI',ins.pc,'dest',dest,'cond',cond);} else {console.log('unhandled',ins.pc,op); break;} if([709,715,718,743,756,791,796,801,822,833].includes(ins.pc)) console.log('pc',ins.pc,op,ins.arg||'', 'stack', stack.slice(-8)); }
console.log('final stack', stack);
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
pc 709 JUMPDEST stack [
'r7', 'r6', 'r5',
'r4', 'r3', 'r2',
'r1', 'r0'
]
pc 715 CALLDATALOAD stack [ 'r5', 'r4', 'r3', 'r2', 'r1', 'r0', '0x04a1', 'calldata[0x04]' ]
pc 718 CALLDATALOAD stack [
'r4',
'r3',
'r2',
'r1',
'r0',
'0x04a1',
'calldata[0x04]',
'calldata[0x24]'
]
pc 743 SLOAD stack [
'r3',
'r2',
'r1',
'r0',
'0x04a1',
'calldata[0x04]',
'calldata[0x24]',
'sload[keccak(mem[0x00..+0x40])]'
]
JUMPI 751 dest 0x073e cond ISZERO((calldata[0x24] LT sload[keccak(mem[0x00..+0x40])]))
unhandled 755 JUMP
final stack [
'r7', 'r6',
'r5', 'r4',
'r3', 'r2',
'r1', 'r0',
'0x04a1', 'calldata[0x04]',
'calldata[0x24]', '0x0002'
]
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=756&&x.pc<=833);
let stack=['r7','r6','r5','r4','r3','r2','r1','r0','ret','arg1','arg2']; // top is last
let mem={};
function pop(){return stack.pop()} function push(x){stack.push(x)} function peek(n){return stack[stack.length-1-n]} function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for(const ins of seg){const op=ins.op; if(op.startsWith('PUSH')) push(ins.arg); else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1)); else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];} else if(op==='POP') pop(); else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op); else if(op==='ISZERO') {const a=pop(); push('ISZERO('+a+')');} else if(op==='MSTORE'){const off=pop(),val=pop(); mem[off]=val;} else if(op==='MLOAD'){const off=pop(); push('mem['+off+']');} else if(op==='CALLDATALOAD'){const off=pop(); push('calldata['+off+']');} else if(op==='CALLDATACOPY'){const m=pop(), c=pop(), l=pop(); mem[m]='calldata['+c+'..+'+l+']'; } else if(op==='JUMPDEST'){} else {console.log('unhandled',ins.pc,op); break;} if([760,765,771,791,796,801,822,833].includes(ins.pc)) console.log('pc',ins.pc,op,ins.arg||'', 'stack', stack.slice(-10)); }
console.log('final stack', stack);
console.log('mem',mem);
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
pc 760 MLOAD stack [
'r4', 'r3',
'r2', 'r1',
'r0', 'ret',
'arg1', 'arg2',
'0x40', 'mem[0x40]'
]
pc 765 CALLDATALOAD stack [
'r2',
'r1',
'r0',
'ret',
'arg1',
'arg2',
'0x40',
'mem[0x40]',
'0x20',
'calldata[0x44]'
]
pc 771 CALLDATALOAD stack [
'r0',
'ret',
'arg1',
'arg2',
'0x40',
'mem[0x40]',
'0x20',
'calldata[0x44]',
'0x04',
'calldata[(calldata[0x44] ADD 0x04)]'
]
pc 791 PUSH2 0x0511 stack [
'r0',
'ret',
'arg1',
'arg2',
'calldata[(calldata[0x44] ADD 0x04)]',
'mem[0x40]',
'0x20',
'calldata[0x44]',
'0x04',
'0x0511'
]
pc 796 CALLDATALOAD stack [
'ret',
'arg1',
'arg2',
'0x0511',
'mem[0x40]',
'0x20',
'calldata[0x44]',
'0x04',
'calldata[(calldata[0x44] ADD 0x04)]',
'calldata[0x04]'
]
pc 801 CALLDATALOAD stack [
'arg2',
'0x0511',
'calldata[0x04]',
'0x20',
'calldata[0x44]',
'0x04',
'calldata[(calldata[0x44] ADD 0x04)]',
'mem[0x40]',
'0x24',
'calldata[0x24]'
]
pc 822 CALLDATACOPY stack [
'calldata[0x24]',
'0x04',
'0x64',
'mem[0x40]',
'(calldata[0x44] ADD 0x24)',
'calldata[(calldata[0x44] ADD 0x04)]',
'calldata[(calldata[0x44] ADD 0x04)]',
'(0x20 ADD mem[0x40])',
'(calldata[0x44] ADD 0x24)',
'calldata[(calldata[0x44] ADD 0x04)]'
]
pc 833 PUSH1 0x00 stack [
'r1',
'r0',
'ret',
'arg1',
'arg2',
'0x0511',
'calldata[0x04]',
'calldata[0x24]',
'mem[0x40]',
'0x00'
]
final stack [
'r7', 'r6',
'r5', 'r4',
'r3', 'r2',
'r1', 'r0',
'ret', 'arg1',
'arg2', '0x0511',
'calldata[0x04]', 'calldata[0x24]',
'mem[0x40]', '0x00'
]
mem {
'0x40': '((((0x20 DIV (0x1f ADD calldata[(calldata[0x44] ADD 0x04)])) MUL 0x20) ADD mem[0x40]) ADD 0x20)',
'mem[0x40]': 'calldata[(calldata[0x44] ADD 0x04)]',
'(0x20 ADD mem[0x40])': 'calldata[(calldata[0x44] ADD 0x24)..+calldata[(calldata[0x44] ADD 0x04)]]'
}
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=833&&x.pc<=1096);
let stack=['x7','x6','x5','ret','to_arg','amt_arg','data_ptr','zero']; // top is last, from trace at 833
let mem={'data_ptr':'calldata[(calldata[0x44] ADD 0x24)..+calldata[(calldata[0x44] ADD 0x04)]]','mem[0x40]':'calldata[(calldata[0x44] ADD 0x04)]','0x40':'memptr_end'};
function pop(){return stack.pop()} function push(x){stack.push(x)} function peek(n){return stack[stack.length-1-n]} function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for (const ins of seg){ const op=ins.op; if(op.startsWith('PUSH')) push(ins.arg); else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1)); else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];} else if(op==='POP') pop(); else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op); else if(op==='ISZERO'||op==='NOT') {const a=pop(); push(op+'('+a+')');} else if(op==='MSTORE') {const off=pop(), val=pop(); mem[off]=val;} else if(op==='MLOAD') {const off=pop(); push(mem[off]||('mem['+off+']'));} else if(op==='SHA3') {const off=pop(), len=pop(); push('keccak(mem['+off+'..+'+len+'])');} else if(op==='SLOAD') {const slot=pop(); push('sload['+slot+']');} else if(op==='SSTORE') {const slot=pop(), val=pop(); console.log('SSTORE at',ins.pc,'slot',slot,'val',val); } else if(op==='CALLER') push('CALLER'); else if(op==='ADDRESS') push('ADDRESS'); else if(op==='GAS') push('GAS'); else if(op==='CALLDATALOAD') {const off=pop(); push('calldata['+off+']');} else if(op==='CALLDATACOPY'){const m=pop(), c=pop(), l=pop(); mem[m]='calldata['+c+'..+'+l+']'; } else if(op==='CALL'){const gas=pop(), to=pop(), value=pop(), inOff=pop(), inSize=pop(), outOff=pop(), outSize=pop(); console.log('CALL at',ins.pc,{gas,to,value,inOff,inSize,outOff,outSize}); push('callret'); } else if(op==='JUMPI'){const dest=pop(),cond=pop();} else if(op==='JUMPDEST'){} else {console.log('unhandled',ins.pc,op); break; } }
console.log('final',stack.slice(-12));
console.log('mem40',mem['mem[0x40]'], 'data_ptr contents', mem['data_ptr']);
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
SSTORE at 903 slot keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)]) val data_ptr
CALL at 1028 {
gas: '(((0x20 DIV (mem[zero] ADD 0x1f)) MUL 0x0f) ADD 0x03)',
to: '0x04',
value: '0x00',
inOff: '(zero ADD 0x20)',
inSize: 'mem[zero]',
outOff: '((((((memptr_end ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)',
outSize: 'mem[zero]'
}
CALL at 1096 {
gas: '(0x61da SUB GAS)',
to: '(amt_arg AND (0x01 SUB (0xa0 EXP 0x02)))',
value: '0x00',
inOff: 'memptr_end',
inSize: '(memptr_end SUB (((mem[zero] AND 0x1f) SUB (((((((memptr_end ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[zero])) ADD 0x20))',
outOff: 'memptr_end',
outSize: '0x00'
}
final [
'x5',
'ret',
'to_arg',
'amt_arg',
'data_ptr',
'zero',
'0x00',
'amt_arg',
'(amt_arg AND (0x01 SUB (0xa0 EXP 0x02)))',
'0x8f4ffcb1',
'(((mem[zero] AND 0x1f) SUB (((((((memptr_end ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[zero])) ADD 0x20)',
'callret'
]
mem40 calldata[(calldata[0x44] ADD 0x04)] data_ptr contents calldata[(calldata[0x44] ADD 0x24)..+calldata[(calldata[0x44] ADD 0x04)]]
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=833&&x.pc<=1096);
let stack=['r7','r6','r5','r4','r3','r2','r1','r0','ret','arg1','arg2','ret2','arg1b','arg2b','memPtr','zero'];
let mem={'memPtr':'data_len','(0x20 ADD memPtr)':'data_bytes'};
function pop(){return stack.pop()} function push(x){stack.push(x)} function peek(n){return stack[stack.length-1-n]} function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for(const ins of seg){const op=ins.op; if(op.startsWith('PUSH')) push(ins.arg); else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1)); else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];} else if(op==='POP') pop(); else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op); else if(op==='ISZERO'||op==='NOT') {const a=pop(); push(op+'('+a+')');} else if(op==='MSTORE'){const off=pop(),val=pop(); mem[off]=val;} else if(op==='MLOAD'){const off=pop(); push(mem[off]||('mem['+off+']'));} else if(op==='SHA3'){const off=pop(),len=pop(); push('keccak(mem['+off+'..+'+len+'])');} else if(op==='SLOAD'){const slot=pop(); push('sload['+slot+']');} else if(op==='SSTORE'){const slot=pop(),val=pop(); console.log('SSTORE',ins.pc,{slot,val});} else if(op==='CALLER') push('CALLER'); else if(op==='ADDRESS') push('ADDRESS'); else if(op==='GAS') push('GAS'); else if(op==='CALLDATALOAD'){const off=pop(); push('calldata['+off+']');} else if(op==='CALLDATACOPY'){const m=pop(),c=pop(),l=pop(); mem[m]='calldata['+c+'..+'+l+']';} else if(op==='CALL'){const gas=pop(),to=pop(),value=pop(),inOff=pop(),inSize=pop(),outOff=pop(),outSize=pop(); console.log('CALL',ins.pc,{gas,to,value,inOff,inSize,outOff,outSize}); push('callret');} else if(op==='JUMPI'){pop(); pop();} else if(op==='JUMPDEST'){} else {console.log('unhandled',ins.pc,op);break;}}
NODE" in /tmp/codex-catjv7v7
succeeded in 0ms:
SSTORE 903 {
slot: 'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
val: 'memPtr'
}
CALL 1028 {
gas: '(((0x20 DIV (mem[zero] ADD 0x1f)) MUL 0x0f) ADD 0x03)',
to: '0x04',
value: '0x00',
inOff: '(zero ADD 0x20)',
inSize: 'mem[zero]',
outOff: '((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)',
outSize: 'mem[zero]'
}
CALL 1096 {
gas: '(0x61da SUB GAS)',
to: '(arg2b AND (0x01 SUB (0xa0 EXP 0x02)))',
value: '0x00',
inOff: 'mem[0x40]',
inSize: '(mem[0x40] SUB (((mem[zero] AND 0x1f) SUB (((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[zero])) ADD 0x20))',
outOff: 'mem[0x40]',
outSize: '0x00'
}
codex
{"no_findings":false,"summary":"The bytecode bundle is not consistent with a normal ERC20 implementation. The strongest issue is that selector 0xa9059cbb dispatches into approval/callback-style logic rather than an obvious balance-moving transfer path, and that path performs a state write before an unguarded external CALL. No proxy, delegatecall, or upgrade-slot behavior was evidenced in the bundle.","findings":[{"severity":"high","category":"auth","title":"Selector 0xa9059cbb appears to grant authorization and invoke a callback instead of performing an ERC20 transfer","exploit_scenario":"An integration or user that treats this contract as ERC20-compatible may call selector 0xa9059cbb expecting `transfer(address,uint256)`. In this bytecode, that selector reaches a path that decodes extra dynamic calldata, writes state, then constructs calldata headed by 0x8f4ffcb1 and CALLs a computed target. A malicious recipient/spender contract could use that callback to act on the newly granted authorization, so the caller can end up approving and interacting with an external contract instead of transferring tokens.","recommendation":"Do not expose non-transfer semantics behind 0xa9059cbb. If this is intended approval/callback behavior, move it to a distinct selector and keep 0xa9059cbb as a pure balance-moving transfer. Add explicit eventing and clear ABI separation so wallets/integrations cannot be tricked into granting approvals.","evidence":"Dispatcher bytes at pc 0x56-0x60 route selector 0xa9059cbb to pc 0x2c5. That branch checks caller balance (pc 0x2c5-0x2ef), decodes a dynamic bytes payload from calldata offset 0x44 (pc 0x2f4-0x336), performs an SSTORE before any external interaction (pc 0x387), then builds calldata with selector 0x8f4ffcb1 (pc 0x396) and issues CALL at pc 0x448. By contrast, the evident balance-moving Transfer-event path is elsewhere, around pc 0x765-0x7cc. This semantic mismatch is inferred from bytecode, but the inference is strong.","locations":["selector:0xa9059cbb","pc:0x2c5","pc:0x387","pc:0x396","pc:0x448"]},{"severity":"medium","category":"reentrancy","title":"Approval/callback path performs external CALL after state mutation with no detected guard","exploit_scenario":"A malicious callback target can be passed into the 0xa9059cbb path. Because state is written before the external CALL, the callee can reenter during the callback and attempt follow-on actions such as `transferFrom` or other state-dependent flows while the contract is mid-execution. The exact slot names are unknown from raw bytecode, so the full impact is somewhat uncertain, but the bundle shows no guard detection and confirms a computed CALL target.","recommendation":"Apply checks-effects-interactions discipline: finish all validation, minimize or defer external callbacks, and add an explicit reentrancy guard around any path that both mutates authorization/accounting state and CALLs an untrusted address. If callbacks are required, isolate them behind dedicated functions with narrowly scoped state changes.","evidence":"In the 0xa9059cbb branch, an SSTORE occurs at pc 0x387 before the external CALL at pc 0x448. `auth.guards` is empty in the artifact, and detector findings validate an untrusted computed CALL target/value path. The callsite list shows the relevant CALL at pc 1096 with `target_expression_category: computed` and `returndata_checked: null`. The two other CALLs (pc 1028 and pc 1241) are consistent with identity-precompile copies, so pc 0x448 is the security-relevant callback.","locations":["selector:0xa9059cbb","pc:0x387","pc:0x448","pc:0x404","pc:0x4d9"]}]}
tokens used
107,898
{
"codex": {
"ran_at": "2026-04-05T04:06:13.047797+00:00",
"returncode": 0
},
"project": {
"mode": "bytecode",
"bytecode_length": 4002,
"bytecode_truncated": false,
"capability_graph_present": true,
"analysis_artifact_present": true
},
"summary": "The bytecode bundle is not consistent with a normal ERC20 implementation. The strongest issue is that selector 0xa9059cbb dispatches into approval/callback-style logic rather than an obvious balance-moving transfer path, and that path performs a state write before an unguarded external CALL. No proxy, delegatecall, or upgrade-slot behavior was evidenced in the bundle.",
"raw_final": {
"summary": "The bytecode bundle is not consistent with a normal ERC20 implementation. The strongest issue is that selector 0xa9059cbb dispatches into approval/callback-style logic rather than an obvious balance-moving transfer path, and that path performs a state write before an unguarded external CALL. No proxy, delegatecall, or upgrade-slot behavior was evidenced in the bundle.",
"findings": [
{
"title": "Selector 0xa9059cbb appears to grant authorization and invoke a callback instead of performing an ERC20 transfer",
"category": "auth",
"evidence": "Dispatcher bytes at pc 0x56-0x60 route selector 0xa9059cbb to pc 0x2c5. That branch checks caller balance (pc 0x2c5-0x2ef), decodes a dynamic bytes payload from calldata offset 0x44 (pc 0x2f4-0x336), performs an SSTORE before any external interaction (pc 0x387), then builds calldata with selector 0x8f4ffcb1 (pc 0x396) and issues CALL at pc 0x448. By contrast, the evident balance-moving Transfer-event path is elsewhere, around pc 0x765-0x7cc. This semantic mismatch is inferred from bytecode, but the inference is strong.",
"severity": "high",
"locations": [
"selector:0xa9059cbb",
"pc:0x2c5",
"pc:0x387",
"pc:0x396",
"pc:0x448"
],
"recommendation": "Do not expose non-transfer semantics behind 0xa9059cbb. If this is intended approval/callback behavior, move it to a distinct selector and keep 0xa9059cbb as a pure balance-moving transfer. Add explicit eventing and clear ABI separation so wallets/integrations cannot be tricked into granting approvals.",
"exploit_scenario": "An integration or user that treats this contract as ERC20-compatible may call selector 0xa9059cbb expecting `transfer(address,uint256)`. In this bytecode, that selector reaches a path that decodes extra dynamic calldata, writes state, then constructs calldata headed by 0x8f4ffcb1 and CALLs a computed target. A malicious recipient/spender contract could use that callback to act on the newly granted authorization, so the caller can end up approving and interacting with an external contract instead of transferring tokens."
},
{
"title": "Approval/callback path performs external CALL after state mutation with no detected guard",
"category": "reentrancy",
"evidence": "In the 0xa9059cbb branch, an SSTORE occurs at pc 0x387 before the external CALL at pc 0x448. `auth.guards` is empty in the artifact, and detector findings validate an untrusted computed CALL target/value path. The callsite list shows the relevant CALL at pc 1096 with `target_expression_category: computed` and `returndata_checked: null`. The two other CALLs (pc 1028 and pc 1241) are consistent with identity-precompile copies, so pc 0x448 is the security-relevant callback.",
"severity": "medium",
"locations": [
"selector:0xa9059cbb",
"pc:0x387",
"pc:0x448",
"pc:0x404",
"pc:0x4d9"
],
"recommendation": "Apply checks-effects-interactions discipline: finish all validation, minimize or defer external callbacks, and add an explicit reentrancy guard around any path that both mutates authorization/accounting state and CALLs an untrusted address. If callbacks are required, isolate them behind dedicated functions with narrowly scoped state changes.",
"exploit_scenario": "A malicious callback target can be passed into the 0xa9059cbb path. Because state is written before the external CALL, the callee can reenter during the callback and attempt follow-on actions such as `transferFrom` or other state-dependent flows while the contract is mid-execution. The exact slot names are unknown from raw bytecode, so the full impact is somewhat uncertain, but the bundle shows no guard detection and confirms a computed CALL target."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x0082 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 0x008a 0000001e: JUMPI 0000001f: DUP1 00000020: PUSH4 0x1d2bca17 00000025: EQ 00000026: PUSH2 0x00e8 00000029: JUMPI 0000002a: DUP1 0000002b: PUSH4 0x23b872dd 00000030: EQ 00000031: PUSH2 0x0212 00000034: JUMPI 00000035: DUP1 00000036: PUSH4 0x313ce567 0000003b: EQ 0000003c: PUSH2 0x0244 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x70a08231 00000046: EQ 00000047: PUSH2 0x0250 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x95d89b41 00000051: EQ 00000052: PUSH2 0x0268 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0xa9059cbb 0000005c: EQ 0000005d: PUSH2 0x02c5 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0xcae9ca51 00000067: EQ 00000068: PUSH2 0x02f4 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0xdc3080f2 00000072: EQ 00000073: PUSH2 0x0458 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0xdd62ed3e 0000007d: EQ 0000007e: PUSH2 0x047d 00000081: JUMPI 00000082: JUMPDEST 00000083: PUSH2 0x04a1 00000086: PUSH2 0x0002 00000089: JUMP 0000008a: JUMPDEST 0000008b: PUSH2 0x04a3 0000008e: PUSH1 0x00 00000090: DUP1 00000091: SLOAD 00000092: PUSH1 0x40 00000094: DUP1 00000095: MLOAD 00000096: PUSH1 0x20 00000098: PUSH1 0x02 0000009a: PUSH1 0x01 0000009c: DUP6 0000009d: AND 0000009e: ISZERO 0000009f: PUSH2 0x0100 000000a2: MUL 000000a3: PUSH1 0x00 000000a5: NOT 000000a6: ADD 000000a7: SWAP1 000000a8: SWAP5 000000a9: AND 000000aa: SWAP4 000000ab: SWAP1 000000ac: SWAP4 000000ad: DIV 000000ae: PUSH1 0x1f 000000b0: DUP2 000000b1: ADD 000000b2: DUP5 000000b3: SWAP1 000000b4: DIV 000000b5: DUP5 000000b6: MUL 000000b7: DUP3 000000b8: ADD 000000b9: DUP5 000000ba: ADD 000000bb: SWAP1 000000bc: SWAP3 000000bd: MSTORE 000000be: DUP2 000000bf: DUP2 000000c0: MSTORE 000000c1: SWAP3 000000c2: SWAP2 000000c3: DUP4 000000c4: ADD 000000c5: DUP3 000000c6: DUP3 000000c7: DUP1 000000c8: ISZERO 000000c9: PUSH2 0x0565 000000cc: JUMPI 000000cd: DUP1 000000ce: PUSH1 0x1f 000000d0: LT 000000d1: PUSH2 0x053a 000000d4: JUMPI 000000d5: PUSH2 0x0100 000000d8: DUP1 000000d9: DUP4 000000da: SLOAD 000000db: DIV 000000dc: MUL 000000dd: DUP4 000000de: MSTORE 000000df: SWAP2 000000e0: PUSH1 0x20 000000e2: ADD 000000e3: SWAP2 000000e4: PUSH2 0x0565 000000e7: JUMP 000000e8: JUMPDEST 000000e9: PUSH1 0x40 000000eb: DUP1 000000ec: MLOAD 000000ed: PUSH1 0x20 000000ef: PUSH1 0x24 000000f1: DUP1 000000f2: CALLDATALOAD 000000f3: PUSH1 0x04 000000f5: DUP2 000000f6: DUP2 000000f7: ADD 000000f8: CALLDATALOAD 000000f9: PUSH1 0x1f 000000fb: DUP2 000000fc: ADD 000000fd: DUP6 000000fe: SWAP1 000000ff: DIV 00000100: DUP6 00000101: MUL 00000102: DUP7 00000103: ADD 00000104: DUP6 00000105: ADD 00000106: SWAP1 00000107: SWAP7 00000108: MSTORE 00000109: DUP6 0000010a: DUP6 0000010b: MSTORE 0000010c: PUSH2 0x04a1 0000010f: SWAP6 00000110: DUP2 00000111: CALLDATALOAD 00000112: SWAP6 00000113: SWAP2 00000114: SWAP5 00000115: PUSH1 0x44 00000117: SWAP5 00000118: SWAP3 00000119: SWAP4 0000011a: SWAP1 0000011b: SWAP3 0000011c: ADD 0000011d: SWAP2 0000011e: DUP2 0000011f: SWAP1 00000120: DUP5 00000121: ADD 00000122: DUP4 00000123: DUP3 00000124: DUP1 00000125: DUP3 00000126: DUP5 00000127: CALLDATACOPY 00000128: POP 00000129: POP 0000012a: PUSH1 0x40 0000012c: DUP1 0000012d: MLOAD 0000012e: PUSH1 0x20 00000130: PUSH1 0x64 00000132: CALLDATALOAD 00000133: DUP1 00000134: DUP12 00000135: ADD 00000136: CALLDATALOAD 00000137: PUSH1 0x1f 00000139: DUP2 0000013a: ADD 0000013b: DUP4 0000013c: SWAP1 0000013d: DIV 0000013e: DUP4 0000013f: MUL 00000140: DUP5 00000141: ADD 00000142: DUP4 00000143: ADD 00000144: SWAP1 00000145: SWAP5 00000146: MSTORE 00000147: DUP4 00000148: DUP4 00000149: MSTORE 0000014a: SWAP8 0000014b: SWAP10 0000014c: SWAP9 0000014d: CALLDATALOAD 0000014e: SWAP9 0000014f: SWAP8 00000150: PUSH1 0x84 00000152: SWAP8 00000153: POP 00000154: SWAP2 00000155: SWAP6 00000156: POP 00000157: PUSH1 0x24 00000159: SWAP2 0000015a: SWAP1 0000015b: SWAP2 0000015c: ADD 0000015d: SWAP4 0000015e: POP 0000015f: SWAP1 00000160: SWAP2 00000161: POP 00000162: DUP2 00000163: SWAP1 00000164: DUP5 00000165: ADD 00000166: DUP4 00000167: DUP3 00000168: DUP1 00000169: DUP3 0000016a: DUP5 0000016b: CALLDATACOPY 0000016c: POP 0000016d: SWAP5 0000016e: SWAP7 0000016f: POP 00000170: POP 00000171: POP 00000172: POP 00000173: POP 00000174: POP 00000175: POP 00000176: PUSH1 0x01 00000178: PUSH1 0xa0 0000017a: PUSH1 0x02 0000017c: EXP 0000017d: SUB 0000017e: CALLER 0000017f: AND 00000180: PUSH1 0x00 00000182: SWAP1 00000183: DUP2 00000184: MSTORE 00000185: PUSH1 0x03 00000187: PUSH1 0x20 00000189: SWAP1 0000018a: DUP2 0000018b: MSTORE 0000018c: PUSH1 0x40 0000018e: DUP3 0000018f: KECCAK256 00000190: DUP7 00000191: SWAP1 00000192: SSTORE 00000193: DUP2 00000194: SLOAD 00000195: DUP6 00000196: MLOAD 00000197: DUP4 00000198: DUP1 00000199: MSTORE 0000019a: PUSH1 0x02 0000019c: PUSH1 0x01 0000019e: DUP4 0000019f: AND 000001a0: ISZERO 000001a1: PUSH2 0x0100 000001a4: MUL 000001a5: PUSH1 0x00 000001a7: NOT 000001a8: ADD 000001a9: SWAP1 000001aa: SWAP3 000001ab: AND 000001ac: SWAP2 000001ad: SWAP1 000001ae: SWAP2 000001af: DIV 000001b0: PUSH1 0x1f 000001b2: SWAP1 000001b3: DUP2 000001b4: ADD 000001b5: DUP4 000001b6: SWAP1 000001b7: DIV 000001b8: PUSH32 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563 000001d9: SWAP1 000001da: DUP2 000001db: ADD 000001dc: SWAP4 000001dd: SWAP1 000001de: SWAP2 000001df: SWAP1 000001e0: DUP9 000001e1: ADD 000001e2: SWAP1 000001e3: DUP4 000001e4: SWAP1 000001e5: LT 000001e6: PUSH2 0x066d 000001e9: JUMPI 000001ea: DUP1 000001eb: MLOAD 000001ec: PUSH1 0xff 000001ee: NOT 000001ef: AND 000001f0: DUP4 000001f1: DUP1 000001f2: ADD 000001f3: OR 000001f4: DUP6 000001f5: SSTORE 000001f6: JUMPDEST 000001f7: POP 000001f8: PUSH2 0x069d 000001fb: SWAP3 000001fc: SWAP2 000001fd: POP 000001fe: JUMPDEST 000001ff: DUP1 00000200: DUP3 00000201: GT 00000202: ISZERO 00000203: PUSH2 0x06f6 00000206: JUMPI 00000207: PUSH1 0x00 00000209: DUP2 0000020a: SSTORE 0000020b: PUSH1 0x01 0000020d: ADD 0000020e: PUSH2 0x01fe 00000211: JUMP 00000212: JUMPDEST 00000213: PUSH2 0x0511 00000216: PUSH1 0x04 00000218: CALLDATALOAD 00000219: PUSH1 0x24 0000021b: CALLDATALOAD 0000021c: PUSH1 0x44 0000021e: CALLDATALOAD 0000021f: PUSH1 0x01 00000221: PUSH1 0xa0 00000223: PUSH1 0x02 00000225: EXP 00000226: SUB 00000227: DUP4 00000228: AND 00000229: PUSH1 0x00 0000022b: SWAP1 0000022c: DUP2 0000022d: MSTORE 0000022e: PUSH1 0x03 00000230: PUSH1 0x20 00000232: MSTORE 00000233: PUSH1 0x40 00000235: DUP2 00000236: KECCAK256 00000237: SLOAD 00000238: DUP3 00000239: SWAP1 0000023a: LT 0000023b: ISZERO 0000023c: PUSH2 0x056d 0000023f: JUMPI 00000240: PUSH2 0x0002 00000243: JUMP 00000244: JUMPDEST 00000245: PUSH2 0x0523 00000248: PUSH1 0x02 0000024a: SLOAD 0000024b: PUSH1 0xff 0000024d: AND 0000024e: DUP2 0000024f: JUMP 00000250: JUMPDEST 00000251: PUSH2 0x0511 00000254: PUSH1 0x04 00000256: CALLDATALOAD 00000257: PUSH1 0x03 00000259: PUSH1 0x20 0000025b: MSTORE 0000025c: PUSH1 0x00 0000025e: SWAP1 0000025f: DUP2 00000260: MSTORE 00000261: PUSH1 0x40 00000263: SWAP1 00000264: KECCAK256 00000265: SLOAD 00000266: DUP2 00000267: JUMP 00000268: JUMPDEST 00000269: PUSH2 0x04a3 0000026c: PUSH1 0x01 0000026e: DUP1 0000026f: SLOAD 00000270: PUSH1 0x40 00000272: DUP1 00000273: MLOAD 00000274: PUSH1 0x20 00000276: PUSH1 0x02 00000278: DUP5 00000279: DUP7 0000027a: AND 0000027b: ISZERO 0000027c: PUSH2 0x0100 0000027f: MUL 00000280: PUSH1 0x00 00000282: NOT 00000283: ADD 00000284: SWAP1 00000285: SWAP5 00000286: AND 00000287: SWAP4 00000288: SWAP1 00000289: SWAP4 0000028a: DIV 0000028b: PUSH1 0x1f 0000028d: DUP2 0000028e: ADD 0000028f: DUP5 00000290: SWAP1 00000291: DIV 00000292: DUP5 00000293: MUL 00000294: DUP3 00000295: ADD 00000296: DUP5 00000297: ADD 00000298: SWAP1 00000299: SWAP3 0000029a: MSTORE 0000029b: DUP2 0000029c: DUP2 0000029d: MSTORE 0000029e: SWAP3 0000029f: SWAP2 000002a0: DUP4 000002a1: ADD 000002a2: DUP3 000002a3: DUP3 000002a4: DUP1 000002a5: ISZERO 000002a6: PUSH2 0x0565 000002a9: JUMPI 000002aa: DUP1 000002ab: PUSH1 0x1f 000002ad: LT 000002ae: PUSH2 0x053a 000002b1: JUMPI 000002b2: PUSH2 0x0100 000002b5: DUP1 000002b6: DUP4 000002b7: SLOAD 000002b8: DIV 000002b9: MUL 000002ba: DUP4 000002bb: MSTORE 000002bc: SWAP2 000002bd: PUSH1 0x20 000002bf: ADD 000002c0: SWAP2 000002c1: PUSH2 0x0565 000002c4: JUMP 000002c5: JUMPDEST 000002c6: PUSH2 0x04a1 000002c9: PUSH1 0x04 000002cb: CALLDATALOAD 000002cc: PUSH1 0x24 000002ce: CALLDATALOAD 000002cf: PUSH1 0x01 000002d1: PUSH1 0xa0 000002d3: PUSH1 0x02 000002d5: EXP 000002d6: SUB 000002d7: CALLER 000002d8: AND 000002d9: PUSH1 0x00 000002db: SWAP1 000002dc: DUP2 000002dd: MSTORE 000002de: PUSH1 0x03 000002e0: PUSH1 0x20 000002e2: MSTORE 000002e3: PUSH1 0x40 000002e5: SWAP1 000002e6: KECCAK256 000002e7: SLOAD 000002e8: DUP2 000002e9: SWAP1 000002ea: LT 000002eb: ISZERO 000002ec: PUSH2 0x073e 000002ef: JUMPI 000002f0: PUSH2 0x0002 000002f3: JUMP 000002f4: JUMPDEST 000002f5: PUSH1 0x40 000002f7: DUP1 000002f8: MLOAD 000002f9: PUSH1 0x20 000002fb: PUSH1 0x44 000002fd: CALLDATALOAD 000002fe: PUSH1 0x04 00000300: DUP2 00000301: DUP2 00000302: ADD 00000303: CALLDATALOAD 00000304: PUSH1 0x1f 00000306: DUP2 00000307: ADD 00000308: DUP5 00000309: SWAP1 0000030a: DIV 0000030b: DUP5 0000030c: MUL 0000030d: DUP6 0000030e: ADD 0000030f: DUP5 00000310: ADD 00000311: SWAP1 00000312: SWAP6 00000313: MSTORE 00000314: DUP5 00000315: DUP5 00000316: MSTORE 00000317: PUSH2 0x0511 0000031a: SWAP5 0000031b: DUP2 0000031c: CALLDATALOAD 0000031d: SWAP5 0000031e: PUSH1 0x24 00000320: DUP1 00000321: CALLDATALOAD 00000322: SWAP6 00000323: SWAP4 00000324: SWAP5 00000325: PUSH1 0x64 00000327: SWAP5 00000328: SWAP3 00000329: SWAP4 0000032a: SWAP2 0000032b: ADD 0000032c: SWAP2 0000032d: DUP2 0000032e: SWAP1 0000032f: DUP5 00000330: ADD 00000331: DUP4 00000332: DUP3 00000333: DUP1 00000334: DUP3 00000335: DUP5 00000336: CALLDATACOPY 00000337: POP 00000338: SWAP5 00000339: SWAP7 0000033a: POP 0000033b: POP 0000033c: POP 0000033d: POP 0000033e: POP 0000033f: POP 00000340: POP 00000341: PUSH1 0x00 00000343: PUSH1 0x00 00000345: DUP4 00000346: PUSH1 0x04 00000348: PUSH1 0x00 0000034a: POP 0000034b: PUSH1 0x00 0000034d: CALLER 0000034e: PUSH1 0x01 00000350: PUSH1 0xa0 00000352: PUSH1 0x02 00000354: EXP 00000355: SUB 00000356: AND 00000357: DUP2 00000358: MSTORE 00000359: PUSH1 0x20 0000035b: ADD 0000035c: SWAP1 0000035d: DUP2 0000035e: MSTORE 0000035f: PUSH1 0x20 00000361: ADD 00000362: PUSH1 0x00 00000364: KECCAK256 00000365: PUSH1 0x00 00000367: POP 00000368: PUSH1 0x00 0000036a: DUP8 0000036b: PUSH1 0x01 0000036d: PUSH1 0xa0 0000036f: PUSH1 0x02 00000371: EXP 00000372: SUB 00000373: AND 00000374: DUP2 00000375: MSTORE 00000376: PUSH1 0x20 00000378: ADD 00000379: SWAP1 0000037a: DUP2 0000037b: MSTORE 0000037c: PUSH1 0x20 0000037e: ADD 0000037f: PUSH1 0x00 00000381: KECCAK256 00000382: PUSH1 0x00 00000384: POP 00000385: DUP2 00000386: SWAP1 00000387: SSTORE 00000388: POP 00000389: DUP5 0000038a: SWAP1 0000038b: POP 0000038c: DUP1 0000038d: PUSH1 0x01 0000038f: PUSH1 0xa0 00000391: PUSH1 0x02 00000393: EXP 00000394: SUB 00000395: AND 00000396: PUSH4 0x8f4ffcb1 0000039b: CALLER 0000039c: DUP7 0000039d: ADDRESS 0000039e: DUP8 0000039f: PUSH1 0x40 000003a1: MLOAD 000003a2: DUP6 000003a3: PUSH1 0xe0 000003a5: PUSH1 0x02 000003a7: EXP 000003a8: MUL 000003a9: DUP2 000003aa: MSTORE 000003ab: PUSH1 0x04 000003ad: ADD 000003ae: DUP1 000003af: DUP6 000003b0: PUSH1 0x01 000003b2: PUSH1 0xa0 000003b4: PUSH1 0x02 000003b6: EXP 000003b7: SUB 000003b8: AND 000003b9: DUP2 000003ba: MSTORE 000003bb: PUSH1 0x20 000003bd: ADD 000003be: DUP5 000003bf: DUP2 000003c0: MSTORE 000003c1: PUSH1 0x20 000003c3: ADD 000003c4: DUP4 000003c5: PUSH1 0x01 000003c7: PUSH1 0xa0 000003c9: PUSH1 0x02 000003cb: EXP 000003cc: SUB 000003cd: AND 000003ce: DUP2 000003cf: MSTORE 000003d0: PUSH1 0x20 000003d2: ADD 000003d3: DUP1 000003d4: PUSH1 0x20 000003d6: ADD 000003d7: DUP3 000003d8: DUP2 000003d9: SUB 000003da: DUP3 000003db: MSTORE 000003dc: DUP4 000003dd: DUP2 000003de: DUP2 000003df: MLOAD 000003e0: DUP2 000003e1: MSTORE 000003e2: PUSH1 0x20 000003e4: ADD 000003e5: SWAP2 000003e6: POP 000003e7: DUP1 000003e8: MLOAD 000003e9: SWAP1 000003ea: PUSH1 0x20 000003ec: ADD 000003ed: SWAP1 000003ee: DUP1 000003ef: DUP4 000003f0: DUP4 000003f1: DUP3 000003f2: SWAP1 000003f3: PUSH1 0x00 000003f5: PUSH1 0x04 000003f7: PUSH1 0x20 000003f9: DUP5 000003fa: PUSH1 0x1f 000003fc: ADD 000003fd: DIV 000003fe: PUSH1 0x0f 00000400: MUL 00000401: PUSH1 0x03 00000403: ADD 00000404: CALL 00000405: POP 00000406: SWAP1 00000407: POP 00000408: SWAP1 00000409: DUP2 0000040a: ADD 0000040b: SWAP1 0000040c: PUSH1 0x1f 0000040e: AND 0000040f: DUP1 00000410: ISZERO 00000411: PUSH2 0x042e 00000414: JUMPI 00000415: DUP1 00000416: DUP3 00000417: SUB 00000418: DUP1 00000419: MLOAD 0000041a: PUSH1 0x01 0000041c: DUP4 0000041d: PUSH1 0x20 0000041f: SUB 00000420: PUSH2 0x0100 00000423: EXP 00000424: SUB 00000425: NOT 00000426: AND 00000427: DUP2 00000428: MSTORE 00000429: PUSH1 0x20 0000042b: ADD 0000042c: SWAP2 0000042d: POP 0000042e: JUMPDEST 0000042f: POP 00000430: SWAP6 00000431: POP 00000432: POP 00000433: POP 00000434: POP 00000435: POP 00000436: POP 00000437: PUSH1 0x00 00000439: PUSH1 0x40 0000043b: MLOAD 0000043c: DUP1 0000043d: DUP4 0000043e: SUB 0000043f: DUP2 00000440: PUSH1 0x00 00000442: DUP8 00000443: PUSH2 0x61da 00000446: GAS 00000447: SUB 00000448: CALL 00000449: ISZERO 0000044a: PUSH2 0x0002 0000044d: JUMPI 0000044e: POP 0000044f: POP 00000450: POP 00000451: POP 00000452: SWAP4 00000453: SWAP3 00000454: POP 00000455: POP 00000456: POP 00000457: JUMP 00000458: JUMPDEST 00000459: PUSH1 0x05 0000045b: PUSH1 0x20 0000045d: SWAP1 0000045e: DUP2 0000045f: MSTORE 00000460: PUSH1 0x04 00000462: CALLDATALOAD 00000463: PUSH1 0x00 00000465: SWAP1 00000466: DUP2 00000467: MSTORE 00000468: PUSH1 0x40 0000046a: DUP1 0000046b: DUP3 0000046c: KECCAK256 0000046d: SWAP1 0000046e: SWAP3 0000046f: MSTORE 00000470: PUSH1 0x24 00000472: CALLDATALOAD 00000473: DUP2 00000474: MSTORE 00000475: KECCAK256 00000476: SLOAD 00000477: PUSH2 0x0511 0000047a: SWAP1 0000047b: DUP2 0000047c: JUMP 0000047d: JUMPDEST 0000047e: PUSH1 0x04 00000480: PUSH1 0x20 00000482: DUP2 00000483: DUP2 00000484: MSTORE 00000485: SWAP1 00000486: CALLDATALOAD 00000487: PUSH1 0x00 00000489: SWAP1 0000048a: DUP2 0000048b: MSTORE 0000048c: PUSH1 0x40 0000048e: DUP1 0000048f: DUP3 00000490: KECCAK256 00000491: SWAP1 00000492: SWAP3 00000493: MSTORE 00000494: PUSH1 0x24 00000496: CALLDATALOAD 00000497: DUP2 00000498: MSTORE 00000499: KECCAK256 0000049a: SLOAD 0000049b: PUSH2 0x0511 0000049e: SWAP1 0000049f: DUP2 000004a0: JUMP 000004a1: JUMPDEST 000004a2: STOP 000004a3: JUMPDEST 000004a4: PUSH1 0x40 000004a6: MLOAD 000004a7: DUP1 000004a8: DUP1 000004a9: PUSH1 0x20 000004ab: ADD 000004ac: DUP3 000004ad: DUP2 000004ae: SUB 000004af: DUP3 000004b0: MSTORE 000004b1: DUP4 000004b2: DUP2 000004b3: DUP2 000004b4: MLOAD 000004b5: DUP2 000004b6: MSTORE 000004b7: PUSH1 0x20 000004b9: ADD 000004ba: SWAP2 000004bb: POP 000004bc: DUP1 000004bd: MLOAD 000004be: SWAP1 000004bf: PUSH1 0x20 000004c1: ADD 000004c2: SWAP1 000004c3: DUP1 000004c4: DUP4 000004c5: DUP4 000004c6: DUP3 000004c7: SWAP1 000004c8: PUSH1 0x00 000004ca: PUSH1 0x04 000004cc: PUSH1 0x20 000004ce: DUP5 000004cf: PUSH1 0x1f 000004d1: ADD 000004d2: DIV 000004d3: PUSH1 0x0f 000004d5: MUL 000004d6: PUSH1 0x03 000004d8: ADD 000004d9: CALL 000004da: POP 000004db: SWAP1 000004dc: POP 000004dd: SWAP1 000004de: DUP2 000004df: ADD 000004e0: SWAP1 000004e1: PUSH1 0x1f 000004e3: AND 000004e4: DUP1 000004e5: ISZERO 000004e6: PUSH2 0x0503 000004e9: JUMPI 000004ea: DUP1 000004eb: DUP3 000004ec: SUB 000004ed: DUP1 000004ee: MLOAD 000004ef: PUSH1 0x01 000004f1: DUP4 000004f2: PUSH1 0x20 000004f4: SUB 000004f5: PUSH2 0x0100 000004f8: EXP 000004f9: SUB 000004fa: NOT 000004fb: AND 000004fc: DUP2 000004fd: MSTORE 000004fe: PUSH1 0x20 00000500: ADD 00000501: SWAP2 00000502: POP 00000503: JUMPDEST 00000504: POP 00000505: SWAP3 00000506: POP 00000507: POP 00000508: POP 00000509: PUSH1 0x40 0000050b: MLOAD 0000050c: DUP1 0000050d: SWAP2 0000050e: SUB 0000050f: SWAP1 00000510: RETURN 00000511: JUMPDEST 00000512: PUSH1 0x40 00000514: DUP1 00000515: MLOAD 00000516: SWAP2 00000517: DUP3 00000518: MSTORE 00000519: MLOAD 0000051a: SWAP1 0000051b: DUP2 0000051c: SWAP1 0000051d: SUB 0000051e: PUSH1 0x20 00000520: ADD 00000521: SWAP1 00000522: RETURN 00000523: JUMPDEST 00000524: PUSH1 0x40 00000526: DUP1 00000527: MLOAD 00000528: PUSH1 0xff 0000052a: SWAP3 0000052b: SWAP1 0000052c: SWAP3 0000052d: AND 0000052e: DUP3 0000052f: MSTORE 00000530: MLOAD 00000531: SWAP1 00000532: DUP2 00000533: SWAP1 00000534: SUB 00000535: PUSH1 0x20 00000537: ADD 00000538: SWAP1 00000539: RETURN 0000053a: JUMPDEST 0000053b: DUP3 0000053c: ADD 0000053d: SWAP2 0000053e: SWAP1 0000053f: PUSH1 0x00 00000541: MSTORE 00000542: PUSH1 0x20 00000544: PUSH1 0x00 00000546: KECCAK256 00000547: SWAP1 00000548: JUMPDEST 00000549: DUP2 0000054a: SLOAD 0000054b: DUP2 0000054c: MSTORE 0000054d: SWAP1 0000054e: PUSH1 0x01 00000550: ADD 00000551: SWAP1 00000552: PUSH1 0x20 00000554: ADD 00000555: DUP1 00000556: DUP4 00000557: GT 00000558: PUSH2 0x0548 0000055b: JUMPI 0000055c: DUP3 0000055d: SWAP1 0000055e: SUB 0000055f: PUSH1 0x1f 00000561: AND 00000562: DUP3 00000563: ADD 00000564: SWAP2 00000565: JUMPDEST 00000566: POP 00000567: POP 00000568: POP 00000569: POP 0000056a: POP 0000056b: DUP2 0000056c: JUMP 0000056d: JUMPDEST 0000056e: PUSH1 0x01 00000570: PUSH1 0xa0 00000572: PUSH1 0x02 00000574: EXP 00000575: SUB 00000576: DUP4 00000577: AND 00000578: PUSH1 0x00 0000057a: SWAP1 0000057b: DUP2 0000057c: MSTORE 0000057d: PUSH1 0x03 0000057f: PUSH1 0x20 00000581: MSTORE 00000582: PUSH1 0x40 00000584: SWAP1 00000585: KECCAK256 00000586: SLOAD 00000587: DUP3 00000588: DUP2 00000589: ADD 0000058a: LT 0000058b: ISZERO 0000058c: PUSH2 0x0594 0000058f: JUMPI 00000590: PUSH2 0x0002 00000593: JUMP 00000594: JUMPDEST 00000595: PUSH1 0x01 00000597: PUSH1 0xa0 00000599: PUSH1 0x02 0000059b: EXP 0000059c: SUB 0000059d: DUP5 0000059e: DUP2 0000059f: AND 000005a0: PUSH1 0x00 000005a2: DUP2 000005a3: DUP2 000005a4: MSTORE 000005a5: PUSH1 0x04 000005a7: PUSH1 0x20 000005a9: SWAP1 000005aa: DUP2 000005ab: MSTORE 000005ac: PUSH1 0x40 000005ae: DUP1 000005af: DUP4 000005b0: KECCAK256 000005b1: CALLER 000005b2: SWAP6 000005b3: SWAP1 000005b4: SWAP6 000005b5: AND 000005b6: DUP1 000005b7: DUP5 000005b8: MSTORE 000005b9: SWAP5 000005ba: DUP3 000005bb: MSTORE 000005bc: DUP1 000005bd: DUP4 000005be: KECCAK256 000005bf: SLOAD 000005c0: SWAP4 000005c1: DUP4 000005c2: MSTORE 000005c3: PUSH1 0x05 000005c5: DUP3 000005c6: MSTORE 000005c7: DUP1 000005c8: DUP4 000005c9: KECCAK256 000005ca: SWAP5 000005cb: DUP4 000005cc: MSTORE 000005cd: SWAP4 000005ce: SWAP1 000005cf: MSTORE 000005d0: SWAP2 000005d1: SWAP1 000005d2: SWAP2 000005d3: KECCAK256 000005d4: SLOAD 000005d5: DUP4 000005d6: ADD 000005d7: GT 000005d8: ISZERO 000005d9: PUSH2 0x05e1 000005dc: JUMPI 000005dd: PUSH2 0x0002 000005e0: JUMP 000005e1: JUMPDEST 000005e2: PUSH1 0x01 000005e4: PUSH1 0xa0 000005e6: PUSH1 0x02 000005e8: EXP 000005e9: SUB 000005ea: DUP5 000005eb: DUP2 000005ec: AND 000005ed: PUSH1 0x00 000005ef: DUP2 000005f0: DUP2 000005f1: MSTORE 000005f2: PUSH1 0x03 000005f4: PUSH1 0x20 000005f6: SWAP1 000005f7: DUP2 000005f8: MSTORE 000005f9: PUSH1 0x40 000005fb: DUP1 000005fc: DUP4 000005fd: KECCAK256 000005fe: DUP1 000005ff: SLOAD 00000600: DUP9 00000601: SWAP1 00000602: SUB 00000603: SWAP1 00000604: SSTORE 00000605: DUP8 00000606: DUP6 00000607: AND 00000608: DUP1 00000609: DUP5 0000060a: MSTORE 0000060b: DUP2 0000060c: DUP5 0000060d: KECCAK256 0000060e: DUP1 0000060f: SLOAD 00000610: DUP10 00000611: ADD 00000612: SWAP1 00000613: SSTORE 00000614: SWAP4 00000615: DUP4 00000616: MSTORE 00000617: PUSH1 0x05 00000619: DUP3 0000061a: MSTORE 0000061b: DUP1 0000061c: DUP4 0000061d: KECCAK256 0000061e: CALLER 0000061f: SWAP6 00000620: SWAP1 00000621: SWAP6 00000622: AND 00000623: DUP1 00000624: DUP5 00000625: MSTORE 00000626: SWAP5 00000627: DUP3 00000628: MSTORE 00000629: SWAP2 0000062a: DUP3 0000062b: SWAP1 0000062c: KECCAK256 0000062d: DUP1 0000062e: SLOAD 0000062f: DUP8 00000630: ADD 00000631: SWAP1 00000632: SSTORE 00000633: DUP2 00000634: MLOAD 00000635: DUP7 00000636: DUP2 00000637: MSTORE 00000638: SWAP2 00000639: MLOAD 0000063a: SWAP3 0000063b: SWAP4 0000063c: SWAP3 0000063d: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 0000065e: SWAP3 0000065f: DUP2 00000660: SWAP1 00000661: SUB 00000662: SWAP1 00000663: SWAP2 00000664: ADD 00000665: SWAP1 00000666: LOG3 00000667: SWAP4 00000668: SWAP3 00000669: POP 0000066a: POP 0000066b: POP 0000066c: JUMP 0000066d: JUMPDEST 0000066e: DUP3 0000066f: DUP1 00000670: ADD 00000671: PUSH1 0x01 00000673: ADD 00000674: DUP6 00000675: SSTORE 00000676: DUP3 00000677: ISZERO 00000678: PUSH2 0x01f6 0000067b: JUMPI 0000067c: SWAP2 0000067d: DUP3 0000067e: ADD 0000067f: JUMPDEST 00000680: DUP3 00000681: DUP2 00000682: GT 00000683: ISZERO 00000684: PUSH2 0x01f6 00000687: JUMPI 00000688: DUP3 00000689: MLOAD 0000068a: DUP3 0000068b: PUSH1 0x00 0000068d: POP 0000068e: SSTORE 0000068f: SWAP2 00000690: PUSH1 0x20 00000692: ADD 00000693: SWAP2 00000694: SWAP1 00000695: PUSH1 0x01 00000697: ADD 00000698: SWAP1 00000699: PUSH2 0x067f 0000069c: JUMP 0000069d: JUMPDEST 0000069e: POP 0000069f: POP 000006a0: DUP1 000006a1: PUSH1 0x01 000006a3: PUSH1 0x00 000006a5: POP 000006a6: SWAP1 000006a7: DUP1 000006a8: MLOAD 000006a9: SWAP1 000006aa: PUSH1 0x20 000006ac: ADD 000006ad: SWAP1 000006ae: DUP3 000006af: DUP1 000006b0: SLOAD 000006b1: PUSH1 0x01 000006b3: DUP2 000006b4: PUSH1 0x01 000006b6: AND 000006b7: ISZERO 000006b8: PUSH2 0x0100 000006bb: MUL 000006bc: SUB 000006bd: AND 000006be: PUSH1 0x02 000006c0: SWAP1 000006c1: DIV 000006c2: SWAP1 000006c3: PUSH1 0x00 000006c5: MSTORE 000006c6: PUSH1 0x20 000006c8: PUSH1 0x00 000006ca: KECCAK256 000006cb: SWAP1 000006cc: PUSH1 0x1f 000006ce: ADD 000006cf: PUSH1 0x20 000006d1: SWAP1 000006d2: DIV 000006d3: DUP2 000006d4: ADD 000006d5: SWAP3 000006d6: DUP3 000006d7: PUSH1 0x1f 000006d9: LT 000006da: PUSH2 0x06fa 000006dd: JUMPI 000006de: DUP1 000006df: MLOAD 000006e0: PUSH1 0xff 000006e2: NOT 000006e3: AND 000006e4: DUP4 000006e5: DUP1 000006e6: ADD 000006e7: OR 000006e8: DUP6 000006e9: SSTORE 000006ea: JUMPDEST 000006eb: POP 000006ec: PUSH2 0x072a 000006ef: SWAP3 000006f0: SWAP2 000006f1: POP 000006f2: PUSH2 0x01fe 000006f5: JUMP 000006f6: JUMPDEST 000006f7: POP 000006f8: SWAP1 000006f9: JUMP 000006fa: JUMPDEST 000006fb: DUP3 000006fc: DUP1 000006fd: ADD 000006fe: PUSH1 0x01 00000700: ADD 00000701: DUP6 00000702: SSTORE 00000703: DUP3 00000704: ISZERO 00000705: PUSH2 0x06ea 00000708: JUMPI 00000709: SWAP2 0000070a: DUP3 0000070b: ADD 0000070c: JUMPDEST 0000070d: DUP3 0000070e: DUP2 0000070f: GT 00000710: ISZERO 00000711: PUSH2 0x06ea 00000714: JUMPI 00000715: DUP3 00000716: MLOAD 00000717: DUP3 00000718: PUSH1 0x00 0000071a: POP 0000071b: SSTORE 0000071c: SWAP2 0000071d: PUSH1 0x20 0000071f: ADD 00000720: SWAP2 00000721: SWAP1 00000722: PUSH1 0x01 00000724: ADD 00000725: SWAP1 00000726: PUSH2 0x070c 00000729: JUMP 0000072a: JUMPDEST 0000072b: POP 0000072c: POP 0000072d: PUSH1 0x02 0000072f: DUP1 00000730: SLOAD 00000731: PUSH1 0xff 00000733: NOT 00000734: AND 00000735: DUP4 00000736: OR 00000737: SWAP1 00000738: SSTORE 00000739: POP 0000073a: POP 0000073b: POP 0000073c: POP 0000073d: JUMP 0000073e: JUMPDEST 0000073f: PUSH1 0x01 00000741: PUSH1 0xa0 00000743: PUSH1 0x02 00000745: EXP 00000746: SUB 00000747: DUP3 00000748: AND 00000749: PUSH1 0x00 0000074b: SWAP1 0000074c: DUP2 0000074d: MSTORE 0000074e: PUSH1 0x03 00000750: PUSH1 0x20 00000752: MSTORE 00000753: PUSH1 0x40 00000755: SWAP1 00000756: KECCAK256 00000757: SLOAD 00000758: DUP2 00000759: DUP2 0000075a: ADD 0000075b: LT 0000075c: ISZERO 0000075d: PUSH2 0x0765 00000760: JUMPI 00000761: PUSH2 0x0002 00000764: JUMP 00000765: JUMPDEST 00000766: PUSH1 0x01 00000768: PUSH1 0xa0 0000076a: PUSH1 0x02 0000076c: EXP 0000076d: SUB 0000076e: CALLER 0000076f: DUP2 00000770: AND 00000771: PUSH1 0x00 00000773: DUP2 00000774: DUP2 00000775: MSTORE 00000776: PUSH1 0x03 00000778: PUSH1 0x20 0000077a: SWAP1 0000077b: DUP2 0000077c: MSTORE 0000077d: PUSH1 0x40 0000077f: DUP1 00000780: DUP4 00000781: KECCAK256 00000782: DUP1 00000783: SLOAD 00000784: DUP8 00000785: SWAP1 00000786: SUB 00000787: SWAP1 00000788: SSTORE 00000789: SWAP4 0000078a: DUP7 0000078b: AND 0000078c: DUP1 0000078d: DUP4 0000078e: MSTORE 0000078f: SWAP2 00000790: DUP5 00000791: SWAP1 00000792: KECCAK256 00000793: DUP1 00000794: SLOAD 00000795: DUP7 00000796: ADD 00000797: SWAP1 00000798: SSTORE 00000799: DUP4 0000079a: MLOAD 0000079b: DUP6 0000079c: DUP2 0000079d: MSTORE 0000079e: SWAP4 0000079f: MLOAD 000007a0: SWAP2 000007a1: SWAP4 000007a2: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 000007c3: SWAP3 000007c4: SWAP1 000007c5: DUP2 000007c6: SWAP1 000007c7: SUB 000007c8: SWAP1 000007c9: SWAP2 000007ca: ADD 000007cb: SWAP1 000007cc: LOG3 000007cd: POP 000007ce: POP 000007cf: JUMP
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: 0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f
call_targets:
0x0000000000000000000000000000000000000004, 0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9"
],
"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": "0x1d2bca17",
"selector": "0x1d2bca17",
"calldata_variants": [
"0x1d2bca17",
"0x1d2bca170000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x70a08231",
"selector": "0x70a08231",
"calldata_variants": [
"0x70a08231",
"0x70a082310000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x95d89b41",
"selector": "0x95d89b41",
"calldata_variants": [
"0x95d89b41",
"0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa9059cbb",
"selector": "0xa9059cbb",
"calldata_variants": [
"0xa9059cbb",
"0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcae9ca51",
"selector": "0xcae9ca51",
"calldata_variants": [
"0xcae9ca51",
"0xcae9ca510000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1028,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1096,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1241,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 3,
"guards_detected": [],
"untrusted_call_count": 3
}
|
| high | other | detector | ETH value transfer possible | 55 | yes | yes |
viewtrace_id: 0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f
call_targets:
0x0000000000000000000000000000000000000004, 0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9"
],
"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": "0x1d2bca17",
"selector": "0x1d2bca17",
"calldata_variants": [
"0x1d2bca17",
"0x1d2bca170000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x70a08231",
"selector": "0x70a08231",
"calldata_variants": [
"0x70a08231",
"0x70a082310000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x95d89b41",
"selector": "0x95d89b41",
"calldata_variants": [
"0x95d89b41",
"0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa9059cbb",
"selector": "0xa9059cbb",
"calldata_variants": [
"0xa9059cbb",
"0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcae9ca51",
"selector": "0xcae9ca51",
"calldata_variants": [
"0xcae9ca51",
"0xcae9ca510000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1028,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1096,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1241,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 3,
"guards_detected": []
}
|
| high | auth | codex | Selector 0xa9059cbb appears to grant authorization and invoke a callback instead of performing an ERC20 transfer | 85 | no | — |
viewevidence_json{
"evidence": "Dispatcher bytes at pc 0x56-0x60 route selector 0xa9059cbb to pc 0x2c5. That branch checks caller balance (pc 0x2c5-0x2ef), decodes a dynamic bytes payload from calldata offset 0x44 (pc 0x2f4-0x336), performs an SSTORE before any external interaction (pc 0x387), then builds calldata with selector 0x8f4ffcb1 (pc 0x396) and issues CALL at pc 0x448. By contrast, the evident balance-moving Transfer-event path is elsewhere, around pc 0x765-0x7cc. This semantic mismatch is inferred from bytecode, but the inference is strong.",
"locations": [
"selector:0xa9059cbb",
"pc:0x2c5",
"pc:0x387",
"pc:0x396",
"pc:0x448"
],
"recommendation": "Do not expose non-transfer semantics behind 0xa9059cbb. If this is intended approval/callback behavior, move it to a distinct selector and keep 0xa9059cbb as a pure balance-moving transfer. Add explicit eventing and clear ABI separation so wallets/integrations cannot be tricked into granting approvals.",
"exploit_scenario": "An integration or user that treats this contract as ERC20-compatible may call selector 0xa9059cbb expecting `transfer(address,uint256)`. In this bytecode, that selector reaches a path that decodes extra dynamic calldata, writes state, then constructs calldata headed by 0x8f4ffcb1 and CALLs a computed target. A malicious recipient/spender contract could use that callback to act on the newly granted authorization, so the caller can end up approving and interacting with an external contract instead of transferring tokens."
}
|
| medium | reentrancy | codex | Approval/callback path performs external CALL after state mutation with no detected guard | 75 | no | — |
viewevidence_json{
"evidence": "In the 0xa9059cbb branch, an SSTORE occurs at pc 0x387 before the external CALL at pc 0x448. `auth.guards` is empty in the artifact, and detector findings validate an untrusted computed CALL target/value path. The callsite list shows the relevant CALL at pc 1096 with `target_expression_category: computed` and `returndata_checked: null`. The two other CALLs (pc 1028 and pc 1241) are consistent with identity-precompile copies, so pc 0x448 is the security-relevant callback.",
"locations": [
"selector:0xa9059cbb",
"pc:0x387",
"pc:0x448",
"pc:0x404",
"pc:0x4d9"
],
"recommendation": "Apply checks-effects-interactions discipline: finish all validation, minimize or defer external callbacks, and add an explicit reentrancy guard around any path that both mutates authorization/accounting state and CALLs an untrusted address. If callbacks are required, isolate them behind dedicated functions with narrowly scoped state changes.",
"exploit_scenario": "A malicious callback target can be passed into the 0xa9059cbb path. Because state is written before the external CALL, the callee can reenter during the callback and attempt follow-on actions such as `transferFrom` or other state-dependent flows while the contract is mid-execution. The exact slot names are unknown from raw bytecode, so the full impact is somewhat uncertain, but the bundle shows no guard detection and confirms a computed CALL target."
}
|