019b3836-2d81-72b3-ba7f-1259b9b4588e
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 |
|---|---|---|---|---|
| 2109 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 2110 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 45260 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 45261 | capability.graph | complete | 1 / 3 | 1 week ago |
| 45262 | detector.run | complete | 1 / 3 | 1 week ago |
| 45263 | validation.fork | complete | 1 / 3 | 1 week ago |
| 113240 | report.consolidate | complete | 1 / 6 | 1 week ago |
No slither job recorded yet.
{"no_findings":false,"summary":"BYTECODE_BUNDLE describes a non-proxy ERC20-like contract. The material risks are owner-controlled token administration and a non-standard allowance model; the two reported CALL sites are not the primary issue here because one is the old-Solidity identity-precompile string copy helper and the other is a payable fallback path.","findings":[{"severity":"high","category":"access_control","title":"Owner-only mint can arbitrarily inflate supply","exploit_scenario":"Best-effort selector inference from bytecode: selector 0x79c65068 behaves like an owner-only mint(address,uint256). Whoever controls slot 0 can mint arbitrary balances to themselves or an accomplice, then dump the new supply against holders. This is a direct accounting/inflation risk, not just an admin convenience.","recommendation":"If unlimited minting is not intended, remove this path entirely or hard-cap supply in bytecode. If minting is intended, gate it behind stronger governance/timelock controls and make the privilege explicit to integrators and holders.","evidence":"Selector 0x79c65068 enters at pc 0x1d2. It checks CALLER against slot 0 ownership at pc 0x1f1, then jumps to pc 0x4f4, where slot 5 (balances) is increased and slot 4 (total supply) is increased before emitting a Transfer event from the zero address. BYTECODE_BUNDLE also shows owner() at selector 0x8da5cb5b reading slot 0.","locations":["selector:0x79c65068","selector:0x8da5cb5b","pc:0x1f1","pc:0x4f4"]},{"severity":"high","category":"access_control","title":"Owner can freeze arbitrary senders via a hidden boolean mapping","exploit_scenario":"Best-effort selector inference: selector 0xe724529c is an owner-only setter for a boolean mapping in slot 6, and both transfer paths reject when that flag is set. An owner can let users buy/receive tokens and later freeze them so they cannot transfer or sell.","recommendation":"Remove sender-freeze logic unless it is an explicit, disclosed requirement. If a compliance blacklist is required, place it behind transparent governance, emit standard indexed events, and document that transfers can be blocked.","evidence":"Selector 0xe724529c checks slot 0 ownership at pc 0x311 and writes a byte into slot 6 at pc 0x550. transfer(selector 0xa9059cbb) checks slot6[msg.sender] == 0 at pc 0x421-0x447. transferFrom(selector 0x23b872dd) checks slot6[from] == 0 at pc 0x5c4-0x5e7. Selector 0xb414d4b6 reads the same slot-6 mapping, consistent with a public status getter.","locations":["selector:0xe724529c","selector:0xa9059cbb","selector:0x23b872dd","selector:0xb414d4b6","pc:0x311","pc:0x550","pc:0x421","pc:0x5c4"]},{"severity":"medium","category":"other","title":"allowance() does not track remaining spend; transferFrom uses a separate spent-amount mapping","exploit_scenario":"The contract appears to store approved amount in one mapping and cumulative spent amount in another. After partial spending, allowance() still returns the original approved value instead of the remaining allowance. Integrations that trust allowance() can submit transferFrom calls that revert unexpectedly, causing operational DoS or stuck flows.","recommendation":"Use standard ERC20 allowance accounting: either decrement the allowance mapping on each transferFrom, or have allowance() return approved minus spent and reset spent state when approve changes the allowance. Also emit a standard Approval event on approve/consumption if compatibility matters.","evidence":"approve(selector 0x095ea7b3) writes the user-supplied amount into slot 7 at pc 0x138. allowance(selector 0xdd62ed3e) reads raw slot 7 at pc 0x2d0. transferFrom(selector 0x23b872dd) validates amount using slot7[from][spender] and slot8[from][spender] at pc 0x5e7-0x62a, then increments slot 8 at pc 0x689-0x6d3. It never decrements slot 7, so the public allowance view does not appear to return remaining allowance.","locations":["selector:0x095ea7b3","selector:0xdd62ed3e","selector:0x23b872dd","pc:0x138","pc:0x2d0","pc:0x5e7","pc:0x689"]}]}
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-ry7p50js
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5b80-34a9-7fc1-b1e1-f911a12e920e
--------
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 'ls -la' in /tmp/codex-ry7p50js
succeeded in 0ms:
total 164
drwx------ 2 noahkuhn noahkuhn 4096 Apr 5 02:37 .
drwxrwxrwt 270 nobody nogroup 24576 Apr 5 02:37 ..
-rw-rw-r-- 1 noahkuhn noahkuhn 128809 Apr 5 02:37 BYTECODE_BUNDLE.json
-rw-rw-r-- 1 noahkuhn noahkuhn 815 Apr 5 02:37 codex-output-schema.json
exec
/bin/bash -lc "pwd && rg --files -g 'BYTECODE_BUNDLE.json' -g 'AGENTS.md'" in /tmp/codex-ry7p50js
succeeded in 0ms:
/tmp/codex-ry7p50js
BYTECODE_BUNDLE.json
exec
/bin/bash -lc "sed -n '1,240p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
{
"analysis_artifact": {
"address": "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790",
"artifact_hash": "0xcae4c43bd7bb81ceb26f330a8564828b06d75e9648e1f671ec0c6d9a62adfab8",
"artifact_json": {
"auth": {
"guards": []
},
"basic_blocks": [
{
"end_pc": 10,
"hash": "0xde7c09ec5c6a787330be3474c14e6af1d95d255c64d4de8caa7d39b964000ee7",
"opcodes": [
"PUSH1",
"PUSH1",
"MSTORE",
"CALLDATASIZE",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 0
},
{
"end_pc": 30,
"hash": "0xaa8508e79922bef88de7680412ebb93d9b8132af38a790d94ddd35af4ee3a037",
"opcodes": [
"PUSH1",
"PUSH1",
"EXP",
"PUSH1",
"CALLDATALOAD",
"DIV",
"PUSH4",
"OP_81",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 11
},
{
"end_pc": 41,
"hash": "0xa56f4f96be79fa212ef2ab51072b3a1d063fbc25670a3086bd76227480e9ec9a",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 31
},
{
"end_pc": 52,
"hash": "0xdcc0cfc78164b28a048e1018c78fb1e258688e4e9dbc32fe6bb71fdddfe9fb4c",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 42
},
{
"end_pc": 63,
"hash": "0xe5407ecad732c0e22d131e81a5f4ad7969b4a0da0db55cdac8b2b03eab611fc0",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 53
},
{
"end_pc": 74,
"hash": "0x6718e6e9c96250aa33193f2b60d68e2742d3a1e4b04aadbd49640f97508de1aa",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 64
},
{
"end_pc": 85,
"hash": "0x548805c0c54507e41d3b0919d310d4eca0ef980fa4cb4aa8a54d66f6ada4014f",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 75
},
{
"end_pc": 96,
"hash": "0xee796bec83d7680c6d5e37104b770091abb8695ea260229becf257f558a226d1",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 86
},
{
"end_pc": 107,
"hash": "0xda315755efcd32c213ef4d4252640668a3a6cba263b9dad6678e67516412e041",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 97
},
{
"end_pc": 118,
"hash": "0xd14af00a8a087ebec347301845bc0f8614855f78850bf217ade6b32d0e38f52d",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 108
},
{
"end_pc": 129,
"hash": "0xa9baa763d900f8bfff962700a80b0550b7184aaca095b16d10dda4cec77d1b48",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 119
},
{
"end_pc": 140,
"hash": "0xa299ccddb8de0f17a25781b649b758ae14910bd00f495423675728a24a8d768d",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 130
},
{
"end_pc": 151,
"hash": "0x21fdc1d971a2e18be50daa0087e63eab91d0f96ebb4895db0ca7b698931575da",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 141
},
{
"end_pc": 162,
"hash": "0x310188ec5b25938c0b92d363d8d70ad61162a66124f977dd22976927e40da768",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 152
},
{
"end_pc": 173,
"hash": "0x48f9a852645c327fe40f2536f4984fafd316c90f47c5b073a1063c969140bbb4",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 163
},
{
"end_pc": 184,
"hash": "0xb97ac4841982eefdf983a0ae476963f01abe60dbf1702ba0f1886ccfa8446afa",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 174
},
{
"end_pc": 219,
"hash": "0xc2961cacd589158b1d2c8a7a510c2a261c2b7885b8b0e19031153a9500c48a87",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_90",
"CALLVALUE",
"PUSH1",
"OP_82",
"OP_81",
"OP_81",
"OP_81",
"OP_85",
"OP_88",
"OP_83",
"CALL",
"POP",
"POP",
"POP",
"POP",
"POP",
exec
/bin/bash -lc "rg -n '\"(detector|selector|callsite|storage|delegate|proxy|summary|evidence|findings|functions|external_calls|slots|implementation|eip1967|minimal_proxy|beacon)\"' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
2078: "selector": "0x06fdde03"
2082: "selector": "0x095ea7b3"
2086: "selector": "0x18160ddd"
2090: "selector": "0x23b872dd"
2094: "selector": "0x313ce567"
2098: "selector": "0x70a08231"
2102: "selector": "0x79c65068"
2106: "selector": "0x8da5cb5b"
2110: "selector": "0x95d89b41"
2114: "selector": "0xa9059cbb"
2118: "selector": "0xb414d4b6"
2122: "selector": "0xdc3080f2"
2126: "selector": "0xdd62ed3e"
2130: "selector": "0xe724529c"
2134: "selector": "0xf2fde38b"
2137: "functions": [
2143: "selector": "0x06fdde03",
2150: "storage": {
2152: "slots": [
2227: "selector": "0x095ea7b3",
2234: "storage": {
2236: "slots": [
2311: "selector": "0x18160ddd",
2318: "storage": {
2320: "slots": [
2395: "selector": "0x23b872dd",
2402: "storage": {
2404: "slots": [
2479: "selector": "0x313ce567",
2486: "storage": {
2488: "slots": [
2563: "selector": "0x70a08231",
2570: "storage": {
2572: "slots": [
2647: "selector": "0x79c65068",
2654: "storage": {
2656: "slots": [
2731: "selector": "0x8da5cb5b",
2738: "storage": {
2740: "slots": [
2815: "selector": "0x95d89b41",
2822: "storage": {
2824: "slots": [
2899: "selector": "0xa9059cbb",
2906: "storage": {
2908: "slots": [
2983: "selector": "0xb414d4b6",
2990: "storage": {
2992: "slots": [
3067: "selector": "0xdc3080f2",
3074: "storage": {
3076: "slots": [
3151: "selector": "0xdd62ed3e",
3158: "storage": {
3160: "slots": [
3235: "selector": "0xe724529c",
3242: "storage": {
3244: "slots": [
3319: "selector": "0xf2fde38b",
3326: "storage": {
3328: "slots": [
3425: "storage": {
3428: "slots": [
4446: "type": "callsite"
4452: "type": "callsite"
4461: "selector": "0x06fdde03",
4467: "selector": "0x095ea7b3",
4473: "selector": "0x18160ddd",
4479: "selector": "0x23b872dd",
4485: "selector": "0x313ce567",
4491: "selector": "0x70a08231",
4497: "selector": "0x79c65068",
4503: "selector": "0x8da5cb5b",
4509: "selector": "0x95d89b41",
4515: "selector": "0xa9059cbb",
4521: "selector": "0xb414d4b6",
4527: "selector": "0xdc3080f2",
4533: "selector": "0xdd62ed3e",
4539: "selector": "0xe724529c",
4545: "selector": "0xf2fde38b",
exec
/bin/bash -lc "sed -n '2060,2185p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
"type": "control_flow_fallthrough"
},
{
"from": "bb:1511",
"to": "bb:1578",
"type": "control_flow"
},
{
"from": "bb:1511",
"to": "bb:1574",
"type": "control_flow_fallthrough"
}
],
"cfg_hash": "0x3d94278235ddd08cb7333ef8caa8729454d47cad6f1c39ad4252e1c6b99a88a8",
"dispatcher_type": "selector_jump_table",
"function_entries": [
{
"entry_pc": null,
"selector": "0x06fdde03"
},
{
"entry_pc": 404098525,
"selector": "0x095ea7b3"
},
{
"entry_pc": 599290589,
"selector": "0x18160ddd"
},
{
"entry_pc": 826074471,
"selector": "0x23b872dd"
},
{
"entry_pc": 1889567281,
"selector": "0x313ce567"
},
{
"entry_pc": 2043039848,
"selector": "0x70a08231"
},
{
"entry_pc": 2376452955,
"selector": "0x79c65068"
},
{
"entry_pc": 2514000705,
"selector": "0x8da5cb5b"
},
{
"entry_pc": 2835717307,
"selector": "0x95d89b41"
},
{
"entry_pc": 3021264054,
"selector": "0xa9059cbb"
},
{
"entry_pc": 3694166258,
"selector": "0xb414d4b6"
},
{
"entry_pc": 3714247998,
"selector": "0xdc3080f2"
},
{
"entry_pc": 3877917340,
"selector": "0xdd62ed3e"
},
{
"entry_pc": 4076725131,
"selector": "0xe724529c"
},
{
"entry_pc": 826,
"selector": "0xf2fde38b"
}
],
"functions": [
{
"auth": {
"guards": []
},
"entry_pc": null,
"selector": "0x06fdde03",
"sinks": {
"call": 2,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 34,
"slots": [
{
"op": "SLOAD",
"pc": 192,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 227,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 298,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 377,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 436,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 478,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 508,
exec
/bin/bash -lc "sed -n '3410,3495p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
"0xb414d4b6",
"0xdc3080f2",
"0xdd62ed3e",
"0xe724529c",
"0xf2fde38b"
],
"sinks": {
"call": 2,
"create": 0,
"create2": 0,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0,
"upgrade_slot_write_suspected": false
},
"storage": {
"keccak_count": 27,
"reads": 34,
"slots": [
{
"op": "SLOAD",
"pc": 192,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 227,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 298,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 377,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 436,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 478,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 508,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 527,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 595,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 769,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 802,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 942,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1305,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
}
],
"writes": 10
exec
/bin/bash -lc "sed -n '4420,4558p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
},
{
"end_pc": 1573,
"hash": "0x24f8fab0f2c663307d1617f0934b8e43c5f417ee6459c31450c633b39f0ce9b5",
"id": "bb:1511",
"start_pc": 1511,
"type": "basic_block"
},
{
"end_pc": 1577,
"hash": "0xfb09cd3638630ce3d55c6930f61d26478cf39c1cd2080b9cb202102cb266b2e4",
"id": "bb:1574",
"start_pc": 1574,
"type": "basic_block"
},
{
"end_pc": 1829,
"hash": "0x80c02b49be5e3b5738644a4aaa06ce62356ce5baa514b12ee62c86e337015c32",
"id": "bb:1578",
"start_pc": 1578,
"type": "basic_block"
},
{
"id": "call:213",
"opcode": "CALL",
"pc": 213,
"type": "callsite"
},
{
"id": "call:882",
"opcode": "CALL",
"pc": 882,
"type": "callsite"
},
{
"id": "sink:call",
"type": "sink"
},
{
"entry_pc": null,
"id": "fn:0x06fdde03",
"selector": "0x06fdde03",
"type": "function"
},
{
"entry_pc": 404098525,
"id": "fn:0x095ea7b3",
"selector": "0x095ea7b3",
"type": "function"
},
{
"entry_pc": 599290589,
"id": "fn:0x18160ddd",
"selector": "0x18160ddd",
"type": "function"
},
{
"entry_pc": 826074471,
"id": "fn:0x23b872dd",
"selector": "0x23b872dd",
"type": "function"
},
{
"entry_pc": 1889567281,
"id": "fn:0x313ce567",
"selector": "0x313ce567",
"type": "function"
},
{
"entry_pc": 2043039848,
"id": "fn:0x70a08231",
"selector": "0x70a08231",
"type": "function"
},
{
"entry_pc": 2376452955,
"id": "fn:0x79c65068",
"selector": "0x79c65068",
"type": "function"
},
{
"entry_pc": 2514000705,
"id": "fn:0x8da5cb5b",
"selector": "0x8da5cb5b",
"type": "function"
},
{
"entry_pc": 2835717307,
"id": "fn:0x95d89b41",
"selector": "0x95d89b41",
"type": "function"
},
{
"entry_pc": 3021264054,
"id": "fn:0xa9059cbb",
"selector": "0xa9059cbb",
"type": "function"
},
{
"entry_pc": 3694166258,
"id": "fn:0xb414d4b6",
"selector": "0xb414d4b6",
"type": "function"
},
{
"entry_pc": 3714247998,
"id": "fn:0xdc3080f2",
"selector": "0xdc3080f2",
"type": "function"
},
{
"entry_pc": 3877917340,
"id": "fn:0xdd62ed3e",
"selector": "0xdd62ed3e",
"type": "function"
},
{
"entry_pc": 4076725131,
"id": "fn:0xe724529c",
"selector": "0xe724529c",
"type": "function"
},
{
"entry_pc": 826,
"id": "fn:0xf2fde38b",
"selector": "0xf2fde38b",
"type": "function"
}
],
"version": "capability_graph_v1"
},
"id": 1973,
"updated_at": "2026-04-04T19:53:10.000000Z",
"version": "capability_graph_v1"
},
"detector_findings": [
{
"confidence": 60,
"evidence_json": {
exec
/bin/bash -lc "sed -n '4558,4705p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
"evidence_json": {
"call_count": 2,
"examples": [
{
"opcode": "CALL",
"pc": 213,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 882,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"guards_detected": [],
"untrusted_call_count": 2
},
"normalized_json": {
"sink": "CALL"
},
"severity": "high",
"title": "Untrusted CALL target/value reachable",
"validated": true,
"validation_json": {
"attempts": 1,
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6",
"trace_mode": "callTracer"
}
},
{
"confidence": 55,
"evidence_json": {
"eth_value_calls": 2,
"examples": [
{
"opcode": "CALL",
"pc": 213,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 882,
"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",
"0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6",
"trace_mode": "callTracer"
}
}
],
"heuristics_summary": {
"create2_count": 0,
"delegatecall_count": 0,
"flags": [],
"selfdestruct_count": 0
}
}
exec
/bin/bash -lc "rg -n 'bytecode|runtime|deployed|opcodes|disassembly|evidence_bundle|callsites' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
13: "opcodes": [
27: "opcodes": [
45: "opcodes": [
57: "opcodes": [
69: "opcodes": [
81: "opcodes": [
93: "opcodes": [
105: "opcodes": [
117: "opcodes": [
129: "opcodes": [
141: "opcodes": [
153: "opcodes": [
165: "opcodes": [
177: "opcodes": [
189: "opcodes": [
201: "opcodes": [
213: "opcodes": [
248: "opcodes": [
306: "opcodes": [
318: "opcodes": [
339: "opcodes": [
386: "opcodes": [
401: "opcodes": [
414: "opcodes": [
453: "opcodes": [
462: "opcodes": [
477: "opcodes": [
501: "opcodes": [
530: "opcodes": [
539: "opcodes": [
558: "opcodes": [
613: "opcodes": [
625: "opcodes": [
646: "opcodes": [
683: "opcodes": [
692: "opcodes": [
718: "opcodes": [
754: "opcodes": [
790: "opcodes": [
819: "opcodes": [
828: "opcodes": [
855: "opcodes": [
864: "opcodes": [
873: "opcodes": [
938: "opcodes": [
965: "opcodes": [
985: "opcodes": [
1005: "opcodes": [
1023: "opcodes": [
1046: "opcodes": [
1061: "opcodes": [
1076: "opcodes": [
1106: "opcodes": [
1115: "opcodes": [
1146: "opcodes": [
1155: "opcodes": [
1274: "opcodes": [
1332: "opcodes": [
1382: "opcodes": [
1410: "opcodes": [
1419: "opcodes": [
1448: "opcodes": [
1457: "opcodes": [
1518: "opcodes": [
1527: "opcodes": [
1705: "callsites": [
3527: "runtime_bytecode": {
exec
/bin/bash -lc "sed -n '1688,1775p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
"PUSH1",
"MLOAD",
"OP_80",
"OP_91",
"SUB",
"OP_90",
"OP_A3",
"OP_93",
"OP_92",
"POP",
"POP",
"POP",
"JUMP"
],
"start_pc": 1578
}
],
"callsites": [
{
"opcode": "CALL",
"pc": 213,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 882,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"cfg_edges": [
{
"from": "bb:0",
"to": "bb:185",
"type": "control_flow"
},
{
"from": "bb:0",
"to": "bb:11",
"type": "control_flow_fallthrough"
},
{
"from": "bb:11",
"to": "bb:220",
"type": "control_flow"
},
{
"from": "bb:11",
"to": "bb:31",
"type": "control_flow_fallthrough"
},
{
"from": "bb:31",
"to": "bb:312",
"type": "control_flow"
},
{
"from": "bb:31",
"to": "bb:42",
"type": "control_flow_fallthrough"
},
{
"from": "bb:42",
"to": "bb:371",
"type": "control_flow"
},
{
"from": "bb:42",
"to": "bb:53",
"type": "control_flow_fallthrough"
},
{
"from": "bb:53",
"to": "bb:380",
"type": "control_flow"
},
{
"from": "bb:53",
"to": "bb:64",
"type": "control_flow_fallthrough"
},
{
"from": "bb:64",
"to": "bb:430",
"type": "control_flow"
exec
/bin/bash -lc "sed -n '3520,3605p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
"compiler_json": {
"etherscan": {
"skipped": true
}
},
"implementation_address": null,
"is_proxy": false,
"runtime_bytecode": {
"full": "0x606060405236156100b95760e060020a600035046306fdde0381146100dc578063095ea7b31461013857806318160ddd1461017357806323b872dd1461017c578063313ce567146101ae57806370a08231146101ba57806379c65068146101d25780638da5cb5b146101f657806395d89b4114610208578063a9059cbb14610261578063b414d4b614610290578063dc3080f2146102ab578063dd62ed3e146102d0578063e724529c146102f5578063f2fde38b14610319575b61033a60008054600160a060020a03169034606082818181858883f15050505050565b61033c600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156103f75780601f106103cc576101008083540402835291602001916103f7565b33600160a060020a039081166000908152600760209081526040808320600435909416835292905290812060243590555b6060908152602090f35b61016960045481565b610169600435602435604435600160a060020a038316600090815260056020526040812054829010156105a557610002565b61016960035460ff1681565b61016960043560056020526000908152604090205481565b61033a60043560243560005433600160a060020a039081169116146104f457610002565b610169600054600160a060020a031681565b61033c600280546020601f600019600184161561010002019092168390049182018190040260809081016040526060828152929190828280156103f75780601f106103cc576101008083540402835291602001916103f7565b61033a60043560243533600160a060020a0316600090815260056020526040902054819010156103ff57610002565b61016960043560066020526000908152604090205460ff1681565b6008602090815260043560009081526040808220909252602435815220546101699081565b6007602090815260043560009081526040808220909252602435815220546101699081565b61033a60043560243560005433600160a060020a0390811691161461055057610002565b61033a60043560005433600160a060020a039081169116146103aa57610002565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561039c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000805473ffffffffffffffffffffffffffffffffffffffff19168217905550565b820191906000526020600020905b8154815290600101906020018083116103da57829003601f168201915b505050505081565b600160a060020a03821660009081526040902054808201101561042157610002565b33600160a060020a031660009081526006602052604090205460ff161561044757610002565b806005600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806005600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600160a060020a0382811660008181526005602090815260408220805486019055600480548601905590546060858152929316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a35050565b600160a060020a03821660008181526006602052604090819020805460ff191684179055606091825260808390527f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a591a15050565b600160a060020a0383168152604081205482810110156105c457610002565b600160a060020a03841681526006602052604081205460ff16156105e757610002565b60076020908152604080832033600160a060020a039081168086529184528285205490881685526008845282852091855292528220548301111561062a57610002565b816005600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816005600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816008600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056",
"head": null,
"length": 3662,
"tail": null,
"truncated": false
},
"verified_source": false
},
"capability_graph": {
"address": "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790",
"block_number": null,
"chain_id": 1,
"codehash": "0x4eda19d90eb0bf571aaa19f9e6af1db5923c49ed28c24eead1dcafdc90ad852f",
"created_at": "2026-04-04T19:53:10.000000Z",
"graph_hash": "0x849232a8bdcf2d3bca91d0c41631acbbc5cbc63614a329bbce266d24c343a438",
"graph_json": {
"edges": [
{
"from": "bb:0",
"to": "bb:185",
"type": "control_flow"
},
{
"from": "bb:0",
"to": "bb:11",
"type": "control_flow_fallthrough"
},
{
"from": "bb:11",
"to": "bb:220",
"type": "control_flow"
},
{
"from": "bb:11",
"to": "bb:31",
"type": "control_flow_fallthrough"
},
{
"from": "bb:31",
"to": "bb:312",
"type": "control_flow"
},
{
"from": "bb:31",
"to": "bb:42",
"type": "control_flow_fallthrough"
},
{
"from": "bb:42",
"to": "bb:371",
"type": "control_flow"
},
{
"from": "bb:42",
"to": "bb:53",
"type": "control_flow_fallthrough"
},
{
"from": "bb:53",
"to": "bb:380",
"type": "control_flow"
},
{
"from": "bb:53",
"to": "bb:64",
"type": "control_flow_fallthrough"
},
{
"from": "bb:64",
"to": "bb:430",
"type": "control_flow"
},
{
"from": "bb:64",
"to": "bb:75",
"type": "control_flow_fallthrough"
},
{
exec
/bin/bash -lc "sed -n '200,920p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
"hash": "0xb97ac4841982eefdf983a0ae476963f01abe60dbf1702ba0f1886ccfa8446afa",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 174
},
{
"end_pc": 219,
"hash": "0xc2961cacd589158b1d2c8a7a510c2a261c2b7885b8b0e19031153a9500c48a87",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_90",
"CALLVALUE",
"PUSH1",
"OP_82",
"OP_81",
"OP_81",
"OP_81",
"OP_85",
"OP_88",
"OP_83",
"CALL",
"POP",
"POP",
"POP",
"POP",
"POP",
"JUMP"
],
"start_pc": 185
},
{
"end_pc": 284,
"hash": "0x3d600f8551725b11caf6bbac0c97a70a0a0f0c5f8c3b4edfb847020655c97e5b",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"PUSH1",
"OP_82",
"OP_84",
"AND",
"ISZERO",
"PUSH2",
"MUL",
"PUSH1",
"NOT",
"ADD",
"OP_90",
"OP_92",
"AND",
"OP_91",
"OP_90",
"OP_91",
"DIV",
"PUSH1",
"OP_81",
"ADD",
"OP_82",
"OP_90",
"DIV",
"OP_90",
"OP_91",
"MUL",
"PUSH1",
"OP_90",
"OP_81",
"ADD",
"PUSH1",
"MSTORE",
"PUSH1",
"OP_82",
"OP_81",
"MSTORE",
"OP_92",
"OP_91",
"OP_90",
"OP_82",
"OP_82",
"OP_80",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 220
},
{
"end_pc": 292,
"hash": "0x5b9c4eb04c37cbfa60c0d52c00b0ed698e81db863b9855e23bbb612a8d23a333",
"opcodes": [
"OP_80",
"PUSH1",
"LT",
"PUSH2",
"JUMPI"
],
"start_pc": 285
},
{
"end_pc": 311,
"hash": "0xdd8cfb1f0fca3fae5b2640869985401c933953a3e55cc2f0efac358c6b890aaf",
"opcodes": [
"PUSH2",
"OP_80",
"OP_83",
"SLOAD",
"DIV",
"MUL",
"OP_83",
"MSTORE",
"OP_91",
"PUSH1",
"ADD",
"OP_91",
"PUSH2",
"JUMP"
],
"start_pc": 293
},
{
"end_pc": 360,
"hash": "0xe94b6b64372369f00ae7995b3b3deaf62d461c62845bebbd6ffc121b9e38ceba",
"opcodes": [
"JUMPDEST",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_90",
"OP_81",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_80",
"OP_83",
"SHA3",
"PUSH1",
"CALLDATALOAD",
"OP_90",
"OP_94",
"AND",
"OP_83",
"MSTORE",
"OP_92",
"OP_90",
"MSTORE",
"OP_90",
"OP_81",
"SHA3",
"PUSH1",
"CALLDATALOAD",
"OP_90",
"SSTORE"
],
"start_pc": 312
},
{
"end_pc": 370,
"hash": "0x1400227b29b6b73b26189a92b4be5cbc56e23cd2fc84bac732595fb6f929317d",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_90",
"RETURN"
],
"start_pc": 361
},
{
"end_pc": 379,
"hash": "0x575942c863a297a00af661ce31903830703459bbd0f8133fc279b8f2a7b564a1",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"SLOAD",
"OP_81",
"JUMP"
],
"start_pc": 371
},
{
"end_pc": 425,
"hash": "0x56ddc7e1f9ab2d96af904dbcf9f18a3599f7d692379e2b57a39592f7abbaace8",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_83",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"MSTORE",
"PUSH1",
"OP_81",
"SHA3",
"SLOAD",
"OP_82",
"OP_90",
"LT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 380
},
{
"end_pc": 429,
"hash": "0x9c4e8b4e87c27b81d293f40eac9c4e9ff0315bc308e0790a781c96f58aea4d19",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 426
},
{
"end_pc": 441,
"hash": "0x8308e960b2f7e24af853e735f7fbf46899de885996a06bee7bf0aca2a9535ce2",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"SLOAD",
"PUSH1",
"AND",
"OP_81",
"JUMP"
],
"start_pc": 430
},
{
"end_pc": 465,
"hash": "0x6304426e67f3f6c1d521a6ecd50688b6cdbb42f2eb74ebfb58c0398be0e7a9a5",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"PUSH1",
"MSTORE",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_90",
"SHA3",
"SLOAD",
"OP_81",
"JUMP"
],
"start_pc": 442
},
{
"end_pc": 497,
"hash": "0x87d5d2dce00e243a90b2a77823907c75410865236b1a96202dcc8a55604a22a8",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"SLOAD",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_90",
"OP_81",
"AND",
"OP_91",
"AND",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 466
},
{
"end_pc": 501,
"hash": "0x41bc2d6bb96ed35784179d1915b758907a87eb819b92a4de42c0df35e571d8fe",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 498
},
{
"end_pc": 519,
"hash": "0x78b9b0693a73c2bad53e5e567dfdbddb509d6d1d83ecc18efd4acbcbabc242ff",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"SLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"JUMP"
],
"start_pc": 502
},
{
"end_pc": 581,
"hash": "0x59ef192f55c41aade5a7252d37ac0c4bd6d7414c963beaff0a6a18d9e96c9b70",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"NOT",
"PUSH1",
"OP_84",
"AND",
"ISZERO",
"PUSH2",
"MUL",
"ADD",
"OP_90",
"OP_92",
"AND",
"OP_83",
"OP_90",
"DIV",
"OP_91",
"OP_82",
"ADD",
"OP_81",
"OP_90",
"DIV",
"MUL",
"PUSH1",
"OP_90",
"OP_81",
"ADD",
"PUSH1",
"MSTORE",
"PUSH1",
"OP_82",
"OP_81",
"MSTORE",
"OP_92",
"OP_91",
"OP_90",
"OP_82",
"OP_82",
"OP_80",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 520
},
{
"end_pc": 589,
"hash": "0x229c994301ba2cd3320c07218d1442852eca67553572df42f231e78ba5f50442",
"opcodes": [
"OP_80",
"PUSH1",
"LT",
"PUSH2",
"JUMPI"
],
"start_pc": 582
},
{
"end_pc": 608,
"hash": "0x941da5c186a58c201d5f6e11efd46ee70fbb3732ca94a455f300b305198a1d77",
"opcodes": [
"PUSH2",
"OP_80",
"OP_83",
"SLOAD",
"DIV",
"MUL",
"OP_83",
"MSTORE",
"OP_91",
"PUSH1",
"ADD",
"OP_91",
"PUSH2",
"JUMP"
],
"start_pc": 590
},
{
"end_pc": 651,
"hash": "0x435b2d462cd36ea116147e52ee44c635d98731efda423d23981b3a41d826b60c",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"MSTORE",
"PUSH1",
"OP_90",
"SHA3",
"SLOAD",
"OP_81",
"OP_90",
"LT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 609
},
{
"end_pc": 655,
"hash": "0xc20ede51c6e2ed994d554b34cde6a76cbd4192e7d87e729025264dd26b212933",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 652
},
{
"end_pc": 682,
"hash": "0xea7c89081fea5ea113a81c138a2e78fce2b1a56d39545c4e07d82c998322b642",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"PUSH1",
"MSTORE",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_90",
"SHA3",
"SLOAD",
"PUSH1",
"AND",
"OP_81",
"JUMP"
],
"start_pc": 656
},
{
"end_pc": 719,
"hash": "0xce3a00e3b1a1a76704c1c7595075f753d3bbafff538fd026b3fda1db636ddbbb",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_80",
"OP_82",
"SHA3",
"OP_90",
"OP_92",
"MSTORE",
"PUSH1",
"CALLDATALOAD",
"OP_81",
"MSTORE",
"SHA3",
"SLOAD",
"PUSH2",
"OP_90",
"OP_81",
"JUMP"
],
"start_pc": 683
},
{
"end_pc": 756,
"hash": "0x45fa2545c213978e6ec97fe8a9b118d78009bdf9b8e01f2809c2ff4fc43900dc",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_80",
"OP_82",
"SHA3",
"OP_90",
"OP_92",
"MSTORE",
"PUSH1",
"CALLDATALOAD",
"OP_81",
"MSTORE",
"SHA3",
"SLOAD",
"PUSH2",
"OP_90",
"OP_81",
"JUMP"
],
"start_pc": 720
},
{
"end_pc": 788,
"hash": "0xadac0efc3395bf10771f86cd3f0afe805efdd58c9917fed66740e7a6d61f3f39",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"SLOAD",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_90",
"OP_81",
"AND",
"OP_91",
"AND",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 757
},
{
"end_pc": 792,
"hash": "0x3b5285ceb2423dc36c034b80f04b5f3e458501340a5d8e475f3d04664a2f92d3",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 789
},
{
"end_pc": 821,
"hash": "0x050d795fcc6dd166cae6354f07fa09ebfb6f1bf58990c228d84d0fa43b460fd7",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"SLOAD",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_90",
"OP_81",
"AND",
"OP_91",
"AND",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 793
},
{
"end_pc": 825,
"hash": "0x58a5563acfa50b15ca0a775a1d7bcde65531423d4f290094841db3a1dbd5aa92",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 822
},
{
"end_pc": 827,
"hash": "0x44260eda7a79006b60940a80fe44f7f1f221f83d89c89bcda2bb901e4756da90",
"opcodes": [
"JUMPDEST",
"STOP"
],
"start_pc": 826
},
{
"end_pc": 898,
"hash": "0x23800c13755022cce18cd7546c4776397d600185965f8f2d8a8f8094c90c28c8",
"opcodes": [
"JUMPDEST",
"PUSH1",
"MLOAD",
"OP_80",
"OP_80",
"PUSH1",
"ADD",
"OP_82",
"OP_81",
"SUB",
"OP_82",
"MSTORE",
"OP_83",
"OP_81",
"OP_81",
"MLOAD",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_91",
"POP",
"OP_80",
"MLOAD",
"OP_90",
"PUSH1",
"ADD",
"OP_90",
"OP_80",
"OP_83",
"OP_83",
"OP_82",
"OP_90",
"PUSH1",
"PUSH1",
"PUSH1",
"OP_84",
"PUSH1",
"ADD",
"DIV",
"PUSH1",
"MUL",
"PUSH1",
"ADD",
"CALL",
"POP",
"OP_90",
exec
/bin/bash -lc "sed -n '920,1210p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
"OP_90",
"POP",
"OP_90",
"OP_81",
"ADD",
"OP_90",
"PUSH1",
"AND",
"OP_80",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 828
},
{
"end_pc": 923,
"hash": "0x6fcb2ef30d5f735e41e243f470c370101679095dcdab83aee7a0d010543cdd80",
"opcodes": [
"OP_80",
"OP_82",
"SUB",
"OP_80",
"MLOAD",
"PUSH1",
"OP_83",
"PUSH1",
"SUB",
"PUSH2",
"EXP",
"SUB",
"NOT",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_91",
"POP"
],
"start_pc": 899
},
{
"end_pc": 937,
"hash": "0xea93901931302a26d87fc2a29acdc4a52cfe1dd93067d975e02b51edcc363b97",
"opcodes": [
"JUMPDEST",
"POP",
"OP_92",
"POP",
"POP",
"POP",
"PUSH1",
"MLOAD",
"OP_80",
"OP_91",
"SUB",
"OP_90",
"RETURN"
],
"start_pc": 924
},
{
"end_pc": 971,
"hash": "0x879d469c7d723e649eb9961865551120965483752576c6d441275ba35fa096a5",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH20",
"NOT",
"AND",
"OP_82",
"OR",
"OP_90",
"SSTORE",
"POP",
"JUMP"
],
"start_pc": 938
},
{
"end_pc": 985,
"hash": "0xf88837fec207ea0b32c8a254ffaea6835675b1b6cb60b20e0c3263f465dcd99f",
"opcodes": [
"JUMPDEST",
"OP_82",
"ADD",
"OP_91",
"OP_90",
"PUSH1",
"MSTORE",
"PUSH1",
"PUSH1",
"SHA3",
"OP_90"
],
"start_pc": 972
},
{
"end_pc": 1005,
"hash": "0x3835a09fb954555e0fa2a7781af0658bd83818a661d5e5c6c7b15ce279b191cf",
"opcodes": [
"JUMPDEST",
"OP_81",
"SLOAD",
"OP_81",
"MSTORE",
"OP_90",
"PUSH1",
"ADD",
"OP_90",
"PUSH1",
"ADD",
"OP_80",
"OP_83",
"GT",
"PUSH2",
"JUMPI"
],
"start_pc": 986
},
{
"end_pc": 1014,
"hash": "0xa15247cfc35a7572fd6c218f40c6693098b14b586be66b807d38dfbce86a8750",
"opcodes": [
"OP_82",
"OP_90",
"SUB",
"PUSH1",
"AND",
"OP_82",
"ADD",
"OP_91"
],
"start_pc": 1006
},
{
"end_pc": 1022,
"hash": "0x7969b71f3b0ee31695a37d2652e75d59038ca8eef9d2f0a995fcd8f9fa2434e4",
"opcodes": [
"JUMPDEST",
"POP",
"POP",
"POP",
"POP",
"POP",
"OP_81",
"JUMP"
],
"start_pc": 1015
},
{
"end_pc": 1052,
"hash": "0xf9efe6f5024884a14c93a7c2b635db3be17a929ad02e95f90426c27e34986d20",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_82",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_90",
"SHA3",
"SLOAD",
"OP_80",
"OP_82",
"ADD",
"LT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1023
},
{
"end_pc": 1056,
"hash": "0xa729887205a3a28eee5dd5422c67622c8604a1d784d263b464a9fe2853e8a244",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 1053
},
{
"end_pc": 1090,
"hash": "0x0de899fb9bdb8127d2d480d5da54189f0f18d394518b65ed37b7b105966e1743",
"opcodes": [
"JUMPDEST",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"MSTORE",
"PUSH1",
"OP_90",
"SHA3",
"SLOAD",
"PUSH1",
"AND",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1057
},
{
"end_pc": 1094,
"hash": "0x587e20621278dd57f5eac7d3804bc42b1a4c2776f7823d762556c7ef2954e680",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 1091
},
{
"end_pc": 1267,
"hash": "0x0c2c1dcb9fc8742020c76fe162b0c9fb11e7a81b8c78661bf61640436245f925",
"opcodes": [
"JUMPDEST",
"OP_80",
"PUSH1",
"PUSH1",
"POP",
"PUSH1",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"PUSH1",
"SHA3",
"PUSH1",
"OP_82",
"OP_82",
"OP_82",
"POP",
"SLOAD",
"SUB",
"OP_92",
"POP",
"POP",
"OP_81",
"OP_90",
"SSTORE",
"POP",
"OP_80",
"PUSH1",
"PUSH1",
"POP",
"PUSH1",
"OP_84",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_90",
exec
/bin/bash -lc "sed -n '1210,1495p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"PUSH1",
"SHA3",
"PUSH1",
"OP_82",
"OP_82",
"OP_82",
"POP",
"SLOAD",
"ADD",
"OP_92",
"POP",
"POP",
"OP_81",
"OP_90",
"SSTORE",
"POP",
"OP_81",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH32",
"OP_83",
"PUSH1",
"MLOAD",
"OP_80",
"OP_82",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_91",
"POP",
"POP",
"PUSH1",
"MLOAD",
"OP_80",
"OP_91",
"SUB",
"OP_90",
"OP_A3",
"POP",
"POP",
"JUMP"
],
"start_pc": 1095
},
{
"end_pc": 1359,
"hash": "0xd8de0e406c2b9a777f463ef110cb45efe602292dc74e4b524bc15acc9e16d756",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_82",
"OP_81",
"AND",
"PUSH1",
"OP_81",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_82",
"SHA3",
"OP_80",
"SLOAD",
"OP_86",
"ADD",
"OP_90",
"SSTORE",
"PUSH1",
"OP_80",
"SLOAD",
"OP_86",
"ADD",
"OP_90",
"SSTORE",
"OP_90",
"SLOAD",
"PUSH1",
"OP_85",
"OP_81",
"MSTORE",
"OP_92",
"OP_93",
"AND",
"OP_91",
"PUSH32",
"OP_91",
"OP_90",
"OP_A3",
"POP",
"POP",
"JUMP"
],
"start_pc": 1268
},
{
"end_pc": 1444,
"hash": "0xdf02dd1e4a8250ce91b455675cb06c3b41f59403a512ba135e67ad49fa5f0954",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_82",
"AND",
"PUSH1",
"OP_81",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"MSTORE",
"PUSH1",
"OP_90",
"OP_81",
"OP_90",
"SHA3",
"OP_80",
"SLOAD",
"PUSH1",
"NOT",
"AND",
"OP_84",
"OR",
"OP_90",
"SSTORE",
"PUSH1",
"OP_91",
"OP_82",
"MSTORE",
"PUSH1",
"OP_83",
"OP_90",
"MSTORE",
"PUSH32",
"OP_91",
"OP_A1",
"POP",
"POP",
"JUMP"
],
"start_pc": 1360
},
{
"end_pc": 1471,
"hash": "0x38f4b390486a710d9e4e825a853d70f7cb4c0af7bdefe12fadeae7174563ccb3",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_83",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"SHA3",
"SLOAD",
"OP_82",
"OP_81",
"ADD",
"LT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1445
},
{
"end_pc": 1475,
"hash": "0xab689a1d15eaa64c7fb633b7d82db472b06e116cb3b72fd1cdcf74ff643f504b",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 1472
},
{
"end_pc": 1506,
"hash": "0x66faf6137068bb82646105d5f1fba7a31b9f044b70457f1b33d83e8f2b6c2942",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_84",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"MSTORE",
"PUSH1",
"OP_81",
"SHA3",
"SLOAD",
"PUSH1",
"AND",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1476
},
{
"end_pc": 1510,
"hash": "0x82215718d02cc1619065a0e1e0e0888071f48c3819f2549185ed7743ac24e372",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 1507
},
{
"end_pc": 1573,
"hash": "0x24f8fab0f2c663307d1617f0934b8e43c5f417ee6459c31450c633b39f0ce9b5",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_80",
"OP_83",
"SHA3",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_90",
"OP_81",
"AND",
"OP_80",
"OP_86",
"MSTORE",
"OP_91",
"OP_84",
"MSTORE",
"OP_82",
"OP_85",
"SHA3",
"SLOAD",
"OP_90",
"OP_88",
"AND",
"OP_85",
"MSTORE",
"PUSH1",
"OP_84",
"MSTORE",
"OP_82",
exec
/bin/bash -lc "sed -n '1495,1715p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
"OP_82",
"OP_85",
"SHA3",
"OP_91",
"OP_85",
"MSTORE",
"OP_92",
"MSTORE",
"OP_82",
"SHA3",
"SLOAD",
"OP_83",
"ADD",
"GT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1511
},
{
"end_pc": 1577,
"hash": "0xfb09cd3638630ce3d55c6930f61d26478cf39c1cd2080b9cb202102cb266b2e4",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 1574
},
{
"end_pc": 1829,
"hash": "0x80c02b49be5e3b5738644a4aaa06ce62356ce5baa514b12ee62c86e337015c32",
"opcodes": [
"JUMPDEST",
"OP_81",
"PUSH1",
"PUSH1",
"POP",
"PUSH1",
"OP_86",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"PUSH1",
"SHA3",
"PUSH1",
"OP_82",
"OP_82",
"OP_82",
"POP",
"SLOAD",
"SUB",
"OP_92",
"POP",
"POP",
"OP_81",
"OP_90",
"SSTORE",
"POP",
"OP_81",
"PUSH1",
"PUSH1",
"POP",
"PUSH1",
"OP_85",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"PUSH1",
"SHA3",
"PUSH1",
"OP_82",
"OP_82",
"OP_82",
"POP",
"SLOAD",
"ADD",
"OP_92",
"POP",
"POP",
"OP_81",
"OP_90",
"SSTORE",
"POP",
"OP_81",
"PUSH1",
"PUSH1",
"POP",
"PUSH1",
"OP_86",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"PUSH1",
"SHA3",
"PUSH1",
"POP",
"PUSH1",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"PUSH1",
"SHA3",
"PUSH1",
"OP_82",
"OP_82",
"OP_82",
"POP",
"SLOAD",
"ADD",
"OP_92",
"POP",
"POP",
"OP_81",
"OP_90",
"SSTORE",
"POP",
"OP_82",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH32",
"OP_84",
"PUSH1",
"MLOAD",
"OP_80",
"OP_82",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_91",
"POP",
"POP",
"PUSH1",
"MLOAD",
"OP_80",
"OP_91",
"SUB",
"OP_90",
"OP_A3",
"OP_93",
"OP_92",
"POP",
"POP",
"POP",
"JUMP"
],
"start_pc": 1578
}
],
"callsites": [
{
"opcode": "CALL",
"pc": 213,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 882,
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=obj.analysis_artifact.artifact_json.runtime_bytecode?obj.analysis_artifact.artifact_json.runtime_bytecode.full:obj.analysis_context?.runtime_bytecode?.full||obj.analysis_artifact.runtime_bytecode?.full||obj.runtime_bytecode?.full||obj.analysis_context?.runtime_bytecode;
const code=(obj.analysis_artifact?.artifact_json?.runtime_bytecode?.full||obj.runtime_bytecode?.full||obj.analysis_context?.runtime_bytecode?.full||obj.analysis_context?.runtime_bytecode||obj.analysis_artifact?.runtime_bytecode?.full||obj.analysis_artifact?.artifact_json?.runtime_bytecode||obj.analysis_context?.artifact_json?.runtime_bytecode?.full||obj.analysis_artifact?.artifact_json?.deployed_bytecode||obj.analysis_artifact?.artifact_json?.runtime?.full||obj.analysis_artifact?.artifact_json?.runtime_bytecode_hex||obj.analysis_context?.deployed_bytecode||obj.runtime_bytecode?.full||obj.analysis_context?.bytecode||obj.analysis_artifact?.artifact_json?.bytecode?.runtime||obj.analysis_artifact?.artifact_json?.bytecode||obj.analysis_artifact?.artifact_json?.evm?.deployedBytecode?.object||obj.analysis_artifact?.artifact_json?.evm?.deployedBytecode?.full||obj.analysis_artifact?.artifact_json?.runtime_bytecode?.object||obj.analysis_context?.artifact_json?.runtime_bytecode?.object||obj.analysis_context?.artifact_json?.evm?.deployedBytecode?.object||obj.analysis_artifact?.artifact_json?.runtime_bytecode?.bytes||obj.analysis_context?.artifact_json?.runtime_bytecode?.bytes||obj.analysis_artifact?.artifact_json?.runtimeBytecode?.full||obj.analysis_artifact?.artifact_json?.runtimeBytecode||obj.analysis_artifact?.artifact_json?.raw_runtime_bytecode||obj.analysis_artifact?.artifact_json?.code);
if("'!code) throw new Error('"'no code');
const bytes=Buffer.from(code.slice(2),'hex');
const ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
const dis=[];
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} dis.push({pc,name,arg}); pc=next;}
const ranges=[[180,220],[820,900],[930,980],[1020,1105],[1440,1590]];
for(const [a,b] of ranges){
console.log('\\nRANGE',a,b);
for(const ins of dis){if(ins.pc>=a&&ins.pc<=b) console.log(String(ins.pc).padStart(4), ins.name, ins.arg);}
}
NODE" in /tmp/codex-ry7p50js
exited 1 in 0ms:
[stdin]:5
if(!code) throw new Error('no code');
^
Error: no code
at [stdin]:5:17
at runScriptInThisContext (node:internal/vm:209:10)
at node:internal/process/execution:118:14
at [stdin]-wrapper:6:24
at runScript (node:internal/process/execution:101:62)
at evalScript (node:internal/process/execution:136:3)
at node:internal/main/eval_stdin:32:5
at Socket.<anonymous> (node:internal/process/execution:237:5)
at Socket.emit (node:events:525:35)
at endReadableNT (node:internal/streams/readable:1696:12)
Node.js v23.3.0
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
console.log(Object.keys(obj));
for (const k of Object.keys(obj)) {
const v=obj[k];
if (v && typeof v==='object' && "'!Array.isArray(v)) console.log(k, Object.keys(v).slice(0,20));
}
NODE' in /tmp/codex-ry7p50js
succeeded in 0ms:
[
'analysis_artifact',
'analysis_run',
'artifact',
'capability_graph',
'detector_findings',
'heuristics_summary'
]
analysis_artifact [
'address',
'artifact_hash',
'artifact_json',
'block_number',
'chain_id',
'codehash',
'created_at',
'id',
'updated_at',
'version'
]
analysis_run [
'address',
'block_number',
'chain_id',
'child_links',
'created_at',
'id',
'parent_links',
'status',
'updated_at'
]
artifact [
'codehash',
'compiler_json',
'implementation_address',
'is_proxy',
'runtime_bytecode',
'verified_source'
]
capability_graph [
'address', 'block_number',
'chain_id', 'codehash',
'created_at', 'graph_hash',
'graph_json', 'id',
'updated_at', 'version'
]
heuristics_summary [
'create2_count',
'delegatecall_count',
'flags',
'selfdestruct_count'
]
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
const dis=[];
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} dis.push({pc,name,arg}); pc=next;}
const ranges=[[0,220],[820,940],[938,980],[1020,1105],[1260,1385],[1440,1605]];
for(const [a,b] of ranges){
console.log('\\nRANGE',a,b);
for(const ins of dis){if(ins.pc>=a&&ins.pc<=b) console.log(String(ins.pc).padStart(4), ins.name.padEnd(12), ins.arg);}
}
NODE" in /tmp/codex-ry7p50js
succeeded in 0ms:
RANGE 0 220
0 PUSH1 0x60
2 PUSH1 0x40
4 MSTORE
5 CALLDATASIZE
6 ISZERO
7 PUSH2 0x00b9
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 0x00dc
30 JUMPI
31 DUP1
32 PUSH4 0x095ea7b3
37 EQ
38 PUSH2 0x0138
41 JUMPI
42 DUP1
43 PUSH4 0x18160ddd
48 EQ
49 PUSH2 0x0173
52 JUMPI
53 DUP1
54 PUSH4 0x23b872dd
59 EQ
60 PUSH2 0x017c
63 JUMPI
64 DUP1
65 PUSH4 0x313ce567
70 EQ
71 PUSH2 0x01ae
74 JUMPI
75 DUP1
76 PUSH4 0x70a08231
81 EQ
82 PUSH2 0x01ba
85 JUMPI
86 DUP1
87 PUSH4 0x79c65068
92 EQ
93 PUSH2 0x01d2
96 JUMPI
97 DUP1
98 PUSH4 0x8da5cb5b
103 EQ
104 PUSH2 0x01f6
107 JUMPI
108 DUP1
109 PUSH4 0x95d89b41
114 EQ
115 PUSH2 0x0208
118 JUMPI
119 DUP1
120 PUSH4 0xa9059cbb
125 EQ
126 PUSH2 0x0261
129 JUMPI
130 DUP1
131 PUSH4 0xb414d4b6
136 EQ
137 PUSH2 0x0290
140 JUMPI
141 DUP1
142 PUSH4 0xdc3080f2
147 EQ
148 PUSH2 0x02ab
151 JUMPI
152 DUP1
153 PUSH4 0xdd62ed3e
158 EQ
159 PUSH2 0x02d0
162 JUMPI
163 DUP1
164 PUSH4 0xe724529c
169 EQ
170 PUSH2 0x02f5
173 JUMPI
174 DUP1
175 PUSH4 0xf2fde38b
180 EQ
181 PUSH2 0x0319
184 JUMPI
185 JUMPDEST
186 PUSH2 0x033a
189 PUSH1 0x00
191 DUP1
192 SLOAD
193 PUSH1 0x01
195 PUSH1 0xa0
197 PUSH1 0x02
199 EXP
200 SUB
201 AND
202 DUP17
203 CALLVALUE
204 PUSH1 0x60
206 DUP3
207 DUP2
208 DUP2
209 DUP2
210 DUP6
211 DUP9
212 DUP4
213 CALL
214 POP
215 POP
216 POP
217 POP
218 POP
219 JUMP
220 JUMPDEST
RANGE 820 940
821 JUMPI
822 PUSH2 0x0002
825 JUMP
826 JUMPDEST
827 STOP
828 JUMPDEST
829 PUSH1 0x40
831 MLOAD
832 DUP1
833 DUP1
834 PUSH1 0x20
836 ADD
837 DUP3
838 DUP2
839 SUB
840 DUP3
841 MSTORE
842 DUP4
843 DUP2
844 DUP2
845 MLOAD
846 DUP2
847 MSTORE
848 PUSH1 0x20
850 ADD
851 DUP18
852 POP
853 DUP1
854 MLOAD
855 DUP17
856 PUSH1 0x20
858 ADD
859 DUP17
860 DUP1
861 DUP4
862 DUP4
863 DUP3
864 DUP17
865 PUSH1 0x00
867 PUSH1 0x04
869 PUSH1 0x20
871 DUP5
872 PUSH1 0x1f
874 ADD
875 DIV
876 PUSH1 0x0f
878 MUL
879 PUSH1 0x03
881 ADD
882 CALL
883 POP
884 DUP17
885 POP
886 DUP17
887 DUP2
888 ADD
889 DUP17
890 PUSH1 0x1f
892 AND
893 DUP1
894 ISZERO
895 PUSH2 0x039c
898 JUMPI
899 DUP1
900 DUP3
901 SUB
902 DUP1
903 MLOAD
904 PUSH1 0x01
906 DUP4
907 PUSH1 0x20
909 SUB
910 PUSH2 0x0100
913 EXP
914 SUB
915 NOT
916 AND
917 DUP2
918 MSTORE
919 PUSH1 0x20
921 ADD
922 DUP18
923 POP
924 JUMPDEST
925 POP
926 DUP19
927 POP
928 POP
929 POP
930 PUSH1 0x40
932 MLOAD
933 DUP1
934 DUP18
935 SUB
936 DUP17
937 RETURN
938 JUMPDEST
939 PUSH1 0x00
RANGE 938 980
938 JUMPDEST
939 PUSH1 0x00
941 DUP1
942 SLOAD
943 PUSH20 0xffffffffffffffffffffffffffffffffffffffff
964 NOT
965 AND
966 DUP3
967 OR
968 DUP17
969 SSTORE
970 POP
971 JUMP
972 JUMPDEST
973 DUP3
974 ADD
975 DUP18
976 DUP17
977 PUSH1 0x00
979 MSTORE
980 PUSH1 0x20
RANGE 1020 1105
1020 POP
1021 DUP2
1022 JUMP
1023 JUMPDEST
1024 PUSH1 0x01
1026 PUSH1 0xa0
1028 PUSH1 0x02
1030 EXP
1031 SUB
1032 DUP3
1033 AND
1034 PUSH1 0x00
1036 DUP17
1037 DUP2
1038 MSTORE
1039 PUSH1 0x40
1041 DUP17
1042 SHA3
1043 SLOAD
1044 DUP1
1045 DUP3
1046 ADD
1047 LT
1048 ISZERO
1049 PUSH2 0x0421
1052 JUMPI
1053 PUSH2 0x0002
1056 JUMP
1057 JUMPDEST
1058 CALLER
1059 PUSH1 0x01
1061 PUSH1 0xa0
1063 PUSH1 0x02
1065 EXP
1066 SUB
1067 AND
1068 PUSH1 0x00
1070 DUP17
1071 DUP2
1072 MSTORE
1073 PUSH1 0x06
1075 PUSH1 0x20
1077 MSTORE
1078 PUSH1 0x40
1080 DUP17
1081 SHA3
1082 SLOAD
1083 PUSH1 0xff
1085 AND
1086 ISZERO
1087 PUSH2 0x0447
1090 JUMPI
1091 PUSH2 0x0002
1094 JUMP
1095 JUMPDEST
1096 DUP1
1097 PUSH1 0x05
1099 PUSH1 0x00
1101 POP
1102 PUSH1 0x00
1104 CALLER
1105 PUSH1 0x01
RANGE 1260 1385
1260 DUP1
1261 DUP18
1262 SUB
1263 DUP17
1264 LOG3
1265 POP
1266 POP
1267 JUMP
1268 JUMPDEST
1269 PUSH1 0x01
1271 PUSH1 0xa0
1273 PUSH1 0x02
1275 EXP
1276 SUB
1277 DUP3
1278 DUP2
1279 AND
1280 PUSH1 0x00
1282 DUP2
1283 DUP2
1284 MSTORE
1285 PUSH1 0x05
1287 PUSH1 0x20
1289 DUP17
1290 DUP2
1291 MSTORE
1292 PUSH1 0x40
1294 DUP3
1295 SHA3
1296 DUP1
1297 SLOAD
1298 DUP7
1299 ADD
1300 DUP17
1301 SSTORE
1302 PUSH1 0x04
1304 DUP1
1305 SLOAD
1306 DUP7
1307 ADD
1308 DUP17
1309 SSTORE
1310 DUP17
1311 SLOAD
1312 PUSH1 0x60
1314 DUP6
1315 DUP2
1316 MSTORE
1317 DUP19
1318 DUP20
1319 AND
1320 DUP18
1321 PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1354 DUP18
1355 DUP17
1356 LOG3
1357 POP
1358 POP
1359 JUMP
1360 JUMPDEST
1361 PUSH1 0x01
1363 PUSH1 0xa0
1365 PUSH1 0x02
1367 EXP
1368 SUB
1369 DUP3
1370 AND
1371 PUSH1 0x00
1373 DUP2
1374 DUP2
1375 MSTORE
1376 PUSH1 0x06
1378 PUSH1 0x20
1380 MSTORE
1381 PUSH1 0x40
1383 DUP17
1384 DUP2
1385 DUP17
RANGE 1440 1605
1440 DUP18
1441 LOG1
1442 POP
1443 POP
1444 JUMP
1445 JUMPDEST
1446 PUSH1 0x01
1448 PUSH1 0xa0
1450 PUSH1 0x02
1452 EXP
1453 SUB
1454 DUP4
1455 AND
1456 DUP2
1457 MSTORE
1458 PUSH1 0x40
1460 DUP2
1461 SHA3
1462 SLOAD
1463 DUP3
1464 DUP2
1465 ADD
1466 LT
1467 ISZERO
1468 PUSH2 0x05c4
1471 JUMPI
1472 PUSH2 0x0002
1475 JUMP
1476 JUMPDEST
1477 PUSH1 0x01
1479 PUSH1 0xa0
1481 PUSH1 0x02
1483 EXP
1484 SUB
1485 DUP5
1486 AND
1487 DUP2
1488 MSTORE
1489 PUSH1 0x06
1491 PUSH1 0x20
1493 MSTORE
1494 PUSH1 0x40
1496 DUP2
1497 SHA3
1498 SLOAD
1499 PUSH1 0xff
1501 AND
1502 ISZERO
1503 PUSH2 0x05e7
1506 JUMPI
1507 PUSH2 0x0002
1510 JUMP
1511 JUMPDEST
1512 PUSH1 0x07
1514 PUSH1 0x20
1516 DUP17
1517 DUP2
1518 MSTORE
1519 PUSH1 0x40
1521 DUP1
1522 DUP4
1523 SHA3
1524 CALLER
1525 PUSH1 0x01
1527 PUSH1 0xa0
1529 PUSH1 0x02
1531 EXP
1532 SUB
1533 DUP17
1534 DUP2
1535 AND
1536 DUP1
1537 DUP7
1538 MSTORE
1539 DUP18
1540 DUP5
1541 MSTORE
1542 DUP3
1543 DUP6
1544 SHA3
1545 SLOAD
1546 DUP17
1547 DUP9
1548 AND
1549 DUP6
1550 MSTORE
1551 PUSH1 0x08
1553 DUP5
1554 MSTORE
1555 DUP3
1556 DUP6
1557 SHA3
1558 DUP18
1559 DUP6
1560 MSTORE
1561 DUP19
1562 MSTORE
1563 DUP3
1564 SHA3
1565 SLOAD
1566 DUP4
1567 ADD
1568 GT
1569 ISZERO
1570 PUSH2 0x062a
1573 JUMPI
1574 PUSH2 0x0002
1577 JUMP
1578 JUMPDEST
1579 DUP2
1580 PUSH1 0x05
1582 PUSH1 0x00
1584 POP
1585 PUSH1 0x00
1587 DUP7
1588 PUSH1 0x01
1590 PUSH1 0xa0
1592 PUSH1 0x02
1594 EXP
1595 SUB
1596 AND
1597 DUP2
1598 MSTORE
1599 PUSH1 0x20
1601 ADD
1602 DUP17
1603 DUP2
1604 MSTORE
1605 PUSH1 0x20
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} if(pc>=1600 && pc<=1830) console.log(String(pc).padStart(4), name.padEnd(12), arg); pc=next;}
NODE" in /tmp/codex-ry7p50js
succeeded in 0ms:
1601 ADD
1602 DUP17
1603 DUP2
1604 MSTORE
1605 PUSH1 0x20
1607 ADD
1608 PUSH1 0x00
1610 SHA3
1611 PUSH1 0x00
1613 DUP3
1614 DUP3
1615 DUP3
1616 POP
1617 SLOAD
1618 SUB
1619 DUP19
1620 POP
1621 POP
1622 DUP2
1623 DUP17
1624 SSTORE
1625 POP
1626 DUP2
1627 PUSH1 0x05
1629 PUSH1 0x00
1631 POP
1632 PUSH1 0x00
1634 DUP6
1635 PUSH1 0x01
1637 PUSH1 0xa0
1639 PUSH1 0x02
1641 EXP
1642 SUB
1643 AND
1644 DUP2
1645 MSTORE
1646 PUSH1 0x20
1648 ADD
1649 DUP17
1650 DUP2
1651 MSTORE
1652 PUSH1 0x20
1654 ADD
1655 PUSH1 0x00
1657 SHA3
1658 PUSH1 0x00
1660 DUP3
1661 DUP3
1662 DUP3
1663 POP
1664 SLOAD
1665 ADD
1666 DUP19
1667 POP
1668 POP
1669 DUP2
1670 DUP17
1671 SSTORE
1672 POP
1673 DUP2
1674 PUSH1 0x08
1676 PUSH1 0x00
1678 POP
1679 PUSH1 0x00
1681 DUP7
1682 PUSH1 0x01
1684 PUSH1 0xa0
1686 PUSH1 0x02
1688 EXP
1689 SUB
1690 AND
1691 DUP2
1692 MSTORE
1693 PUSH1 0x20
1695 ADD
1696 DUP17
1697 DUP2
1698 MSTORE
1699 PUSH1 0x20
1701 ADD
1702 PUSH1 0x00
1704 SHA3
1705 PUSH1 0x00
1707 POP
1708 PUSH1 0x00
1710 CALLER
1711 PUSH1 0x01
1713 PUSH1 0xa0
1715 PUSH1 0x02
1717 EXP
1718 SUB
1719 AND
1720 DUP2
1721 MSTORE
1722 PUSH1 0x20
1724 ADD
1725 DUP17
1726 DUP2
1727 MSTORE
1728 PUSH1 0x20
1730 ADD
1731 PUSH1 0x00
1733 SHA3
1734 PUSH1 0x00
1736 DUP3
1737 DUP3
1738 DUP3
1739 POP
1740 SLOAD
1741 ADD
1742 DUP19
1743 POP
1744 POP
1745 DUP2
1746 DUP17
1747 SSTORE
1748 POP
1749 DUP3
1750 PUSH1 0x01
1752 PUSH1 0xa0
1754 PUSH1 0x02
1756 EXP
1757 SUB
1758 AND
1759 CALLER
1760 PUSH1 0x01
1762 PUSH1 0xa0
1764 PUSH1 0x02
1766 EXP
1767 SUB
1768 AND
1769 PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1802 DUP5
1803 PUSH1 0x40
1805 MLOAD
1806 DUP1
1807 DUP3
1808 DUP2
1809 MSTORE
1810 PUSH1 0x20
1812 ADD
1813 DUP18
1814 POP
1815 POP
1816 PUSH1 0x40
1818 MLOAD
1819 DUP1
1820 DUP18
1821 SUB
1822 DUP17
1823 LOG3
1824 DUP20
1825 DUP19
1826 POP
1827 POP
1828 POP
1829 JUMP
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} if(pc>=740 && pc<=830) console.log(String(pc).padStart(4), name.padEnd(12), arg); pc=next;}
NODE" in /tmp/codex-ry7p50js
succeeded in 0ms:
740 SHA3
741 DUP17
742 DUP19
743 MSTORE
744 PUSH1 0x24
746 CALLDATALOAD
747 DUP2
748 MSTORE
749 SHA3
750 SLOAD
751 PUSH2 0x0169
754 DUP17
755 DUP2
756 JUMP
757 JUMPDEST
758 PUSH2 0x033a
761 PUSH1 0x04
763 CALLDATALOAD
764 PUSH1 0x24
766 CALLDATALOAD
767 PUSH1 0x00
769 SLOAD
770 CALLER
771 PUSH1 0x01
773 PUSH1 0xa0
775 PUSH1 0x02
777 EXP
778 SUB
779 DUP17
780 DUP2
781 AND
782 DUP18
783 AND
784 EQ
785 PUSH2 0x0550
788 JUMPI
789 PUSH2 0x0002
792 JUMP
793 JUMPDEST
794 PUSH2 0x033a
797 PUSH1 0x04
799 CALLDATALOAD
800 PUSH1 0x00
802 SLOAD
803 CALLER
804 PUSH1 0x01
806 PUSH1 0xa0
808 PUSH1 0x02
810 EXP
811 SUB
812 DUP17
813 DUP2
814 AND
815 DUP18
816 AND
817 EQ
818 PUSH2 0x03aa
821 JUMPI
822 PUSH2 0x0002
825 JUMP
826 JUMPDEST
827 STOP
828 JUMPDEST
829 PUSH1 0x40
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} if(pc>=1360 && pc<=1445) console.log(String(pc).padStart(4), name.padEnd(12), arg); pc=next;}
NODE" in /tmp/codex-ry7p50js
succeeded in 0ms:
1360 JUMPDEST
1361 PUSH1 0x01
1363 PUSH1 0xa0
1365 PUSH1 0x02
1367 EXP
1368 SUB
1369 DUP3
1370 AND
1371 PUSH1 0x00
1373 DUP2
1374 DUP2
1375 MSTORE
1376 PUSH1 0x06
1378 PUSH1 0x20
1380 MSTORE
1381 PUSH1 0x40
1383 DUP17
1384 DUP2
1385 DUP17
1386 SHA3
1387 DUP1
1388 SLOAD
1389 PUSH1 0xff
1391 NOT
1392 AND
1393 DUP5
1394 OR
1395 DUP17
1396 SSTORE
1397 PUSH1 0x60
1399 DUP18
1400 DUP3
1401 MSTORE
1402 PUSH1 0x80
1404 DUP4
1405 DUP17
1406 MSTORE
1407 PUSH32 0x48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a5
1440 DUP18
1441 LOG1
1442 POP
1443 POP
1444 JUMP
1445 JUMPDEST
exec
/bin/bash -lc "sed -n '3495,3565p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
succeeded in 0ms:
"writes": 10
},
"version": "analysis_artifact_v1"
},
"block_number": null,
"chain_id": 1,
"codehash": "0x4eda19d90eb0bf571aaa19f9e6af1db5923c49ed28c24eead1dcafdc90ad852f",
"created_at": "2026-04-04T19:53:10.000000Z",
"id": 1973,
"updated_at": "2026-04-04T19:53:10.000000Z",
"version": "analysis_artifact_v1"
},
"analysis_run": {
"address": "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790",
"block_number": null,
"chain_id": 1,
"child_links": [],
"created_at": "2025-12-19T20:03:53.000000Z",
"id": "019b3836-2d81-72b3-ba7f-1259b9b4588e",
"parent_links": [],
"status": "running",
"updated_at": "2026-04-04T19:53:10.000000Z"
},
"artifact": {
"codehash": "0x4eda19d90eb0bf571aaa19f9e6af1db5923c49ed28c24eead1dcafdc90ad852f",
"compiler_json": {
"etherscan": {
"skipped": true
}
},
"implementation_address": null,
"is_proxy": false,
"runtime_bytecode": {
"full": "0x606060405236156100b95760e060020a600035046306fdde0381146100dc578063095ea7b31461013857806318160ddd1461017357806323b872dd1461017c578063313ce567146101ae57806370a08231146101ba57806379c65068146101d25780638da5cb5b146101f657806395d89b4114610208578063a9059cbb14610261578063b414d4b614610290578063dc3080f2146102ab578063dd62ed3e146102d0578063e724529c146102f5578063f2fde38b14610319575b61033a60008054600160a060020a03169034606082818181858883f15050505050565b61033c600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156103f75780601f106103cc576101008083540402835291602001916103f7565b33600160a060020a039081166000908152600760209081526040808320600435909416835292905290812060243590555b6060908152602090f35b61016960045481565b610169600435602435604435600160a060020a038316600090815260056020526040812054829010156105a557610002565b61016960035460ff1681565b61016960043560056020526000908152604090205481565b61033a60043560243560005433600160a060020a039081169116146104f457610002565b610169600054600160a060020a031681565b61033c600280546020601f600019600184161561010002019092168390049182018190040260809081016040526060828152929190828280156103f75780601f106103cc576101008083540402835291602001916103f7565b61033a60043560243533600160a060020a0316600090815260056020526040902054819010156103ff57610002565b61016960043560066020526000908152604090205460ff1681565b6008602090815260043560009081526040808220909252602435815220546101699081565b6007602090815260043560009081526040808220909252602435815220546101699081565b61033a60043560243560005433600160a060020a0390811691161461055057610002565b61033a60043560005433600160a060020a039081169116146103aa57610002565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561039c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000805473ffffffffffffffffffffffffffffffffffffffff19168217905550565b820191906000526020600020905b8154815290600101906020018083116103da57829003601f168201915b505050505081565b600160a060020a03821660009081526040902054808201101561042157610002565b33600160a060020a031660009081526006602052604090205460ff161561044757610002565b806005600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806005600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600160a060020a0382811660008181526005602090815260408220805486019055600480548601905590546060858152929316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a35050565b600160a060020a03821660008181526006602052604090819020805460ff191684179055606091825260808390527f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a591a15050565b600160a060020a0383168152604081205482810110156105c457610002565b600160a060020a03841681526006602052604081205460ff16156105e757610002565b60076020908152604080832033600160a060020a039081168086529184528285205490881685526008845282852091855292528220548301111561062a57610002565b816005600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816005600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816008600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056",
"head": null,
"length": 3662,
"tail": null,
"truncated": false
},
"verified_source": false
},
"capability_graph": {
"address": "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790",
"block_number": null,
"chain_id": 1,
"codehash": "0x4eda19d90eb0bf571aaa19f9e6af1db5923c49ed28c24eead1dcafdc90ad852f",
"created_at": "2026-04-04T19:53:10.000000Z",
"graph_hash": "0x849232a8bdcf2d3bca91d0c41631acbbc5cbc63614a329bbce266d24c343a438",
"graph_json": {
"edges": [
{
"from": "bb:0",
"to": "bb:185",
"type": "control_flow"
},
{
"from": "bb:0",
"to": "bb:11",
"type": "control_flow_fallthrough"
},
{
"from": "bb:11",
"to": "bb:220",
"type": "control_flow"
},
{
"from": "bb:11",
"to": "bb:31",
"type": "control_flow_fallthrough"
},
{
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} if(pc>=466 && pc<=520) console.log(String(pc).padStart(4), name.padEnd(12), arg); pc=next;}
NODE" in /tmp/codex-ry7p50js
succeeded in 0ms:
466 JUMPDEST
467 PUSH2 0x033a
470 PUSH1 0x04
472 CALLDATALOAD
473 PUSH1 0x24
475 CALLDATALOAD
476 PUSH1 0x00
478 SLOAD
479 CALLER
480 PUSH1 0x01
482 PUSH1 0xa0
484 PUSH1 0x02
486 EXP
487 SUB
488 DUP17
489 DUP2
490 AND
491 DUP18
492 AND
493 EQ
494 PUSH2 0x04f4
497 JUMPI
498 PUSH2 0x0002
501 JUMP
502 JUMPDEST
503 PUSH2 0x0169
506 PUSH1 0x00
508 SLOAD
509 PUSH1 0x01
511 PUSH1 0xa0
513 PUSH1 0x02
515 EXP
516 SUB
517 AND
518 DUP2
519 JUMP
520 JUMPDEST
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'};
for(let i=1;i<=32;i++) ops[0x5f+i]='PUSH'+i;
for(let i=1;i<=16;i++){ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} if((pc>=185&&pc<=220)||(pc>=466&&pc<=520)||(pc>=609&&pc<=682)||(pc>=757&&pc<=827)||(pc>=1023&&pc<=1095)||(pc>=1268&&pc<=1445)||(pc>=1445&&pc<=1830)) console.log(String(pc).padStart(4), name.padEnd(12), arg); pc=next;}
NODE" in /tmp/codex-ry7p50js
succeeded in 0ms:
185 JUMPDEST
186 PUSH2 0x033a
189 PUSH1 0x00
191 DUP1
192 SLOAD
193 PUSH1 0x01
195 PUSH1 0xa0
197 PUSH1 0x02
199 EXP
200 SUB
201 AND
202 SWAP1
203 CALLVALUE
204 PUSH1 0x60
206 DUP3
207 DUP2
208 DUP2
209 DUP2
210 DUP6
211 DUP9
212 DUP4
213 CALL
214 POP
215 POP
216 POP
217 POP
218 POP
219 JUMP
220 JUMPDEST
466 JUMPDEST
467 PUSH2 0x033a
470 PUSH1 0x04
472 CALLDATALOAD
473 PUSH1 0x24
475 CALLDATALOAD
476 PUSH1 0x00
478 SLOAD
479 CALLER
480 PUSH1 0x01
482 PUSH1 0xa0
484 PUSH1 0x02
486 EXP
487 SUB
488 SWAP1
489 DUP2
490 AND
491 SWAP2
492 AND
493 EQ
494 PUSH2 0x04f4
497 JUMPI
498 PUSH2 0x0002
501 JUMP
502 JUMPDEST
503 PUSH2 0x0169
506 PUSH1 0x00
508 SLOAD
509 PUSH1 0x01
511 PUSH1 0xa0
513 PUSH1 0x02
515 EXP
516 SUB
517 AND
518 DUP2
519 JUMP
520 JUMPDEST
609 JUMPDEST
610 PUSH2 0x033a
613 PUSH1 0x04
615 CALLDATALOAD
616 PUSH1 0x24
618 CALLDATALOAD
619 CALLER
620 PUSH1 0x01
622 PUSH1 0xa0
624 PUSH1 0x02
626 EXP
627 SUB
628 AND
629 PUSH1 0x00
631 SWAP1
632 DUP2
633 MSTORE
634 PUSH1 0x05
636 PUSH1 0x20
638 MSTORE
639 PUSH1 0x40
641 SWAP1
642 SHA3
643 SLOAD
644 DUP2
645 SWAP1
646 LT
647 ISZERO
648 PUSH2 0x03ff
651 JUMPI
652 PUSH2 0x0002
655 JUMP
656 JUMPDEST
657 PUSH2 0x0169
660 PUSH1 0x04
662 CALLDATALOAD
663 PUSH1 0x06
665 PUSH1 0x20
667 MSTORE
668 PUSH1 0x00
670 SWAP1
671 DUP2
672 MSTORE
673 PUSH1 0x40
675 SWAP1
676 SHA3
677 SLOAD
678 PUSH1 0xff
680 AND
681 DUP2
682 JUMP
757 JUMPDEST
758 PUSH2 0x033a
761 PUSH1 0x04
763 CALLDATALOAD
764 PUSH1 0x24
766 CALLDATALOAD
767 PUSH1 0x00
769 SLOAD
770 CALLER
771 PUSH1 0x01
773 PUSH1 0xa0
775 PUSH1 0x02
777 EXP
778 SUB
779 SWAP1
780 DUP2
781 AND
782 SWAP2
783 AND
784 EQ
785 PUSH2 0x0550
788 JUMPI
789 PUSH2 0x0002
792 JUMP
793 JUMPDEST
794 PUSH2 0x033a
797 PUSH1 0x04
799 CALLDATALOAD
800 PUSH1 0x00
802 SLOAD
803 CALLER
804 PUSH1 0x01
806 PUSH1 0xa0
808 PUSH1 0x02
810 EXP
811 SUB
812 SWAP1
813 DUP2
814 AND
815 SWAP2
816 AND
817 EQ
818 PUSH2 0x03aa
821 JUMPI
822 PUSH2 0x0002
825 JUMP
826 JUMPDEST
827 STOP
1023 JUMPDEST
1024 PUSH1 0x01
1026 PUSH1 0xa0
1028 PUSH1 0x02
1030 EXP
1031 SUB
1032 DUP3
1033 AND
1034 PUSH1 0x00
1036 SWAP1
1037 DUP2
1038 MSTORE
1039 PUSH1 0x40
1041 SWAP1
1042 SHA3
1043 SLOAD
1044 DUP1
1045 DUP3
1046 ADD
1047 LT
1048 ISZERO
1049 PUSH2 0x0421
1052 JUMPI
1053 PUSH2 0x0002
1056 JUMP
1057 JUMPDEST
1058 CALLER
1059 PUSH1 0x01
1061 PUSH1 0xa0
1063 PUSH1 0x02
1065 EXP
1066 SUB
1067 AND
1068 PUSH1 0x00
1070 SWAP1
1071 DUP2
1072 MSTORE
1073 PUSH1 0x06
1075 PUSH1 0x20
1077 MSTORE
1078 PUSH1 0x40
1080 SWAP1
1081 SHA3
1082 SLOAD
1083 PUSH1 0xff
1085 AND
1086 ISZERO
1087 PUSH2 0x0447
1090 JUMPI
1091 PUSH2 0x0002
1094 JUMP
1095 JUMPDEST
1268 JUMPDEST
1269 PUSH1 0x01
1271 PUSH1 0xa0
1273 PUSH1 0x02
1275 EXP
1276 SUB
1277 DUP3
1278 DUP2
1279 AND
1280 PUSH1 0x00
1282 DUP2
1283 DUP2
1284 MSTORE
1285 PUSH1 0x05
1287 PUSH1 0x20
1289 SWAP1
1290 DUP2
1291 MSTORE
1292 PUSH1 0x40
1294 DUP3
1295 SHA3
1296 DUP1
1297 SLOAD
1298 DUP7
1299 ADD
1300 SWAP1
1301 SSTORE
1302 PUSH1 0x04
1304 DUP1
1305 SLOAD
1306 DUP7
1307 ADD
1308 SWAP1
1309 SSTORE
1310 SWAP1
1311 SLOAD
1312 PUSH1 0x60
1314 DUP6
1315 DUP2
1316 MSTORE
1317 SWAP3
1318 SWAP4
1319 AND
1320 SWAP2
1321 PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1354 SWAP2
1355 SWAP1
1356 LOG3
1357 POP
1358 POP
1359 JUMP
1360 JUMPDEST
1361 PUSH1 0x01
1363 PUSH1 0xa0
1365 PUSH1 0x02
1367 EXP
1368 SUB
1369 DUP3
1370 AND
1371 PUSH1 0x00
1373 DUP2
1374 DUP2
1375 MSTORE
1376 PUSH1 0x06
1378 PUSH1 0x20
1380 MSTORE
1381 PUSH1 0x40
1383 SWAP1
1384 DUP2
1385 SWAP1
1386 SHA3
1387 DUP1
1388 SLOAD
1389 PUSH1 0xff
1391 NOT
1392 AND
1393 DUP5
1394 OR
1395 SWAP1
1396 SSTORE
1397 PUSH1 0x60
1399 SWAP2
1400 DUP3
1401 MSTORE
1402 PUSH1 0x80
1404 DUP4
1405 SWAP1
1406 MSTORE
1407 PUSH32 0x48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a5
1440 SWAP2
1441 LOG1
1442 POP
1443 POP
1444 JUMP
1445 JUMPDEST
1446 PUSH1 0x01
1448 PUSH1 0xa0
1450 PUSH1 0x02
1452 EXP
1453 SUB
1454 DUP4
1455 AND
1456 DUP2
1457 MSTORE
1458 PUSH1 0x40
1460 DUP2
1461 SHA3
1462 SLOAD
1463 DUP3
1464 DUP2
1465 ADD
1466 LT
1467 ISZERO
1468 PUSH2 0x05c4
1471 JUMPI
1472 PUSH2 0x0002
1475 JUMP
1476 JUMPDEST
1477 PUSH1 0x01
1479 PUSH1 0xa0
1481 PUSH1 0x02
1483 EXP
1484 SUB
1485 DUP5
1486 AND
1487 DUP2
1488 MSTORE
1489 PUSH1 0x06
1491 PUSH1 0x20
1493 MSTORE
1494 PUSH1 0x40
1496 DUP2
1497 SHA3
1498 SLOAD
1499 PUSH1 0xff
1501 AND
1502 ISZERO
1503 PUSH2 0x05e7
1506 JUMPI
1507 PUSH2 0x0002
1510 JUMP
1511 JUMPDEST
1512 PUSH1 0x07
1514 PUSH1 0x20
1516 SWAP1
1517 DUP2
1518 MSTORE
1519 PUSH1 0x40
1521 DUP1
1522 DUP4
1523 SHA3
1524 CALLER
1525 PUSH1 0x01
1527 PUSH1 0xa0
1529 PUSH1 0x02
1531 EXP
1532 SUB
1533 SWAP1
1534 DUP2
1535 AND
1536 DUP1
1537 DUP7
1538 MSTORE
1539 SWAP2
1540 DUP5
1541 MSTORE
1542 DUP3
1543 DUP6
1544 SHA3
1545 SLOAD
1546 SWAP1
1547 DUP9
1548 AND
1549 DUP6
1550 MSTORE
1551 PUSH1 0x08
1553 DUP5
1554 MSTORE
1555 DUP3
1556 DUP6
1557 SHA3
1558 SWAP2
1559 DUP6
1560 MSTORE
1561 SWAP3
1562 MSTORE
1563 DUP3
1564 SHA3
1565 SLOAD
1566 DUP4
1567 ADD
1568 GT
1569 ISZERO
1570 PUSH2 0x062a
1573 JUMPI
1574 PUSH2 0x0002
1577 JUMP
1578 JUMPDEST
1579 DUP2
1580 PUSH1 0x05
1582 PUSH1 0x00
1584 POP
1585 PUSH1 0x00
1587 DUP7
1588 PUSH1 0x01
1590 PUSH1 0xa0
1592 PUSH1 0x02
1594 EXP
1595 SUB
1596 AND
1597 DUP2
1598 MSTORE
1599 PUSH1 0x20
1601 ADD
1602 SWAP1
1603 DUP2
1604 MSTORE
1605 PUSH1 0x20
1607 ADD
1608 PUSH1 0x00
1610 SHA3
1611 PUSH1 0x00
1613 DUP3
1614 DUP3
1615 DUP3
1616 POP
1617 SLOAD
1618 SUB
1619 SWAP3
1620 POP
1621 POP
1622 DUP2
1623 SWAP1
1624 SSTORE
1625 POP
1626 DUP2
1627 PUSH1 0x05
1629 PUSH1 0x00
1631 POP
1632 PUSH1 0x00
1634 DUP6
1635 PUSH1 0x01
1637 PUSH1 0xa0
1639 PUSH1 0x02
1641 EXP
1642 SUB
1643 AND
1644 DUP2
1645 MSTORE
1646 PUSH1 0x20
1648 ADD
1649 SWAP1
1650 DUP2
1651 MSTORE
1652 PUSH1 0x20
1654 ADD
1655 PUSH1 0x00
1657 SHA3
1658 PUSH1 0x00
1660 DUP3
1661 DUP3
1662 DUP3
1663 POP
1664 SLOAD
1665 ADD
1666 SWAP3
1667 POP
1668 POP
1669 DUP2
1670 SWAP1
1671 SSTORE
1672 POP
1673 DUP2
1674 PUSH1 0x08
1676 PUSH1 0x00
1678 POP
1679 PUSH1 0x00
1681 DUP7
1682 PUSH1 0x01
1684 PUSH1 0xa0
1686 PUSH1 0x02
1688 EXP
1689 SUB
1690 AND
1691 DUP2
1692 MSTORE
1693 PUSH1 0x20
1695 ADD
1696 SWAP1
1697 DUP2
1698 MSTORE
1699 PUSH1 0x20
1701 ADD
1702 PUSH1 0x00
1704 SHA3
1705 PUSH1 0x00
1707 POP
1708 PUSH1 0x00
1710 CALLER
1711 PUSH1 0x01
1713 PUSH1 0xa0
1715 PUSH1 0x02
1717 EXP
1718 SUB
1719 AND
1720 DUP2
1721 MSTORE
1722 PUSH1 0x20
1724 ADD
1725 SWAP1
1726 DUP2
1727 MSTORE
1728 PUSH1 0x20
1730 ADD
1731 PUSH1 0x00
1733 SHA3
1734 PUSH1 0x00
1736 DUP3
1737 DUP3
1738 DUP3
1739 POP
1740 SLOAD
1741 ADD
1742 SWAP3
1743 POP
1744 POP
1745 DUP2
1746 SWAP1
1747 SSTORE
1748 POP
1749 DUP3
1750 PUSH1 0x01
1752 PUSH1 0xa0
1754 PUSH1 0x02
1756 EXP
1757 SUB
1758 AND
1759 CALLER
1760 PUSH1 0x01
1762 PUSH1 0xa0
1764 PUSH1 0x02
1766 EXP
1767 SUB
1768 AND
1769 PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1802 DUP5
1803 PUSH1 0x40
1805 MLOAD
1806 DUP1
1807 DUP3
1808 DUP2
1809 MSTORE
1810 PUSH1 0x20
1812 ADD
1813 SWAP2
1814 POP
1815 POP
1816 PUSH1 0x40
1818 MLOAD
1819 DUP1
1820 SWAP2
1821 SUB
1822 SWAP1
1823 LOG3
1824 SWAP4
1825 SWAP3
1826 POP
1827 POP
1828 POP
1829 JUMP
exec
/bin/bash -lc "node - <<'NODE'
for (const n of [213,312,466,497,609,656,720,757,785,793,938,1023,1057,1078,1268,1360,1445,1476,1494,1511,1578,1673,1747]) console.log(n,'0x'+n.toString(16));
NODE" in /tmp/codex-ry7p50js
succeeded in 0ms:
213 0xd5
312 0x138
466 0x1d2
497 0x1f1
609 0x261
656 0x290
720 0x2d0
757 0x2f5
785 0x311
793 0x319
938 0x3aa
1023 0x3ff
1057 0x421
1078 0x436
1268 0x4f4
1360 0x550
1445 0x5a5
1476 0x5c4
1494 0x5d6
1511 0x5e7
1578 0x62a
1673 0x689
1747 0x6d3
codex
{"no_findings":false,"summary":"BYTECODE_BUNDLE describes a non-proxy ERC20-like contract. The material risks are owner-controlled token administration and a non-standard allowance model; the two reported CALL sites are not the primary issue here because one is the old-Solidity identity-precompile string copy helper and the other is a payable fallback path.","findings":[{"severity":"high","category":"access_control","title":"Owner-only mint can arbitrarily inflate supply","exploit_scenario":"Best-effort selector inference from bytecode: selector 0x79c65068 behaves like an owner-only mint(address,uint256). Whoever controls slot 0 can mint arbitrary balances to themselves or an accomplice, then dump the new supply against holders. This is a direct accounting/inflation risk, not just an admin convenience.","recommendation":"If unlimited minting is not intended, remove this path entirely or hard-cap supply in bytecode. If minting is intended, gate it behind stronger governance/timelock controls and make the privilege explicit to integrators and holders.","evidence":"Selector 0x79c65068 enters at pc 0x1d2. It checks CALLER against slot 0 ownership at pc 0x1f1, then jumps to pc 0x4f4, where slot 5 (balances) is increased and slot 4 (total supply) is increased before emitting a Transfer event from the zero address. BYTECODE_BUNDLE also shows owner() at selector 0x8da5cb5b reading slot 0.","locations":["selector:0x79c65068","selector:0x8da5cb5b","pc:0x1f1","pc:0x4f4"]},{"severity":"high","category":"access_control","title":"Owner can freeze arbitrary senders via a hidden boolean mapping","exploit_scenario":"Best-effort selector inference: selector 0xe724529c is an owner-only setter for a boolean mapping in slot 6, and both transfer paths reject when that flag is set. An owner can let users buy/receive tokens and later freeze them so they cannot transfer or sell.","recommendation":"Remove sender-freeze logic unless it is an explicit, disclosed requirement. If a compliance blacklist is required, place it behind transparent governance, emit standard indexed events, and document that transfers can be blocked.","evidence":"Selector 0xe724529c checks slot 0 ownership at pc 0x311 and writes a byte into slot 6 at pc 0x550. transfer(selector 0xa9059cbb) checks slot6[msg.sender] == 0 at pc 0x421-0x447. transferFrom(selector 0x23b872dd) checks slot6[from] == 0 at pc 0x5c4-0x5e7. Selector 0xb414d4b6 reads the same slot-6 mapping, consistent with a public status getter.","locations":["selector:0xe724529c","selector:0xa9059cbb","selector:0x23b872dd","selector:0xb414d4b6","pc:0x311","pc:0x550","pc:0x421","pc:0x5c4"]},{"severity":"medium","category":"other","title":"allowance() does not track remaining spend; transferFrom uses a separate spent-amount mapping","exploit_scenario":"The contract appears to store approved amount in one mapping and cumulative spent amount in another. After partial spending, allowance() still returns the original approved value instead of the remaining allowance. Integrations that trust allowance() can submit transferFrom calls that revert unexpectedly, causing operational DoS or stuck flows.","recommendation":"Use standard ERC20 allowance accounting: either decrement the allowance mapping on each transferFrom, or have allowance() return approved minus spent and reset spent state when approve changes the allowance. Also emit a standard Approval event on approve/consumption if compatibility matters.","evidence":"approve(selector 0x095ea7b3) writes the user-supplied amount into slot 7 at pc 0x138. allowance(selector 0xdd62ed3e) reads raw slot 7 at pc 0x2d0. transferFrom(selector 0x23b872dd) validates amount using slot7[from][spender] and slot8[from][spender] at pc 0x5e7-0x62a, then increments slot 8 at pc 0x689-0x6d3. It never decrements slot 7, so the public allowance view does not appear to return remaining allowance.","locations":["selector:0x095ea7b3","selector:0xdd62ed3e","selector:0x23b872dd","pc:0x138","pc:0x2d0","pc:0x5e7","pc:0x689"]}]}
tokens used
58,638
{
"codex": {
"ran_at": "2026-04-05T02:41:13.677020+00:00",
"returncode": 0
},
"project": {
"mode": "bytecode",
"bytecode_length": 3662,
"bytecode_truncated": false,
"capability_graph_present": true,
"analysis_artifact_present": true
},
"summary": "BYTECODE_BUNDLE describes a non-proxy ERC20-like contract. The material risks are owner-controlled token administration and a non-standard allowance model; the two reported CALL sites are not the primary issue here because one is the old-Solidity identity-precompile string copy helper and the other is a payable fallback path.",
"raw_final": {
"summary": "BYTECODE_BUNDLE describes a non-proxy ERC20-like contract. The material risks are owner-controlled token administration and a non-standard allowance model; the two reported CALL sites are not the primary issue here because one is the old-Solidity identity-precompile string copy helper and the other is a payable fallback path.",
"findings": [
{
"title": "Owner-only mint can arbitrarily inflate supply",
"category": "access_control",
"evidence": "Selector 0x79c65068 enters at pc 0x1d2. It checks CALLER against slot 0 ownership at pc 0x1f1, then jumps to pc 0x4f4, where slot 5 (balances) is increased and slot 4 (total supply) is increased before emitting a Transfer event from the zero address. BYTECODE_BUNDLE also shows owner() at selector 0x8da5cb5b reading slot 0.",
"severity": "high",
"locations": [
"selector:0x79c65068",
"selector:0x8da5cb5b",
"pc:0x1f1",
"pc:0x4f4"
],
"recommendation": "If unlimited minting is not intended, remove this path entirely or hard-cap supply in bytecode. If minting is intended, gate it behind stronger governance/timelock controls and make the privilege explicit to integrators and holders.",
"exploit_scenario": "Best-effort selector inference from bytecode: selector 0x79c65068 behaves like an owner-only mint(address,uint256). Whoever controls slot 0 can mint arbitrary balances to themselves or an accomplice, then dump the new supply against holders. This is a direct accounting/inflation risk, not just an admin convenience."
},
{
"title": "Owner can freeze arbitrary senders via a hidden boolean mapping",
"category": "access_control",
"evidence": "Selector 0xe724529c checks slot 0 ownership at pc 0x311 and writes a byte into slot 6 at pc 0x550. transfer(selector 0xa9059cbb) checks slot6[msg.sender] == 0 at pc 0x421-0x447. transferFrom(selector 0x23b872dd) checks slot6[from] == 0 at pc 0x5c4-0x5e7. Selector 0xb414d4b6 reads the same slot-6 mapping, consistent with a public status getter.",
"severity": "high",
"locations": [
"selector:0xe724529c",
"selector:0xa9059cbb",
"selector:0x23b872dd",
"selector:0xb414d4b6",
"pc:0x311",
"pc:0x550",
"pc:0x421",
"pc:0x5c4"
],
"recommendation": "Remove sender-freeze logic unless it is an explicit, disclosed requirement. If a compliance blacklist is required, place it behind transparent governance, emit standard indexed events, and document that transfers can be blocked.",
"exploit_scenario": "Best-effort selector inference: selector 0xe724529c is an owner-only setter for a boolean mapping in slot 6, and both transfer paths reject when that flag is set. An owner can let users buy/receive tokens and later freeze them so they cannot transfer or sell."
},
{
"title": "allowance() does not track remaining spend; transferFrom uses a separate spent-amount mapping",
"category": "other",
"evidence": "approve(selector 0x095ea7b3) writes the user-supplied amount into slot 7 at pc 0x138. allowance(selector 0xdd62ed3e) reads raw slot 7 at pc 0x2d0. transferFrom(selector 0x23b872dd) validates amount using slot7[from][spender] and slot8[from][spender] at pc 0x5e7-0x62a, then increments slot 8 at pc 0x689-0x6d3. It never decrements slot 7, so the public allowance view does not appear to return remaining allowance.",
"severity": "medium",
"locations": [
"selector:0x095ea7b3",
"selector:0xdd62ed3e",
"selector:0x23b872dd",
"pc:0x138",
"pc:0x2d0",
"pc:0x5e7",
"pc:0x689"
],
"recommendation": "Use standard ERC20 allowance accounting: either decrement the allowance mapping on each transferFrom, or have allowance() return approved minus spent and reset spent state when approve changes the allowance. Also emit a standard Approval event on approve/consumption if compatibility matters.",
"exploit_scenario": "The contract appears to store approved amount in one mapping and cumulative spent amount in another. After partial spending, allowance() still returns the original approved value instead of the remaining allowance. Integrations that trust allowance() can submit transferFrom calls that revert unexpectedly, causing operational DoS or stuck flows."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x00b9 0000000a: JUMPI 0000000b: PUSH1 0xe0 0000000d: PUSH1 0x02 0000000f: EXP 00000010: PUSH1 0x00 00000012: CALLDATALOAD 00000013: DIV 00000014: PUSH4 0x06fdde03 00000019: DUP2 0000001a: EQ 0000001b: PUSH2 0x00dc 0000001e: JUMPI 0000001f: DUP1 00000020: PUSH4 0x095ea7b3 00000025: EQ 00000026: PUSH2 0x0138 00000029: JUMPI 0000002a: DUP1 0000002b: PUSH4 0x18160ddd 00000030: EQ 00000031: PUSH2 0x0173 00000034: JUMPI 00000035: DUP1 00000036: PUSH4 0x23b872dd 0000003b: EQ 0000003c: PUSH2 0x017c 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x313ce567 00000046: EQ 00000047: PUSH2 0x01ae 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x70a08231 00000051: EQ 00000052: PUSH2 0x01ba 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x79c65068 0000005c: EQ 0000005d: PUSH2 0x01d2 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x8da5cb5b 00000067: EQ 00000068: PUSH2 0x01f6 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0x95d89b41 00000072: EQ 00000073: PUSH2 0x0208 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0xa9059cbb 0000007d: EQ 0000007e: PUSH2 0x0261 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0xb414d4b6 00000088: EQ 00000089: PUSH2 0x0290 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0xdc3080f2 00000093: EQ 00000094: PUSH2 0x02ab 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xdd62ed3e 0000009e: EQ 0000009f: PUSH2 0x02d0 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0xe724529c 000000a9: EQ 000000aa: PUSH2 0x02f5 000000ad: JUMPI 000000ae: DUP1 000000af: PUSH4 0xf2fde38b 000000b4: EQ 000000b5: PUSH2 0x0319 000000b8: JUMPI 000000b9: JUMPDEST 000000ba: PUSH2 0x033a 000000bd: PUSH1 0x00 000000bf: DUP1 000000c0: SLOAD 000000c1: PUSH1 0x01 000000c3: PUSH1 0xa0 000000c5: PUSH1 0x02 000000c7: EXP 000000c8: SUB 000000c9: AND 000000ca: SWAP1 000000cb: CALLVALUE 000000cc: PUSH1 0x60 000000ce: DUP3 000000cf: DUP2 000000d0: DUP2 000000d1: DUP2 000000d2: DUP6 000000d3: DUP9 000000d4: DUP4 000000d5: CALL 000000d6: POP 000000d7: POP 000000d8: POP 000000d9: POP 000000da: POP 000000db: JUMP 000000dc: JUMPDEST 000000dd: PUSH2 0x033c 000000e0: PUSH1 0x01 000000e2: DUP1 000000e3: SLOAD 000000e4: PUSH1 0x20 000000e6: PUSH1 0x02 000000e8: DUP3 000000e9: DUP5 000000ea: AND 000000eb: ISZERO 000000ec: PUSH2 0x0100 000000ef: MUL 000000f0: PUSH1 0x00 000000f2: NOT 000000f3: ADD 000000f4: SWAP1 000000f5: SWAP3 000000f6: AND 000000f7: SWAP2 000000f8: SWAP1 000000f9: SWAP2 000000fa: DIV 000000fb: PUSH1 0x1f 000000fd: DUP2 000000fe: ADD 000000ff: DUP3 00000100: SWAP1 00000101: DIV 00000102: SWAP1 00000103: SWAP2 00000104: MUL 00000105: PUSH1 0x80 00000107: SWAP1 00000108: DUP2 00000109: ADD 0000010a: PUSH1 0x40 0000010c: MSTORE 0000010d: PUSH1 0x60 0000010f: DUP3 00000110: DUP2 00000111: MSTORE 00000112: SWAP3 00000113: SWAP2 00000114: SWAP1 00000115: DUP3 00000116: DUP3 00000117: DUP1 00000118: ISZERO 00000119: PUSH2 0x03f7 0000011c: JUMPI 0000011d: DUP1 0000011e: PUSH1 0x1f 00000120: LT 00000121: PUSH2 0x03cc 00000124: JUMPI 00000125: PUSH2 0x0100 00000128: DUP1 00000129: DUP4 0000012a: SLOAD 0000012b: DIV 0000012c: MUL 0000012d: DUP4 0000012e: MSTORE 0000012f: SWAP2 00000130: PUSH1 0x20 00000132: ADD 00000133: SWAP2 00000134: PUSH2 0x03f7 00000137: JUMP 00000138: JUMPDEST 00000139: CALLER 0000013a: PUSH1 0x01 0000013c: PUSH1 0xa0 0000013e: PUSH1 0x02 00000140: EXP 00000141: SUB 00000142: SWAP1 00000143: DUP2 00000144: AND 00000145: PUSH1 0x00 00000147: SWAP1 00000148: DUP2 00000149: MSTORE 0000014a: PUSH1 0x07 0000014c: PUSH1 0x20 0000014e: SWAP1 0000014f: DUP2 00000150: MSTORE 00000151: PUSH1 0x40 00000153: DUP1 00000154: DUP4 00000155: KECCAK256 00000156: PUSH1 0x04 00000158: CALLDATALOAD 00000159: SWAP1 0000015a: SWAP5 0000015b: AND 0000015c: DUP4 0000015d: MSTORE 0000015e: SWAP3 0000015f: SWAP1 00000160: MSTORE 00000161: SWAP1 00000162: DUP2 00000163: KECCAK256 00000164: PUSH1 0x24 00000166: CALLDATALOAD 00000167: SWAP1 00000168: SSTORE 00000169: JUMPDEST 0000016a: PUSH1 0x60 0000016c: SWAP1 0000016d: DUP2 0000016e: MSTORE 0000016f: PUSH1 0x20 00000171: SWAP1 00000172: RETURN 00000173: JUMPDEST 00000174: PUSH2 0x0169 00000177: PUSH1 0x04 00000179: SLOAD 0000017a: DUP2 0000017b: JUMP 0000017c: JUMPDEST 0000017d: PUSH2 0x0169 00000180: PUSH1 0x04 00000182: CALLDATALOAD 00000183: PUSH1 0x24 00000185: CALLDATALOAD 00000186: PUSH1 0x44 00000188: CALLDATALOAD 00000189: PUSH1 0x01 0000018b: PUSH1 0xa0 0000018d: PUSH1 0x02 0000018f: EXP 00000190: SUB 00000191: DUP4 00000192: AND 00000193: PUSH1 0x00 00000195: SWAP1 00000196: DUP2 00000197: MSTORE 00000198: PUSH1 0x05 0000019a: PUSH1 0x20 0000019c: MSTORE 0000019d: PUSH1 0x40 0000019f: DUP2 000001a0: KECCAK256 000001a1: SLOAD 000001a2: DUP3 000001a3: SWAP1 000001a4: LT 000001a5: ISZERO 000001a6: PUSH2 0x05a5 000001a9: JUMPI 000001aa: PUSH2 0x0002 000001ad: JUMP 000001ae: JUMPDEST 000001af: PUSH2 0x0169 000001b2: PUSH1 0x03 000001b4: SLOAD 000001b5: PUSH1 0xff 000001b7: AND 000001b8: DUP2 000001b9: JUMP 000001ba: JUMPDEST 000001bb: PUSH2 0x0169 000001be: PUSH1 0x04 000001c0: CALLDATALOAD 000001c1: PUSH1 0x05 000001c3: PUSH1 0x20 000001c5: MSTORE 000001c6: PUSH1 0x00 000001c8: SWAP1 000001c9: DUP2 000001ca: MSTORE 000001cb: PUSH1 0x40 000001cd: SWAP1 000001ce: KECCAK256 000001cf: SLOAD 000001d0: DUP2 000001d1: JUMP 000001d2: JUMPDEST 000001d3: PUSH2 0x033a 000001d6: PUSH1 0x04 000001d8: CALLDATALOAD 000001d9: PUSH1 0x24 000001db: CALLDATALOAD 000001dc: PUSH1 0x00 000001de: SLOAD 000001df: CALLER 000001e0: PUSH1 0x01 000001e2: PUSH1 0xa0 000001e4: PUSH1 0x02 000001e6: EXP 000001e7: SUB 000001e8: SWAP1 000001e9: DUP2 000001ea: AND 000001eb: SWAP2 000001ec: AND 000001ed: EQ 000001ee: PUSH2 0x04f4 000001f1: JUMPI 000001f2: PUSH2 0x0002 000001f5: JUMP 000001f6: JUMPDEST 000001f7: PUSH2 0x0169 000001fa: PUSH1 0x00 000001fc: SLOAD 000001fd: PUSH1 0x01 000001ff: PUSH1 0xa0 00000201: PUSH1 0x02 00000203: EXP 00000204: SUB 00000205: AND 00000206: DUP2 00000207: JUMP 00000208: JUMPDEST 00000209: PUSH2 0x033c 0000020c: PUSH1 0x02 0000020e: DUP1 0000020f: SLOAD 00000210: PUSH1 0x20 00000212: PUSH1 0x1f 00000214: PUSH1 0x00 00000216: NOT 00000217: PUSH1 0x01 00000219: DUP5 0000021a: AND 0000021b: ISZERO 0000021c: PUSH2 0x0100 0000021f: MUL 00000220: ADD 00000221: SWAP1 00000222: SWAP3 00000223: AND 00000224: DUP4 00000225: SWAP1 00000226: DIV 00000227: SWAP2 00000228: DUP3 00000229: ADD 0000022a: DUP2 0000022b: SWAP1 0000022c: DIV 0000022d: MUL 0000022e: PUSH1 0x80 00000230: SWAP1 00000231: DUP2 00000232: ADD 00000233: PUSH1 0x40 00000235: MSTORE 00000236: PUSH1 0x60 00000238: DUP3 00000239: DUP2 0000023a: MSTORE 0000023b: SWAP3 0000023c: SWAP2 0000023d: SWAP1 0000023e: DUP3 0000023f: DUP3 00000240: DUP1 00000241: ISZERO 00000242: PUSH2 0x03f7 00000245: JUMPI 00000246: DUP1 00000247: PUSH1 0x1f 00000249: LT 0000024a: PUSH2 0x03cc 0000024d: JUMPI 0000024e: PUSH2 0x0100 00000251: DUP1 00000252: DUP4 00000253: SLOAD 00000254: DIV 00000255: MUL 00000256: DUP4 00000257: MSTORE 00000258: SWAP2 00000259: PUSH1 0x20 0000025b: ADD 0000025c: SWAP2 0000025d: PUSH2 0x03f7 00000260: JUMP 00000261: JUMPDEST 00000262: PUSH2 0x033a 00000265: PUSH1 0x04 00000267: CALLDATALOAD 00000268: PUSH1 0x24 0000026a: CALLDATALOAD 0000026b: CALLER 0000026c: PUSH1 0x01 0000026e: PUSH1 0xa0 00000270: PUSH1 0x02 00000272: EXP 00000273: SUB 00000274: AND 00000275: PUSH1 0x00 00000277: SWAP1 00000278: DUP2 00000279: MSTORE 0000027a: PUSH1 0x05 0000027c: PUSH1 0x20 0000027e: MSTORE 0000027f: PUSH1 0x40 00000281: SWAP1 00000282: KECCAK256 00000283: SLOAD 00000284: DUP2 00000285: SWAP1 00000286: LT 00000287: ISZERO 00000288: PUSH2 0x03ff 0000028b: JUMPI 0000028c: PUSH2 0x0002 0000028f: JUMP 00000290: JUMPDEST 00000291: PUSH2 0x0169 00000294: PUSH1 0x04 00000296: CALLDATALOAD 00000297: PUSH1 0x06 00000299: PUSH1 0x20 0000029b: MSTORE 0000029c: PUSH1 0x00 0000029e: SWAP1 0000029f: DUP2 000002a0: MSTORE 000002a1: PUSH1 0x40 000002a3: SWAP1 000002a4: KECCAK256 000002a5: SLOAD 000002a6: PUSH1 0xff 000002a8: AND 000002a9: DUP2 000002aa: JUMP 000002ab: JUMPDEST 000002ac: PUSH1 0x08 000002ae: PUSH1 0x20 000002b0: SWAP1 000002b1: DUP2 000002b2: MSTORE 000002b3: PUSH1 0x04 000002b5: CALLDATALOAD 000002b6: PUSH1 0x00 000002b8: SWAP1 000002b9: DUP2 000002ba: MSTORE 000002bb: PUSH1 0x40 000002bd: DUP1 000002be: DUP3 000002bf: KECCAK256 000002c0: SWAP1 000002c1: SWAP3 000002c2: MSTORE 000002c3: PUSH1 0x24 000002c5: CALLDATALOAD 000002c6: DUP2 000002c7: MSTORE 000002c8: KECCAK256 000002c9: SLOAD 000002ca: PUSH2 0x0169 000002cd: SWAP1 000002ce: DUP2 000002cf: JUMP 000002d0: JUMPDEST 000002d1: PUSH1 0x07 000002d3: PUSH1 0x20 000002d5: SWAP1 000002d6: DUP2 000002d7: MSTORE 000002d8: PUSH1 0x04 000002da: CALLDATALOAD 000002db: PUSH1 0x00 000002dd: SWAP1 000002de: DUP2 000002df: MSTORE 000002e0: PUSH1 0x40 000002e2: DUP1 000002e3: DUP3 000002e4: KECCAK256 000002e5: SWAP1 000002e6: SWAP3 000002e7: MSTORE 000002e8: PUSH1 0x24 000002ea: CALLDATALOAD 000002eb: DUP2 000002ec: MSTORE 000002ed: KECCAK256 000002ee: SLOAD 000002ef: PUSH2 0x0169 000002f2: SWAP1 000002f3: DUP2 000002f4: JUMP 000002f5: JUMPDEST 000002f6: PUSH2 0x033a 000002f9: PUSH1 0x04 000002fb: CALLDATALOAD 000002fc: PUSH1 0x24 000002fe: CALLDATALOAD 000002ff: PUSH1 0x00 00000301: SLOAD 00000302: CALLER 00000303: PUSH1 0x01 00000305: PUSH1 0xa0 00000307: PUSH1 0x02 00000309: EXP 0000030a: SUB 0000030b: SWAP1 0000030c: DUP2 0000030d: AND 0000030e: SWAP2 0000030f: AND 00000310: EQ 00000311: PUSH2 0x0550 00000314: JUMPI 00000315: PUSH2 0x0002 00000318: JUMP 00000319: JUMPDEST 0000031a: PUSH2 0x033a 0000031d: PUSH1 0x04 0000031f: CALLDATALOAD 00000320: PUSH1 0x00 00000322: SLOAD 00000323: CALLER 00000324: PUSH1 0x01 00000326: PUSH1 0xa0 00000328: PUSH1 0x02 0000032a: EXP 0000032b: SUB 0000032c: SWAP1 0000032d: DUP2 0000032e: AND 0000032f: SWAP2 00000330: AND 00000331: EQ 00000332: PUSH2 0x03aa 00000335: JUMPI 00000336: PUSH2 0x0002 00000339: JUMP 0000033a: JUMPDEST 0000033b: STOP 0000033c: JUMPDEST 0000033d: PUSH1 0x40 0000033f: MLOAD 00000340: DUP1 00000341: DUP1 00000342: PUSH1 0x20 00000344: ADD 00000345: DUP3 00000346: DUP2 00000347: SUB 00000348: DUP3 00000349: MSTORE 0000034a: DUP4 0000034b: DUP2 0000034c: DUP2 0000034d: MLOAD 0000034e: DUP2 0000034f: MSTORE 00000350: PUSH1 0x20 00000352: ADD 00000353: SWAP2 00000354: POP 00000355: DUP1 00000356: MLOAD 00000357: SWAP1 00000358: PUSH1 0x20 0000035a: ADD 0000035b: SWAP1 0000035c: DUP1 0000035d: DUP4 0000035e: DUP4 0000035f: DUP3 00000360: SWAP1 00000361: PUSH1 0x00 00000363: PUSH1 0x04 00000365: PUSH1 0x20 00000367: DUP5 00000368: PUSH1 0x1f 0000036a: ADD 0000036b: DIV 0000036c: PUSH1 0x0f 0000036e: MUL 0000036f: PUSH1 0x03 00000371: ADD 00000372: CALL 00000373: POP 00000374: SWAP1 00000375: POP 00000376: SWAP1 00000377: DUP2 00000378: ADD 00000379: SWAP1 0000037a: PUSH1 0x1f 0000037c: AND 0000037d: DUP1 0000037e: ISZERO 0000037f: PUSH2 0x039c 00000382: JUMPI 00000383: DUP1 00000384: DUP3 00000385: SUB 00000386: DUP1 00000387: MLOAD 00000388: PUSH1 0x01 0000038a: DUP4 0000038b: PUSH1 0x20 0000038d: SUB 0000038e: PUSH2 0x0100 00000391: EXP 00000392: SUB 00000393: NOT 00000394: AND 00000395: DUP2 00000396: MSTORE 00000397: PUSH1 0x20 00000399: ADD 0000039a: SWAP2 0000039b: POP 0000039c: JUMPDEST 0000039d: POP 0000039e: SWAP3 0000039f: POP 000003a0: POP 000003a1: POP 000003a2: PUSH1 0x40 000003a4: MLOAD 000003a5: DUP1 000003a6: SWAP2 000003a7: SUB 000003a8: SWAP1 000003a9: RETURN 000003aa: JUMPDEST 000003ab: PUSH1 0x00 000003ad: DUP1 000003ae: SLOAD 000003af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003c4: NOT 000003c5: AND 000003c6: DUP3 000003c7: OR 000003c8: SWAP1 000003c9: SSTORE 000003ca: POP 000003cb: JUMP 000003cc: JUMPDEST 000003cd: DUP3 000003ce: ADD 000003cf: SWAP2 000003d0: SWAP1 000003d1: PUSH1 0x00 000003d3: MSTORE 000003d4: PUSH1 0x20 000003d6: PUSH1 0x00 000003d8: KECCAK256 000003d9: SWAP1 000003da: JUMPDEST 000003db: DUP2 000003dc: SLOAD 000003dd: DUP2 000003de: MSTORE 000003df: SWAP1 000003e0: PUSH1 0x01 000003e2: ADD 000003e3: SWAP1 000003e4: PUSH1 0x20 000003e6: ADD 000003e7: DUP1 000003e8: DUP4 000003e9: GT 000003ea: PUSH2 0x03da 000003ed: JUMPI 000003ee: DUP3 000003ef: SWAP1 000003f0: SUB 000003f1: PUSH1 0x1f 000003f3: AND 000003f4: DUP3 000003f5: ADD 000003f6: SWAP2 000003f7: JUMPDEST 000003f8: POP 000003f9: POP 000003fa: POP 000003fb: POP 000003fc: POP 000003fd: DUP2 000003fe: JUMP 000003ff: JUMPDEST 00000400: PUSH1 0x01 00000402: PUSH1 0xa0 00000404: PUSH1 0x02 00000406: EXP 00000407: SUB 00000408: DUP3 00000409: AND 0000040a: PUSH1 0x00 0000040c: SWAP1 0000040d: DUP2 0000040e: MSTORE 0000040f: PUSH1 0x40 00000411: SWAP1 00000412: KECCAK256 00000413: SLOAD 00000414: DUP1 00000415: DUP3 00000416: ADD 00000417: LT 00000418: ISZERO 00000419: PUSH2 0x0421 0000041c: JUMPI 0000041d: PUSH2 0x0002 00000420: JUMP 00000421: JUMPDEST 00000422: CALLER 00000423: PUSH1 0x01 00000425: PUSH1 0xa0 00000427: PUSH1 0x02 00000429: EXP 0000042a: SUB 0000042b: AND 0000042c: PUSH1 0x00 0000042e: SWAP1 0000042f: DUP2 00000430: MSTORE 00000431: PUSH1 0x06 00000433: PUSH1 0x20 00000435: MSTORE 00000436: PUSH1 0x40 00000438: SWAP1 00000439: KECCAK256 0000043a: SLOAD 0000043b: PUSH1 0xff 0000043d: AND 0000043e: ISZERO 0000043f: PUSH2 0x0447 00000442: JUMPI 00000443: PUSH2 0x0002 00000446: JUMP 00000447: JUMPDEST 00000448: DUP1 00000449: PUSH1 0x05 0000044b: PUSH1 0x00 0000044d: POP 0000044e: PUSH1 0x00 00000450: CALLER 00000451: PUSH1 0x01 00000453: PUSH1 0xa0 00000455: PUSH1 0x02 00000457: EXP 00000458: SUB 00000459: AND 0000045a: DUP2 0000045b: MSTORE 0000045c: PUSH1 0x20 0000045e: ADD 0000045f: SWAP1 00000460: DUP2 00000461: MSTORE 00000462: PUSH1 0x20 00000464: ADD 00000465: PUSH1 0x00 00000467: KECCAK256 00000468: PUSH1 0x00 0000046a: DUP3 0000046b: DUP3 0000046c: DUP3 0000046d: POP 0000046e: SLOAD 0000046f: SUB 00000470: SWAP3 00000471: POP 00000472: POP 00000473: DUP2 00000474: SWAP1 00000475: SSTORE 00000476: POP 00000477: DUP1 00000478: PUSH1 0x05 0000047a: PUSH1 0x00 0000047c: POP 0000047d: PUSH1 0x00 0000047f: DUP5 00000480: PUSH1 0x01 00000482: PUSH1 0xa0 00000484: PUSH1 0x02 00000486: EXP 00000487: SUB 00000488: AND 00000489: DUP2 0000048a: MSTORE 0000048b: PUSH1 0x20 0000048d: ADD 0000048e: SWAP1 0000048f: DUP2 00000490: MSTORE 00000491: PUSH1 0x20 00000493: ADD 00000494: PUSH1 0x00 00000496: KECCAK256 00000497: PUSH1 0x00 00000499: DUP3 0000049a: DUP3 0000049b: DUP3 0000049c: POP 0000049d: SLOAD 0000049e: ADD 0000049f: SWAP3 000004a0: POP 000004a1: POP 000004a2: DUP2 000004a3: SWAP1 000004a4: SSTORE 000004a5: POP 000004a6: DUP2 000004a7: PUSH1 0x01 000004a9: PUSH1 0xa0 000004ab: PUSH1 0x02 000004ad: EXP 000004ae: SUB 000004af: AND 000004b0: CALLER 000004b1: PUSH1 0x01 000004b3: PUSH1 0xa0 000004b5: PUSH1 0x02 000004b7: EXP 000004b8: SUB 000004b9: AND 000004ba: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 000004db: DUP4 000004dc: PUSH1 0x40 000004de: MLOAD 000004df: DUP1 000004e0: DUP3 000004e1: DUP2 000004e2: MSTORE 000004e3: PUSH1 0x20 000004e5: ADD 000004e6: SWAP2 000004e7: POP 000004e8: POP 000004e9: PUSH1 0x40 000004eb: MLOAD 000004ec: DUP1 000004ed: SWAP2 000004ee: SUB 000004ef: SWAP1 000004f0: LOG3 000004f1: POP 000004f2: POP 000004f3: JUMP 000004f4: JUMPDEST 000004f5: PUSH1 0x01 000004f7: PUSH1 0xa0 000004f9: PUSH1 0x02 000004fb: EXP 000004fc: SUB 000004fd: DUP3 000004fe: DUP2 000004ff: AND 00000500: PUSH1 0x00 00000502: DUP2 00000503: DUP2 00000504: MSTORE 00000505: PUSH1 0x05 00000507: PUSH1 0x20 00000509: SWAP1 0000050a: DUP2 0000050b: MSTORE 0000050c: PUSH1 0x40 0000050e: DUP3 0000050f: KECCAK256 00000510: DUP1 00000511: SLOAD 00000512: DUP7 00000513: ADD 00000514: SWAP1 00000515: SSTORE 00000516: PUSH1 0x04 00000518: DUP1 00000519: SLOAD 0000051a: DUP7 0000051b: ADD 0000051c: SWAP1 0000051d: SSTORE 0000051e: SWAP1 0000051f: SLOAD 00000520: PUSH1 0x60 00000522: DUP6 00000523: DUP2 00000524: MSTORE 00000525: SWAP3 00000526: SWAP4 00000527: AND 00000528: SWAP2 00000529: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 0000054a: SWAP2 0000054b: SWAP1 0000054c: LOG3 0000054d: POP 0000054e: POP 0000054f: JUMP 00000550: JUMPDEST 00000551: PUSH1 0x01 00000553: PUSH1 0xa0 00000555: PUSH1 0x02 00000557: EXP 00000558: SUB 00000559: DUP3 0000055a: AND 0000055b: PUSH1 0x00 0000055d: DUP2 0000055e: DUP2 0000055f: MSTORE 00000560: PUSH1 0x06 00000562: PUSH1 0x20 00000564: MSTORE 00000565: PUSH1 0x40 00000567: SWAP1 00000568: DUP2 00000569: SWAP1 0000056a: KECCAK256 0000056b: DUP1 0000056c: SLOAD 0000056d: PUSH1 0xff 0000056f: NOT 00000570: AND 00000571: DUP5 00000572: OR 00000573: SWAP1 00000574: SSTORE 00000575: PUSH1 0x60 00000577: SWAP2 00000578: DUP3 00000579: MSTORE 0000057a: PUSH1 0x80 0000057c: DUP4 0000057d: SWAP1 0000057e: MSTORE 0000057f: PUSH32 0x48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a5 000005a0: SWAP2 000005a1: LOG1 000005a2: POP 000005a3: POP 000005a4: JUMP 000005a5: JUMPDEST 000005a6: PUSH1 0x01 000005a8: PUSH1 0xa0 000005aa: PUSH1 0x02 000005ac: EXP 000005ad: SUB 000005ae: DUP4 000005af: AND 000005b0: DUP2 000005b1: MSTORE 000005b2: PUSH1 0x40 000005b4: DUP2 000005b5: KECCAK256 000005b6: SLOAD 000005b7: DUP3 000005b8: DUP2 000005b9: ADD 000005ba: LT 000005bb: ISZERO 000005bc: PUSH2 0x05c4 000005bf: JUMPI 000005c0: PUSH2 0x0002 000005c3: JUMP 000005c4: JUMPDEST 000005c5: PUSH1 0x01 000005c7: PUSH1 0xa0 000005c9: PUSH1 0x02 000005cb: EXP 000005cc: SUB 000005cd: DUP5 000005ce: AND 000005cf: DUP2 000005d0: MSTORE 000005d1: PUSH1 0x06 000005d3: PUSH1 0x20 000005d5: MSTORE 000005d6: PUSH1 0x40 000005d8: DUP2 000005d9: KECCAK256 000005da: SLOAD 000005db: PUSH1 0xff 000005dd: AND 000005de: ISZERO 000005df: PUSH2 0x05e7 000005e2: JUMPI 000005e3: PUSH2 0x0002 000005e6: JUMP 000005e7: JUMPDEST 000005e8: PUSH1 0x07 000005ea: PUSH1 0x20 000005ec: SWAP1 000005ed: DUP2 000005ee: MSTORE 000005ef: PUSH1 0x40 000005f1: DUP1 000005f2: DUP4 000005f3: KECCAK256 000005f4: CALLER 000005f5: PUSH1 0x01 000005f7: PUSH1 0xa0 000005f9: PUSH1 0x02 000005fb: EXP 000005fc: SUB 000005fd: SWAP1 000005fe: DUP2 000005ff: AND 00000600: DUP1 00000601: DUP7 00000602: MSTORE 00000603: SWAP2 00000604: DUP5 00000605: MSTORE 00000606: DUP3 00000607: DUP6 00000608: KECCAK256 00000609: SLOAD 0000060a: SWAP1 0000060b: DUP9 0000060c: AND 0000060d: DUP6 0000060e: MSTORE 0000060f: PUSH1 0x08 00000611: DUP5 00000612: MSTORE 00000613: DUP3 00000614: DUP6 00000615: KECCAK256 00000616: SWAP2 00000617: DUP6 00000618: MSTORE 00000619: SWAP3 0000061a: MSTORE 0000061b: DUP3 0000061c: KECCAK256 0000061d: SLOAD 0000061e: DUP4 0000061f: ADD 00000620: GT 00000621: ISZERO 00000622: PUSH2 0x062a 00000625: JUMPI 00000626: PUSH2 0x0002 00000629: JUMP 0000062a: JUMPDEST 0000062b: DUP2 0000062c: PUSH1 0x05 0000062e: PUSH1 0x00 00000630: POP 00000631: PUSH1 0x00 00000633: DUP7 00000634: PUSH1 0x01 00000636: PUSH1 0xa0 00000638: PUSH1 0x02 0000063a: EXP 0000063b: SUB 0000063c: AND 0000063d: DUP2 0000063e: MSTORE 0000063f: PUSH1 0x20 00000641: ADD 00000642: SWAP1 00000643: DUP2 00000644: MSTORE 00000645: PUSH1 0x20 00000647: ADD 00000648: PUSH1 0x00 0000064a: KECCAK256 0000064b: PUSH1 0x00 0000064d: DUP3 0000064e: DUP3 0000064f: DUP3 00000650: POP 00000651: SLOAD 00000652: SUB 00000653: SWAP3 00000654: POP 00000655: POP 00000656: DUP2 00000657: SWAP1 00000658: SSTORE 00000659: POP 0000065a: DUP2 0000065b: PUSH1 0x05 0000065d: PUSH1 0x00 0000065f: POP 00000660: PUSH1 0x00 00000662: DUP6 00000663: PUSH1 0x01 00000665: PUSH1 0xa0 00000667: PUSH1 0x02 00000669: EXP 0000066a: SUB 0000066b: AND 0000066c: DUP2 0000066d: MSTORE 0000066e: PUSH1 0x20 00000670: ADD 00000671: SWAP1 00000672: DUP2 00000673: MSTORE 00000674: PUSH1 0x20 00000676: ADD 00000677: PUSH1 0x00 00000679: KECCAK256 0000067a: PUSH1 0x00 0000067c: DUP3 0000067d: DUP3 0000067e: DUP3 0000067f: POP 00000680: SLOAD 00000681: ADD 00000682: SWAP3 00000683: POP 00000684: POP 00000685: DUP2 00000686: SWAP1 00000687: SSTORE 00000688: POP 00000689: DUP2 0000068a: PUSH1 0x08 0000068c: PUSH1 0x00 0000068e: POP 0000068f: PUSH1 0x00 00000691: DUP7 00000692: PUSH1 0x01 00000694: PUSH1 0xa0 00000696: PUSH1 0x02 00000698: EXP 00000699: SUB 0000069a: AND 0000069b: DUP2 0000069c: MSTORE 0000069d: PUSH1 0x20 0000069f: ADD 000006a0: SWAP1 000006a1: DUP2 000006a2: MSTORE 000006a3: PUSH1 0x20 000006a5: ADD 000006a6: PUSH1 0x00 000006a8: KECCAK256 000006a9: PUSH1 0x00 000006ab: POP 000006ac: PUSH1 0x00 000006ae: CALLER 000006af: PUSH1 0x01 000006b1: PUSH1 0xa0 000006b3: PUSH1 0x02 000006b5: EXP 000006b6: SUB 000006b7: AND 000006b8: DUP2 000006b9: MSTORE 000006ba: PUSH1 0x20 000006bc: ADD 000006bd: SWAP1 000006be: DUP2 000006bf: MSTORE 000006c0: PUSH1 0x20 000006c2: ADD 000006c3: PUSH1 0x00 000006c5: KECCAK256 000006c6: PUSH1 0x00 000006c8: DUP3 000006c9: DUP3 000006ca: DUP3 000006cb: POP 000006cc: SLOAD 000006cd: ADD 000006ce: SWAP3 000006cf: POP 000006d0: POP 000006d1: DUP2 000006d2: SWAP1 000006d3: SSTORE 000006d4: POP 000006d5: DUP3 000006d6: PUSH1 0x01 000006d8: PUSH1 0xa0 000006da: PUSH1 0x02 000006dc: EXP 000006dd: SUB 000006de: AND 000006df: CALLER 000006e0: PUSH1 0x01 000006e2: PUSH1 0xa0 000006e4: PUSH1 0x02 000006e6: EXP 000006e7: SUB 000006e8: AND 000006e9: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 0000070a: DUP5 0000070b: PUSH1 0x40 0000070d: MLOAD 0000070e: DUP1 0000070f: DUP3 00000710: DUP2 00000711: MSTORE 00000712: PUSH1 0x20 00000714: ADD 00000715: SWAP2 00000716: POP 00000717: POP 00000718: PUSH1 0x40 0000071a: MLOAD 0000071b: DUP1 0000071c: SWAP2 0000071d: SUB 0000071e: SWAP1 0000071f: LOG3 00000720: SWAP4 00000721: SWAP3 00000722: POP 00000723: POP 00000724: POP 00000725: 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: 0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6
call_targets:
0x0000000000000000000000000000000000000004, 0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790"
],
"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": "0x095ea7b3",
"selector": "0x095ea7b3",
"calldata_variants": [
"0x095ea7b3",
"0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"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": "0x79c65068",
"selector": "0x79c65068",
"calldata_variants": [
"0x79c65068",
"0x79c650680000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 213,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 882,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 2,
"guards_detected": [],
"untrusted_call_count": 2
}
|
| high | other | detector | ETH value transfer possible | 55 | yes | yes |
viewtrace_id: 0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6
call_targets:
0x0000000000000000000000000000000000000004, 0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790"
],
"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": "0x095ea7b3",
"selector": "0x095ea7b3",
"calldata_variants": [
"0x095ea7b3",
"0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"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": "0x79c65068",
"selector": "0x79c65068",
"calldata_variants": [
"0x79c65068",
"0x79c650680000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 213,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 882,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": []
}
|
| high | access_control | codex | Owner-only mint can arbitrarily inflate supply | 85 | no | — |
viewevidence_json{
"evidence": "Selector 0x79c65068 enters at pc 0x1d2. It checks CALLER against slot 0 ownership at pc 0x1f1, then jumps to pc 0x4f4, where slot 5 (balances) is increased and slot 4 (total supply) is increased before emitting a Transfer event from the zero address. BYTECODE_BUNDLE also shows owner() at selector 0x8da5cb5b reading slot 0.",
"locations": [
"selector:0x79c65068",
"selector:0x8da5cb5b",
"pc:0x1f1",
"pc:0x4f4"
],
"recommendation": "If unlimited minting is not intended, remove this path entirely or hard-cap supply in bytecode. If minting is intended, gate it behind stronger governance/timelock controls and make the privilege explicit to integrators and holders.",
"exploit_scenario": "Best-effort selector inference from bytecode: selector 0x79c65068 behaves like an owner-only mint(address,uint256). Whoever controls slot 0 can mint arbitrary balances to themselves or an accomplice, then dump the new supply against holders. This is a direct accounting/inflation risk, not just an admin convenience."
}
|
| high | access_control | codex | Owner can freeze arbitrary senders via a hidden boolean mapping | 85 | no | — |
viewevidence_json{
"evidence": "Selector 0xe724529c checks slot 0 ownership at pc 0x311 and writes a byte into slot 6 at pc 0x550. transfer(selector 0xa9059cbb) checks slot6[msg.sender] == 0 at pc 0x421-0x447. transferFrom(selector 0x23b872dd) checks slot6[from] == 0 at pc 0x5c4-0x5e7. Selector 0xb414d4b6 reads the same slot-6 mapping, consistent with a public status getter.",
"locations": [
"selector:0xe724529c",
"selector:0xa9059cbb",
"selector:0x23b872dd",
"selector:0xb414d4b6",
"pc:0x311",
"pc:0x550",
"pc:0x421",
"pc:0x5c4"
],
"recommendation": "Remove sender-freeze logic unless it is an explicit, disclosed requirement. If a compliance blacklist is required, place it behind transparent governance, emit standard indexed events, and document that transfers can be blocked.",
"exploit_scenario": "Best-effort selector inference: selector 0xe724529c is an owner-only setter for a boolean mapping in slot 6, and both transfer paths reject when that flag is set. An owner can let users buy/receive tokens and later freeze them so they cannot transfer or sell."
}
|
| medium | other | codex | allowance() does not track remaining spend; transferFrom uses a separate spent-amount mapping | 75 | no | — |
viewevidence_json{
"evidence": "approve(selector 0x095ea7b3) writes the user-supplied amount into slot 7 at pc 0x138. allowance(selector 0xdd62ed3e) reads raw slot 7 at pc 0x2d0. transferFrom(selector 0x23b872dd) validates amount using slot7[from][spender] and slot8[from][spender] at pc 0x5e7-0x62a, then increments slot 8 at pc 0x689-0x6d3. It never decrements slot 7, so the public allowance view does not appear to return remaining allowance.",
"locations": [
"selector:0x095ea7b3",
"selector:0xdd62ed3e",
"selector:0x23b872dd",
"pc:0x138",
"pc:0x2d0",
"pc:0x5e7",
"pc:0x689"
],
"recommendation": "Use standard ERC20 allowance accounting: either decrement the allowance mapping on each transferFrom, or have allowance() return approved minus spent and reset spent state when approve changes the allowance. Also emit a standard Approval event on approve/consumption if compatibility matters.",
"exploit_scenario": "The contract appears to store approved amount in one mapping and cumulative spent amount in another. After partial spending, allowance() still returns the original approved value instead of the remaining allowance. Integrations that trust allowance() can submit transferFrom calls that revert unexpectedly, causing operational DoS or stuck flows."
}
|