019b3836-2d66-70b7-8bcd-c67d896eb78c
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 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 |
No slither job recorded yet.
{"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"]}]}
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
{
"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
}
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
Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment.
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | yes | yes |
viewtrace_id: 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 |
viewtrace_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 | — |
viewevidence_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 | — |
viewevidence_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 | — |
viewevidence_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."
}
|