TW
Tripwire
Find contracts. Test them. Review real vulns.

Analysis Run

019b3836-2d66-70b7-8bcd-c67d896eb78c

complete
Chain ID
1
Address
Block Number
Created
Fri, Dec 19, 2025 8:03 PM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
2
Validated
2
Source
Bytecode only
Review Backing
Present
Best current signal
Untrusted CALL target/value reachable
crit 0 high 2 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
2091 artifact.fetch complete 1 / 3 3 months ago
2092 tool.cast_disasm complete 1 / 3 3 months ago
45236 analysis.bundle complete 1 / 3 1 week ago
45237 capability.graph complete 1 / 3 1 week ago
45238 detector.run complete 1 / 3 1 week ago
45239 validation.fork complete 1 / 3 1 week ago
113238 report.consolidate complete 1 / 6 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no
Implementation:
Verified Source: no

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
3
No findings?
no
Summary
The runtime bytecode is an old Ownable/ERC20-like token, not a proxy (`is_proxy=false`) and with no `DELEGATECALL`/`SELFDESTRUCT`. The only `CALL` sink at `pc:0x357` sits inside the dynamic-string return helper and is more consistent with Solidity's legacy memory-copy/precompile pattern than a user-facing arbitrary external call. The meaningful risks visible in bytecode are strong privileged controls (minting and address freezing) plus non-standard allowance accounting.
View stdout
{"no_findings":false,"summary":"The runtime bytecode is an old Ownable/ERC20-like token, not a proxy (`is_proxy=false`) and with no `DELEGATECALL`/`SELFDESTRUCT`. The only `CALL` sink at `pc:0x357` sits inside the dynamic-string return helper and is more consistent with Solidity's legacy memory-copy/precompile pattern than a user-facing arbitrary external call. The meaningful risks visible in bytecode are strong privileged controls (minting and address freezing) plus non-standard allowance accounting.","findings":[{"severity":"high","category":"access_control","title":"Owner-controlled blacklist/freeze path can block selected holders from transferring","exploit_scenario":"If the privileged key is malicious or compromised, it can set the slot-6 flag for a target address and then that holder's outbound transfers will revert. In practice this lets the operator selectively censor exits or trap users. Selector naming is inferred from bytecode and therefore best-effort, but the storage/write and transfer-gate pattern is strong.","recommendation":"Remove the blacklist from transfer paths, or at minimum put it behind explicit governance/timelock controls and disclose it clearly as a centralization risk.","evidence":"`selector:0xe724529c` first checks `CALLER` against owner storage slot `0x00` at `pc:0x02e4`-`pc:0x02f9`, then writes a 1-byte flag into mapping slot `0x06` at `pc:0x0535`-`pc:0x0559`. `selector:0xb414d4b6` reads the same slot at `pc:0x0275`-`pc:0x028f`. The transfer path `selector:0xa9059cbb` reaches `pc:0x0407`-`pc:0x0427`, where `slot6[CALLER] & 0xff` must be zero or execution jumps to revert.","locations":["selector:0xe724529c","selector:0xb414d4b6","selector:0xa9059cbb","pc:0x0535","pc:0x0407"]},{"severity":"medium","category":"access_control","title":"Privileged mint function can inflate balances and total supply without any cap visible in bytecode","exploit_scenario":"A malicious or compromised owner can mint arbitrary amounts to any address, diluting all existing holders. From bytecode alone it is unclear whether inflation is intended token policy, so this is reported as a privileged-risk finding rather than an implementation bug.","recommendation":"If fixed supply is intended, remove the mint path entirely. Otherwise enforce an immutable cap and protect minting with governance/timelock controls instead of a single EOA-style owner.","evidence":"`selector:0x79c65068` is owner-gated by comparing `CALLER` with storage slot `0x00` at `pc:0x01c1`-`pc:0x01d6`. The target block at `pc:0x04d9`-`pc:0x0534` adds the provided amount to balance mapping slot `0x05` for the supplied address and also increments total supply in slot `0x04`, then emits a `Transfer`-style event from the zero address.","locations":["selector:0x79c65068","pc:0x01c1","pc:0x04d9","pc:0x04fb"]},{"severity":"low","category":"math","title":"Allowance accounting appears non-standard: `allowance()` returns the approved cap, while `transferFrom` tracks spending in a separate mapping","exploit_scenario":"Integrations that assume ERC-20 semantics may read `allowance(owner,spender)` and believe that full amount remains spendable even after partial `transferFrom` usage. The contract still enforces its internal limit, so the likely result is unexpected reverts / integration DoS rather than direct theft, but the externally reported allowance can be misleading.","recommendation":"Make the public allowance view return remaining spendable allowance (`approved - spent`), or decrement the approved allowance directly during `transferFrom`. If this behavior is intentional, document it prominently because it is non-standard.","evidence":"`selector:0x095ea7b3` writes approvals into mapping slot `0x07` at `pc:0x011d`-`pc:0x014d`. `selector:0xdd62ed3e` returns that same slot-7 value at `pc:0x02b5`-`pc:0x02d9`. But `transferFrom` uses both slot `0x07` and a second nested mapping at slot `0x08`: at `pc:0x05cd`-`pc:0x0609` it checks `spent + amount <= approved`, and at `pc:0x066d`-`pc:0x06b7` it increments the slot-8 spent counter. That means the effective remaining allowance is not what the standard getter reports.","locations":["selector:0x095ea7b3","selector:0xdd62ed3e","selector:0x23b872dd","selector:0xdc3080f2","pc:0x05cd","pc:0x066d"]}]}
View stderr
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-tqa46nkb
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5b7a-777d-77f1-8194-6416f279a8e8
--------
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.
  → Inspect bundle artifacts and bytecode summary
  • Assess potential security issues from evidence
  • Produce JSON findings matching schema
exec
/bin/bash -lc "pwd && rg --files -g 'BYTECODE_BUNDLE.json' -g 'AGENTS.md' -g '*.json' ." in /tmp/codex-tqa46nkb
 succeeded in 0ms:
/tmp/codex-tqa46nkb
./codex-output-schema.json
./BYTECODE_BUNDLE.json

exec
/bin/bash -lc "sed -n '1,260p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
{
  "analysis_artifact": {
    "address": "0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7",
    "artifact_hash": "0x79c01c7c16ab51e94837e9984ba9b7cbda63fa0d2ceb67e4e6595dc019f17663",
    "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": "0xae287992c64a46af013a97812e17ea5bdd6ac4a74355b86c34121fc691f13d37",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "EXP",
            "PUSH1",
            "CALLDATALOAD",
            "DIV",
            "PUSH4",
            "OP_81",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 11
        },
        {
          "end_pc": 41,
          "hash": "0x28a708853b74ece000fc7b258c561c33fb982f01e2517a04c7ef3d8233148285",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 31
        },
        {
          "end_pc": 52,
          "hash": "0x6764a246004bf18de8a1c4c5a6eb7690cefdf4628c93a598b447325ca6654bb0",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 42
        },
        {
          "end_pc": 63,
          "hash": "0x3fd971c1f660de4d902842ed5dd6c39d97576f966dad4d191253a81fa1895f71",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 53
        },
        {
          "end_pc": 74,
          "hash": "0x50842485da11bc64154dfa035536902615bbbbbea657abf7cd0cdfb0cc309349",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 64
        },
        {
          "end_pc": 85,
          "hash": "0xcc2c51e54452b22082dd6c6257c5588f0935b138f274de29ed2782d776ab8173",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 75
        },
        {
          "end_pc": 96,
          "hash": "0x5262a48ec083ace525b67eadf1b55b24b9c80c75a0b4f2a5c6cdbd0f2431bec2",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 86
        },
        {
          "end_pc": 107,
          "hash": "0x65f63bae1bc04549a01f9cc7049ff3bb0e478a5f2179d5a626ad61f1ebc18479",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 97
        },
        {
          "end_pc": 118,
          "hash": "0x07d4d4c7851986c7183ec973ad1db6e3f46e9cb2dab1090b00aaf0118841423f",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 108
        },
        {
          "end_pc": 129,
          "hash": "0x093012e8855f04fa63f203b64d8131ebc2fcd63c5f5559f571a9c7f20f1ac4ee",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 119
        },
        {
          "end_pc": 140,
          "hash": "0x7bee9da9a3309305fa49d9c2f97ba8114fad39aae67f7cb7c81183cc0ee3a79d",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 130
        },
        {
          "end_pc": 151,
          "hash": "0x689cb0e90a1cd4e72accc93e80e69dd6ccc380edccae4a635632a64a87e2809c",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 141
        },
        {
          "end_pc": 162,
          "hash": "0x8af914deb243cb54b3781abddf640720bc2a6fe0daa40f0d172cbd625b4a31f5",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 152
        },
        {
          "end_pc": 173,
          "hash": "0x59908c6763b55d7a24ea4952b09674709be7e61854a7fb2693ffeb97a3e1ddfd",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 163
        },
        {
          "end_pc": 184,
          "hash": "0xce331580799cf59fd2532b53b4d5ec1e2f36f9db7ebda494f974dc08cda908b3",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 174
        },
        {
          "end_pc": 192,
          "hash": "0xd2360d3131c6c4233bc5ccd5c498ad6f44dcbbc421ef052fa0b9306beb23ad71",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 185
        },
        {
          "end_pc": 257,
          "hash": "0xee3b3a6a571fa5481fa8fb26ccea308fbe6b56bedc77c7558aca10d47071f206",
          "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",

exec
/bin/bash -lc "sed -n '261,520p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
            "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": 193
        },
        {
          "end_pc": 265,
          "hash": "0x92d9f334e6ba13f9ac672dfc8c33d06bd281a9a7bf6e792143fa5a849a1f1e1e",
          "opcodes": [
            "OP_80",
            "PUSH1",
            "LT",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 258
        },
        {
          "end_pc": 284,
          "hash": "0x74b841440a83a088a6a361c7009956b3c03ef5d0ba5a1f04b65c4f6316856939",
          "opcodes": [
            "PUSH2",
            "OP_80",
            "OP_83",
            "SLOAD",
            "DIV",
            "MUL",
            "OP_83",
            "MSTORE",
            "OP_91",
            "PUSH1",
            "ADD",
            "OP_91",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 266
        },
        {
          "end_pc": 333,
          "hash": "0xafedf4a3bbf8d34e0416ad693fddd98a7e7a371cdd9d1b2c29cb01dff91fd7be",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "CALLER",
            "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_94",
            "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": 285
        },
        {
          "end_pc": 343,
          "hash": "0x64d46def44ffc40d415ca8a62d5fb5ff86780cbf2ccfd0186c60a6bedb2d5067",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "RETURN"
          ],
          "start_pc": 334
        },
        {
          "end_pc": 352,
          "hash": "0x92c173796272c46f19c823a305a02a1e4c2a285765c5bb168043b27ad2936483",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "SLOAD",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 344
        },
        {
          "end_pc": 398,
          "hash": "0xbfa1ace8be41efefee04fa5441c8230f2192a13b101097300b6d2c8dfc80d77c",
          "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": 353
        },
        {
          "end_pc": 402,
          "hash": "0x46a9f42b18c27e2a305477a5d03b0e689366f6d2521e9bd7e4041e5c69700080",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 399
        },
        {
          "end_pc": 414,
          "hash": "0x0d8bf6ffd0bafa7e61524a32dc7a0fbe8d93b8ac91bdd12440de91d3ce8a16a2",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "SLOAD",
            "PUSH1",
            "AND",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 403
        },
        {
          "end_pc": 438,
          "hash": "0x7db22ac2d8c8a5139f79bab7ac1a02a16a02786cc47c1e3a35baf9b5bb4878ad",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "SHA3",
            "SLOAD",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 415
        },
        {
          "end_pc": 470,
          "hash": "0x6a390040576a9c77f330cfeab2a6a81cb5868e3a8b15261b205bc6cd6e03936b",
          "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": 439
        },
        {
          "end_pc": 474,
          "hash": "0x6e83fdd84d40afafb80a58643d336f13ec75f1f880ece88a1e3eef1b2abb8c10",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 471
        },
        {
          "end_pc": 492,
          "hash": "0x86c0ad42fc6797c803fc8036957195695aafdb190f71f120d42b3dc865d92641",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "SLOAD",
            "PUSH1",

exec
/bin/bash -lc "sed -n '521,780p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 475
        },
        {
          "end_pc": 554,
          "hash": "0x9e9a4ad3d26cd13ed5a261f99872bd06ec605896b2c5b2db0b95bcd3f53c04c6",
          "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": 493
        },
        {
          "end_pc": 562,
          "hash": "0x1731d1909c2499d29359e5ddd0718413814fc834abf597e2cfd8d64317604fdc",
          "opcodes": [
            "OP_80",
            "PUSH1",
            "LT",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 555
        },
        {
          "end_pc": 581,
          "hash": "0xfec95faa63c7a81c275a8e3442db8a7762fae15cbdc69a45647d38f46b8a08cb",
          "opcodes": [
            "PUSH2",
            "OP_80",
            "OP_83",
            "SLOAD",
            "DIV",
            "MUL",
            "OP_83",
            "MSTORE",
            "OP_91",
            "PUSH1",
            "ADD",
            "OP_91",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 563
        },
        {
          "end_pc": 624,
          "hash": "0x19402e30ba89d39c68488fb53b01531f186234439f15c3d8e2977d3a81da12ae",
          "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": 582
        },
        {
          "end_pc": 628,
          "hash": "0xd1caab2f8e6a5998a94df1ef886917ab8ad14ded342b50b4d3c1e6df5be363dd",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 625
        },
        {
          "end_pc": 655,
          "hash": "0xe6dd02861b25426f18f915361d49ce5c282c44ad47b8e9d35218be9b2c16f267",
          "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": 629
        },
        {
          "end_pc": 692,
          "hash": "0xc759e613c9b15b3339a2dd48f68d0bafe2a71236168424855cd4a73bfb839adc",
          "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": 656
        },
        {
          "end_pc": 729,
          "hash": "0x00410b285584c4bc0847d7fbdcf904ff1235b4727365844cadfa01846d921872",
          "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": 693
        },
        {
          "end_pc": 761,
          "hash": "0xbe03818bf53729d80d3eea61c76c2fab71bd64982573c499661966b6e9e0d37d",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "SLOAD",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",

exec
/bin/bash -lc "sed -n '781,1040p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
            "OP_90",
            "OP_81",
            "AND",
            "OP_91",
            "AND",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 730
        },
        {
          "end_pc": 765,
          "hash": "0xc2e73293d975796fcb0968d5f43fecfd1e79541db884702e0aa608302766fd6c",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 762
        },
        {
          "end_pc": 794,
          "hash": "0x43d1e6cafaee93b1409523a40d893231a73803eaf47a5e078ce44c35a70d6133",
          "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": 766
        },
        {
          "end_pc": 798,
          "hash": "0x6fffffb84c4c5d6645ec2cd7ce686377fad28f3f6c47c0085edfefb19ea48cfc",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 795
        },
        {
          "end_pc": 800,
          "hash": "0x1df58b5e32e4a5149bd7331bbe4fdef4ed73c16bf7785fc1264d728a766aae24",
          "opcodes": [
            "JUMPDEST",
            "STOP"
          ],
          "start_pc": 799
        },
        {
          "end_pc": 871,
          "hash": "0xdd881fa87ae717ff9148ebb872d26db0a86fa23c1e40b0fbff2f8f09b7d726f5",
          "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",
            "POP",
            "OP_90",
            "OP_81",
            "ADD",
            "OP_90",
            "PUSH1",
            "AND",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 801
        },
        {
          "end_pc": 896,
          "hash": "0x9d3cf102244875e9ed5c16858fddbac981f4ea5a447ebc24d97a542727cb0287",
          "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": 872
        },
        {
          "end_pc": 910,
          "hash": "0xdd6bdc09ed7c15c7d71b7edf9fb6c677900e62bc1301361c63071dc71bc4114d",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_91",
            "SUB",
            "OP_90",
            "RETURN"
          ],
          "start_pc": 897
        },
        {
          "end_pc": 944,
          "hash": "0x12f110ab4fe7f2500bcf785651b1e5f1e1ab6da35c98c2326ade0a852a543542",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH20",
            "NOT",
            "AND",
            "OP_82",
            "OR",
            "OP_90",
            "SSTORE",
            "POP",
            "JUMP"
          ],
          "start_pc": 911
        },
        {
          "end_pc": 958,
          "hash": "0x9674fd027bcd3b1f6fd5cfcb701a5de61d39f82226672a3ece53385b177be0b0",
          "opcodes": [
            "JUMPDEST",
            "OP_82",
            "ADD",
            "OP_91",
            "OP_90",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "SHA3",
            "OP_90"
          ],
          "start_pc": 945
        },
        {
          "end_pc": 978,
          "hash": "0x15e1f61e5f7945837faf0347835be436983dd0ae5b1379bf04100141c1fc0863",
          "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": 959
        },
        {
          "end_pc": 987,
          "hash": "0x50a4e1ace94b42fe5ee5e6b059333758e03e66641b7e0230c55d1a3dc48f3162",
          "opcodes": [
            "OP_82",
            "OP_90",
            "SUB",
            "PUSH1",
            "AND",
            "OP_82",
            "ADD",
            "OP_91"
          ],
          "start_pc": 979
        },
        {
          "end_pc": 995,
          "hash": "0x8ca390f2734e6cae731185e6fb456eff3f9487057458116bd376a3d676d25afb",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "POP",

exec
/bin/bash -lc "sed -n '1041,1300p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
            "POP",
            "POP",
            "POP",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 988
        },
        {
          "end_pc": 1025,
          "hash": "0x1998cb6b6e8cba00f1a9bb08e646889b5f963261d82c8892b040e52de2320a65",
          "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": 996
        },
        {
          "end_pc": 1029,
          "hash": "0x3fccf4475b470f93ab45fd9856d9ac919a67d9e37c21ac522f6d3d15b818b1da",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1026
        },
        {
          "end_pc": 1063,
          "hash": "0x2a857fd54a7cdcc9f0e7d82cd347a44179d42caf1385e656731da299fc1d1047",
          "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": 1030
        },
        {
          "end_pc": 1067,
          "hash": "0xf27e7fe3ea4f2cfa27e02cb8054f991fe8f4e6ea78f3e97bc46ba097fb4457e7",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1064
        },
        {
          "end_pc": 1240,
          "hash": "0x7555f7ce8babab36d7edd52a2e6fc8a5b16f880196f70854b6b62d48d4ace6b9",
          "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",
            "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": 1068
        },
        {
          "end_pc": 1332,
          "hash": "0xccb0276e57add82122b720b5a1daeaaa7b031c0a0a649db1606c58f855ff660a",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_80",
            "OP_83",
            "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",

exec
/bin/bash -lc "sed -n '1301,1560p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
            "JUMP"
          ],
          "start_pc": 1241
        },
        {
          "end_pc": 1417,
          "hash": "0xd75daf28579cc4394e3fcb6cffc1096b8560935034de73ac382a1ebfa80c127a",
          "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": 1333
        },
        {
          "end_pc": 1444,
          "hash": "0x272f7ec9526e4b1ea441599f8e7be7df6c9de131a6e30d393e795da8876a5819",
          "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": 1418
        },
        {
          "end_pc": 1448,
          "hash": "0xddb6a10a11bf7cae56d539b4deee1b19b0590946913ddc4d8f1a04f2ac22d802",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1445
        },
        {
          "end_pc": 1479,
          "hash": "0x16cea9c0368a089125eb14c3cb5d6eb9d1919adbb1616aec10fec45e5df2f17c",
          "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": 1449
        },
        {
          "end_pc": 1483,
          "hash": "0x3ed35f7beae73ec31f30a3caa4cf9777ea14a41d5a1e4a3e724b95ff9dbe6cfd",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1480
        },
        {
          "end_pc": 1545,
          "hash": "0x50783fc6fa310a4436dfaa68f1858fcdf6c2a8ccb292ee57d135a7e0968de0e8",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_83",
            "SHA3",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "CALLER",
            "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",
            "OP_85",
            "SHA3",
            "OP_91",
            "OP_85",
            "MSTORE",
            "OP_92",
            "MSTORE",
            "OP_82",
            "SHA3",
            "SLOAD",
            "OP_83",
            "ADD",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1484
        },
        {
          "end_pc": 1549,
          "hash": "0xe3b705fb87db7edf2063abd91ad3baa8c91bfcd6cac8ff20c0de3537bdf3e363",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1546
        },
        {
          "end_pc": 1801,
          "hash": "0x13027ccbf11e57105b5394377f119fc975257ab3c012716ec5a276c3a6b5b622",
          "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",

exec
/bin/bash -lc "sed -n '1561,1820p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
            "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": 1550
        }
      ],
      "callsites": [
        {
          "opcode": "CALL",
          "pc": 855,
          "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:193",
          "type": "control_flow"
        },
        {
          "from": "bb:11",
          "to": "bb:31",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:31",
          "to": "bb:285",
          "type": "control_flow"
        },
        {
          "from": "bb:31",
          "to": "bb:42",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:42",
          "to": "bb:344",
          "type": "control_flow"
        },
        {
          "from": "bb:42",
          "to": "bb:53",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:53",
          "to": "bb:353",
          "type": "control_flow"
        },
        {
          "from": "bb:53",
          "to": "bb:64",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:64",
          "to": "bb:403",
          "type": "control_flow"
        },
        {
          "from": "bb:64",
          "to": "bb:75",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:75",
          "to": "bb:415",
          "type": "control_flow"
        },
        {
          "from": "bb:75",
          "to": "bb:86",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:86",
          "to": "bb:439",
          "type": "control_flow"
        },
        {
          "from": "bb:86",
          "to": "bb:97",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:97",
          "to": "bb:475",
          "type": "control_flow"
        },
        {
          "from": "bb:97",
          "to": "bb:108",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:108",
          "to": "bb:493",
          "type": "control_flow"
        },
        {
          "from": "bb:108",
          "to": "bb:119",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:119",
          "to": "bb:582",
          "type": "control_flow"
        },
        {
          "from": "bb:119",
          "to": "bb:130",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:130",
          "to": "bb:629",
          "type": "control_flow"
        },
        {
          "from": "bb:130",
          "to": "bb:141",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:141",
          "to": "bb:656",
          "type": "control_flow"
        },
        {
          "from": "bb:141",
          "to": "bb:152",
          "type": "control_flow_fallthrough"
        },
        {

exec
/bin/bash -lc "sed -n '1821,2080p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
          "from": "bb:152",
          "to": "bb:693",
          "type": "control_flow"
        },
        {
          "from": "bb:152",
          "to": "bb:163",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:163",
          "to": "bb:730",
          "type": "control_flow"
        },
        {
          "from": "bb:163",
          "to": "bb:174",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:174",
          "to": "bb:766",
          "type": "control_flow"
        },
        {
          "from": "bb:174",
          "to": "bb:185",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:193",
          "to": "bb:988",
          "type": "control_flow"
        },
        {
          "from": "bb:193",
          "to": "bb:258",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:258",
          "to": "bb:945",
          "type": "control_flow"
        },
        {
          "from": "bb:258",
          "to": "bb:266",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:266",
          "to": "bb:988",
          "type": "control_flow"
        },
        {
          "from": "bb:285",
          "to": "bb:334",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:353",
          "to": "bb:1418",
          "type": "control_flow"
        },
        {
          "from": "bb:353",
          "to": "bb:399",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:439",
          "to": "bb:1241",
          "type": "control_flow"
        },
        {
          "from": "bb:439",
          "to": "bb:471",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:493",
          "to": "bb:988",
          "type": "control_flow"
        },
        {
          "from": "bb:493",
          "to": "bb:555",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:555",
          "to": "bb:945",
          "type": "control_flow"
        },
        {
          "from": "bb:555",
          "to": "bb:563",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:563",
          "to": "bb:988",
          "type": "control_flow"
        },
        {
          "from": "bb:582",
          "to": "bb:996",
          "type": "control_flow"
        },
        {
          "from": "bb:582",
          "to": "bb:625",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:730",
          "to": "bb:1333",
          "type": "control_flow"
        },
        {
          "from": "bb:730",
          "to": "bb:762",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:766",
          "to": "bb:911",
          "type": "control_flow"
        },
        {
          "from": "bb:766",
          "to": "bb:795",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:801",
          "to": "bb:897",
          "type": "control_flow"
        },
        {
          "from": "bb:801",
          "to": "bb:872",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:872",
          "to": "bb:897",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:945",
          "to": "bb:959",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:959",
          "to": "bb:959",
          "type": "control_flow"
        },
        {
          "from": "bb:959",
          "to": "bb:979",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:979",
          "to": "bb:988",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:996",
          "to": "bb:1030",
          "type": "control_flow"
        },
        {
          "from": "bb:996",
          "to": "bb:1026",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1030",
          "to": "bb:1068",
          "type": "control_flow"
        },
        {
          "from": "bb:1030",
          "to": "bb:1064",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1418",
          "to": "bb:1449",
          "type": "control_flow"
        },
        {
          "from": "bb:1418",
          "to": "bb:1445",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1449",
          "to": "bb:1484",
          "type": "control_flow"
        },
        {
          "from": "bb:1449",
          "to": "bb:1480",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1484",
          "to": "bb:1550",
          "type": "control_flow"
        },
        {
          "from": "bb:1484",
          "to": "bb:1546",
          "type": "control_flow_fallthrough"
        }
      ],
      "cfg_hash": "0x197e91cc462a1cd471c2301fc55d4abf9e0d0b14d7e76a9baab4601ac5aaf467",
      "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"
        },
        {

exec
/bin/bash -lc "sed -n '2081,2340p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
          "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": 799,
          "selector": "0xf2fde38b"
        }
      ],
      "functions": [
        {
          "auth": {
            "guards": []
          },
          "entry_pc": null,
          "selector": "0x06fdde03",
          "sinks": {
            "call": 1,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 33,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 200,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 271,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 350,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
              },
              {
                "op": "SLOAD",
                "pc": 409,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
              },
              {
                "op": "SLOAD",
                "pc": 451,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 481,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 500,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 568,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 742,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 775,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 915,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1278,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
              }
            ],
            "writes": 10
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 404098525,
          "selector": "0x095ea7b3",
          "sinks": {
            "call": 1,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 33,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 200,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 271,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 350,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
              },
              {
                "op": "SLOAD",
                "pc": 409,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
              },
              {
                "op": "SLOAD",
                "pc": 451,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 481,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 500,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 568,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 742,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 775,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 915,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1278,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
              }
            ],
            "writes": 10
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 599290589,
          "selector": "0x18160ddd",
          "sinks": {
            "call": 1,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 33,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 200,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 271,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 350,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
              },
              {
                "op": "SLOAD",
                "pc": 409,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
              },
              {
                "op": "SLOAD",
                "pc": 451,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 481,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 500,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 568,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 742,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 775,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 915,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1278,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
              }
            ],
            "writes": 10

exec
/bin/bash -lc "rg -n 'detector|evidence|selector_names|storage_slots|proxy|delegatecall|selfdestruct|reentr|owner|admin|findings|issues|warnings' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
2114:            "delegatecall": 0,
2115:            "selfdestruct": 0,
2193:            "delegatecall": 0,
2194:            "selfdestruct": 0,
2272:            "delegatecall": 0,
2273:            "selfdestruct": 0,
2351:            "delegatecall": 0,
2352:            "selfdestruct": 0,
2430:            "delegatecall": 0,
2431:            "selfdestruct": 0,
2509:            "delegatecall": 0,
2510:            "selfdestruct": 0,
2588:            "delegatecall": 0,
2589:            "selfdestruct": 0,
2667:            "delegatecall": 0,
2668:            "selfdestruct": 0,
2746:            "delegatecall": 0,
2747:            "selfdestruct": 0,
2825:            "delegatecall": 0,
2826:            "selfdestruct": 0,
2904:            "delegatecall": 0,
2905:            "selfdestruct": 0,
2983:            "delegatecall": 0,
2984:            "selfdestruct": 0,
3062:            "delegatecall": 0,
3063:            "selfdestruct": 0,
3141:            "delegatecall": 0,
3142:            "selfdestruct": 0,
3220:            "delegatecall": 0,
3221:            "selfdestruct": 0,
3313:        "delegatecall": 0,
3314:        "selfdestruct": 0,
3414:    "is_proxy": false,
4427:  "detector_findings": [
4430:      "evidence_json": {
4469:      "evidence_json": {
4509:    "delegatecall_count": 0,
4511:    "selfdestruct_count": 0

exec
/bin/bash -lc "sed -n '3300,3465p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
        "0x8da5cb5b",
        "0x95d89b41",
        "0xa9059cbb",
        "0xb414d4b6",
        "0xdc3080f2",
        "0xdd62ed3e",
        "0xe724529c",
        "0xf2fde38b"
      ],
      "sinks": {
        "call": 1,
        "create": 0,
        "create2": 0,
        "delegatecall": 0,
        "selfdestruct": 0,
        "staticcall": 0,
        "upgrade_slot_write_suspected": false
      },
      "storage": {
        "keccak_count": 27,
        "reads": 33,
        "slots": [
          {
            "op": "SLOAD",
            "pc": 200,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
          },
          {
            "op": "SLOAD",
            "pc": 271,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
          },
          {
            "op": "SLOAD",
            "pc": 350,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
          },
          {
            "op": "SLOAD",
            "pc": 409,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
          },
          {
            "op": "SLOAD",
            "pc": 451,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 481,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 500,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
          },
          {
            "op": "SLOAD",
            "pc": 568,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
          },
          {
            "op": "SLOAD",
            "pc": 742,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 775,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 915,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 1278,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
          }
        ],
        "writes": 10
      },
      "version": "analysis_artifact_v1"
    },
    "block_number": null,
    "chain_id": 1,
    "codehash": "0x718139891d02be97e6921984a90f36d01a4f780ad99354a1ce01cc84ed7557b3",
    "created_at": "2026-04-04T19:53:07.000000Z",
    "id": 1967,
    "updated_at": "2026-04-04T19:53:07.000000Z",
    "version": "analysis_artifact_v1"
  },
  "analysis_run": {
    "address": "0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7",
    "block_number": null,
    "chain_id": 1,
    "child_links": [],
    "created_at": "2025-12-19T20:03:53.000000Z",
    "id": "019b3836-2d66-70b7-8bcd-c67d896eb78c",
    "parent_links": [],
    "status": "running",
    "updated_at": "2026-04-04T19:53:07.000000Z"
  },
  "artifact": {
    "codehash": "0x718139891d02be97e6921984a90f36d01a4f780ad99354a1ce01cc84ed7557b3",
    "compiler_json": {
      "etherscan": {
        "skipped": true
      }
    },
    "implementation_address": null,
    "is_proxy": false,
    "runtime_bytecode": {
      "full": "0x606060405236156100b95760e060020a600035046306fdde0381146100c1578063095ea7b31461011d57806318160ddd1461015857806323b872dd14610161578063313ce5671461019357806370a082311461019f57806379c65068146101b75780638da5cb5b146101db57806395d89b41146101ed578063a9059cbb14610246578063b414d4b614610275578063dc3080f214610290578063dd62ed3e146102b5578063e724529c146102da578063f2fde38b146102fe575b61031f610002565b610321600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156103dc5780601f106103b1576101008083540402835291602001916103dc565b600160a060020a03338116600090815260076020908152604080832060043594909416835292905290812060243590555b6060908152602090f35b61014e60045481565b61014e600435602435604435600160a060020a0383166000908152600560205260408120548290101561058a57610002565b61014e60035460ff1681565b61014e60043560056020526000908152604090205481565b61031f60043560243560005433600160a060020a039081169116146104d957610002565b61014e600054600160a060020a031681565b610321600280546020601f600019600184161561010002019092168390049182018190040260809081016040526060828152929190828280156103dc5780601f106103b1576101008083540402835291602001916103dc565b61031f60043560243533600160a060020a0316600090815260056020526040902054819010156103e457610002565b61014e60043560066020526000908152604090205460ff1681565b60086020908152600435600090815260408082209092526024358152205461014e9081565b60076020908152600435600090815260408082209092526024358152205461014e9081565b61031f60043560243560005433600160a060020a0390811691161461053557610002565b61031f60043560005433600160a060020a0390811691161461038f57610002565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000805473ffffffffffffffffffffffffffffffffffffffff19168217905550565b820191906000526020600020905b8154815290600101906020018083116103bf57829003601f168201915b505050505081565b600160a060020a03821660009081526040902054808201101561040657610002565b33600160a060020a031660009081526006602052604090205460ff161561042c57610002565b806005600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806005600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600160a060020a0380831660008181526005602090815260408220805486019055600480548601905590546060858152929316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a35050565b600160a060020a03821660008181526006602052604090819020805460ff191684179055606091825260808390527f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a591a15050565b600160a060020a0383168152604081205482810110156105a957610002565b600160a060020a03841681526006602052604081205460ff16156105cc57610002565b600760209081526040808320600160a060020a033381168086529184528285205490881685526008845282852091855292528220548301111561060e57610002565b816005600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816005600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816008600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056",
      "head": null,
      "length": 3606,
      "tail": null,
      "truncated": false
    },
    "verified_source": false
  },
  "capability_graph": {
    "address": "0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7",
    "block_number": null,
    "chain_id": 1,
    "codehash": "0x718139891d02be97e6921984a90f36d01a4f780ad99354a1ce01cc84ed7557b3",
    "created_at": "2026-04-04T19:53:08.000000Z",
    "graph_hash": "0x1b21c0686c24c9ab96fd1e61db87a73cfeaaa43f355c86250eab3f5d5013db30",
    "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:193",
          "type": "control_flow"
        },
        {
          "from": "bb:11",
          "to": "bb:31",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:31",
          "to": "bb:285",
          "type": "control_flow"
        },
        {
          "from": "bb:31",
          "to": "bb:42",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:42",
          "to": "bb:344",

exec
/bin/bash -lc "sed -n '4420,4545p' BYTECODE_BUNDLE.json" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
      ],
      "version": "capability_graph_v1"
    },
    "id": 1967,
    "updated_at": "2026-04-04T19:53:08.000000Z",
    "version": "capability_graph_v1"
  },
  "detector_findings": [
    {
      "confidence": 60,
      "evidence_json": {
        "call_count": 1,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 855,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": [],
        "untrusted_call_count": 1
      },
      "normalized_json": {
        "sink": "CALL"
      },
      "severity": "high",
      "title": "Untrusted CALL target/value reachable",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x0000000000000000000000000000000000000004",
          "0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0x230e426361730612ecf5c73dc66abc0de7298751c26a2121b34cbfe42ea38088",
        "trace_mode": "callTracer"
      }
    },
    {
      "confidence": 55,
      "evidence_json": {
        "eth_value_calls": 1,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 855,
            "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",
          "0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0x230e426361730612ecf5c73dc66abc0de7298751c26a2121b34cbfe42ea38088",
        "trace_mode": "callTracer"
      }
    }
  ],
  "heuristics_summary": {
    "create2_count": 0,
    "delegatecall_count": 0,
    "flags": [],
    "selfdestruct_count": 0
  }
}
exec
/bin/bash -lc "python3 - <<'PY'
from pathlib import Path
import json
bytecode=json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:]
code=bytes.fromhex(bytecode)
# opcode table
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',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
pcs=[0,185,193,258,266,285,344,353,403,415,439,475,493,582,629,656,693,730,766,799,801,872,897,911,945,959,979,988,996,1030,1068,1241,1333,1418,1449,1484,1550]
want=set(range(780,900))|set(range(990,1100))|set(range(1230,1495))|set(range(1540,1805))
pc=0
while pc < len(code):
    op=code[pc]
    name=ops.get(op, f'OP_{op:02x}')
    if pc in want or pc in pcs:
        if name.startswith('PUSH'):
            n=int(name[4:])
            data=code[pc+1:pc+1+n]
            print(f'{pc:04x}: {name} 0x{data.hex()}')
            pc+=1+n
        else:
            print(f'{pc:04x}: {name}')
            pc+=1
    else:
        if name.startswith('PUSH'):
            pc+=1+int(name[4:])
        else:
            pc+=1
PY" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
0000: PUSH1 0x60
00b9: JUMPDEST
00c1: JUMPDEST
0102: DUP1
010a: PUSH2 0x0100
011d: JUMPDEST
0158: JUMPDEST
0161: JUMPDEST
0193: JUMPDEST
019f: JUMPDEST
01b7: JUMPDEST
01db: JUMPDEST
01ed: JUMPDEST
0246: JUMPDEST
0275: JUMPDEST
0290: JUMPDEST
02b5: JUMPDEST
02da: JUMPDEST
02fe: JUMPDEST
030d: PUSH1 0x02
030f: EXP
0310: SUB
0311: SWAP1
0312: DUP2
0313: AND
0314: SWAP2
0315: AND
0316: EQ
0317: PUSH2 0x038f
031a: JUMPI
031b: PUSH2 0x0002
031e: JUMP
031f: JUMPDEST
0320: STOP
0321: JUMPDEST
0322: PUSH1 0x40
0324: MLOAD
0325: DUP1
0326: DUP1
0327: PUSH1 0x20
0329: ADD
032a: DUP3
032b: DUP2
032c: SUB
032d: DUP3
032e: MSTORE
032f: DUP4
0330: DUP2
0331: DUP2
0332: MLOAD
0333: DUP2
0334: MSTORE
0335: PUSH1 0x20
0337: ADD
0338: SWAP2
0339: POP
033a: DUP1
033b: MLOAD
033c: SWAP1
033d: PUSH1 0x20
033f: ADD
0340: SWAP1
0341: DUP1
0342: DUP4
0343: DUP4
0344: DUP3
0345: SWAP1
0346: PUSH1 0x00
0348: PUSH1 0x04
034a: PUSH1 0x20
034c: DUP5
034d: PUSH1 0x1f
034f: ADD
0350: DIV
0351: PUSH1 0x0f
0353: MUL
0354: PUSH1 0x03
0356: ADD
0357: CALL
0358: POP
0359: SWAP1
035a: POP
035b: SWAP1
035c: DUP2
035d: ADD
035e: SWAP1
035f: PUSH1 0x1f
0361: AND
0362: DUP1
0363: ISZERO
0364: PUSH2 0x0381
0367: JUMPI
0368: DUP1
0369: DUP3
036a: SUB
036b: DUP1
036c: MLOAD
036d: PUSH1 0x01
036f: DUP4
0370: PUSH1 0x20
0372: SUB
0373: PUSH2 0x0100
0376: EXP
0377: SUB
0378: NOT
0379: AND
037a: DUP2
037b: MSTORE
037c: PUSH1 0x20
037e: ADD
037f: SWAP2
0380: POP
0381: JUMPDEST
0382: POP
0383: SWAP3
038f: JUMPDEST
03b1: JUMPDEST
03bf: JUMPDEST
03d3: DUP3
03dc: JUMPDEST
03de: POP
03df: POP
03e0: POP
03e1: POP
03e2: DUP2
03e3: JUMP
03e4: JUMPDEST
03e5: PUSH1 0x01
03e7: PUSH1 0xa0
03e9: PUSH1 0x02
03eb: EXP
03ec: SUB
03ed: DUP3
03ee: AND
03ef: PUSH1 0x00
03f1: SWAP1
03f2: DUP2
03f3: MSTORE
03f4: PUSH1 0x40
03f6: SWAP1
03f7: SHA3
03f8: SLOAD
03f9: DUP1
03fa: DUP3
03fb: ADD
03fc: LT
03fd: ISZERO
03fe: PUSH2 0x0406
0401: JUMPI
0402: PUSH2 0x0002
0405: JUMP
0406: JUMPDEST
0407: CALLER
0408: PUSH1 0x01
040a: PUSH1 0xa0
040c: PUSH1 0x02
040e: EXP
040f: SUB
0410: AND
0411: PUSH1 0x00
0413: SWAP1
0414: DUP2
0415: MSTORE
0416: PUSH1 0x06
0418: PUSH1 0x20
041a: MSTORE
041b: PUSH1 0x40
041d: SWAP1
041e: SHA3
041f: SLOAD
0420: PUSH1 0xff
0422: AND
0423: ISZERO
0424: PUSH2 0x042c
0427: JUMPI
0428: PUSH2 0x0002
042b: JUMP
042c: JUMPDEST
042d: DUP1
042e: PUSH1 0x05
0430: PUSH1 0x00
0432: POP
0433: PUSH1 0x00
0435: CALLER
0436: PUSH1 0x01
0438: PUSH1 0xa0
043a: PUSH1 0x02
043c: EXP
043d: SUB
043e: AND
043f: DUP2
0440: MSTORE
0441: PUSH1 0x20
0443: ADD
0444: SWAP1
0445: DUP2
0446: MSTORE
0447: PUSH1 0x20
0449: ADD
044a: PUSH1 0x00
04ce: PUSH1 0x40
04d0: MLOAD
04d1: DUP1
04d2: SWAP2
04d3: SUB
04d4: SWAP1
04d5: LOG3
04d6: POP
04d7: POP
04d8: JUMP
04d9: JUMPDEST
04da: PUSH1 0x01
04dc: PUSH1 0xa0
04de: PUSH1 0x02
04e0: EXP
04e1: SUB
04e2: DUP1
04e3: DUP4
04e4: AND
04e5: PUSH1 0x00
04e7: DUP2
04e8: DUP2
04e9: MSTORE
04ea: PUSH1 0x05
04ec: PUSH1 0x20
04ee: SWAP1
04ef: DUP2
04f0: MSTORE
04f1: PUSH1 0x40
04f3: DUP3
04f4: SHA3
04f5: DUP1
04f6: SLOAD
04f7: DUP7
04f8: ADD
04f9: SWAP1
04fa: SSTORE
04fb: PUSH1 0x04
04fd: DUP1
04fe: SLOAD
04ff: DUP7
0500: ADD
0501: SWAP1
0502: SSTORE
0503: SWAP1
0504: SLOAD
0505: PUSH1 0x60
0507: DUP6
0508: DUP2
0509: MSTORE
050a: SWAP3
050b: SWAP4
050c: AND
050d: SWAP2
050e: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
052f: SWAP2
0530: SWAP1
0531: LOG3
0532: POP
0533: POP
0534: JUMP
0535: JUMPDEST
0536: PUSH1 0x01
0538: PUSH1 0xa0
053a: PUSH1 0x02
053c: EXP
053d: SUB
053e: DUP3
053f: AND
0540: PUSH1 0x00
0542: DUP2
0543: DUP2
0544: MSTORE
0545: PUSH1 0x06
0547: PUSH1 0x20
0549: MSTORE
054a: PUSH1 0x40
054c: SWAP1
054d: DUP2
054e: SWAP1
054f: SHA3
0550: DUP1
0551: SLOAD
0552: PUSH1 0xff
0554: NOT
0555: AND
0556: DUP5
0557: OR
0558: SWAP1
0559: SSTORE
055a: PUSH1 0x60
055c: SWAP2
055d: DUP3
055e: MSTORE
055f: PUSH1 0x80
0561: DUP4
0562: SWAP1
0563: MSTORE
0564: PUSH32 0x48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a5
0585: SWAP2
0586: LOG1
0587: POP
0588: POP
0589: JUMP
058a: JUMPDEST
058b: PUSH1 0x01
058d: PUSH1 0xa0
058f: PUSH1 0x02
0591: EXP
0592: SUB
0593: DUP4
0594: AND
0595: DUP2
0596: MSTORE
0597: PUSH1 0x40
0599: DUP2
059a: SHA3
059b: SLOAD
059c: DUP3
059d: DUP2
059e: ADD
059f: LT
05a0: ISZERO
05a1: PUSH2 0x05a9
05a4: JUMPI
05a5: PUSH2 0x0002
05a8: JUMP
05a9: JUMPDEST
05aa: PUSH1 0x01
05ac: PUSH1 0xa0
05ae: PUSH1 0x02
05b0: EXP
05b1: SUB
05b2: DUP5
05b3: AND
05b4: DUP2
05b5: MSTORE
05b6: PUSH1 0x06
05b8: PUSH1 0x20
05ba: MSTORE
05bb: PUSH1 0x40
05bd: DUP2
05be: SHA3
05bf: SLOAD
05c0: PUSH1 0xff
05c2: AND
05c3: ISZERO
05c4: PUSH2 0x05cc
05c7: JUMPI
05c8: PUSH2 0x0002
05cb: JUMP
05cc: JUMPDEST
05cd: PUSH1 0x07
05cf: PUSH1 0x20
05d1: SWAP1
05d2: DUP2
05d3: MSTORE
05d4: PUSH1 0x40
05d6: DUP1
0604: GT
0605: ISZERO
0606: PUSH2 0x060e
0609: JUMPI
060a: PUSH2 0x0002
060d: JUMP
060e: JUMPDEST
060f: DUP2
0610: PUSH1 0x05
0612: PUSH1 0x00
0614: POP
0615: PUSH1 0x00
0617: DUP7
0618: PUSH1 0x01
061a: PUSH1 0xa0
061c: PUSH1 0x02
061e: EXP
061f: SUB
0620: AND
0621: DUP2
0622: MSTORE
0623: PUSH1 0x20
0625: ADD
0626: SWAP1
0627: DUP2
0628: MSTORE
0629: PUSH1 0x20
062b: ADD
062c: PUSH1 0x00
062e: SHA3
062f: PUSH1 0x00
0631: DUP3
0632: DUP3
0633: DUP3
0634: POP
0635: SLOAD
0636: SUB
0637: SWAP3
0638: POP
0639: POP
063a: DUP2
063b: SWAP1
063c: SSTORE
063d: POP
063e: DUP2
063f: PUSH1 0x05
0641: PUSH1 0x00
0643: POP
0644: PUSH1 0x00
0646: DUP6
0647: PUSH1 0x01
0649: PUSH1 0xa0
064b: PUSH1 0x02
064d: EXP
064e: SUB
064f: AND
0650: DUP2
0651: MSTORE
0652: PUSH1 0x20
0654: ADD
0655: SWAP1
0656: DUP2
0657: MSTORE
0658: PUSH1 0x20
065a: ADD
065b: PUSH1 0x00
065d: SHA3
065e: PUSH1 0x00
0660: DUP3
0661: DUP3
0662: DUP3
0663: POP
0664: SLOAD
0665: ADD
0666: SWAP3
0667: POP
0668: POP
0669: DUP2
066a: SWAP1
066b: SSTORE
066c: POP
066d: DUP2
066e: PUSH1 0x08
0670: PUSH1 0x00
0672: POP
0673: PUSH1 0x00
0675: DUP7
0676: PUSH1 0x01
0678: PUSH1 0xa0
067a: PUSH1 0x02
067c: EXP
067d: SUB
067e: AND
067f: DUP2
0680: MSTORE
0681: PUSH1 0x20
0683: ADD
0684: SWAP1
0685: DUP2
0686: MSTORE
0687: PUSH1 0x20
0689: ADD
068a: PUSH1 0x00
068c: SHA3
068d: PUSH1 0x00
068f: POP
0690: PUSH1 0x00
0692: CALLER
0693: PUSH1 0x01
0695: PUSH1 0xa0
0697: PUSH1 0x02
0699: EXP
069a: SUB
069b: AND
069c: DUP2
069d: MSTORE
069e: PUSH1 0x20
06a0: ADD
06a1: SWAP1
06a2: DUP2
06a3: MSTORE
06a4: PUSH1 0x20
06a6: ADD
06a7: PUSH1 0x00
06a9: SHA3
06aa: PUSH1 0x00
06ac: DUP3
06ad: DUP3
06ae: DUP3
06af: POP
06b0: SLOAD
06b1: ADD
06b2: SWAP3
06b3: POP
06b4: POP
06b5: DUP2
06b6: SWAP1
06b7: SSTORE
06b8: POP
06b9: DUP3
06ba: PUSH1 0x01
06bc: PUSH1 0xa0
06be: PUSH1 0x02
06c0: EXP
06c1: SUB
06c2: AND
06c3: CALLER
06c4: PUSH1 0x01
06c6: PUSH1 0xa0
06c8: PUSH1 0x02
06ca: EXP
06cb: SUB
06cc: AND
06cd: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
06ee: DUP5
06ef: PUSH1 0x40
06f1: MLOAD
06f2: DUP1
06f3: DUP3
06f4: DUP2
06f5: MSTORE
06f6: PUSH1 0x20
06f8: ADD
06f9: SWAP2
06fa: POP
06fb: POP
06fc: PUSH1 0x40
06fe: MLOAD
06ff: DUP1
0700: SWAP2
0701: SUB
0702: SWAP1
0703: LOG3
0704: SWAP4
0705: SWAP3
0706: POP
0707: POP
0708: POP
0709: JUMP

exec
/bin/bash -lc "python3 - <<'PY'
from pathlib import Path
import json
bytecode=json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:]
code=bytes.fromhex(bytecode)
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',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',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf1:'CALL',0xf3:'RETURN',0xfd:'REVERT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
# print 0-200
pc=0
while pc<200:
    op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
    if name.startswith('PUSH'):
        n=int(name[4:]); data=code[pc+1:pc+1+n]
        print(f'{pc:04x}: {name} 0x{data.hex()}')
        pc+=1+n
    else:
        print(f'{pc:04x}: {name}')
        pc+=1
PY" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
0000: PUSH1 0x60
0002: PUSH1 0x40
0004: MSTORE
0005: CALLDATASIZE
0006: ISZERO
0007: PUSH2 0x00b9
000a: JUMPI
000b: PUSH1 0xe0
000d: PUSH1 0x02
000f: EXP
0010: PUSH1 0x00
0012: CALLDATALOAD
0013: DIV
0014: PUSH4 0x06fdde03
0019: DUP2
001a: EQ
001b: PUSH2 0x00c1
001e: JUMPI
001f: DUP1
0020: PUSH4 0x095ea7b3
0025: EQ
0026: PUSH2 0x011d
0029: JUMPI
002a: DUP1
002b: PUSH4 0x18160ddd
0030: EQ
0031: PUSH2 0x0158
0034: JUMPI
0035: DUP1
0036: PUSH4 0x23b872dd
003b: EQ
003c: PUSH2 0x0161
003f: JUMPI
0040: DUP1
0041: PUSH4 0x313ce567
0046: EQ
0047: PUSH2 0x0193
004a: JUMPI
004b: DUP1
004c: PUSH4 0x70a08231
0051: EQ
0052: PUSH2 0x019f
0055: JUMPI
0056: DUP1
0057: PUSH4 0x79c65068
005c: EQ
005d: PUSH2 0x01b7
0060: JUMPI
0061: DUP1
0062: PUSH4 0x8da5cb5b
0067: EQ
0068: PUSH2 0x01db
006b: JUMPI
006c: DUP1
006d: PUSH4 0x95d89b41
0072: EQ
0073: PUSH2 0x01ed
0076: JUMPI
0077: DUP1
0078: PUSH4 0xa9059cbb
007d: EQ
007e: PUSH2 0x0246
0081: JUMPI
0082: DUP1
0083: PUSH4 0xb414d4b6
0088: EQ
0089: PUSH2 0x0275
008c: JUMPI
008d: DUP1
008e: PUSH4 0xdc3080f2
0093: EQ
0094: PUSH2 0x0290
0097: JUMPI
0098: DUP1
0099: PUSH4 0xdd62ed3e
009e: EQ
009f: PUSH2 0x02b5
00a2: JUMPI
00a3: DUP1
00a4: PUSH4 0xe724529c
00a9: EQ
00aa: PUSH2 0x02da
00ad: JUMPI
00ae: DUP1
00af: PUSH4 0xf2fde38b
00b4: EQ
00b5: PUSH2 0x02fe
00b8: JUMPI
00b9: JUMPDEST
00ba: PUSH2 0x031f
00bd: PUSH2 0x0002
00c0: JUMP
00c1: JUMPDEST
00c2: PUSH2 0x0321
00c5: PUSH1 0x01
00c7: DUP1

exec
/bin/bash -lc "python3 - <<'PY'
from pathlib import Path
import json
bytecode=json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:]
code=bytes.fromhex(bytecode)
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x33:'CALLER',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x5b:'JUMPDEST',0xa1:'LOG1',0xa3:'LOG3',0xf1:'CALL',0xf3:'RETURN'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
# print 193-800
pc=0xc1
while pc<0x320:
    op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
    if name.startswith('PUSH'):
        n=int(name[4:]); data=code[pc+1:pc+1+n]
        print(f'{pc:04x}: {name} 0x{data.hex()}')
        pc+=1+n
    else:
        print(f'{pc:04x}: {name}')
        pc+=1
PY" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
00c1: JUMPDEST
00c2: PUSH2 0x0321
00c5: PUSH1 0x01
00c7: DUP1
00c8: SLOAD
00c9: PUSH1 0x20
00cb: PUSH1 0x02
00cd: DUP3
00ce: DUP5
00cf: AND
00d0: ISZERO
00d1: PUSH2 0x0100
00d4: MUL
00d5: PUSH1 0x00
00d7: NOT
00d8: ADD
00d9: SWAP1
00da: SWAP3
00db: AND
00dc: SWAP2
00dd: SWAP1
00de: SWAP2
00df: DIV
00e0: PUSH1 0x1f
00e2: DUP2
00e3: ADD
00e4: DUP3
00e5: SWAP1
00e6: DIV
00e7: SWAP1
00e8: SWAP2
00e9: MUL
00ea: PUSH1 0x80
00ec: SWAP1
00ed: DUP2
00ee: ADD
00ef: PUSH1 0x40
00f1: MSTORE
00f2: PUSH1 0x60
00f4: DUP3
00f5: DUP2
00f6: MSTORE
00f7: SWAP3
00f8: SWAP2
00f9: SWAP1
00fa: DUP3
00fb: DUP3
00fc: DUP1
00fd: ISZERO
00fe: PUSH2 0x03dc
0101: JUMPI
0102: DUP1
0103: PUSH1 0x1f
0105: LT
0106: PUSH2 0x03b1
0109: JUMPI
010a: PUSH2 0x0100
010d: DUP1
010e: DUP4
010f: SLOAD
0110: DIV
0111: MUL
0112: DUP4
0113: MSTORE
0114: SWAP2
0115: PUSH1 0x20
0117: ADD
0118: SWAP2
0119: PUSH2 0x03dc
011c: JUMP
011d: JUMPDEST
011e: PUSH1 0x01
0120: PUSH1 0xa0
0122: PUSH1 0x02
0124: EXP
0125: SUB
0126: CALLER
0127: DUP2
0128: AND
0129: PUSH1 0x00
012b: SWAP1
012c: DUP2
012d: MSTORE
012e: PUSH1 0x07
0130: PUSH1 0x20
0132: SWAP1
0133: DUP2
0134: MSTORE
0135: PUSH1 0x40
0137: DUP1
0138: DUP4
0139: SHA3
013a: PUSH1 0x04
013c: CALLDATALOAD
013d: SWAP5
013e: SWAP1
013f: SWAP5
0140: AND
0141: DUP4
0142: MSTORE
0143: SWAP3
0144: SWAP1
0145: MSTORE
0146: SWAP1
0147: DUP2
0148: SHA3
0149: PUSH1 0x24
014b: CALLDATALOAD
014c: SWAP1
014d: SSTORE
014e: JUMPDEST
014f: PUSH1 0x60
0151: SWAP1
0152: DUP2
0153: MSTORE
0154: PUSH1 0x20
0156: SWAP1
0157: RETURN
0158: JUMPDEST
0159: PUSH2 0x014e
015c: PUSH1 0x04
015e: SLOAD
015f: DUP2
0160: JUMP
0161: JUMPDEST
0162: PUSH2 0x014e
0165: PUSH1 0x04
0167: CALLDATALOAD
0168: PUSH1 0x24
016a: CALLDATALOAD
016b: PUSH1 0x44
016d: CALLDATALOAD
016e: PUSH1 0x01
0170: PUSH1 0xa0
0172: PUSH1 0x02
0174: EXP
0175: SUB
0176: DUP4
0177: AND
0178: PUSH1 0x00
017a: SWAP1
017b: DUP2
017c: MSTORE
017d: PUSH1 0x05
017f: PUSH1 0x20
0181: MSTORE
0182: PUSH1 0x40
0184: DUP2
0185: SHA3
0186: SLOAD
0187: DUP3
0188: SWAP1
0189: LT
018a: ISZERO
018b: PUSH2 0x058a
018e: JUMPI
018f: PUSH2 0x0002
0192: JUMP
0193: JUMPDEST
0194: PUSH2 0x014e
0197: PUSH1 0x03
0199: SLOAD
019a: PUSH1 0xff
019c: AND
019d: DUP2
019e: JUMP
019f: JUMPDEST
01a0: PUSH2 0x014e
01a3: PUSH1 0x04
01a5: CALLDATALOAD
01a6: PUSH1 0x05
01a8: PUSH1 0x20
01aa: MSTORE
01ab: PUSH1 0x00
01ad: SWAP1
01ae: DUP2
01af: MSTORE
01b0: PUSH1 0x40
01b2: SWAP1
01b3: SHA3
01b4: SLOAD
01b5: DUP2
01b6: JUMP
01b7: JUMPDEST
01b8: PUSH2 0x031f
01bb: PUSH1 0x04
01bd: CALLDATALOAD
01be: PUSH1 0x24
01c0: CALLDATALOAD
01c1: PUSH1 0x00
01c3: SLOAD
01c4: CALLER
01c5: PUSH1 0x01
01c7: PUSH1 0xa0
01c9: PUSH1 0x02
01cb: EXP
01cc: SUB
01cd: SWAP1
01ce: DUP2
01cf: AND
01d0: SWAP2
01d1: AND
01d2: EQ
01d3: PUSH2 0x04d9
01d6: JUMPI
01d7: PUSH2 0x0002
01da: JUMP
01db: JUMPDEST
01dc: PUSH2 0x014e
01df: PUSH1 0x00
01e1: SLOAD
01e2: PUSH1 0x01
01e4: PUSH1 0xa0
01e6: PUSH1 0x02
01e8: EXP
01e9: SUB
01ea: AND
01eb: DUP2
01ec: JUMP
01ed: JUMPDEST
01ee: PUSH2 0x0321
01f1: PUSH1 0x02
01f3: DUP1
01f4: SLOAD
01f5: PUSH1 0x20
01f7: PUSH1 0x1f
01f9: PUSH1 0x00
01fb: NOT
01fc: PUSH1 0x01
01fe: DUP5
01ff: AND
0200: ISZERO
0201: PUSH2 0x0100
0204: MUL
0205: ADD
0206: SWAP1
0207: SWAP3
0208: AND
0209: DUP4
020a: SWAP1
020b: DIV
020c: SWAP2
020d: DUP3
020e: ADD
020f: DUP2
0210: SWAP1
0211: DIV
0212: MUL
0213: PUSH1 0x80
0215: SWAP1
0216: DUP2
0217: ADD
0218: PUSH1 0x40
021a: MSTORE
021b: PUSH1 0x60
021d: DUP3
021e: DUP2
021f: MSTORE
0220: SWAP3
0221: SWAP2
0222: SWAP1
0223: DUP3
0224: DUP3
0225: DUP1
0226: ISZERO
0227: PUSH2 0x03dc
022a: JUMPI
022b: DUP1
022c: PUSH1 0x1f
022e: LT
022f: PUSH2 0x03b1
0232: JUMPI
0233: PUSH2 0x0100
0236: DUP1
0237: DUP4
0238: SLOAD
0239: DIV
023a: MUL
023b: DUP4
023c: MSTORE
023d: SWAP2
023e: PUSH1 0x20
0240: ADD
0241: SWAP2
0242: PUSH2 0x03dc
0245: JUMP
0246: JUMPDEST
0247: PUSH2 0x031f
024a: PUSH1 0x04
024c: CALLDATALOAD
024d: PUSH1 0x24
024f: CALLDATALOAD
0250: CALLER
0251: PUSH1 0x01
0253: PUSH1 0xa0
0255: PUSH1 0x02
0257: EXP
0258: SUB
0259: AND
025a: PUSH1 0x00
025c: SWAP1
025d: DUP2
025e: MSTORE
025f: PUSH1 0x05
0261: PUSH1 0x20
0263: MSTORE
0264: PUSH1 0x40
0266: SWAP1
0267: SHA3
0268: SLOAD
0269: DUP2
026a: SWAP1
026b: LT
026c: ISZERO
026d: PUSH2 0x03e4
0270: JUMPI
0271: PUSH2 0x0002
0274: JUMP
0275: JUMPDEST
0276: PUSH2 0x014e
0279: PUSH1 0x04
027b: CALLDATALOAD
027c: PUSH1 0x06
027e: PUSH1 0x20
0280: MSTORE
0281: PUSH1 0x00
0283: SWAP1
0284: DUP2
0285: MSTORE
0286: PUSH1 0x40
0288: SWAP1
0289: SHA3
028a: SLOAD
028b: PUSH1 0xff
028d: AND
028e: DUP2
028f: JUMP
0290: JUMPDEST
0291: PUSH1 0x08
0293: PUSH1 0x20
0295: SWAP1
0296: DUP2
0297: MSTORE
0298: PUSH1 0x04
029a: CALLDATALOAD
029b: PUSH1 0x00
029d: SWAP1
029e: DUP2
029f: MSTORE
02a0: PUSH1 0x40
02a2: DUP1
02a3: DUP3
02a4: SHA3
02a5: SWAP1
02a6: SWAP3
02a7: MSTORE
02a8: PUSH1 0x24
02aa: CALLDATALOAD
02ab: DUP2
02ac: MSTORE
02ad: SHA3
02ae: SLOAD
02af: PUSH2 0x014e
02b2: SWAP1
02b3: DUP2
02b4: JUMP
02b5: JUMPDEST
02b6: PUSH1 0x07
02b8: PUSH1 0x20
02ba: SWAP1
02bb: DUP2
02bc: MSTORE
02bd: PUSH1 0x04
02bf: CALLDATALOAD
02c0: PUSH1 0x00
02c2: SWAP1
02c3: DUP2
02c4: MSTORE
02c5: PUSH1 0x40
02c7: DUP1
02c8: DUP3
02c9: SHA3
02ca: SWAP1
02cb: SWAP3
02cc: MSTORE
02cd: PUSH1 0x24
02cf: CALLDATALOAD
02d0: DUP2
02d1: MSTORE
02d2: SHA3
02d3: SLOAD
02d4: PUSH2 0x014e
02d7: SWAP1
02d8: DUP2
02d9: JUMP
02da: JUMPDEST
02db: PUSH2 0x031f
02de: PUSH1 0x04
02e0: CALLDATALOAD
02e1: PUSH1 0x24
02e3: CALLDATALOAD
02e4: PUSH1 0x00
02e6: SLOAD
02e7: CALLER
02e8: PUSH1 0x01
02ea: PUSH1 0xa0
02ec: PUSH1 0x02
02ee: EXP
02ef: SUB
02f0: SWAP1
02f1: DUP2
02f2: AND
02f3: SWAP2
02f4: AND
02f5: EQ
02f6: PUSH2 0x0535
02f9: JUMPI
02fa: PUSH2 0x0002
02fd: JUMP
02fe: JUMPDEST
02ff: PUSH2 0x031f
0302: PUSH1 0x04
0304: CALLDATALOAD
0305: PUSH1 0x00
0307: SLOAD
0308: CALLER
0309: PUSH1 0x01
030b: PUSH1 0xa0
030d: PUSH1 0x02
030f: EXP
0310: SUB
0311: SWAP1
0312: DUP2
0313: AND
0314: SWAP2
0315: AND
0316: EQ
0317: PUSH2 0x038f
031a: JUMPI
031b: PUSH2 0x0002
031e: JUMP
031f: JUMPDEST

exec
/bin/bash -lc "python3 - <<'PY'
from pathlib import Path
import json
bytecode=json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:]
code=bytes.fromhex(bytecode)
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x10:'LT',0x11:'GT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x19:'NOT',0x20:'SHA3',0x33:'CALLER',0x35:'CALLDATALOAD',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x5b:'JUMPDEST',0xa3:'LOG3'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
start,end=0x5cc,0x60f
pc=start
while pc<end:
    op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
    if name.startswith('PUSH'):
        n=int(name[4:]); data=code[pc+1:pc+1+n]
        print(f'{pc:04x}: {name} 0x{data.hex()}')
        pc+=1+n
    else:
        print(f'{pc:04x}: {name}')
        pc+=1
PY" in /tmp/codex-tqa46nkb
 succeeded in 0ms:
05cc: JUMPDEST
05cd: PUSH1 0x07
05cf: PUSH1 0x20
05d1: SWAP1
05d2: DUP2
05d3: MSTORE
05d4: PUSH1 0x40
05d6: DUP1
05d7: DUP4
05d8: SHA3
05d9: PUSH1 0x01
05db: PUSH1 0xa0
05dd: PUSH1 0x02
05df: OP_0a
05e0: SUB
05e1: CALLER
05e2: DUP2
05e3: AND
05e4: DUP1
05e5: DUP7
05e6: MSTORE
05e7: SWAP2
05e8: DUP5
05e9: MSTORE
05ea: DUP3
05eb: DUP6
05ec: SHA3
05ed: SLOAD
05ee: SWAP1
05ef: DUP9
05f0: AND
05f1: DUP6
05f2: MSTORE
05f3: PUSH1 0x08
05f5: DUP5
05f6: MSTORE
05f7: DUP3
05f8: DUP6
05f9: SHA3
05fa: SWAP2
05fb: DUP6
05fc: MSTORE
05fd: SWAP3
05fe: MSTORE
05ff: DUP3
0600: SHA3
0601: SLOAD
0602: DUP4
0603: ADD
0604: GT
0605: ISZERO
0606: PUSH2 0x060e
0609: JUMPI
060a: PUSH2 0x0002
060d: JUMP
060e: JUMPDEST

exec
/bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-tqa46nkb
 succeeded in 0ms:
{"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
Finished reading the bytecode bundle and tracing the relevant selector paths. The remaining step is to return the audit result as strict JSON.
  ✓ Inspect bundle artifacts and bytecode summary
  ✓ Assess potential security issues from evidence
  → Produce JSON findings matching schema
codex
{"no_findings":false,"summary":"The runtime bytecode is an old Ownable/ERC20-like token, not a proxy (`is_proxy=false`) and with no `DELEGATECALL`/`SELFDESTRUCT`. The only `CALL` sink at `pc:0x357` sits inside the dynamic-string return helper and is more consistent with Solidity's legacy memory-copy/precompile pattern than a user-facing arbitrary external call. The meaningful risks visible in bytecode are strong privileged controls (minting and address freezing) plus non-standard allowance accounting.","findings":[{"severity":"high","category":"access_control","title":"Owner-controlled blacklist/freeze path can block selected holders from transferring","exploit_scenario":"If the privileged key is malicious or compromised, it can set the slot-6 flag for a target address and then that holder's outbound transfers will revert. In practice this lets the operator selectively censor exits or trap users. Selector naming is inferred from bytecode and therefore best-effort, but the storage/write and transfer-gate pattern is strong.","recommendation":"Remove the blacklist from transfer paths, or at minimum put it behind explicit governance/timelock controls and disclose it clearly as a centralization risk.","evidence":"`selector:0xe724529c` first checks `CALLER` against owner storage slot `0x00` at `pc:0x02e4`-`pc:0x02f9`, then writes a 1-byte flag into mapping slot `0x06` at `pc:0x0535`-`pc:0x0559`. `selector:0xb414d4b6` reads the same slot at `pc:0x0275`-`pc:0x028f`. The transfer path `selector:0xa9059cbb` reaches `pc:0x0407`-`pc:0x0427`, where `slot6[CALLER] & 0xff` must be zero or execution jumps to revert.","locations":["selector:0xe724529c","selector:0xb414d4b6","selector:0xa9059cbb","pc:0x0535","pc:0x0407"]},{"severity":"medium","category":"access_control","title":"Privileged mint function can inflate balances and total supply without any cap visible in bytecode","exploit_scenario":"A malicious or compromised owner can mint arbitrary amounts to any address, diluting all existing holders. From bytecode alone it is unclear whether inflation is intended token policy, so this is reported as a privileged-risk finding rather than an implementation bug.","recommendation":"If fixed supply is intended, remove the mint path entirely. Otherwise enforce an immutable cap and protect minting with governance/timelock controls instead of a single EOA-style owner.","evidence":"`selector:0x79c65068` is owner-gated by comparing `CALLER` with storage slot `0x00` at `pc:0x01c1`-`pc:0x01d6`. The target block at `pc:0x04d9`-`pc:0x0534` adds the provided amount to balance mapping slot `0x05` for the supplied address and also increments total supply in slot `0x04`, then emits a `Transfer`-style event from the zero address.","locations":["selector:0x79c65068","pc:0x01c1","pc:0x04d9","pc:0x04fb"]},{"severity":"low","category":"math","title":"Allowance accounting appears non-standard: `allowance()` returns the approved cap, while `transferFrom` tracks spending in a separate mapping","exploit_scenario":"Integrations that assume ERC-20 semantics may read `allowance(owner,spender)` and believe that full amount remains spendable even after partial `transferFrom` usage. The contract still enforces its internal limit, so the likely result is unexpected reverts / integration DoS rather than direct theft, but the externally reported allowance can be misleading.","recommendation":"Make the public allowance view return remaining spendable allowance (`approved - spent`), or decrement the approved allowance directly during `transferFrom`. If this behavior is intentional, document it prominently because it is non-standard.","evidence":"`selector:0x095ea7b3` writes approvals into mapping slot `0x07` at `pc:0x011d`-`pc:0x014d`. `selector:0xdd62ed3e` returns that same slot-7 value at `pc:0x02b5`-`pc:0x02d9`. But `transferFrom` uses both slot `0x07` and a second nested mapping at slot `0x08`: at `pc:0x05cd`-`pc:0x0609` it checks `spent + amount <= approved`, and at `pc:0x066d`-`pc:0x06b7` it increments the slot-8 spent counter. That means the effective remaining allowance is not what the standard getter reports.","locations":["selector:0x095ea7b3","selector:0xdd62ed3e","selector:0x23b872dd","selector:0xdc3080f2","pc:0x05cd","pc:0x066d"]}]}
tokens used
70,753
Metadata
{
    "codex": {
        "ran_at": "2026-04-05T02:34:17.885501+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "bytecode",
        "bytecode_length": 3606,
        "bytecode_truncated": false,
        "capability_graph_present": true,
        "analysis_artifact_present": true
    },
    "summary": "The runtime bytecode is an old Ownable/ERC20-like token, not a proxy (`is_proxy=false`) and with no `DELEGATECALL`/`SELFDESTRUCT`. The only `CALL` sink at `pc:0x357` sits inside the dynamic-string return helper and is more consistent with Solidity's legacy memory-copy/precompile pattern than a user-facing arbitrary external call. The meaningful risks visible in bytecode are strong privileged controls (minting and address freezing) plus non-standard allowance accounting.",
    "raw_final": {
        "summary": "The runtime bytecode is an old Ownable/ERC20-like token, not a proxy (`is_proxy=false`) and with no `DELEGATECALL`/`SELFDESTRUCT`. The only `CALL` sink at `pc:0x357` sits inside the dynamic-string return helper and is more consistent with Solidity's legacy memory-copy/precompile pattern than a user-facing arbitrary external call. The meaningful risks visible in bytecode are strong privileged controls (minting and address freezing) plus non-standard allowance accounting.",
        "findings": [
            {
                "title": "Owner-controlled blacklist/freeze path can block selected holders from transferring",
                "category": "access_control",
                "evidence": "`selector:0xe724529c` first checks `CALLER` against owner storage slot `0x00` at `pc:0x02e4`-`pc:0x02f9`, then writes a 1-byte flag into mapping slot `0x06` at `pc:0x0535`-`pc:0x0559`. `selector:0xb414d4b6` reads the same slot at `pc:0x0275`-`pc:0x028f`. The transfer path `selector:0xa9059cbb` reaches `pc:0x0407`-`pc:0x0427`, where `slot6[CALLER] & 0xff` must be zero or execution jumps to revert.",
                "severity": "high",
                "locations": [
                    "selector:0xe724529c",
                    "selector:0xb414d4b6",
                    "selector:0xa9059cbb",
                    "pc:0x0535",
                    "pc:0x0407"
                ],
                "recommendation": "Remove the blacklist from transfer paths, or at minimum put it behind explicit governance/timelock controls and disclose it clearly as a centralization risk.",
                "exploit_scenario": "If the privileged key is malicious or compromised, it can set the slot-6 flag for a target address and then that holder's outbound transfers will revert. In practice this lets the operator selectively censor exits or trap users. Selector naming is inferred from bytecode and therefore best-effort, but the storage/write and transfer-gate pattern is strong."
            },
            {
                "title": "Privileged mint function can inflate balances and total supply without any cap visible in bytecode",
                "category": "access_control",
                "evidence": "`selector:0x79c65068` is owner-gated by comparing `CALLER` with storage slot `0x00` at `pc:0x01c1`-`pc:0x01d6`. The target block at `pc:0x04d9`-`pc:0x0534` adds the provided amount to balance mapping slot `0x05` for the supplied address and also increments total supply in slot `0x04`, then emits a `Transfer`-style event from the zero address.",
                "severity": "medium",
                "locations": [
                    "selector:0x79c65068",
                    "pc:0x01c1",
                    "pc:0x04d9",
                    "pc:0x04fb"
                ],
                "recommendation": "If fixed supply is intended, remove the mint path entirely. Otherwise enforce an immutable cap and protect minting with governance/timelock controls instead of a single EOA-style owner.",
                "exploit_scenario": "A malicious or compromised owner can mint arbitrary amounts to any address, diluting all existing holders. From bytecode alone it is unclear whether inflation is intended token policy, so this is reported as a privileged-risk finding rather than an implementation bug."
            },
            {
                "title": "Allowance accounting appears non-standard: `allowance()` returns the approved cap, while `transferFrom` tracks spending in a separate mapping",
                "category": "math",
                "evidence": "`selector:0x095ea7b3` writes approvals into mapping slot `0x07` at `pc:0x011d`-`pc:0x014d`. `selector:0xdd62ed3e` returns that same slot-7 value at `pc:0x02b5`-`pc:0x02d9`. But `transferFrom` uses both slot `0x07` and a second nested mapping at slot `0x08`: at `pc:0x05cd`-`pc:0x0609` it checks `spent + amount <= approved`, and at `pc:0x066d`-`pc:0x06b7` it increments the slot-8 spent counter. That means the effective remaining allowance is not what the standard getter reports.",
                "severity": "low",
                "locations": [
                    "selector:0x095ea7b3",
                    "selector:0xdd62ed3e",
                    "selector:0x23b872dd",
                    "selector:0xdc3080f2",
                    "pc:0x05cd",
                    "pc:0x066d"
                ],
                "recommendation": "Make the public allowance view return remaining spendable allowance (`approved - spent`), or decrement the approved allowance directly during `transferFrom`. If this behavior is intentional, document it prominently because it is non-standard.",
                "exploit_scenario": "Integrations that assume ERC-20 semantics may read `allowance(owner,spender)` and believe that full amount remains spendable even after partial `transferFrom` usage. The contract still enforces its internal limit, so the likely result is unexpected reverts / integration DoS rather than direct theft, but the externally reported allowance can be misleading."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
1
EXT*/BALANCE
0
Total opcodes
1214
Flags
No heuristic flags raised.
View cast disassembly output
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 0x00c1
0000001e: JUMPI
0000001f: DUP1
00000020: PUSH4 0x095ea7b3
00000025: EQ
00000026: PUSH2 0x011d
00000029: JUMPI
0000002a: DUP1
0000002b: PUSH4 0x18160ddd
00000030: EQ
00000031: PUSH2 0x0158
00000034: JUMPI
00000035: DUP1
00000036: PUSH4 0x23b872dd
0000003b: EQ
0000003c: PUSH2 0x0161
0000003f: JUMPI
00000040: DUP1
00000041: PUSH4 0x313ce567
00000046: EQ
00000047: PUSH2 0x0193
0000004a: JUMPI
0000004b: DUP1
0000004c: PUSH4 0x70a08231
00000051: EQ
00000052: PUSH2 0x019f
00000055: JUMPI
00000056: DUP1
00000057: PUSH4 0x79c65068
0000005c: EQ
0000005d: PUSH2 0x01b7
00000060: JUMPI
00000061: DUP1
00000062: PUSH4 0x8da5cb5b
00000067: EQ
00000068: PUSH2 0x01db
0000006b: JUMPI
0000006c: DUP1
0000006d: PUSH4 0x95d89b41
00000072: EQ
00000073: PUSH2 0x01ed
00000076: JUMPI
00000077: DUP1
00000078: PUSH4 0xa9059cbb
0000007d: EQ
0000007e: PUSH2 0x0246
00000081: JUMPI
00000082: DUP1
00000083: PUSH4 0xb414d4b6
00000088: EQ
00000089: PUSH2 0x0275
0000008c: JUMPI
0000008d: DUP1
0000008e: PUSH4 0xdc3080f2
00000093: EQ
00000094: PUSH2 0x0290
00000097: JUMPI
00000098: DUP1
00000099: PUSH4 0xdd62ed3e
0000009e: EQ
0000009f: PUSH2 0x02b5
000000a2: JUMPI
000000a3: DUP1
000000a4: PUSH4 0xe724529c
000000a9: EQ
000000aa: PUSH2 0x02da
000000ad: JUMPI
000000ae: DUP1
000000af: PUSH4 0xf2fde38b
000000b4: EQ
000000b5: PUSH2 0x02fe
000000b8: JUMPI
000000b9: JUMPDEST
000000ba: PUSH2 0x031f
000000bd: PUSH2 0x0002
000000c0: JUMP
000000c1: JUMPDEST
000000c2: PUSH2 0x0321
000000c5: PUSH1 0x01
000000c7: DUP1
000000c8: SLOAD
000000c9: PUSH1 0x20
000000cb: PUSH1 0x02
000000cd: DUP3
000000ce: DUP5
000000cf: AND
000000d0: ISZERO
000000d1: PUSH2 0x0100
000000d4: MUL
000000d5: PUSH1 0x00
000000d7: NOT
000000d8: ADD
000000d9: SWAP1
000000da: SWAP3
000000db: AND
000000dc: SWAP2
000000dd: SWAP1
000000de: SWAP2
000000df: DIV
000000e0: PUSH1 0x1f
000000e2: DUP2
000000e3: ADD
000000e4: DUP3
000000e5: SWAP1
000000e6: DIV
000000e7: SWAP1
000000e8: SWAP2
000000e9: MUL
000000ea: PUSH1 0x80
000000ec: SWAP1
000000ed: DUP2
000000ee: ADD
000000ef: PUSH1 0x40
000000f1: MSTORE
000000f2: PUSH1 0x60
000000f4: DUP3
000000f5: DUP2
000000f6: MSTORE
000000f7: SWAP3
000000f8: SWAP2
000000f9: SWAP1
000000fa: DUP3
000000fb: DUP3
000000fc: DUP1
000000fd: ISZERO
000000fe: PUSH2 0x03dc
00000101: JUMPI
00000102: DUP1
00000103: PUSH1 0x1f
00000105: LT
00000106: PUSH2 0x03b1
00000109: JUMPI
0000010a: PUSH2 0x0100
0000010d: DUP1
0000010e: DUP4
0000010f: SLOAD
00000110: DIV
00000111: MUL
00000112: DUP4
00000113: MSTORE
00000114: SWAP2
00000115: PUSH1 0x20
00000117: ADD
00000118: SWAP2
00000119: PUSH2 0x03dc
0000011c: JUMP
0000011d: JUMPDEST
0000011e: PUSH1 0x01
00000120: PUSH1 0xa0
00000122: PUSH1 0x02
00000124: EXP
00000125: SUB
00000126: CALLER
00000127: DUP2
00000128: AND
00000129: PUSH1 0x00
0000012b: SWAP1
0000012c: DUP2
0000012d: MSTORE
0000012e: PUSH1 0x07
00000130: PUSH1 0x20
00000132: SWAP1
00000133: DUP2
00000134: MSTORE
00000135: PUSH1 0x40
00000137: DUP1
00000138: DUP4
00000139: KECCAK256
0000013a: PUSH1 0x04
0000013c: CALLDATALOAD
0000013d: SWAP5
0000013e: SWAP1
0000013f: SWAP5
00000140: AND
00000141: DUP4
00000142: MSTORE
00000143: SWAP3
00000144: SWAP1
00000145: MSTORE
00000146: SWAP1
00000147: DUP2
00000148: KECCAK256
00000149: PUSH1 0x24
0000014b: CALLDATALOAD
0000014c: SWAP1
0000014d: SSTORE
0000014e: JUMPDEST
0000014f: PUSH1 0x60
00000151: SWAP1
00000152: DUP2
00000153: MSTORE
00000154: PUSH1 0x20
00000156: SWAP1
00000157: RETURN
00000158: JUMPDEST
00000159: PUSH2 0x014e
0000015c: PUSH1 0x04
0000015e: SLOAD
0000015f: DUP2
00000160: JUMP
00000161: JUMPDEST
00000162: PUSH2 0x014e
00000165: PUSH1 0x04
00000167: CALLDATALOAD
00000168: PUSH1 0x24
0000016a: CALLDATALOAD
0000016b: PUSH1 0x44
0000016d: CALLDATALOAD
0000016e: PUSH1 0x01
00000170: PUSH1 0xa0
00000172: PUSH1 0x02
00000174: EXP
00000175: SUB
00000176: DUP4
00000177: AND
00000178: PUSH1 0x00
0000017a: SWAP1
0000017b: DUP2
0000017c: MSTORE
0000017d: PUSH1 0x05
0000017f: PUSH1 0x20
00000181: MSTORE
00000182: PUSH1 0x40
00000184: DUP2
00000185: KECCAK256
00000186: SLOAD
00000187: DUP3
00000188: SWAP1
00000189: LT
0000018a: ISZERO
0000018b: PUSH2 0x058a
0000018e: JUMPI
0000018f: PUSH2 0x0002
00000192: JUMP
00000193: JUMPDEST
00000194: PUSH2 0x014e
00000197: PUSH1 0x03
00000199: SLOAD
0000019a: PUSH1 0xff
0000019c: AND
0000019d: DUP2
0000019e: JUMP
0000019f: JUMPDEST
000001a0: PUSH2 0x014e
000001a3: PUSH1 0x04
000001a5: CALLDATALOAD
000001a6: PUSH1 0x05
000001a8: PUSH1 0x20
000001aa: MSTORE
000001ab: PUSH1 0x00
000001ad: SWAP1
000001ae: DUP2
000001af: MSTORE
000001b0: PUSH1 0x40
000001b2: SWAP1
000001b3: KECCAK256
000001b4: SLOAD
000001b5: DUP2
000001b6: JUMP
000001b7: JUMPDEST
000001b8: PUSH2 0x031f
000001bb: PUSH1 0x04
000001bd: CALLDATALOAD
000001be: PUSH1 0x24
000001c0: CALLDATALOAD
000001c1: PUSH1 0x00
000001c3: SLOAD
000001c4: CALLER
000001c5: PUSH1 0x01
000001c7: PUSH1 0xa0
000001c9: PUSH1 0x02
000001cb: EXP
000001cc: SUB
000001cd: SWAP1
000001ce: DUP2
000001cf: AND
000001d0: SWAP2
000001d1: AND
000001d2: EQ
000001d3: PUSH2 0x04d9
000001d6: JUMPI
000001d7: PUSH2 0x0002
000001da: JUMP
000001db: JUMPDEST
000001dc: PUSH2 0x014e
000001df: PUSH1 0x00
000001e1: SLOAD
000001e2: PUSH1 0x01
000001e4: PUSH1 0xa0
000001e6: PUSH1 0x02
000001e8: EXP
000001e9: SUB
000001ea: AND
000001eb: DUP2
000001ec: JUMP
000001ed: JUMPDEST
000001ee: PUSH2 0x0321
000001f1: PUSH1 0x02
000001f3: DUP1
000001f4: SLOAD
000001f5: PUSH1 0x20
000001f7: PUSH1 0x1f
000001f9: PUSH1 0x00
000001fb: NOT
000001fc: PUSH1 0x01
000001fe: DUP5
000001ff: AND
00000200: ISZERO
00000201: PUSH2 0x0100
00000204: MUL
00000205: ADD
00000206: SWAP1
00000207: SWAP3
00000208: AND
00000209: DUP4
0000020a: SWAP1
0000020b: DIV
0000020c: SWAP2
0000020d: DUP3
0000020e: ADD
0000020f: DUP2
00000210: SWAP1
00000211: DIV
00000212: MUL
00000213: PUSH1 0x80
00000215: SWAP1
00000216: DUP2
00000217: ADD
00000218: PUSH1 0x40
0000021a: MSTORE
0000021b: PUSH1 0x60
0000021d: DUP3
0000021e: DUP2
0000021f: MSTORE
00000220: SWAP3
00000221: SWAP2
00000222: SWAP1
00000223: DUP3
00000224: DUP3
00000225: DUP1
00000226: ISZERO
00000227: PUSH2 0x03dc
0000022a: JUMPI
0000022b: DUP1
0000022c: PUSH1 0x1f
0000022e: LT
0000022f: PUSH2 0x03b1
00000232: JUMPI
00000233: PUSH2 0x0100
00000236: DUP1
00000237: DUP4
00000238: SLOAD
00000239: DIV
0000023a: MUL
0000023b: DUP4
0000023c: MSTORE
0000023d: SWAP2
0000023e: PUSH1 0x20
00000240: ADD
00000241: SWAP2
00000242: PUSH2 0x03dc
00000245: JUMP
00000246: JUMPDEST
00000247: PUSH2 0x031f
0000024a: PUSH1 0x04
0000024c: CALLDATALOAD
0000024d: PUSH1 0x24
0000024f: CALLDATALOAD
00000250: CALLER
00000251: PUSH1 0x01
00000253: PUSH1 0xa0
00000255: PUSH1 0x02
00000257: EXP
00000258: SUB
00000259: AND
0000025a: PUSH1 0x00
0000025c: SWAP1
0000025d: DUP2
0000025e: MSTORE
0000025f: PUSH1 0x05
00000261: PUSH1 0x20
00000263: MSTORE
00000264: PUSH1 0x40
00000266: SWAP1
00000267: KECCAK256
00000268: SLOAD
00000269: DUP2
0000026a: SWAP1
0000026b: LT
0000026c: ISZERO
0000026d: PUSH2 0x03e4
00000270: JUMPI
00000271: PUSH2 0x0002
00000274: JUMP
00000275: JUMPDEST
00000276: PUSH2 0x014e
00000279: PUSH1 0x04
0000027b: CALLDATALOAD
0000027c: PUSH1 0x06
0000027e: PUSH1 0x20
00000280: MSTORE
00000281: PUSH1 0x00
00000283: SWAP1
00000284: DUP2
00000285: MSTORE
00000286: PUSH1 0x40
00000288: SWAP1
00000289: KECCAK256
0000028a: SLOAD
0000028b: PUSH1 0xff
0000028d: AND
0000028e: DUP2
0000028f: JUMP
00000290: JUMPDEST
00000291: PUSH1 0x08
00000293: PUSH1 0x20
00000295: SWAP1
00000296: DUP2
00000297: MSTORE
00000298: PUSH1 0x04
0000029a: CALLDATALOAD
0000029b: PUSH1 0x00
0000029d: SWAP1
0000029e: DUP2
0000029f: MSTORE
000002a0: PUSH1 0x40
000002a2: DUP1
000002a3: DUP3
000002a4: KECCAK256
000002a5: SWAP1
000002a6: SWAP3
000002a7: MSTORE
000002a8: PUSH1 0x24
000002aa: CALLDATALOAD
000002ab: DUP2
000002ac: MSTORE
000002ad: KECCAK256
000002ae: SLOAD
000002af: PUSH2 0x014e
000002b2: SWAP1
000002b3: DUP2
000002b4: JUMP
000002b5: JUMPDEST
000002b6: PUSH1 0x07
000002b8: PUSH1 0x20
000002ba: SWAP1
000002bb: DUP2
000002bc: MSTORE
000002bd: PUSH1 0x04
000002bf: CALLDATALOAD
000002c0: PUSH1 0x00
000002c2: SWAP1
000002c3: DUP2
000002c4: MSTORE
000002c5: PUSH1 0x40
000002c7: DUP1
000002c8: DUP3
000002c9: KECCAK256
000002ca: SWAP1
000002cb: SWAP3
000002cc: MSTORE
000002cd: PUSH1 0x24
000002cf: CALLDATALOAD
000002d0: DUP2
000002d1: MSTORE
000002d2: KECCAK256
000002d3: SLOAD
000002d4: PUSH2 0x014e
000002d7: SWAP1
000002d8: DUP2
000002d9: JUMP
000002da: JUMPDEST
000002db: PUSH2 0x031f
000002de: PUSH1 0x04
000002e0: CALLDATALOAD
000002e1: PUSH1 0x24
000002e3: CALLDATALOAD
000002e4: PUSH1 0x00
000002e6: SLOAD
000002e7: CALLER
000002e8: PUSH1 0x01
000002ea: PUSH1 0xa0
000002ec: PUSH1 0x02
000002ee: EXP
000002ef: SUB
000002f0: SWAP1
000002f1: DUP2
000002f2: AND
000002f3: SWAP2
000002f4: AND
000002f5: EQ
000002f6: PUSH2 0x0535
000002f9: JUMPI
000002fa: PUSH2 0x0002
000002fd: JUMP
000002fe: JUMPDEST
000002ff: PUSH2 0x031f
00000302: PUSH1 0x04
00000304: CALLDATALOAD
00000305: PUSH1 0x00
00000307: SLOAD
00000308: CALLER
00000309: PUSH1 0x01
0000030b: PUSH1 0xa0
0000030d: PUSH1 0x02
0000030f: EXP
00000310: SUB
00000311: SWAP1
00000312: DUP2
00000313: AND
00000314: SWAP2
00000315: AND
00000316: EQ
00000317: PUSH2 0x038f
0000031a: JUMPI
0000031b: PUSH2 0x0002
0000031e: JUMP
0000031f: JUMPDEST
00000320: STOP
00000321: JUMPDEST
00000322: PUSH1 0x40
00000324: MLOAD
00000325: DUP1
00000326: DUP1
00000327: PUSH1 0x20
00000329: ADD
0000032a: DUP3
0000032b: DUP2
0000032c: SUB
0000032d: DUP3
0000032e: MSTORE
0000032f: DUP4
00000330: DUP2
00000331: DUP2
00000332: MLOAD
00000333: DUP2
00000334: MSTORE
00000335: PUSH1 0x20
00000337: ADD
00000338: SWAP2
00000339: POP
0000033a: DUP1
0000033b: MLOAD
0000033c: SWAP1
0000033d: PUSH1 0x20
0000033f: ADD
00000340: SWAP1
00000341: DUP1
00000342: DUP4
00000343: DUP4
00000344: DUP3
00000345: SWAP1
00000346: PUSH1 0x00
00000348: PUSH1 0x04
0000034a: PUSH1 0x20
0000034c: DUP5
0000034d: PUSH1 0x1f
0000034f: ADD
00000350: DIV
00000351: PUSH1 0x0f
00000353: MUL
00000354: PUSH1 0x03
00000356: ADD
00000357: CALL
00000358: POP
00000359: SWAP1
0000035a: POP
0000035b: SWAP1
0000035c: DUP2
0000035d: ADD
0000035e: SWAP1
0000035f: PUSH1 0x1f
00000361: AND
00000362: DUP1
00000363: ISZERO
00000364: PUSH2 0x0381
00000367: JUMPI
00000368: DUP1
00000369: DUP3
0000036a: SUB
0000036b: DUP1
0000036c: MLOAD
0000036d: PUSH1 0x01
0000036f: DUP4
00000370: PUSH1 0x20
00000372: SUB
00000373: PUSH2 0x0100
00000376: EXP
00000377: SUB
00000378: NOT
00000379: AND
0000037a: DUP2
0000037b: MSTORE
0000037c: PUSH1 0x20
0000037e: ADD
0000037f: SWAP2
00000380: POP
00000381: JUMPDEST
00000382: POP
00000383: SWAP3
00000384: POP
00000385: POP
00000386: POP
00000387: PUSH1 0x40
00000389: MLOAD
0000038a: DUP1
0000038b: SWAP2
0000038c: SUB
0000038d: SWAP1
0000038e: RETURN
0000038f: JUMPDEST
00000390: PUSH1 0x00
00000392: DUP1
00000393: SLOAD
00000394: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000003a9: NOT
000003aa: AND
000003ab: DUP3
000003ac: OR
000003ad: SWAP1
000003ae: SSTORE
000003af: POP
000003b0: JUMP
000003b1: JUMPDEST
000003b2: DUP3
000003b3: ADD
000003b4: SWAP2
000003b5: SWAP1
000003b6: PUSH1 0x00
000003b8: MSTORE
000003b9: PUSH1 0x20
000003bb: PUSH1 0x00
000003bd: KECCAK256
000003be: SWAP1
000003bf: JUMPDEST
000003c0: DUP2
000003c1: SLOAD
000003c2: DUP2
000003c3: MSTORE
000003c4: SWAP1
000003c5: PUSH1 0x01
000003c7: ADD
000003c8: SWAP1
000003c9: PUSH1 0x20
000003cb: ADD
000003cc: DUP1
000003cd: DUP4
000003ce: GT
000003cf: PUSH2 0x03bf
000003d2: JUMPI
000003d3: DUP3
000003d4: SWAP1
000003d5: SUB
000003d6: PUSH1 0x1f
000003d8: AND
000003d9: DUP3
000003da: ADD
000003db: SWAP2
000003dc: JUMPDEST
000003dd: POP
000003de: POP
000003df: POP
000003e0: POP
000003e1: POP
000003e2: DUP2
000003e3: JUMP
000003e4: JUMPDEST
000003e5: PUSH1 0x01
000003e7: PUSH1 0xa0
000003e9: PUSH1 0x02
000003eb: EXP
000003ec: SUB
000003ed: DUP3
000003ee: AND
000003ef: PUSH1 0x00
000003f1: SWAP1
000003f2: DUP2
000003f3: MSTORE
000003f4: PUSH1 0x40
000003f6: SWAP1
000003f7: KECCAK256
000003f8: SLOAD
000003f9: DUP1
000003fa: DUP3
000003fb: ADD
000003fc: LT
000003fd: ISZERO
000003fe: PUSH2 0x0406
00000401: JUMPI
00000402: PUSH2 0x0002
00000405: JUMP
00000406: JUMPDEST
00000407: CALLER
00000408: PUSH1 0x01
0000040a: PUSH1 0xa0
0000040c: PUSH1 0x02
0000040e: EXP
0000040f: SUB
00000410: AND
00000411: PUSH1 0x00
00000413: SWAP1
00000414: DUP2
00000415: MSTORE
00000416: PUSH1 0x06
00000418: PUSH1 0x20
0000041a: MSTORE
0000041b: PUSH1 0x40
0000041d: SWAP1
0000041e: KECCAK256
0000041f: SLOAD
00000420: PUSH1 0xff
00000422: AND
00000423: ISZERO
00000424: PUSH2 0x042c
00000427: JUMPI
00000428: PUSH2 0x0002
0000042b: JUMP
0000042c: JUMPDEST
0000042d: DUP1
0000042e: PUSH1 0x05
00000430: PUSH1 0x00
00000432: POP
00000433: PUSH1 0x00
00000435: CALLER
00000436: PUSH1 0x01
00000438: PUSH1 0xa0
0000043a: PUSH1 0x02
0000043c: EXP
0000043d: SUB
0000043e: AND
0000043f: DUP2
00000440: MSTORE
00000441: PUSH1 0x20
00000443: ADD
00000444: SWAP1
00000445: DUP2
00000446: MSTORE
00000447: PUSH1 0x20
00000449: ADD
0000044a: PUSH1 0x00
0000044c: KECCAK256
0000044d: PUSH1 0x00
0000044f: DUP3
00000450: DUP3
00000451: DUP3
00000452: POP
00000453: SLOAD
00000454: SUB
00000455: SWAP3
00000456: POP
00000457: POP
00000458: DUP2
00000459: SWAP1
0000045a: SSTORE
0000045b: POP
0000045c: DUP1
0000045d: PUSH1 0x05
0000045f: PUSH1 0x00
00000461: POP
00000462: PUSH1 0x00
00000464: DUP5
00000465: PUSH1 0x01
00000467: PUSH1 0xa0
00000469: PUSH1 0x02
0000046b: EXP
0000046c: SUB
0000046d: AND
0000046e: DUP2
0000046f: MSTORE
00000470: PUSH1 0x20
00000472: ADD
00000473: SWAP1
00000474: DUP2
00000475: MSTORE
00000476: PUSH1 0x20
00000478: ADD
00000479: PUSH1 0x00
0000047b: KECCAK256
0000047c: PUSH1 0x00
0000047e: DUP3
0000047f: DUP3
00000480: DUP3
00000481: POP
00000482: SLOAD
00000483: ADD
00000484: SWAP3
00000485: POP
00000486: POP
00000487: DUP2
00000488: SWAP1
00000489: SSTORE
0000048a: POP
0000048b: DUP2
0000048c: PUSH1 0x01
0000048e: PUSH1 0xa0
00000490: PUSH1 0x02
00000492: EXP
00000493: SUB
00000494: AND
00000495: CALLER
00000496: PUSH1 0x01
00000498: PUSH1 0xa0
0000049a: PUSH1 0x02
0000049c: EXP
0000049d: SUB
0000049e: AND
0000049f: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
000004c0: DUP4
000004c1: PUSH1 0x40
000004c3: MLOAD
000004c4: DUP1
000004c5: DUP3
000004c6: DUP2
000004c7: MSTORE
000004c8: PUSH1 0x20
000004ca: ADD
000004cb: SWAP2
000004cc: POP
000004cd: POP
000004ce: PUSH1 0x40
000004d0: MLOAD
000004d1: DUP1
000004d2: SWAP2
000004d3: SUB
000004d4: SWAP1
000004d5: LOG3
000004d6: POP
000004d7: POP
000004d8: JUMP
000004d9: JUMPDEST
000004da: PUSH1 0x01
000004dc: PUSH1 0xa0
000004de: PUSH1 0x02
000004e0: EXP
000004e1: SUB
000004e2: DUP1
000004e3: DUP4
000004e4: AND
000004e5: PUSH1 0x00
000004e7: DUP2
000004e8: DUP2
000004e9: MSTORE
000004ea: PUSH1 0x05
000004ec: PUSH1 0x20
000004ee: SWAP1
000004ef: DUP2
000004f0: MSTORE
000004f1: PUSH1 0x40
000004f3: DUP3
000004f4: KECCAK256
000004f5: DUP1
000004f6: SLOAD
000004f7: DUP7
000004f8: ADD
000004f9: SWAP1
000004fa: SSTORE
000004fb: PUSH1 0x04
000004fd: DUP1
000004fe: SLOAD
000004ff: DUP7
00000500: ADD
00000501: SWAP1
00000502: SSTORE
00000503: SWAP1
00000504: SLOAD
00000505: PUSH1 0x60
00000507: DUP6
00000508: DUP2
00000509: MSTORE
0000050a: SWAP3
0000050b: SWAP4
0000050c: AND
0000050d: SWAP2
0000050e: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
0000052f: SWAP2
00000530: SWAP1
00000531: LOG3
00000532: POP
00000533: POP
00000534: JUMP
00000535: JUMPDEST
00000536: PUSH1 0x01
00000538: PUSH1 0xa0
0000053a: PUSH1 0x02
0000053c: EXP
0000053d: SUB
0000053e: DUP3
0000053f: AND
00000540: PUSH1 0x00
00000542: DUP2
00000543: DUP2
00000544: MSTORE
00000545: PUSH1 0x06
00000547: PUSH1 0x20
00000549: MSTORE
0000054a: PUSH1 0x40
0000054c: SWAP1
0000054d: DUP2
0000054e: SWAP1
0000054f: KECCAK256
00000550: DUP1
00000551: SLOAD
00000552: PUSH1 0xff
00000554: NOT
00000555: AND
00000556: DUP5
00000557: OR
00000558: SWAP1
00000559: SSTORE
0000055a: PUSH1 0x60
0000055c: SWAP2
0000055d: DUP3
0000055e: MSTORE
0000055f: PUSH1 0x80
00000561: DUP4
00000562: SWAP1
00000563: MSTORE
00000564: PUSH32 0x48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a5
00000585: SWAP2
00000586: LOG1
00000587: POP
00000588: POP
00000589: JUMP
0000058a: JUMPDEST
0000058b: PUSH1 0x01
0000058d: PUSH1 0xa0
0000058f: PUSH1 0x02
00000591: EXP
00000592: SUB
00000593: DUP4
00000594: AND
00000595: DUP2
00000596: MSTORE
00000597: PUSH1 0x40
00000599: DUP2
0000059a: KECCAK256
0000059b: SLOAD
0000059c: DUP3
0000059d: DUP2
0000059e: ADD
0000059f: LT
000005a0: ISZERO
000005a1: PUSH2 0x05a9
000005a4: JUMPI
000005a5: PUSH2 0x0002
000005a8: JUMP
000005a9: JUMPDEST
000005aa: PUSH1 0x01
000005ac: PUSH1 0xa0
000005ae: PUSH1 0x02
000005b0: EXP
000005b1: SUB
000005b2: DUP5
000005b3: AND
000005b4: DUP2
000005b5: MSTORE
000005b6: PUSH1 0x06
000005b8: PUSH1 0x20
000005ba: MSTORE
000005bb: PUSH1 0x40
000005bd: DUP2
000005be: KECCAK256
000005bf: SLOAD
000005c0: PUSH1 0xff
000005c2: AND
000005c3: ISZERO
000005c4: PUSH2 0x05cc
000005c7: JUMPI
000005c8: PUSH2 0x0002
000005cb: JUMP
000005cc: JUMPDEST
000005cd: PUSH1 0x07
000005cf: PUSH1 0x20
000005d1: SWAP1
000005d2: DUP2
000005d3: MSTORE
000005d4: PUSH1 0x40
000005d6: DUP1
000005d7: DUP4
000005d8: KECCAK256
000005d9: PUSH1 0x01
000005db: PUSH1 0xa0
000005dd: PUSH1 0x02
000005df: EXP
000005e0: SUB
000005e1: CALLER
000005e2: DUP2
000005e3: AND
000005e4: DUP1
000005e5: DUP7
000005e6: MSTORE
000005e7: SWAP2
000005e8: DUP5
000005e9: MSTORE
000005ea: DUP3
000005eb: DUP6
000005ec: KECCAK256
000005ed: SLOAD
000005ee: SWAP1
000005ef: DUP9
000005f0: AND
000005f1: DUP6
000005f2: MSTORE
000005f3: PUSH1 0x08
000005f5: DUP5
000005f6: MSTORE
000005f7: DUP3
000005f8: DUP6
000005f9: KECCAK256
000005fa: SWAP2
000005fb: DUP6
000005fc: MSTORE
000005fd: SWAP3
000005fe: MSTORE
000005ff: DUP3
00000600: KECCAK256
00000601: SLOAD
00000602: DUP4
00000603: ADD
00000604: GT
00000605: ISZERO
00000606: PUSH2 0x060e
00000609: JUMPI
0000060a: PUSH2 0x0002
0000060d: JUMP
0000060e: JUMPDEST
0000060f: DUP2
00000610: PUSH1 0x05
00000612: PUSH1 0x00
00000614: POP
00000615: PUSH1 0x00
00000617: DUP7
00000618: PUSH1 0x01
0000061a: PUSH1 0xa0
0000061c: PUSH1 0x02
0000061e: EXP
0000061f: SUB
00000620: AND
00000621: DUP2
00000622: MSTORE
00000623: PUSH1 0x20
00000625: ADD
00000626: SWAP1
00000627: DUP2
00000628: MSTORE
00000629: PUSH1 0x20
0000062b: ADD
0000062c: PUSH1 0x00
0000062e: KECCAK256
0000062f: PUSH1 0x00
00000631: DUP3
00000632: DUP3
00000633: DUP3
00000634: POP
00000635: SLOAD
00000636: SUB
00000637: SWAP3
00000638: POP
00000639: POP
0000063a: DUP2
0000063b: SWAP1
0000063c: SSTORE
0000063d: POP
0000063e: DUP2
0000063f: PUSH1 0x05
00000641: PUSH1 0x00
00000643: POP
00000644: PUSH1 0x00
00000646: DUP6
00000647: PUSH1 0x01
00000649: PUSH1 0xa0
0000064b: PUSH1 0x02
0000064d: EXP
0000064e: SUB
0000064f: AND
00000650: DUP2
00000651: MSTORE
00000652: PUSH1 0x20
00000654: ADD
00000655: SWAP1
00000656: DUP2
00000657: MSTORE
00000658: PUSH1 0x20
0000065a: ADD
0000065b: PUSH1 0x00
0000065d: KECCAK256
0000065e: PUSH1 0x00
00000660: DUP3
00000661: DUP3
00000662: DUP3
00000663: POP
00000664: SLOAD
00000665: ADD
00000666: SWAP3
00000667: POP
00000668: POP
00000669: DUP2
0000066a: SWAP1
0000066b: SSTORE
0000066c: POP
0000066d: DUP2
0000066e: PUSH1 0x08
00000670: PUSH1 0x00
00000672: POP
00000673: PUSH1 0x00
00000675: DUP7
00000676: PUSH1 0x01
00000678: PUSH1 0xa0
0000067a: PUSH1 0x02
0000067c: EXP
0000067d: SUB
0000067e: AND
0000067f: DUP2
00000680: MSTORE
00000681: PUSH1 0x20
00000683: ADD
00000684: SWAP1
00000685: DUP2
00000686: MSTORE
00000687: PUSH1 0x20
00000689: ADD
0000068a: PUSH1 0x00
0000068c: KECCAK256
0000068d: PUSH1 0x00
0000068f: POP
00000690: PUSH1 0x00
00000692: CALLER
00000693: PUSH1 0x01
00000695: PUSH1 0xa0
00000697: PUSH1 0x02
00000699: EXP
0000069a: SUB
0000069b: AND
0000069c: DUP2
0000069d: MSTORE
0000069e: PUSH1 0x20
000006a0: ADD
000006a1: SWAP1
000006a2: DUP2
000006a3: MSTORE
000006a4: PUSH1 0x20
000006a6: ADD
000006a7: PUSH1 0x00
000006a9: KECCAK256
000006aa: PUSH1 0x00
000006ac: DUP3
000006ad: DUP3
000006ae: DUP3
000006af: POP
000006b0: SLOAD
000006b1: ADD
000006b2: SWAP3
000006b3: POP
000006b4: POP
000006b5: DUP2
000006b6: SWAP1
000006b7: SSTORE
000006b8: POP
000006b9: DUP3
000006ba: PUSH1 0x01
000006bc: PUSH1 0xa0
000006be: PUSH1 0x02
000006c0: EXP
000006c1: SUB
000006c2: AND
000006c3: CALLER
000006c4: PUSH1 0x01
000006c6: PUSH1 0xa0
000006c8: PUSH1 0x02
000006ca: EXP
000006cb: SUB
000006cc: AND
000006cd: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
000006ee: DUP5
000006ef: PUSH1 0x40
000006f1: MLOAD
000006f2: DUP1
000006f3: DUP3
000006f4: DUP2
000006f5: MSTORE
000006f6: PUSH1 0x20
000006f8: ADD
000006f9: SWAP2
000006fa: POP
000006fb: POP
000006fc: PUSH1 0x40
000006fe: MLOAD
000006ff: DUP1
00000700: SWAP2
00000701: SUB
00000702: SWAP1
00000703: LOG3
00000704: SWAP4
00000705: SWAP3
00000706: POP
00000707: POP
00000708: POP
00000709: JUMP
View stderr
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.

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 yes yes
view
trace_id: 0x230e426361730612ecf5c73dc66abc0de7298751c26a2121b34cbfe42ea38088
call_targets: 0x0000000000000000000000000000000000000004, 0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x230e426361730612ecf5c73dc66abc0de7298751c26a2121b34cbfe42ea38088",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000004",
        "0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7"
    ],
    "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": 855,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 1,
    "guards_detected": [],
    "untrusted_call_count": 1
}
high other detector ETH value transfer possible 55 yes yes
view
trace_id: 0x230e426361730612ecf5c73dc66abc0de7298751c26a2121b34cbfe42ea38088
call_targets: 0x0000000000000000000000000000000000000004, 0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x230e426361730612ecf5c73dc66abc0de7298751c26a2121b34cbfe42ea38088",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000004",
        "0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7"
    ],
    "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": 855,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": []
}
high access_control codex Owner-controlled blacklist/freeze path can block selected holders from transferring 85 no
view
evidence_json
{
    "evidence": "`selector:0xe724529c` first checks `CALLER` against owner storage slot `0x00` at `pc:0x02e4`-`pc:0x02f9`, then writes a 1-byte flag into mapping slot `0x06` at `pc:0x0535`-`pc:0x0559`. `selector:0xb414d4b6` reads the same slot at `pc:0x0275`-`pc:0x028f`. The transfer path `selector:0xa9059cbb` reaches `pc:0x0407`-`pc:0x0427`, where `slot6[CALLER] & 0xff` must be zero or execution jumps to revert.",
    "locations": [
        "selector:0xe724529c",
        "selector:0xb414d4b6",
        "selector:0xa9059cbb",
        "pc:0x0535",
        "pc:0x0407"
    ],
    "recommendation": "Remove the blacklist from transfer paths, or at minimum put it behind explicit governance/timelock controls and disclose it clearly as a centralization risk.",
    "exploit_scenario": "If the privileged key is malicious or compromised, it can set the slot-6 flag for a target address and then that holder's outbound transfers will revert. In practice this lets the operator selectively censor exits or trap users. Selector naming is inferred from bytecode and therefore best-effort, but the storage/write and transfer-gate pattern is strong."
}
medium access_control codex Privileged mint function can inflate balances and total supply without any cap visible in bytecode 75 no
view
evidence_json
{
    "evidence": "`selector:0x79c65068` is owner-gated by comparing `CALLER` with storage slot `0x00` at `pc:0x01c1`-`pc:0x01d6`. The target block at `pc:0x04d9`-`pc:0x0534` adds the provided amount to balance mapping slot `0x05` for the supplied address and also increments total supply in slot `0x04`, then emits a `Transfer`-style event from the zero address.",
    "locations": [
        "selector:0x79c65068",
        "pc:0x01c1",
        "pc:0x04d9",
        "pc:0x04fb"
    ],
    "recommendation": "If fixed supply is intended, remove the mint path entirely. Otherwise enforce an immutable cap and protect minting with governance/timelock controls instead of a single EOA-style owner.",
    "exploit_scenario": "A malicious or compromised owner can mint arbitrary amounts to any address, diluting all existing holders. From bytecode alone it is unclear whether inflation is intended token policy, so this is reported as a privileged-risk finding rather than an implementation bug."
}
low math codex Allowance accounting appears non-standard: `allowance()` returns the approved cap, while `transferFrom` tracks spending in a separate mapping 65 no
view
evidence_json
{
    "evidence": "`selector:0x095ea7b3` writes approvals into mapping slot `0x07` at `pc:0x011d`-`pc:0x014d`. `selector:0xdd62ed3e` returns that same slot-7 value at `pc:0x02b5`-`pc:0x02d9`. But `transferFrom` uses both slot `0x07` and a second nested mapping at slot `0x08`: at `pc:0x05cd`-`pc:0x0609` it checks `spent + amount <= approved`, and at `pc:0x066d`-`pc:0x06b7` it increments the slot-8 spent counter. That means the effective remaining allowance is not what the standard getter reports.",
    "locations": [
        "selector:0x095ea7b3",
        "selector:0xdd62ed3e",
        "selector:0x23b872dd",
        "selector:0xdc3080f2",
        "pc:0x05cd",
        "pc:0x066d"
    ],
    "recommendation": "Make the public allowance view return remaining spendable allowance (`approved - spent`), or decrement the approved allowance directly during `transferFrom`. If this behavior is intentional, document it prominently because it is non-standard.",
    "exploit_scenario": "Integrations that assume ERC-20 semantics may read `allowance(owner,spender)` and believe that full amount remains spendable even after partial `transferFrom` usage. The contract still enforces its internal limit, so the likely result is unexpected reverts / integration DoS rather than direct theft, but the externally reported allowance can be misleading."
}