019b3836-4034-73e0-8162-117f992b4342
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 |
|---|---|---|---|---|
| 5179 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 5180 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 48756 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 48757 | capability.graph | complete | 1 / 3 | 1 week ago |
| 48758 | detector.run | complete | 1 / 3 | 1 week ago |
| 48759 | validation.fork | complete | 1 / 3 | 1 week ago |
| 113301 | report.consolidate | complete | 1 / 6 | 1 week ago |
No slither job recorded yet.
{"no_findings":false,"summary":"Bytecode is not a proxy and I did not see reachable DELEGATECALL. The meaningful issues are a silent-failure payout path in `sell(uint256)` and value-bearing randomness derived from block variables in `buy()`. I treated the generic CALL/CALLCODE detector output conservatively: one CALLCODE is in embedded event-topic data at pc 0x09b7, and the validated CALL targets included the identity precompile and self, so I did not elevate those generic findings by themselves.","findings":[{"severity":"medium","category":"other","title":"`sell(uint256)` updates balances before a low-level payout CALL whose success is ignored","exploit_scenario":"A user calls `sell(uint256)` from an address or contract that causes the payout CALL to fail, or the contract simply lacks funds for the computed payout. The function still updates storage to move/burn the seller's tokens, then discards the CALL result and returns normally. The seller can lose tokens without receiving the expected proceeds, and the contract's economic state diverges from the intended sell-for-value invariant.","recommendation":"Make the payout leg revert on failure: capture the CALL success flag and `require(success)` before keeping the storage writes, or switch to a pull-payment pattern. If external interaction must remain inline, keep checks-effects-interactions and explicitly handle the failure case.","evidence":"Selector `0xe4849b32` matches `sell(uint256)`. After the balance check, execution jumps into the sell handler at pc `0x0938`. That path performs storage writes before the external interaction (`SSTORE` around pc `0x095a` and `0x096b`), computes the payout from `slot8 * amount` at pc `0x0970`-`0x0972`, then executes `CALL` at pc `0x097f`. The very next instruction is `POP` at pc `0x0980`, with no conditional branch or revert on failure. The exact CALL target is stack-computed and not fully recoverable from bytecode alone, but this is the payout leg of `sell(uint256)`.","locations":["selector:0xe4849b32","pc:0x0938","pc:0x095a","pc:0x096b","pc:0x097f","pc:0x0980"]},{"severity":"medium","category":"oracle","title":"`buy()` uses miner/validator-influenced block data as entropy for value-bearing outcomes","exploit_scenario":"A validator, builder, or sophisticated searcher can bias or selectively include `buy()` transactions when the derived random branch is favorable. Because the outcome depends on `block.number`, `block.timestamp`, historical `BLOCKHASH`, and `msg.value`, the randomness is not unpredictable for an adversary controlling inclusion or timestamp within normal protocol bounds. If this branch controls token rewards or jackpot-like payouts, the game can be systematically biased.","recommendation":"Do not derive value-bearing randomness from block variables alone. Use a commit-reveal flow, an external VRF, or another scheme where the party deciding inclusion cannot cheaply bias the result.","evidence":"Selector `0xa6f2ae3a` matches `buy()`. In the buy path, pc `0x083a` loads `NUMBER` and pc `0x083d` loads `TIMESTAMP`; the code then hashes these values and jumps into the helper at pc `0x01e7`, which invokes `BLOCKHASH` at pc `0x0201` and reduces the result modulo 10 at pc `0x0216`-`0x0219`. The resulting value is compared against the owner-settable threshold in `slot7` at pc `0x085f`-`0x086d` and again around pc `0x0876`-`0x0894`, and that branch feeds subsequent balance updates. This is classic weak entropy from block data rather than an unbiased randomness source.","locations":["selector:0xa6f2ae3a","pc:0x083a","pc:0x083d","pc:0x01e7","pc:0x0201","pc:0x0219","pc:0x085f","pc:0x0894"]}]}
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-n86eu21s
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5c58-c94b-77d2-b6ff-205fcd9d2aad
--------
user
You are a security auditor. You ONLY have runtime bytecode + analysis artifacts.
You MUST read `BYTECODE_BUNDLE.json` before concluding; it contains the bytecode summary,
evidence bundle, callsites, storage slots, and detector findings.
Special cases when reasoning from bytecode (be explicit about uncertainty):
- Selector inference is best-effort; missing selectors are common.
- Fallback/receive paths may be the only entrypoints.
- CALL vs DELEGATECALL semantics differ; DELEGATECALL executes in caller storage.
- Proxy patterns (EIP-1967, minimal proxies, beacon) change which storage is authoritative.
- Storage slots are raw; mappings/arrays appear via keccak patterns, names are unknown.
- Guard detection is heuristic; absence of guards does NOT mean unguarded.
- Returndata checking is unknown unless explicitly shown in evidence.
- Precompiles (0x1..0x9) and common ERC20 transfer selectors may appear; do not over-claim.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title.
- Locations can be pc references like "pc:0x123" or selectors like "selector:0xa9059cbb".
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation,
accounting/invariant breaks, dangerous delegatecall, and untrusted external calls.
Be conservative: if evidence is weak, mark severity low/medium and explain why.
warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime.
exec
/bin/bash -lc pwd in /tmp/codex-n86eu21s
succeeded in 0ms:
/tmp/codex-n86eu21s
exec
/bin/bash -lc 'rg --files' in /tmp/codex-n86eu21s
succeeded in 0ms:
codex-output-schema.json
BYTECODE_BUNDLE.json
exec
/bin/bash -lc 'wc -c BYTECODE_BUNDLE.json codex-output-schema.json' in /tmp/codex-n86eu21s
succeeded in 0ms:
241525 BYTECODE_BUNDLE.json
815 codex-output-schema.json
242340 total
exec
/bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-n86eu21s
succeeded in 0ms:
{"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
exec
/bin/bash -lc "jq 'keys' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
"analysis_artifact",
"analysis_run",
"artifact",
"capability_graph",
"detector_findings",
"heuristics_summary"
]
exec
/bin/bash -lc "jq '.heuristics_summary' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
{
"create2_count": 2,
"delegatecall_count": 0,
"flags": [
"create_opcodes_present"
],
"selfdestruct_count": 0
}
exec
/bin/bash -lc "jq '.detector_findings' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
{
"confidence": 55,
"evidence_json": {
"eth_value_calls": 6,
"examples": [
{
"opcode": "CALL",
"pc": 1126,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1194,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1436,
"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",
"0xf5540ea5638cf4bda40e6e34ebc005095926aafc"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0x3ce6bbfd7fb102b7a4d9114203725380a4f698b34d8c422656d1a316303b00be",
"trace_mode": "callTracer"
}
},
{
"confidence": 60,
"evidence_json": {
"call_count": 6,
"examples": [
{
"opcode": "CALL",
"pc": 1126,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1194,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1436,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"guards_detected": [],
"untrusted_call_count": 6
},
"normalized_json": {
"sink": "CALL"
},
"severity": "high",
"title": "Untrusted CALL target/value reachable",
"validated": true,
"validation_json": {
"attempts": 1,
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0xf5540ea5638cf4bda40e6e34ebc005095926aafc"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0x3ce6bbfd7fb102b7a4d9114203725380a4f698b34d8c422656d1a316303b00be",
"trace_mode": "callTracer"
}
},
{
"confidence": 45,
"evidence_json": {
"create2_count": 2,
"create_count": 0
},
"normalized_json": {
"sink": "CREATE"
},
"severity": "medium",
"title": "CREATE/CREATE2 reachable",
"validated": false,
"validation_json": {
"attempts": 32,
"call_targets": null,
"classification": "no_sink",
"confirmed": false,
"errors": 0,
"matched_probe": null,
"sink": "CREATE",
"status": "unknown",
"target_varies": null,
"trace_id": "0x452663a790b9804fcae803623814571567435489435a205594c196d7d9371b34",
"trace_mode": "structLogs"
}
}
]
exec
/bin/bash -lc "jq '.analysis_artifact.summary // .analysis_artifact.bytecode_summary // .analysis_artifact.overview // .analysis_artifact' BYTECODE_BUNDLE.json | head -c 12000" in /tmp/codex-n86eu21s
succeeded in 0ms:
{
"address": "0xf5540ea5638cf4bda40e6e34ebc005095926aafc",
"artifact_hash": "0xf9f0d1c1b90d4adeb34015a5e90fcf5fcc07f597badf71d7ad31958cb5656649",
"artifact_json": {
"auth": {
"guards": []
},
"basic_blocks": [
{
"end_pc": 10,
"hash": "0xf11444caaf4db510565a598ec5db1095f6815c9db671a85c90dde30dacbe11e2",
"opcodes": [
"PUSH1",
"PUSH1",
"MSTORE",
"CALLDATASIZE",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 0
},
{
"end_pc": 30,
"hash": "0x81ba1990cb6d08ec7e9f5cef473cf689c892f720fb932454a377fa40a7b6acb2",
"opcodes": [
"PUSH1",
"PUSH1",
"EXP",
"PUSH1",
"CALLDATALOAD",
"DIV",
"PUSH4",
"OP_81",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 11
},
{
"end_pc": 41,
"hash": "0xbb4adb6b0343b466b21e5c872124ae1246c15937f907412dff7a45be4b89e23a",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 31
},
{
"end_pc": 52,
"hash": "0xea19454bfe01c00dbab35612f8aa52f8f8f0fb5376f0c092cc366ffb9e4c6857",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 42
},
{
"end_pc": 63,
"hash": "0xd69d368fec6c14dd7b3dc3a73b7ce17524cd586475c440422e4028feda4fe985",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 53
},
{
"end_pc": 74,
"hash": "0x22ac288b26f96d1f2be88284216b7a65d533ac2cbf794a41853e29d9f15cb49f",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 64
},
{
"end_pc": 85,
"hash": "0x4a871c50e75c9501bcbed914881e4008e1796505737385677e4df8f3d54ca784",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 75
},
{
"end_pc": 96,
"hash": "0xd514a7eacaee8fb4ebdcbdcb38800c29184eab38b16861dd8b97b17c70aaa2ff",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 86
},
{
"end_pc": 107,
"hash": "0x57d0236ed3c086498b49e1b50433804bdf79e7109c7b83755797f666e9fc8f6c",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 97
},
{
"end_pc": 118,
"hash": "0x93f7d5d4e7efa89e76f8f86896757b0bc1282a0b1c617a39aa1a86408e7ae1ee",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 108
},
{
"end_pc": 129,
"hash": "0xcc3c70fb9af60426f8e26d7e1f9ec383d88776d6512a9954f6bb6e8aff45b879",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 119
},
{
"end_pc": 140,
"hash": "0x86e3595e017f2af8a502c2e68c7814eb5c9f0907f0afa551477a81f71d8834b2",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 130
},
{
"end_pc": 151,
"hash": "0x48179b41f3610338adb51b04894be3a884a3d97e0d492a8aae6c114b635c31a3",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 141
},
{
"end_pc": 162,
"hash": "0x00f2e521531902fffd26347661a176ca2eda1a0744be870cff160418e21f3b2e",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 152
},
{
"end_pc": 173,
"hash": "0xdb6f001418c531caf78313cae502f5f6289e688d09acec1f8dc3970f238367c3",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 163
},
{
"end_pc": 184,
"hash": "0x4d86ffa9c19fdc81e9e81d77c7c811e836ae5ff72a61881ab0f873a1c0d3f0be",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 174
},
{
"end_pc": 195,
"hash": "0xa91d7fb99828f9689dc6ccda4a2a36fe23e57cd79450cabcd6123e9f6e7d764c",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 185
},
{
"end_pc": 206,
"hash": "0x1997e43099f71cafa68597bcff4a83984a35254f78f24a47a1305635b012542c",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 196
},
{
"end_pc": 217,
"hash": "0x2ac83c9fbd12121cfe837b579d467c8796a299f150c24a3d76eecf07a39b419f",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 207
},
{
"end_pc": 228,
"hash": "0x0b9c7a41d23b43c8eb6b6cb37b34be1c160c87c1c13630c81ff211022224aa87",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 218
},
{
"end_pc": 239,
"hash": "0x3101111f07321a4cb5fae2cfc264ca9ed59c8fa33a986357bc8acbc0e8c143f4",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 229
},
{
"end_pc": 250,
"hash": "0x0744dbb6cd58b3038fe60de22a96eff378a0420bcf310515ce1aeaf9929a08d3",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 240
},
{
"end_pc": 261,
"hash": "0xa2c51aba88be8405fa240a0076209f80349abc432670dc43adc997cd03a58e6d",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 251
},
{
"end_pc": 263,
"hash": "0xfa58d4586ba563afea8a6209e1c275e39f7a607bbb2afbfa6b1803387a47055c",
"opcodes": [
"JUMPDEST",
"STOP"
],
"start_pc": 262
},
{
"end_pc": 329,
"hash": "0x0a33371b27117f25a7860dfff512f34e43d5ece199b7523123a4a5b45f03cc3d",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_80",
"MLOAD",
"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_82",
"MUL",
"OP_84",
"ADD",
"OP_82",
"ADD",
"OP_90",
"OP_94",
"MSTORE",
"OP_83",
"OP_83",
"MSTORE",
"PUSH2",
"OP_93",
"OP_90",
"OP_83",
"ADD",
"OP_82",
"OP_82",
"OP_80",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 264
},
{
"end_pc": 337,
"hash": "0x2d5d8be3694ad11e330b04219e0803fc9207c60e294fdafa5cce9912a19e7731",
"opcodes": [
"OP_80",
"PUSH1",
"LT",
"PUSH2",
"JUMPI"
],
"start_pc": 330
},
{
"end_pc": 356,
"hash": "0xf356b65db4ad2e66f5cc70f5b99151c72682890746f0290a555bd307a8a9a8f1",
"opcodes": [
"PUSH2",
"OP_80",
"OP_83",
"SLOAD",
"DIV",
"MUL",
"OP_83",
"MSTORE",
"OP_91",
"PUSH1",
"ADD",
"OP_91",
"PUSH2",
"JUMP"
],
"start_pc": 338
},
{
"end_pc": 365,
"hash": "0x5355a75f3e32c3ff6b59b35cf8ebad4c8946c512f81833383123c6371865cce2",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"SLOAD",
"OP_81",
"JUMP"
],
"start_pc": 357
},
{
"end_pc": 395,
"hash": "0x2c57ee52e13001017913430129bcedb53aa5c5f299e08ce8514f8bbe936f0cd9",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"SLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_90",
"OP_81",
"AND",
"CALLER",
"OP_90",
"OP_91",
"AND",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 366
},
{
"end_pc": 399,
"hash": "0x308901a1166184fe53071bea39dd107613c9a5d3e90924c678f29754c5b948ac",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 396
},
{
"end_pc": 414,
"hash": "0x4304b330bcd2157b6c920f24c3c28b0cdefd386b765f0c18b1efb33e7ee409e2",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"SLOAD",
"PUSH4",
"AND",
"OP_81",
"JUMP"
],
"start_pc": 400
},
{
"end_pc": 460,
"hash": "0xb651867d4f6b3ef7509b871f1b5526b543177c96ad2282c8256cec26f78231b3",
"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": 415
},
{
"end_pc": 464,
"hash": "0x06f1bd585a2974e4edd144946dc5578111a51c3918f67134544c236bc997f9cf",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 461
},
{
"end_pc": 476,
"hash": "0xb543112cb3079ff3863a459325f47e8d3851e361fe78eceebb73df8e735d4398",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"SLOAD",
"PUSH1",
"AND",
"OP_81",
"JUMP"
],
"start_pc": 465
},
{
"end_pc": 486,
"hash": "0xfd5fffb0b3dfded5666312d3563c9b72259498f03f32fee7905521d6e1dff11d",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD"
],
"start_pc": 477
},
{
"end_pc": 491,
"hash": "0x8c860dd4a744b83f5d603fa28aafd9adea96022d0bd3350c095efd519d9f1ba2",
Error: writing output failed: Broken pipe
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json | keys' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
"auth",
"basic_blocks",
"callsites",
"cfg_edges",
"cfg_hash",
"dispatcher_type",
"function_entries",
"functions",
"selectors",
"sinks",
"storage",
"version"
]
exec
/bin/bash -lc "jq '.capability_graph | keys' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
"address",
"block_number",
"chain_id",
"codehash",
"created_at",
"graph_hash",
"graph_json",
"id",
"updated_at",
"version"
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.dispatch // .analysis_artifact.artifact_json.function_selectors // .analysis_artifact.artifact_json.selectors // .analysis_artifact.artifact_json.callsites // empty' BYTECODE_BUNDLE.json | head -c 12000" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
"0x06fdde03",
"0x18160ddd",
"0x1fe9eabc",
"0x233de126",
"0x23b872dd",
"0x313ce567",
"0x41fa4876",
"0x70a08231",
"0x7f2a8a80",
"0x8da5cb5b",
"0x95d89b41",
"0xa6f2ae3a",
"0xa9059cbb",
"0xaa295de9",
"0xbc094049",
"0xc4839e8b",
"0xcae9ca51",
"0xdc3080f2",
"0xdd62ed3e",
"0xe4849b32",
"0xf2fde38b",
"0xff9b3acf"
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.function_entries' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
{
"entry_pc": null,
"selector": "0x06fdde03"
},
{
"entry_pc": 535423676,
"selector": "0x18160ddd"
},
{
"entry_pc": 591257894,
"selector": "0x1fe9eabc"
},
{
"entry_pc": 599290589,
"selector": "0x233de126"
},
{
"entry_pc": 826074471,
"selector": "0x23b872dd"
},
{
"entry_pc": 1106921590,
"selector": "0x313ce567"
},
{
"entry_pc": 1889567281,
"selector": "0x41fa4876"
},
{
"entry_pc": 2133494400,
"selector": "0x70a08231"
},
{
"entry_pc": 2376452955,
"selector": "0x7f2a8a80"
},
{
"entry_pc": 2514000705,
"selector": "0x8da5cb5b"
},
{
"entry_pc": 2800922170,
"selector": "0x95d89b41"
},
{
"entry_pc": 2835717307,
"selector": "0xa6f2ae3a"
},
{
"entry_pc": 2854837737,
"selector": "0xa9059cbb"
},
{
"entry_pc": 3154722889,
"selector": "0xaa295de9"
},
{
"entry_pc": 3296960139,
"selector": "0xbc094049"
},
{
"entry_pc": 3404319313,
"selector": "0xc4839e8b"
},
{
"entry_pc": 3694166258,
"selector": "0xcae9ca51"
},
{
"entry_pc": 3714247998,
"selector": "0xdc3080f2"
},
{
"entry_pc": 3833895730,
"selector": "0xdd62ed3e"
},
{
"entry_pc": 4076725131,
"selector": "0xe4849b32"
},
{
"entry_pc": 4288363215,
"selector": "0xf2fde38b"
},
{
"entry_pc": null,
"selector": "0xff9b3acf"
}
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.functions' BYTECODE_BUNDLE.json | head -c 16000" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
{
"auth": {
"guards": []
},
"entry_pc": null,
"selector": "0x06fdde03",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 45,
"slots": [
{
"op": "SLOAD",
"pc": 272,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 343,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 363,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 375,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 406,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 471,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 596,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 626,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 645,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 715,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 735,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 809,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 818,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
},
{
"op": "SLOAD",
"pc": 830,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SSTORE",
"pc": 1001,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1340,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1370,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1591,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2053,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2087,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2168,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2234,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2305,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2416,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 535423676,
"selector": "0x18160ddd",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 45,
"slots": [
{
"op": "SLOAD",
"pc": 272,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 343,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 363,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 375,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 406,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 471,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 596,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 626,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 645,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 715,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 735,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 809,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 818,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
},
{
"op": "SLOAD",
"pc": 830,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SSTORE",
"pc": 1001,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1340,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1370,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1591,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2053,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2087,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2168,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2234,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2305,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2416,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 591257894,
"selector": "0x1fe9eabc",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 45,
"slots": [
{
"op": "SLOAD",
"pc": 272,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 343,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 363,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 375,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 406,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 471,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 596,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 626,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 645,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 715,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 735,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 809,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 818,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
},
{
"op": "SLOAD",
"pc": 830,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SSTORE",
"pc": 1001,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1340,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1370,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1591,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2053,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2087,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2168,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2234,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2305,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2416,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
}
],
"writes": 15
}
},
{
"auth": {
"guards": []
},
"entry_pc": 599290589,
"selector": "0x233de126",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 45,
"slots": [
{
"op": "SLOAD",
"pc": 272,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 343,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 363,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 375,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 406,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 471,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 596,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 626,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 645,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 715,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 735,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 809,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 818,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
},
{
"op": "SLOAD",
"pc": 830,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SSTORE",
"pc": 1001,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1340,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1370,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1591,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2053,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2087,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
Error: writing output failed: Broken pipe
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.callsites' BYTECODE_BUNDLE.json | head -c 16000" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
{
"opcode": "CALL",
"pc": 1126,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1194,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1436,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 2431,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALLCODE",
"pc": 2487,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 2505,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.basic_blocks[] | select(.start_pc<=1150 and .end_pc>=1080)' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
{
"end_pc": 1142,
"hash": "0x6c3bec8ad2197379e97ce7c15d090fefd675ffbc51b725c82688af5488456e58",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_80",
"MLOAD",
"PUSH1",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"OP_81",
"OP_81",
"ADD",
"CALLDATALOAD",
"PUSH1",
"OP_81",
"ADD",
"OP_84",
"OP_90",
"DIV",
"OP_84",
"MUL",
"OP_85",
"ADD",
"OP_84",
"ADD",
"OP_90",
"OP_95",
"MSTORE",
"OP_84",
"OP_84",
"MSTORE",
"PUSH2",
"OP_94",
"OP_81",
"CALLDATALOAD",
"OP_94",
"PUSH1",
"OP_80",
"CALLDATALOAD",
"OP_95",
"OP_93",
"OP_94",
"PUSH1",
"OP_94",
"OP_92",
"OP_93",
"OP_91",
"ADD",
"OP_91",
"OP_81",
"OP_90",
"OP_84",
"ADD",
"OP_83",
"OP_82",
"OP_80",
"OP_82",
"OP_84",
"CALLDATACOPY",
"POP",
"OP_94",
"OP_96",
"POP",
"POP",
"POP",
"POP",
"POP",
"POP",
"POP",
"PUSH1",
"PUSH1",
"OP_83",
"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",
"POP",
"PUSH1",
"OP_87",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"PUSH1",
"SHA3",
"PUSH1",
"POP",
"OP_81",
"OP_90",
"SSTORE",
"POP",
"OP_84",
"OP_90",
"POP",
"OP_80",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH4",
"CALLER",
"OP_86",
"ADDRESS",
"OP_87",
"PUSH1",
"MLOAD",
"OP_85",
"PUSH1",
"PUSH1",
"EXP",
"MUL",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_80",
"OP_85",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_84",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_83",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"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": 854
}
{
"end_pc": 1167,
"hash": "0xb5d50d3e73296dfb1ef27af6c131ccf6951d16e423282d9784276c6565299717",
"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": 1143
}
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.basic_blocks[] | select(.start_pc<=1450 and .end_pc>=1380)' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
{
"end_pc": 1381,
"hash": "0xe284d6cbc41c05af638ec7157a27d2268206dbca2eb088a84f0ba0b0638eca90",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"SLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"JUMP"
],
"start_pc": 1364
}
{
"end_pc": 1452,
"hash": "0x96461ab3bc00a3ed037c6de2cec21c8dbe3e2af0b9ef0b1115e74e0968648c95",
"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": 1382
}
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.basic_blocks[] | select(.start_pc<=2520 and .end_pc>=2400)' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
{
"end_pc": 2485,
"hash": "0xc6491c883e82c19af2d22cc89b39031ae7516047668a3ee1e1f5be8c4d5c6749",
"opcodes": [
"JUMPDEST",
"POP",
"ADDRESS",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_90",
"OP_81",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"MSTORE",
"PUSH1",
"OP_80",
"OP_82",
"SHA3",
"OP_80",
"SLOAD",
"OP_85",
"ADD",
"OP_90",
"SSTORE",
"CALLER",
"OP_90",
"OP_92",
"AND",
"OP_80",
"OP_82",
"MSTORE",
"OP_82",
"OP_82",
"SHA3",
"OP_80",
"SLOAD",
"OP_85",
"OP_90",
"SUB",
"OP_90",
"SSTORE",
"OP_91",
"MLOAD",
"PUSH1",
"SLOAD",
"OP_84",
"MUL",
"OP_92",
"OP_91",
"OP_90",
"OP_83",
"OP_90",
"OP_82",
"OP_81",
"OP_81",
"OP_81",
"OP_85",
"OP_88",
"OP_83",
"CALL",
"POP",
"POP",
"PUSH1",
"OP_80",
"MLOAD",
"OP_86",
"OP_81",
"MSTORE",
"OP_90",
"MLOAD",
"ADDRESS",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_94",
"OP_93",
"POP",
"PUSH1",
"OP_80",
"MLOAD",
"PUSH1",
"PUSH2",
"OP_83",
"CODECOPY",
"OP_81",
"MLOAD",
"OP_91",
"MSTORE",
"OP_92",
"POP",
"OP_90",
"OP_81",
"OP_90",
"SUB",
"PUSH1",
"ADD",
"OP_90",
"OP_A3",
"OP_91",
"OP_90",
"POP",
"JUMP"
],
"start_pc": 2360
}
{
"end_pc": 2517,
"hash": "0xe8c93e2f110af93693b9f98b9a3c3e1c10ab135912f01dcdc646c5a5650d7dfc",
"opcodes": [
"OP_DD",
"CALLCODE",
"MSTORE",
"OP_AD",
"SHL",
"OP_E2",
"OP_C8",
"OP_9B",
"PUSH10",
"CALL",
"PUSH4",
"CREATE2",
"GAS",
"OP_4D",
"CREATE2",
"OP_23",
"OP_B3",
"OP_EF"
],
"start_pc": 2486
}
exec
/bin/bash -lc "jq '.capability_graph.graph_json | keys' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
"edges",
"nodes",
"version"
]
exec
/bin/bash -lc "jq '.capability_graph.graph_json' BYTECODE_BUNDLE.json | head -c 16000" in /tmp/codex-n86eu21s
succeeded in 0ms:
{
"edges": [
{
"from": "bb:0",
"to": "bb:262",
"type": "control_flow"
},
{
"from": "bb:0",
"to": "bb:11",
"type": "control_flow_fallthrough"
},
{
"from": "bb:11",
"to": "bb:264",
"type": "control_flow"
},
{
"from": "bb:11",
"to": "bb:31",
"type": "control_flow_fallthrough"
},
{
"from": "bb:31",
"to": "bb:357",
"type": "control_flow"
},
{
"from": "bb:31",
"to": "bb:42",
"type": "control_flow_fallthrough"
},
{
"from": "bb:42",
"to": "bb:366",
"type": "control_flow"
},
{
"from": "bb:42",
"to": "bb:53",
"type": "control_flow_fallthrough"
},
{
"from": "bb:53",
"to": "bb:400",
"type": "control_flow"
},
{
"from": "bb:53",
"to": "bb:64",
"type": "control_flow_fallthrough"
},
{
"from": "bb:64",
"to": "bb:415",
"type": "control_flow"
},
{
"from": "bb:64",
"to": "bb:75",
"type": "control_flow_fallthrough"
},
{
"from": "bb:75",
"to": "bb:465",
"type": "control_flow"
},
{
"from": "bb:75",
"to": "bb:86",
"type": "control_flow_fallthrough"
},
{
"from": "bb:86",
"to": "bb:477",
"type": "control_flow"
},
{
"from": "bb:86",
"to": "bb:97",
"type": "control_flow_fallthrough"
},
{
"from": "bb:97",
"to": "bb:563",
"type": "control_flow"
},
{
"from": "bb:97",
"to": "bb:108",
"type": "control_flow_fallthrough"
},
{
"from": "bb:108",
"to": "bb:587",
"type": "control_flow"
},
{
"from": "bb:108",
"to": "bb:119",
"type": "control_flow_fallthrough"
},
{
"from": "bb:119",
"to": "bb:620",
"type": "control_flow"
},
{
"from": "bb:119",
"to": "bb:130",
"type": "control_flow_fallthrough"
},
{
"from": "bb:130",
"to": "bb:638",
"type": "control_flow"
},
{
"from": "bb:130",
"to": "bb:141",
"type": "control_flow_fallthrough"
},
{
"from": "bb:141",
"to": "bb:729",
"type": "control_flow"
},
{
"from": "bb:141",
"to": "bb:152",
"type": "control_flow_fallthrough"
},
{
"from": "bb:152",
"to": "bb:756",
"type": "control_flow"
},
{
"from": "bb:152",
"to": "bb:163",
"type": "control_flow_fallthrough"
},
{
"from": "bb:163",
"to": "bb:803",
"type": "control_flow"
},
{
"from": "bb:163",
"to": "bb:174",
"type": "control_flow_fallthrough"
},
{
"from": "bb:174",
"to": "bb:812",
"type": "control_flow"
},
{
"from": "bb:174",
"to": "bb:185",
"type": "control_flow_fallthrough"
},
{
"from": "bb:185",
"to": "bb:821",
"type": "control_flow"
},
{
"from": "bb:185",
"to": "bb:196",
"type": "control_flow_fallthrough"
},
{
"from": "bb:196",
"to": "bb:854",
"type": "control_flow"
},
{
"from": "bb:196",
"to": "bb:207",
"type": "control_flow_fallthrough"
},
{
"from": "bb:207",
"to": "bb:1213",
"type": "control_flow"
},
{
"from": "bb:207",
"to": "bb:218",
"type": "control_flow_fallthrough"
},
{
"from": "bb:218",
"to": "bb:1250",
"type": "control_flow"
},
{
"from": "bb:218",
"to": "bb:229",
"type": "control_flow_fallthrough"
},
{
"from": "bb:229",
"to": "bb:1287",
"type": "control_flow"
},
{
"from": "bb:229",
"to": "bb:240",
"type": "control_flow_fallthrough"
},
{
"from": "bb:240",
"to": "bb:1331",
"type": "control_flow"
},
{
"from": "bb:240",
"to": "bb:251",
"type": "control_flow_fallthrough"
},
{
"from": "bb:251",
"to": "bb:1364",
"type": "control_flow"
},
{
"from": "bb:251",
"to": "bb:262",
"type": "control_flow_fallthrough"
},
{
"from": "bb:264",
"to": "bb:1664",
"type": "control_flow"
},
{
"from": "bb:264",
"to": "bb:330",
"type": "control_flow_fallthrough"
},
{
"from": "bb:330",
"to": "bb:1621",
"type": "control_flow"
},
{
"from": "bb:330",
"to": "bb:338",
"type": "control_flow_fallthrough"
},
{
"from": "bb:338",
"to": "bb:1664",
"type": "control_flow"
},
{
"from": "bb:366",
"to": "bb:2044",
"type": "control_flow"
},
{
"from": "bb:366",
"to": "bb:396",
"type": "control_flow_fallthrough"
},
{
"from": "bb:415",
"to": "bb:1809",
"type": "control_flow"
},
{
"from": "bb:415",
"to": "bb:461",
"type": "control_flow_fallthrough"
},
{
"from": "bb:477",
"to": "bb:487",
"type": "control_flow_fallthrough"
},
{
"from": "bb:487",
"to": "bb:492",
"type": "control_flow_fallthrough"
},
{
"from": "bb:492",
"to": "bb:1672",
"type": "control_flow"
},
{
"from": "bb:492",
"to": "bb:501",
"type": "control_flow_fallthrough"
},
{
"from": "bb:501",
"to": "bb:555",
"type": "control_flow"
},
{
"from": "bb:501",
"to": "bb:546",
"type": "control_flow_fallthrough"
},
{
"from": "bb:546",
"to": "bb:555",
"type": "control_flow_fallthrough"
},
{
"from": "bb:555",
"to": "bb:492",
"type": "control_flow"
},
{
"from": "bb:587",
"to": "bb:2049",
"type": "control_flow"
},
{
"from": "bb:587",
"to": "bb:616",
"type": "control_flow_fallthrough"
},
{
"from": "bb:638",
"to": "bb:1664",
"type": "control_flow"
},
{
"from": "bb:638",
"to": "bb:702",
"type": "control_flow_fallthrough"
},
{
"from": "bb:702",
"to": "bb:1621",
"type": "control_flow"
},
{
"from": "bb:702",
"to": "bb:710",
"type": "control_flow_fallthrough"
},
{
"from": "bb:710",
"to": "bb:1664",
"type": "control_flow"
},
{
"from": "bb:729",
"to": "bb:2101",
"type": "control_flow"
},
{
"from": "bb:729",
"to": "bb:752",
"type": "control_flow_fallthrough"
},
{
"from": "bb:756",
"to": "bb:1680",
"type": "control_flow"
},
{
"from": "bb:756",
"to": "bb:799",
"type": "control_flow_fallthrough"
},
{
"from": "bb:821",
"to": "bb:2083",
"type": "control_flow"
},
{
"from": "bb:821",
"to": "bb:850",
"type": "control_flow_fallthrough"
},
{
"from": "bb:854",
"to": "bb:1168",
"type": "control_flow"
},
{
"from": "bb:854",
"to": "bb:1143",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1143",
"to": "bb:1168",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1168",
"to": "bb:1200",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1287",
"to": "bb:2360",
"type": "control_flow"
},
{
"from": "bb:1287",
"to": "bb:1327",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1331",
"to": "bb:1587",
"type": "control_flow"
},
{
"from": "bb:1331",
"to": "bb:1360",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1382",
"to": "bb:1478",
"type": "control_flow"
},
{
"from": "bb:1382",
"to": "bb:1453",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1453",
"to": "bb:1478",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1621",
"to": "bb:1635",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1635",
"to": "bb:1635",
"type": "control_flow"
},
{
"from": "bb:1635",
"to": "bb:1655",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1655",
"to": "bb:1664",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1680",
"to": "bb:1719",
"type": "control_flow"
},
{
"from": "bb:1680",
"to": "bb:1715",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1809",
"to": "bb:1848",
"type": "control_flow"
},
{
"from": "bb:1809",
"to": "bb:1844",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1848",
"to": "bb:1924",
"type": "control_flow"
},
{
"from": "bb:1848",
"to": "bb:1920",
"type": "control_flow_fallthrough"
},
{
"from": "bb:2101",
"to": "bb:487",
"type": "control_flow"
},
{
"from": "bb:2142",
"to": "bb:2165",
"type": "control_flow"
},
{
"from": "bb:2142",
"to": "bb:2161",
"type": "control_flow_fallthrough"
},
{
"from": "bb:2161",
"to": "bb:2165",
"type": "control_flow_fallthrough"
},
{
"from": "bb:2165",
"to": "bb:2196",
"type": "control_flow"
},
{
"from": "bb:2165",
"to": "bb:2189",
"type": "control_flow_fallthrough"
},
{
"from": "bb:2189",
"to": "bb:2196",
"type": "control_flow_fallthrough"
},
{
"from": "fn:0x18160ddd",
"to": "bb:535423676",
"type": "entry"
},
{
"from": "fn:0x1fe9eabc",
"to": "bb:591257894",
"type": "entry"
},
{
"from": "fn:0x233de126",
"to": "bb:599290589",
"type": "entry"
},
{
"from": "fn:0x23b872dd",
"to": "bb:826074471",
"type": "entry"
},
{
"from": "fn:0x313ce567",
"to": "bb:1106921590",
"type": "entry"
},
{
"from": "fn:0x41fa4876",
"to": "bb:1889567281",
"type": "entry"
},
{
"from": "fn:0x70a08231",
"to": "bb:2133494400",
"type": "entry"
},
{
"from": "fn:0x7f2a8a80",
"to": "bb:2376452955",
"type": "entry"
},
{
"from": "fn:0x8da5cb5b",
"to": "bb:2514000705",
"type": "entry"
},
{
"from": "fn:0x95d89b41",
"to": "bb:2800922170",
"type": "entry"
},
{
"from": "fn:0xa6f2ae3a",
"to": "bb:2835717307",
"type": "entry"
},
{
"from": "fn:0xa9059cbb",
"to": "bb:2854837737",
"type": "entry"
},
{
"from": "fn:0xaa295de9",
"to": "bb:3154722889",
"type": "entry"
},
{
"from": "fn:0xbc094049",
"to": "bb:3296960139",
"type": "entry"
},
{
"from": "fn:0xc4839e8b",
"to": "bb:3404319313",
"type": "entry"
},
{
"from": "fn:0xcae9ca51",
"to": "bb:3694166258",
"type": "entry"
},
{
"from": "fn:0xdc3080f2",
"to": "bb:3714247998",
"type": "entry"
},
{
"from": "fn:0xdd62ed3e",
"to": "bb:3833895730",
"type": "entry"
},
{
"from": "fn:0xe4849b32",
"to": "bb:4076725131",
"type": "entry"
},
{
"from": "fn:0xf2fde38b",
"to": "bb:4288363215",
"type": "entry"
},
{
"from": "bb:854",
"to": "call:1126",
"type": "contains"
},
{
"from": "call:1126",
"to": "sink:call",
"type": "capability"
},
{
"from": "bb:1168",
"to": "call:1194",
"type": "contains"
},
{
"from": "call:1194",
"to": "sink:call",
"type": "capability"
},
{
"from": "bb:1382",
"to": "call:1436",
"type": "contains"
},
{
"from": "call:1436",
"to": "sink:call",
"type": "capability"
},
{
"from": "bb:2360",
"to": "call:2431",
"type": "contains"
},
{
"from": "call:2431",
"to": "sink:call",
"type": "capability"
},
{
"from": "bb:2486",
"to": "call:2487",
"type": "contains"
},
{
"from": "call:2487",
"to": "sink:callcode",
"type": "capability"
},
{
"from": "bb:2486",
"to": "call:2505",
"type": "contains"
},
{
"from": "call:2505",
"to": "sink:call",
"type": "capability"
}
],
"nodes": [
{
"end_pc": 10,
"hash": "0xf11444caaf4db510565a598ec5db1095f6815c9db671a85c90dde30dacbe11e2",
"id": "bb:0",
"start_pc": 0,
"type": "basic_block"
},
{
"end_pc": 30,
"hash": "0x81ba1990cb6d08ec7e9f5cef473cf689c892f720fb932454a377fa40a7b6acb2",
"id": "bb:11",
"start_pc": 11,
"type": "basic_block"
},
{
"end_pc": 41,
"hash": "0xbb4adb6b0343b466b21e5c872124ae1246c15937f907412dff7a45be4b89e23a",
"id": "bb:31",
"start_pc": 31,
"type": "basic_block"
},
{
"end_pc": 52,
"hash": "0xea19454bfe01c00dbab35612f8aa52f8f8f0fb5376f0c092cc366ffb9e4c6857",
"id": "bb:42",
"start_pc": 42,
"type": "basic_block"
},
{
"end_pc": 63,
"hash": "0xd69d368fec6c14dd7b3dc3a73b7ce17524cd586475c440422e4028feda4fe985",
"id": "bb:53",
"start_pc": 53,
"type": "basic_block"
},
{
"end_pc": 74,
"hash": "0x22ac288b26f96d1f2be88284216b7a65d533ac2cbf794a41853e29d9f15cb49f",
"id": "bb:64",
"start_pc": 64,
"type": "basic_block"
},
{
"end_pc": 85,
"hash": "0x4a871c50e75c9501bcbed914881e4008e1796505737385677e4df8f3d54ca784",
"id": "bb:75",
"start_pc": 75,
"type": "basic_block"
},
{
"end_pc": 96,
"hash": "0xd514a7eacaee8fb4ebdcbdcb38800c29184eab38b16861dd8b97b17c70aaa2ff",
"id": "bb:86",
"start_pc": 86,
"type": "basic_block"
},
{
"end_pc": 107,
"hash": "0x57d0236ed3c086498b49e1b50433804bdf79e7109c7b83755797f666e9fc8f6c",
"id": "bb:97",
"start_pc": 97,
"type": "basic_block"
},
{
"end_pc": 118,
"hash": "0x93f7d5d4e7efa89e76f8f86896757b0bc1282a0b1c617a39aa1a86408e7ae1ee",
"id": "bb:108",
"start_pc": 108,
"type": "basic_block"
},
{
"end_pc": 129,
"hash": "0xcc3c70fb9af60426f8e26d7e1f9ec383d88776d6512a9954f6bb6e8aff45b879",
"id": "bb:119",
"start_pc": 119,
"type": "basic_block"
},
{
"end_pc": 140,
"hash": "0x86e3595e017f2af8a502c2e68c7814eb5c9f0907f0afa551477a81f71d8834b2",
"id": "bb:130",
"start_pc": 130,
"type": "basic_block"
},
{
"end_pc": 151,
"hash": "0x48179b41f3610338adb51b04894be3a884a3d97e0d492a8aae6c114b635c31a3",
"id": "bb:141",
"start_pc": 141,
"type": "basic_block"
},
{
"end_pc": 162,
"hash": "0x00f2e521531902fffd26347661a176ca2eda1a0744be870cff160418e21f3b2e",
"id": "bb:152",
"start_pc": 152,
"type": "basic_block"
},
{
"end_pc": 173,
"hash": "0xdb6f001418c531caf78313cae502f5f6289e688d09acec1f8dc3970f238367c3",
"id": "bb:163",
"start_pc": 163,
"type": "basic_block"
},
{
"end_pc": 184,
"hash": "0x4d86ffa9c19fdc81e9e81d77c7c811e836ae5ff72a61881ab0f873a1c0d3f0be",
"id": "bb:174",
"start_pc": 174,
"type": "basic_block"
},
{
"end_pc": 195,
"hash": "0xa91d7fb99828f9689dc6ccda4a2a36fe23e57cd79450cabcd6123e9f6e7d76Error: writing output failed: Broken pipe
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.storage' BYTECODE_BUNDLE.json | head -c 12000" in /tmp/codex-n86eu21s
succeeded in 0ms:
{
"keccak_count": 30,
"reads": 45,
"slots": [
{
"op": "SLOAD",
"pc": 272,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 343,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 363,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
},
{
"op": "SLOAD",
"pc": 375,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 406,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 471,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 596,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 626,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 645,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 715,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 735,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 809,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
},
{
"op": "SLOAD",
"pc": 818,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
},
{
"op": "SLOAD",
"pc": 830,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SSTORE",
"pc": 1001,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1340,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1370,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 1591,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2053,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2087,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2145,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2168,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000007"
},
{
"op": "SLOAD",
"pc": 2234,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2305,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
},
{
"op": "SLOAD",
"pc": 2416,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
}
],
"writes": 15
}
exec
/bin/bash -lc "jq '.. | .runtime_bytecode? // empty' BYTECODE_BUNDLE.json | head -c 4000" in /tmp/codex-n86eu21s
succeeded in 0ms:
{
"full": "0x606060405236156101065760e060020a600035046306fdde03811461010857806318160ddd146101655780631fe9eabc1461016e578063233de1261461019057806323b872dd1461019f578063313ce567146101d157806341fa4876146101dd57806370a08231146102335780637f2a8a801461024b5780638da5cb5b1461026c57806395d89b411461027e578063a6f2ae3a146102d9578063a9059cbb146102f4578063aa295de914610323578063bc0940491461032c578063c4839e8b14610335578063cae9ca5114610356578063dc3080f2146104bd578063dd62ed3e146104e2578063e4849b3214610507578063f2fde38b14610533578063ff9b3acf14610554575b005b60408051600180546020600282841615610100026000190190921691909104601f810182900482028401820190945283835261056693908301828280156106805780601f1061065557610100808354040283529160200191610680565b6105d460045481565b610106600435600054600160a060020a0390811633909116146107fc57610002565b6105e660075463ffffffff1681565b6105d4600435602435604435600160a060020a0383166000908152600960205260408120548290101561071157610002565b61060060035460ff1681565b6105d46004356024355b600080805b8381101561068857604080514383900360001901408152602081018790528151908190039091019020600290066000141561022b57600281900a909101905b6001016101ec565b6105d460043560096020526000908152604090205481565b61010660043560005433600160a060020a0390811691161461080157610002565b610616600054600160a060020a031681565b6105666002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156106805780601f1061065557610100808354040283529160200191610680565b6105d460065434906000908190819084111561083557610002565b61010660043560243533600160a060020a03166000908152600960205260409020548190101561069057610002565b6105d460065481565b6105d460085481565b61010660043560005433600160a060020a0390811691161461082357610002565b604080516020604435600481810135601f81018490048402850184019095528484526105d49481359460248035959394606494929391019181908401838280828437509496505050505050506000600083600a600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156104905780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257506001979650505050505050565b600b602090815260043560009081526040808220909252602435815220546105d49081565b600a602090815260043560009081526040808220909252602435815220546105d49081565b6105d460043533600160a060020a03166000908152600960205260408120548290101561093857610002565b61010660043560005433600160a060020a0390811691161461063357610002565b610616600554600160a060020a031681565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156105c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6040805163ffffffff929092168252519081900360200190f35b6040805160ff9092168252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6000805473ffffffffffffffffffffffffffffffffffffffff19168217905550565b820191906000526020600020905b81548152906001019060200180831161066357829003601f168201915b505050505081565b509392505050565b600160a060020a03821660009081526009602052604090205481810110156106b757610002565b33600160a060020a03908116600081815260096020908152604080832080548790039055938616808352918490208054860190558351858152935191936000805160206109b6833981519152929081900390910190a35050565b600160a060020a038316600090815260096020526040902054808301101561073857610002565b600160a060020a038481166000818152600a602090815260408083203390951680845294825280832054938352600b825280832094835293905291909120548301111561078457610002565b600160a060020a03848116600081815260096020908152604080832080548890039055878516808452818420805489019055848452600b8352818420339096168452948Error: writing output failed: Broken pipe
exec
/bin/bash -lc "jq '.. | .bytecode? // empty' BYTECODE_BUNDLE.json | head -c 4000" in /tmp/codex-n86eu21s
succeeded in 0ms:
exec
/bin/bash -lc "jq '.. | .deployed_bytecode? // empty' BYTECODE_BUNDLE.json | head -c 4000" in /tmp/codex-n86eu21s
succeeded in 0ms:
exec
/bin/bash -lc 'command -v evm || true' in /tmp/codex-n86eu21s
succeeded in 0ms:
exec
/bin/bash -lc 'command -v cast || true' in /tmp/codex-n86eu21s
succeeded in 0ms:
/home/noahkuhn/.foundry/bin/cast
exec
/bin/bash -lc 'command -v python3 || true' in /tmp/codex-n86eu21s
succeeded in 0ms:
/var/www/tripwire/.venv/bin/python3
exec
/bin/bash -lc 'BYTECODE=$(jq -r '"'.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json); cast disassemble \""'$BYTECODE" | sed -n '"'1,260p'" in /tmp/codex-n86eu21s
succeeded in 0ms:
00000000: PUSH1 0x60
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLDATASIZE
00000006: ISZERO
00000007: PUSH2 0x0106
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 0x0108
0000001e: JUMPI
0000001f: DUP1
00000020: PUSH4 0x18160ddd
00000025: EQ
00000026: PUSH2 0x0165
00000029: JUMPI
0000002a: DUP1
0000002b: PUSH4 0x1fe9eabc
00000030: EQ
00000031: PUSH2 0x016e
00000034: JUMPI
00000035: DUP1
00000036: PUSH4 0x233de126
0000003b: EQ
0000003c: PUSH2 0x0190
0000003f: JUMPI
00000040: DUP1
00000041: PUSH4 0x23b872dd
00000046: EQ
00000047: PUSH2 0x019f
0000004a: JUMPI
0000004b: DUP1
0000004c: PUSH4 0x313ce567
00000051: EQ
00000052: PUSH2 0x01d1
00000055: JUMPI
00000056: DUP1
00000057: PUSH4 0x41fa4876
0000005c: EQ
0000005d: PUSH2 0x01dd
00000060: JUMPI
00000061: DUP1
00000062: PUSH4 0x70a08231
00000067: EQ
00000068: PUSH2 0x0233
0000006b: JUMPI
0000006c: DUP1
0000006d: PUSH4 0x7f2a8a80
00000072: EQ
00000073: PUSH2 0x024b
00000076: JUMPI
00000077: DUP1
00000078: PUSH4 0x8da5cb5b
0000007d: EQ
0000007e: PUSH2 0x026c
00000081: JUMPI
00000082: DUP1
00000083: PUSH4 0x95d89b41
00000088: EQ
00000089: PUSH2 0x027e
0000008c: JUMPI
0000008d: DUP1
0000008e: PUSH4 0xa6f2ae3a
00000093: EQ
00000094: PUSH2 0x02d9
00000097: JUMPI
00000098: DUP1
00000099: PUSH4 0xa9059cbb
0000009e: EQ
0000009f: PUSH2 0x02f4
000000a2: JUMPI
000000a3: DUP1
000000a4: PUSH4 0xaa295de9
000000a9: EQ
000000aa: PUSH2 0x0323
000000ad: JUMPI
000000ae: DUP1
000000af: PUSH4 0xbc094049
000000b4: EQ
000000b5: PUSH2 0x032c
000000b8: JUMPI
000000b9: DUP1
000000ba: PUSH4 0xc4839e8b
000000bf: EQ
000000c0: PUSH2 0x0335
000000c3: JUMPI
000000c4: DUP1
000000c5: PUSH4 0xcae9ca51
000000ca: EQ
000000cb: PUSH2 0x0356
000000ce: JUMPI
000000cf: DUP1
000000d0: PUSH4 0xdc3080f2
000000d5: EQ
000000d6: PUSH2 0x04bd
000000d9: JUMPI
000000da: DUP1
000000db: PUSH4 0xdd62ed3e
000000e0: EQ
000000e1: PUSH2 0x04e2
000000e4: JUMPI
000000e5: DUP1
000000e6: PUSH4 0xe4849b32
000000eb: EQ
000000ec: PUSH2 0x0507
000000ef: JUMPI
000000f0: DUP1
000000f1: PUSH4 0xf2fde38b
000000f6: EQ
000000f7: PUSH2 0x0533
000000fa: JUMPI
000000fb: DUP1
000000fc: PUSH4 0xff9b3acf
00000101: EQ
00000102: PUSH2 0x0554
00000105: JUMPI
00000106: JUMPDEST
00000107: STOP
00000108: JUMPDEST
00000109: PUSH1 0x40
0000010b: DUP1
0000010c: MLOAD
0000010d: PUSH1 0x01
0000010f: DUP1
00000110: SLOAD
00000111: PUSH1 0x20
00000113: PUSH1 0x02
00000115: DUP3
00000116: DUP5
00000117: AND
00000118: ISZERO
00000119: PUSH2 0x0100
0000011c: MUL
0000011d: PUSH1 0x00
0000011f: NOT
00000120: ADD
00000121: SWAP1
00000122: SWAP3
00000123: AND
00000124: SWAP2
00000125: SWAP1
00000126: SWAP2
00000127: DIV
00000128: PUSH1 0x1f
0000012a: DUP2
0000012b: ADD
0000012c: DUP3
0000012d: SWAP1
0000012e: DIV
0000012f: DUP3
00000130: MUL
00000131: DUP5
00000132: ADD
00000133: DUP3
00000134: ADD
00000135: SWAP1
00000136: SWAP5
00000137: MSTORE
00000138: DUP4
00000139: DUP4
0000013a: MSTORE
0000013b: PUSH2 0x0566
0000013e: SWAP4
0000013f: SWAP1
00000140: DUP4
00000141: ADD
00000142: DUP3
00000143: DUP3
00000144: DUP1
00000145: ISZERO
00000146: PUSH2 0x0680
00000149: JUMPI
0000014a: DUP1
0000014b: PUSH1 0x1f
0000014d: LT
0000014e: PUSH2 0x0655
00000151: JUMPI
00000152: PUSH2 0x0100
00000155: DUP1
00000156: DUP4
00000157: SLOAD
00000158: DIV
00000159: MUL
0000015a: DUP4
0000015b: MSTORE
0000015c: SWAP2
0000015d: PUSH1 0x20
0000015f: ADD
00000160: SWAP2
00000161: PUSH2 0x0680
00000164: JUMP
00000165: JUMPDEST
00000166: PUSH2 0x05d4
00000169: PUSH1 0x04
0000016b: SLOAD
0000016c: DUP2
0000016d: JUMP
0000016e: JUMPDEST
0000016f: PUSH2 0x0106
00000172: PUSH1 0x04
00000174: CALLDATALOAD
00000175: PUSH1 0x00
00000177: SLOAD
00000178: PUSH1 0x01
0000017a: PUSH1 0xa0
0000017c: PUSH1 0x02
0000017e: EXP
0000017f: SUB
00000180: SWAP1
00000181: DUP2
00000182: AND
00000183: CALLER
00000184: SWAP1
00000185: SWAP2
00000186: AND
00000187: EQ
00000188: PUSH2 0x07fc
0000018b: JUMPI
0000018c: PUSH2 0x0002
0000018f: JUMP
00000190: JUMPDEST
00000191: PUSH2 0x05e6
00000194: PUSH1 0x07
00000196: SLOAD
00000197: PUSH4 0xffffffff
0000019c: AND
0000019d: DUP2
0000019e: JUMP
0000019f: JUMPDEST
000001a0: PUSH2 0x05d4
000001a3: PUSH1 0x04
000001a5: CALLDATALOAD
000001a6: PUSH1 0x24
000001a8: CALLDATALOAD
000001a9: PUSH1 0x44
000001ab: CALLDATALOAD
000001ac: PUSH1 0x01
000001ae: PUSH1 0xa0
000001b0: PUSH1 0x02
000001b2: EXP
000001b3: SUB
000001b4: DUP4
000001b5: AND
000001b6: PUSH1 0x00
000001b8: SWAP1
000001b9: DUP2
000001ba: MSTORE
000001bb: PUSH1 0x09
000001bd: PUSH1 0x20
000001bf: MSTORE
000001c0: PUSH1 0x40
000001c2: DUP2
000001c3: KECCAK256
exec
/bin/bash -lc 'BYTECODE=$(jq -r '"'.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json); cast 4byte 0x1fe9eabc; cast 4byte 0x233de126; cast 4byte 0x41fa4876; cast 4byte 0x7f2a8a80; cast 4byte 0xa6f2ae3a; cast 4byte 0xaa295de9; cast 4byte 0xbc094049; cast 4byte 0xc4839e8b; cast 4byte 0xcae9ca51; cast 4byte 0xdc3080f2; cast 4byte 0xe4849b32; cast 4byte 0xff9b3acf" in /tmp/codex-n86eu21s
exited 1 in 189ms:
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xaa295de9)
Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xbc094049)
Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xc4839e8b)
Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xcae9ca51)
Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xdc3080f2)
Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xe4849b32)
Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xff9b3acf)
Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
exec
/bin/bash -lc 'BYTECODE=$(jq -r '"'.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json); cast disassemble \""'$BYTECODE" | sed -n '"'260,520p'" in /tmp/codex-n86eu21s
succeeded in 0ms:
000001c3: KECCAK256
000001c4: SLOAD
000001c5: DUP3
000001c6: SWAP1
000001c7: LT
000001c8: ISZERO
000001c9: PUSH2 0x0711
000001cc: JUMPI
000001cd: PUSH2 0x0002
000001d0: JUMP
000001d1: JUMPDEST
000001d2: PUSH2 0x0600
000001d5: PUSH1 0x03
000001d7: SLOAD
000001d8: PUSH1 0xff
000001da: AND
000001db: DUP2
000001dc: JUMP
000001dd: JUMPDEST
000001de: PUSH2 0x05d4
000001e1: PUSH1 0x04
000001e3: CALLDATALOAD
000001e4: PUSH1 0x24
000001e6: CALLDATALOAD
000001e7: JUMPDEST
000001e8: PUSH1 0x00
000001ea: DUP1
000001eb: DUP1
000001ec: JUMPDEST
000001ed: DUP4
000001ee: DUP2
000001ef: LT
000001f0: ISZERO
000001f1: PUSH2 0x0688
000001f4: JUMPI
000001f5: PUSH1 0x40
000001f7: DUP1
000001f8: MLOAD
000001f9: NUMBER
000001fa: DUP4
000001fb: SWAP1
000001fc: SUB
000001fd: PUSH1 0x00
000001ff: NOT
00000200: ADD
00000201: BLOCKHASH
00000202: DUP2
00000203: MSTORE
00000204: PUSH1 0x20
00000206: DUP2
00000207: ADD
00000208: DUP8
00000209: SWAP1
0000020a: MSTORE
0000020b: DUP2
0000020c: MLOAD
0000020d: SWAP1
0000020e: DUP2
0000020f: SWAP1
00000210: SUB
00000211: SWAP1
00000212: SWAP2
00000213: ADD
00000214: SWAP1
00000215: KECCAK256
00000216: PUSH1 0x02
00000218: SWAP1
00000219: MOD
0000021a: PUSH1 0x00
0000021c: EQ
0000021d: ISZERO
0000021e: PUSH2 0x022b
00000221: JUMPI
00000222: PUSH1 0x02
00000224: DUP2
00000225: SWAP1
00000226: EXP
00000227: SWAP1
00000228: SWAP2
00000229: ADD
0000022a: SWAP1
0000022b: JUMPDEST
0000022c: PUSH1 0x01
0000022e: ADD
0000022f: PUSH2 0x01ec
00000232: JUMP
00000233: JUMPDEST
00000234: PUSH2 0x05d4
00000237: PUSH1 0x04
00000239: CALLDATALOAD
0000023a: PUSH1 0x09
0000023c: PUSH1 0x20
0000023e: MSTORE
0000023f: PUSH1 0x00
00000241: SWAP1
00000242: DUP2
00000243: MSTORE
00000244: PUSH1 0x40
00000246: SWAP1
00000247: KECCAK256
00000248: SLOAD
00000249: DUP2
0000024a: JUMP
0000024b: JUMPDEST
0000024c: PUSH2 0x0106
0000024f: PUSH1 0x04
00000251: CALLDATALOAD
00000252: PUSH1 0x00
00000254: SLOAD
00000255: CALLER
00000256: PUSH1 0x01
00000258: PUSH1 0xa0
0000025a: PUSH1 0x02
0000025c: EXP
0000025d: SUB
0000025e: SWAP1
0000025f: DUP2
00000260: AND
00000261: SWAP2
00000262: AND
00000263: EQ
00000264: PUSH2 0x0801
00000267: JUMPI
00000268: PUSH2 0x0002
0000026b: JUMP
0000026c: JUMPDEST
0000026d: PUSH2 0x0616
00000270: PUSH1 0x00
00000272: SLOAD
00000273: PUSH1 0x01
00000275: PUSH1 0xa0
00000277: PUSH1 0x02
00000279: EXP
0000027a: SUB
0000027b: AND
0000027c: DUP2
0000027d: JUMP
0000027e: JUMPDEST
0000027f: PUSH2 0x0566
00000282: PUSH1 0x02
00000284: DUP1
00000285: SLOAD
00000286: PUSH1 0x40
00000288: DUP1
00000289: MLOAD
0000028a: PUSH1 0x20
0000028c: PUSH1 0x01
0000028e: DUP5
0000028f: AND
00000290: ISZERO
00000291: PUSH2 0x0100
00000294: MUL
00000295: PUSH1 0x00
00000297: NOT
00000298: ADD
00000299: SWAP1
0000029a: SWAP4
0000029b: AND
0000029c: DUP5
0000029d: SWAP1
0000029e: DIV
0000029f: PUSH1 0x1f
000002a1: DUP2
000002a2: ADD
000002a3: DUP5
000002a4: SWAP1
000002a5: DIV
000002a6: DUP5
000002a7: MUL
000002a8: DUP3
000002a9: ADD
000002aa: DUP5
000002ab: ADD
000002ac: SWAP1
000002ad: SWAP3
000002ae: MSTORE
000002af: DUP2
000002b0: DUP2
000002b1: MSTORE
000002b2: SWAP3
000002b3: SWAP2
000002b4: DUP4
000002b5: ADD
000002b6: DUP3
000002b7: DUP3
000002b8: DUP1
000002b9: ISZERO
000002ba: PUSH2 0x0680
000002bd: JUMPI
000002be: DUP1
000002bf: PUSH1 0x1f
000002c1: LT
000002c2: PUSH2 0x0655
000002c5: JUMPI
000002c6: PUSH2 0x0100
000002c9: DUP1
000002ca: DUP4
000002cb: SLOAD
000002cc: DIV
000002cd: MUL
000002ce: DUP4
000002cf: MSTORE
000002d0: SWAP2
000002d1: PUSH1 0x20
000002d3: ADD
000002d4: SWAP2
000002d5: PUSH2 0x0680
000002d8: JUMP
000002d9: JUMPDEST
000002da: PUSH2 0x05d4
000002dd: PUSH1 0x06
000002df: SLOAD
000002e0: CALLVALUE
000002e1: SWAP1
000002e2: PUSH1 0x00
000002e4: SWAP1
000002e5: DUP2
000002e6: SWAP1
000002e7: DUP2
000002e8: SWAP1
000002e9: DUP5
000002ea: GT
000002eb: ISZERO
000002ec: PUSH2 0x0835
000002ef: JUMPI
000002f0: PUSH2 0x0002
000002f3: JUMP
000002f4: JUMPDEST
000002f5: PUSH2 0x0106
000002f8: PUSH1 0x04
000002fa: CALLDATALOAD
000002fb: PUSH1 0x24
000002fd: CALLDATALOAD
000002fe: CALLER
000002ff: PUSH1 0x01
00000301: PUSH1 0xa0
00000303: PUSH1 0x02
00000305: EXP
00000306: SUB
00000307: AND
00000308: PUSH1 0x00
0000030a: SWAP1
0000030b: DUP2
0000030c: MSTORE
0000030d: PUSH1 0x09
0000030f: PUSH1 0x20
00000311: MSTORE
00000312: PUSH1 0x40
00000314: SWAP1
00000315: KECCAK256
00000316: SLOAD
00000317: DUP2
00000318: SWAP1
00000319: LT
0000031a: ISZERO
0000031b: PUSH2 0x0690
0000031e: JUMPI
0000031f: PUSH2 0x0002
00000322: JUMP
00000323: JUMPDEST
00000324: PUSH2 0x05d4
exec
/bin/bash -lc 'BYTECODE=$(jq -r '"'.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json); cast disassemble \""'$BYTECODE" | sed -n '"'520,820p'" in /tmp/codex-n86eu21s
succeeded in 0ms:
00000324: PUSH2 0x05d4
00000327: PUSH1 0x06
00000329: SLOAD
0000032a: DUP2
0000032b: JUMP
0000032c: JUMPDEST
0000032d: PUSH2 0x05d4
00000330: PUSH1 0x08
00000332: SLOAD
00000333: DUP2
00000334: JUMP
00000335: JUMPDEST
00000336: PUSH2 0x0106
00000339: PUSH1 0x04
0000033b: CALLDATALOAD
0000033c: PUSH1 0x00
0000033e: SLOAD
0000033f: CALLER
00000340: PUSH1 0x01
00000342: PUSH1 0xa0
00000344: PUSH1 0x02
00000346: EXP
00000347: SUB
00000348: SWAP1
00000349: DUP2
0000034a: AND
0000034b: SWAP2
0000034c: AND
0000034d: EQ
0000034e: PUSH2 0x0823
00000351: JUMPI
00000352: PUSH2 0x0002
00000355: JUMP
00000356: JUMPDEST
00000357: PUSH1 0x40
00000359: DUP1
0000035a: MLOAD
0000035b: PUSH1 0x20
0000035d: PUSH1 0x44
0000035f: CALLDATALOAD
00000360: PUSH1 0x04
00000362: DUP2
00000363: DUP2
00000364: ADD
00000365: CALLDATALOAD
00000366: PUSH1 0x1f
00000368: DUP2
00000369: ADD
0000036a: DUP5
0000036b: SWAP1
0000036c: DIV
0000036d: DUP5
0000036e: MUL
0000036f: DUP6
00000370: ADD
00000371: DUP5
00000372: ADD
00000373: SWAP1
00000374: SWAP6
00000375: MSTORE
00000376: DUP5
00000377: DUP5
00000378: MSTORE
00000379: PUSH2 0x05d4
0000037c: SWAP5
0000037d: DUP2
0000037e: CALLDATALOAD
0000037f: SWAP5
00000380: PUSH1 0x24
00000382: DUP1
00000383: CALLDATALOAD
00000384: SWAP6
00000385: SWAP4
00000386: SWAP5
00000387: PUSH1 0x64
00000389: SWAP5
0000038a: SWAP3
0000038b: SWAP4
0000038c: SWAP2
0000038d: ADD
0000038e: SWAP2
0000038f: DUP2
00000390: SWAP1
00000391: DUP5
00000392: ADD
00000393: DUP4
00000394: DUP3
00000395: DUP1
00000396: DUP3
00000397: DUP5
00000398: CALLDATACOPY
00000399: POP
0000039a: SWAP5
0000039b: SWAP7
0000039c: POP
0000039d: POP
0000039e: POP
0000039f: POP
000003a0: POP
000003a1: POP
000003a2: POP
000003a3: PUSH1 0x00
000003a5: PUSH1 0x00
000003a7: DUP4
000003a8: PUSH1 0x0a
000003aa: PUSH1 0x00
000003ac: POP
000003ad: PUSH1 0x00
000003af: CALLER
000003b0: PUSH1 0x01
000003b2: PUSH1 0xa0
000003b4: PUSH1 0x02
000003b6: EXP
000003b7: SUB
000003b8: AND
000003b9: DUP2
000003ba: MSTORE
000003bb: PUSH1 0x20
000003bd: ADD
000003be: SWAP1
000003bf: DUP2
000003c0: MSTORE
000003c1: PUSH1 0x20
000003c3: ADD
000003c4: PUSH1 0x00
000003c6: KECCAK256
000003c7: PUSH1 0x00
000003c9: POP
000003ca: PUSH1 0x00
000003cc: DUP8
000003cd: PUSH1 0x01
000003cf: PUSH1 0xa0
000003d1: PUSH1 0x02
000003d3: EXP
000003d4: SUB
000003d5: AND
000003d6: DUP2
000003d7: MSTORE
000003d8: PUSH1 0x20
000003da: ADD
000003db: SWAP1
000003dc: DUP2
000003dd: MSTORE
000003de: PUSH1 0x20
000003e0: ADD
000003e1: PUSH1 0x00
000003e3: KECCAK256
000003e4: PUSH1 0x00
000003e6: POP
000003e7: DUP2
000003e8: SWAP1
000003e9: SSTORE
000003ea: POP
000003eb: DUP5
000003ec: SWAP1
000003ed: POP
000003ee: DUP1
000003ef: PUSH1 0x01
000003f1: PUSH1 0xa0
000003f3: PUSH1 0x02
000003f5: EXP
000003f6: SUB
000003f7: AND
000003f8: PUSH4 0x8f4ffcb1
000003fd: CALLER
000003fe: DUP7
000003ff: ADDRESS
00000400: DUP8
00000401: PUSH1 0x40
00000403: MLOAD
00000404: DUP6
00000405: PUSH1 0xe0
00000407: PUSH1 0x02
00000409: EXP
0000040a: MUL
0000040b: DUP2
0000040c: MSTORE
0000040d: PUSH1 0x04
0000040f: ADD
00000410: DUP1
00000411: DUP6
00000412: PUSH1 0x01
00000414: PUSH1 0xa0
00000416: PUSH1 0x02
00000418: EXP
00000419: SUB
0000041a: AND
0000041b: DUP2
0000041c: MSTORE
0000041d: PUSH1 0x20
0000041f: ADD
00000420: DUP5
00000421: DUP2
00000422: MSTORE
00000423: PUSH1 0x20
00000425: ADD
00000426: DUP4
00000427: PUSH1 0x01
00000429: PUSH1 0xa0
0000042b: PUSH1 0x02
0000042d: EXP
0000042e: SUB
0000042f: AND
00000430: DUP2
00000431: MSTORE
00000432: PUSH1 0x20
00000434: ADD
00000435: DUP1
00000436: PUSH1 0x20
00000438: ADD
00000439: DUP3
0000043a: DUP2
0000043b: SUB
0000043c: DUP3
0000043d: MSTORE
0000043e: DUP4
0000043f: DUP2
00000440: DUP2
00000441: MLOAD
00000442: DUP2
00000443: MSTORE
00000444: PUSH1 0x20
00000446: ADD
00000447: SWAP2
00000448: POP
00000449: DUP1
0000044a: MLOAD
0000044b: SWAP1
0000044c: PUSH1 0x20
0000044e: ADD
0000044f: SWAP1
00000450: DUP1
00000451: DUP4
00000452: DUP4
00000453: DUP3
00000454: SWAP1
00000455: PUSH1 0x00
00000457: PUSH1 0x04
00000459: PUSH1 0x20
0000045b: DUP5
0000045c: PUSH1 0x1f
0000045e: ADD
0000045f: DIV
00000460: PUSH1 0x0f
00000462: MUL
00000463: PUSH1 0x03
00000465: ADD
00000466: CALL
00000467: POP
00000468: SWAP1
00000469: POP
0000046a: SWAP1
0000046b: DUP2
0000046c: ADD
0000046d: SWAP1
0000046e: PUSH1 0x1f
00000470: AND
00000471: DUP1
00000472: ISZERO
00000473: PUSH2 0x0490
00000476: JUMPI
00000477: DUP1
00000478: DUP3
00000479: SUB
0000047a: DUP1
0000047b: MLOAD
0000047c: PUSH1 0x01
0000047e: DUP4
0000047f: PUSH1 0x20
00000481: SUB
00000482: PUSH2 0x0100
00000485: EXP
00000486: SUB
00000487: NOT
00000488: AND
00000489: DUP2
0000048a: MSTORE
0000048b: PUSH1 0x20
0000048d: ADD
0000048e: SWAP2
0000048f: POP
00000490: JUMPDEST
00000491: POP
00000492: SWAP6
00000493: POP
00000494: POP
00000495: POP
00000496: POP
00000497: POP
00000498: POP
00000499: PUSH1 0x00
0000049b: PUSH1 0x40
0000049d: MLOAD
0000049e: DUP1
0000049f: DUP4
000004a0: SUB
000004a1: DUP2
000004a2: PUSH1 0x00
000004a4: DUP8
000004a5: PUSH2 0x61da
000004a8: GAS
exec
/bin/bash -lc 'BYTECODE=$(jq -r '"'.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json); cast disassemble \""'$BYTECODE" | sed -n '"'820,1120p'" in /tmp/codex-n86eu21s
succeeded in 0ms:
000004a8: GAS
000004a9: SUB
000004aa: CALL
000004ab: ISZERO
000004ac: PUSH2 0x0002
000004af: JUMPI
000004b0: POP
000004b1: PUSH1 0x01
000004b3: SWAP8
000004b4: SWAP7
000004b5: POP
000004b6: POP
000004b7: POP
000004b8: POP
000004b9: POP
000004ba: POP
000004bb: POP
000004bc: JUMP
000004bd: JUMPDEST
000004be: PUSH1 0x0b
000004c0: PUSH1 0x20
000004c2: SWAP1
000004c3: DUP2
000004c4: MSTORE
000004c5: PUSH1 0x04
000004c7: CALLDATALOAD
000004c8: PUSH1 0x00
000004ca: SWAP1
000004cb: DUP2
000004cc: MSTORE
000004cd: PUSH1 0x40
000004cf: DUP1
000004d0: DUP3
000004d1: KECCAK256
000004d2: SWAP1
000004d3: SWAP3
000004d4: MSTORE
000004d5: PUSH1 0x24
000004d7: CALLDATALOAD
000004d8: DUP2
000004d9: MSTORE
000004da: KECCAK256
000004db: SLOAD
000004dc: PUSH2 0x05d4
000004df: SWAP1
000004e0: DUP2
000004e1: JUMP
000004e2: JUMPDEST
000004e3: PUSH1 0x0a
000004e5: PUSH1 0x20
000004e7: SWAP1
000004e8: DUP2
000004e9: MSTORE
000004ea: PUSH1 0x04
000004ec: CALLDATALOAD
000004ed: PUSH1 0x00
000004ef: SWAP1
000004f0: DUP2
000004f1: MSTORE
000004f2: PUSH1 0x40
000004f4: DUP1
000004f5: DUP3
000004f6: KECCAK256
000004f7: SWAP1
000004f8: SWAP3
000004f9: MSTORE
000004fa: PUSH1 0x24
000004fc: CALLDATALOAD
000004fd: DUP2
000004fe: MSTORE
000004ff: KECCAK256
00000500: SLOAD
00000501: PUSH2 0x05d4
00000504: SWAP1
00000505: DUP2
00000506: JUMP
00000507: JUMPDEST
00000508: PUSH2 0x05d4
0000050b: PUSH1 0x04
0000050d: CALLDATALOAD
0000050e: CALLER
0000050f: PUSH1 0x01
00000511: PUSH1 0xa0
00000513: PUSH1 0x02
00000515: EXP
00000516: SUB
00000517: AND
00000518: PUSH1 0x00
0000051a: SWAP1
0000051b: DUP2
0000051c: MSTORE
0000051d: PUSH1 0x09
0000051f: PUSH1 0x20
00000521: MSTORE
00000522: PUSH1 0x40
00000524: DUP2
00000525: KECCAK256
00000526: SLOAD
00000527: DUP3
00000528: SWAP1
00000529: LT
0000052a: ISZERO
0000052b: PUSH2 0x0938
0000052e: JUMPI
0000052f: PUSH2 0x0002
00000532: JUMP
00000533: JUMPDEST
00000534: PUSH2 0x0106
00000537: PUSH1 0x04
00000539: CALLDATALOAD
0000053a: PUSH1 0x00
0000053c: SLOAD
0000053d: CALLER
0000053e: PUSH1 0x01
00000540: PUSH1 0xa0
00000542: PUSH1 0x02
00000544: EXP
00000545: SUB
00000546: SWAP1
00000547: DUP2
00000548: AND
00000549: SWAP2
0000054a: AND
0000054b: EQ
0000054c: PUSH2 0x0633
0000054f: JUMPI
00000550: PUSH2 0x0002
00000553: JUMP
00000554: JUMPDEST
00000555: PUSH2 0x0616
00000558: PUSH1 0x05
0000055a: SLOAD
0000055b: PUSH1 0x01
0000055d: PUSH1 0xa0
0000055f: PUSH1 0x02
00000561: EXP
00000562: SUB
00000563: AND
00000564: DUP2
00000565: JUMP
00000566: JUMPDEST
00000567: PUSH1 0x40
00000569: MLOAD
0000056a: DUP1
0000056b: DUP1
0000056c: PUSH1 0x20
0000056e: ADD
0000056f: DUP3
00000570: DUP2
00000571: SUB
00000572: DUP3
00000573: MSTORE
00000574: DUP4
00000575: DUP2
00000576: DUP2
00000577: MLOAD
00000578: DUP2
00000579: MSTORE
0000057a: PUSH1 0x20
0000057c: ADD
0000057d: SWAP2
0000057e: POP
0000057f: DUP1
00000580: MLOAD
00000581: SWAP1
00000582: PUSH1 0x20
00000584: ADD
00000585: SWAP1
00000586: DUP1
00000587: DUP4
00000588: DUP4
00000589: DUP3
0000058a: SWAP1
0000058b: PUSH1 0x00
0000058d: PUSH1 0x04
0000058f: PUSH1 0x20
00000591: DUP5
00000592: PUSH1 0x1f
00000594: ADD
00000595: DIV
00000596: PUSH1 0x0f
00000598: MUL
00000599: PUSH1 0x03
0000059b: ADD
0000059c: CALL
0000059d: POP
0000059e: SWAP1
0000059f: POP
000005a0: SWAP1
000005a1: DUP2
000005a2: ADD
000005a3: SWAP1
000005a4: PUSH1 0x1f
000005a6: AND
000005a7: DUP1
000005a8: ISZERO
000005a9: PUSH2 0x05c6
000005ac: JUMPI
000005ad: DUP1
000005ae: DUP3
000005af: SUB
000005b0: DUP1
000005b1: MLOAD
000005b2: PUSH1 0x01
000005b4: DUP4
000005b5: PUSH1 0x20
000005b7: SUB
000005b8: PUSH2 0x0100
000005bb: EXP
000005bc: SUB
000005bd: NOT
000005be: AND
000005bf: DUP2
000005c0: MSTORE
000005c1: PUSH1 0x20
000005c3: ADD
000005c4: SWAP2
000005c5: POP
000005c6: JUMPDEST
000005c7: POP
000005c8: SWAP3
000005c9: POP
000005ca: POP
000005cb: POP
000005cc: PUSH1 0x40
000005ce: MLOAD
000005cf: DUP1
000005d0: SWAP2
000005d1: SUB
000005d2: SWAP1
000005d3: RETURN
000005d4: JUMPDEST
000005d5: PUSH1 0x40
000005d7: DUP1
000005d8: MLOAD
000005d9: SWAP2
000005da: DUP3
000005db: MSTORE
000005dc: MLOAD
000005dd: SWAP1
000005de: DUP2
000005df: SWAP1
000005e0: SUB
000005e1: PUSH1 0x20
000005e3: ADD
000005e4: SWAP1
000005e5: RETURN
000005e6: JUMPDEST
000005e7: PUSH1 0x40
000005e9: DUP1
000005ea: MLOAD
000005eb: PUSH4 0xffffffff
000005f0: SWAP3
000005f1: SWAP1
000005f2: SWAP3
000005f3: AND
000005f4: DUP3
000005f5: MSTORE
000005f6: MLOAD
000005f7: SWAP1
000005f8: DUP2
000005f9: SWAP1
000005fa: SUB
000005fb: PUSH1 0x20
000005fd: ADD
000005fe: SWAP1
000005ff: RETURN
00000600: JUMPDEST
00000601: PUSH1 0x40
00000603: DUP1
00000604: MLOAD
00000605: PUSH1 0xff
00000607: SWAP1
00000608: SWAP3
00000609: AND
0000060a: DUP3
0000060b: MSTORE
0000060c: MLOAD
0000060d: SWAP1
0000060e: DUP2
0000060f: SWAP1
00000610: SUB
00000611: PUSH1 0x20
00000613: ADD
00000614: SWAP1
00000615: RETURN
00000616: JUMPDEST
00000617: PUSH1 0x40
00000619: DUP1
0000061a: MLOAD
0000061b: PUSH1 0x01
0000061d: PUSH1 0xa0
0000061f: PUSH1 0x02
00000621: EXP
00000622: SUB
00000623: SWAP3
00000624: SWAP1
00000625: SWAP3
00000626: AND
00000627: DUP3
00000628: MSTORE
exec
/bin/bash -lc 'BYTECODE=$(jq -r '"'.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json); cast disassemble \""'$BYTECODE" | sed -n '"'1120,1420p'" in /tmp/codex-n86eu21s
succeeded in 0ms:
00000628: MSTORE
00000629: MLOAD
0000062a: SWAP1
0000062b: DUP2
0000062c: SWAP1
0000062d: SUB
0000062e: PUSH1 0x20
00000630: ADD
00000631: SWAP1
00000632: RETURN
00000633: JUMPDEST
00000634: PUSH1 0x00
00000636: DUP1
00000637: SLOAD
00000638: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000064d: NOT
0000064e: AND
0000064f: DUP3
00000650: OR
00000651: SWAP1
00000652: SSTORE
00000653: POP
00000654: JUMP
00000655: JUMPDEST
00000656: DUP3
00000657: ADD
00000658: SWAP2
00000659: SWAP1
0000065a: PUSH1 0x00
0000065c: MSTORE
0000065d: PUSH1 0x20
0000065f: PUSH1 0x00
00000661: KECCAK256
00000662: SWAP1
00000663: JUMPDEST
00000664: DUP2
00000665: SLOAD
00000666: DUP2
00000667: MSTORE
00000668: SWAP1
00000669: PUSH1 0x01
0000066b: ADD
0000066c: SWAP1
0000066d: PUSH1 0x20
0000066f: ADD
00000670: DUP1
00000671: DUP4
00000672: GT
00000673: PUSH2 0x0663
00000676: JUMPI
00000677: DUP3
00000678: SWAP1
00000679: SUB
0000067a: PUSH1 0x1f
0000067c: AND
0000067d: DUP3
0000067e: ADD
0000067f: SWAP2
00000680: JUMPDEST
00000681: POP
00000682: POP
00000683: POP
00000684: POP
00000685: POP
00000686: DUP2
00000687: JUMP
00000688: JUMPDEST
00000689: POP
0000068a: SWAP4
0000068b: SWAP3
0000068c: POP
0000068d: POP
0000068e: POP
0000068f: JUMP
00000690: JUMPDEST
00000691: PUSH1 0x01
00000693: PUSH1 0xa0
00000695: PUSH1 0x02
00000697: EXP
00000698: SUB
00000699: DUP3
0000069a: AND
0000069b: PUSH1 0x00
0000069d: SWAP1
0000069e: DUP2
0000069f: MSTORE
000006a0: PUSH1 0x09
000006a2: PUSH1 0x20
000006a4: MSTORE
000006a5: PUSH1 0x40
000006a7: SWAP1
000006a8: KECCAK256
000006a9: SLOAD
000006aa: DUP2
000006ab: DUP2
000006ac: ADD
000006ad: LT
000006ae: ISZERO
000006af: PUSH2 0x06b7
000006b2: JUMPI
000006b3: PUSH2 0x0002
000006b6: JUMP
000006b7: JUMPDEST
000006b8: CALLER
000006b9: PUSH1 0x01
000006bb: PUSH1 0xa0
000006bd: PUSH1 0x02
000006bf: EXP
000006c0: SUB
000006c1: SWAP1
000006c2: DUP2
000006c3: AND
000006c4: PUSH1 0x00
000006c6: DUP2
000006c7: DUP2
000006c8: MSTORE
000006c9: PUSH1 0x09
000006cb: PUSH1 0x20
000006cd: SWAP1
000006ce: DUP2
000006cf: MSTORE
000006d0: PUSH1 0x40
000006d2: DUP1
000006d3: DUP4
000006d4: KECCAK256
000006d5: DUP1
000006d6: SLOAD
000006d7: DUP8
000006d8: SWAP1
000006d9: SUB
000006da: SWAP1
000006db: SSTORE
000006dc: SWAP4
000006dd: DUP7
000006de: AND
000006df: DUP1
000006e0: DUP4
000006e1: MSTORE
000006e2: SWAP2
000006e3: DUP5
000006e4: SWAP1
000006e5: KECCAK256
000006e6: DUP1
000006e7: SLOAD
000006e8: DUP7
000006e9: ADD
000006ea: SWAP1
000006eb: SSTORE
000006ec: DUP4
000006ed: MLOAD
000006ee: DUP6
000006ef: DUP2
000006f0: MSTORE
000006f1: SWAP4
000006f2: MLOAD
000006f3: SWAP2
000006f4: SWAP4
000006f5: PUSH1 0x00
000006f7: DUP1
000006f8: MLOAD
000006f9: PUSH1 0x20
000006fb: PUSH2 0x09b6
000006fe: DUP4
000006ff: CODECOPY
00000700: DUP2
00000701: MLOAD
00000702: SWAP2
00000703: MSTORE
00000704: SWAP3
00000705: SWAP1
00000706: DUP2
00000707: SWAP1
00000708: SUB
00000709: SWAP1
0000070a: SWAP2
0000070b: ADD
0000070c: SWAP1
0000070d: LOG3
0000070e: POP
0000070f: POP
00000710: JUMP
00000711: JUMPDEST
00000712: PUSH1 0x01
00000714: PUSH1 0xa0
00000716: PUSH1 0x02
00000718: EXP
00000719: SUB
0000071a: DUP4
0000071b: AND
0000071c: PUSH1 0x00
0000071e: SWAP1
0000071f: DUP2
00000720: MSTORE
00000721: PUSH1 0x09
00000723: PUSH1 0x20
00000725: MSTORE
00000726: PUSH1 0x40
00000728: SWAP1
00000729: KECCAK256
0000072a: SLOAD
0000072b: DUP1
0000072c: DUP4
0000072d: ADD
0000072e: LT
0000072f: ISZERO
00000730: PUSH2 0x0738
00000733: JUMPI
00000734: PUSH2 0x0002
00000737: JUMP
00000738: JUMPDEST
00000739: PUSH1 0x01
0000073b: PUSH1 0xa0
0000073d: PUSH1 0x02
0000073f: EXP
00000740: SUB
00000741: DUP5
00000742: DUP2
00000743: AND
00000744: PUSH1 0x00
00000746: DUP2
00000747: DUP2
00000748: MSTORE
00000749: PUSH1 0x0a
0000074b: PUSH1 0x20
0000074d: SWAP1
0000074e: DUP2
0000074f: MSTORE
00000750: PUSH1 0x40
00000752: DUP1
00000753: DUP4
00000754: KECCAK256
00000755: CALLER
00000756: SWAP1
00000757: SWAP6
00000758: AND
00000759: DUP1
0000075a: DUP5
0000075b: MSTORE
0000075c: SWAP5
0000075d: DUP3
0000075e: MSTORE
0000075f: DUP1
00000760: DUP4
00000761: KECCAK256
00000762: SLOAD
00000763: SWAP4
00000764: DUP4
00000765: MSTORE
00000766: PUSH1 0x0b
00000768: DUP3
00000769: MSTORE
0000076a: DUP1
0000076b: DUP4
0000076c: KECCAK256
0000076d: SWAP5
0000076e: DUP4
0000076f: MSTORE
00000770: SWAP4
00000771: SWAP1
00000772: MSTORE
00000773: SWAP2
00000774: SWAP1
00000775: SWAP2
00000776: KECCAK256
00000777: SLOAD
00000778: DUP4
00000779: ADD
0000077a: GT
0000077b: ISZERO
0000077c: PUSH2 0x0784
0000077f: JUMPI
00000780: PUSH2 0x0002
00000783: JUMP
00000784: JUMPDEST
00000785: PUSH1 0x01
00000787: PUSH1 0xa0
00000789: PUSH1 0x02
0000078b: EXP
0000078c: SUB
0000078d: DUP5
0000078e: DUP2
0000078f: AND
00000790: PUSH1 0x00
00000792: DUP2
00000793: DUP2
00000794: MSTORE
00000795: PUSH1 0x09
00000797: PUSH1 0x20
00000799: SWAP1
0000079a: DUP2
0000079b: MSTORE
0000079c: PUSH1 0x40
0000079e: DUP1
0000079f: DUP4
000007a0: KECCAK256
000007a1: DUP1
000007a2: SLOAD
000007a3: DUP9
000007a4: SWAP1
000007a5: SUB
000007a6: SWAP1
exec
/bin/bash -lc 'BYTECODE=$(jq -r '"'.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json); cast disassemble \""'$BYTECODE" | sed -n '"'1420,1720p'" in /tmp/codex-n86eu21s
succeeded in 0ms:
000007a6: SWAP1
000007a7: SSTORE
000007a8: DUP8
000007a9: DUP6
000007aa: AND
000007ab: DUP1
000007ac: DUP5
000007ad: MSTORE
000007ae: DUP2
000007af: DUP5
000007b0: KECCAK256
000007b1: DUP1
000007b2: SLOAD
000007b3: DUP10
000007b4: ADD
000007b5: SWAP1
000007b6: SSTORE
000007b7: DUP5
000007b8: DUP5
000007b9: MSTORE
000007ba: PUSH1 0x0b
000007bc: DUP4
000007bd: MSTORE
000007be: DUP2
000007bf: DUP5
000007c0: KECCAK256
000007c1: CALLER
000007c2: SWAP1
000007c3: SWAP7
000007c4: AND
000007c5: DUP5
000007c6: MSTORE
000007c7: SWAP5
000007c8: DUP3
000007c9: MSTORE
000007ca: SWAP2
000007cb: DUP3
000007cc: SWAP1
000007cd: KECCAK256
000007ce: DUP1
000007cf: SLOAD
000007d0: DUP8
000007d1: ADD
000007d2: SWAP1
000007d3: SSTORE
000007d4: DUP2
000007d5: MLOAD
000007d6: DUP7
000007d7: DUP2
000007d8: MSTORE
000007d9: SWAP2
000007da: MLOAD
000007db: PUSH1 0x00
000007dd: DUP1
000007de: MLOAD
000007df: PUSH1 0x20
000007e1: PUSH2 0x09b6
000007e4: DUP4
000007e5: CODECOPY
000007e6: DUP2
000007e7: MLOAD
000007e8: SWAP2
000007e9: MSTORE
000007ea: SWAP3
000007eb: DUP2
000007ec: SWAP1
000007ed: SUB
000007ee: SWAP1
000007ef: SWAP2
000007f0: ADD
000007f1: SWAP1
000007f2: LOG3
000007f3: POP
000007f4: PUSH1 0x01
000007f6: SWAP4
000007f7: SWAP3
000007f8: POP
000007f9: POP
000007fa: POP
000007fb: JUMP
000007fc: JUMPDEST
000007fd: PUSH1 0x06
000007ff: SSTORE
00000800: JUMP
00000801: JUMPDEST
00000802: PUSH1 0x05
00000804: DUP1
00000805: SLOAD
00000806: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000081b: NOT
0000081c: AND
0000081d: DUP3
0000081e: OR
0000081f: SWAP1
00000820: SSTORE
00000821: POP
00000822: JUMP
00000823: JUMPDEST
00000824: PUSH1 0x07
00000826: DUP1
00000827: SLOAD
00000828: PUSH4 0xffffffff
0000082d: NOT
0000082e: AND
0000082f: DUP3
00000830: OR
00000831: SWAP1
00000832: SSTORE
00000833: POP
00000834: JUMP
00000835: JUMPDEST
00000836: PUSH1 0x40
00000838: DUP1
00000839: MLOAD
0000083a: NUMBER
0000083b: DUP2
0000083c: MSTORE
0000083d: TIMESTAMP
0000083e: PUSH1 0x20
00000840: DUP3
00000841: ADD
00000842: MSTORE
00000843: DUP1
00000844: DUP3
00000845: ADD
00000846: DUP7
00000847: SWAP1
00000848: MSTORE
00000849: SWAP1
0000084a: MLOAD
0000084b: SWAP1
0000084c: DUP2
0000084d: SWAP1
0000084e: SUB
0000084f: PUSH1 0x60
00000851: ADD
00000852: SWAP1
00000853: KECCAK256
00000854: PUSH2 0x085e
00000857: SWAP1
00000858: PUSH1 0x0a
0000085a: PUSH2 0x01e7
0000085d: JUMP
0000085e: JUMPDEST
0000085f: PUSH1 0x07
00000861: SLOAD
00000862: SWAP1
00000863: SWAP2
00000864: POP
00000865: PUSH4 0xffffffff
0000086a: AND
0000086b: DUP2
0000086c: LT
0000086d: PUSH2 0x0875
00000870: JUMPI
00000871: PUSH1 0x01
00000873: SWAP3
00000874: POP
00000875: JUMPDEST
00000876: PUSH1 0x07
00000878: SLOAD
00000879: PUSH1 0x00
0000087b: NOT
0000087c: DUP6
0000087d: ADD
0000087e: SWAP3
0000087f: POP
00000880: PUSH4 0xffffffff
00000885: AND
00000886: DUP2
00000887: LT
00000888: ISZERO
00000889: PUSH2 0x0894
0000088c: JUMPI
0000088d: PUSH2 0x4e1e
00000890: DUP5
00000891: MUL
00000892: SWAP3
00000893: POP
00000894: JUMPDEST
00000895: CALLER
00000896: PUSH1 0x01
00000898: PUSH1 0xa0
0000089a: PUSH1 0x02
0000089c: EXP
0000089d: SUB
0000089e: SWAP1
0000089f: DUP2
000008a0: AND
000008a1: PUSH1 0x00
000008a3: DUP2
000008a4: DUP2
000008a5: MSTORE
000008a6: PUSH1 0x09
000008a8: PUSH1 0x20
000008aa: SWAP1
000008ab: DUP2
000008ac: MSTORE
000008ad: PUSH1 0x40
000008af: DUP1
000008b0: DUP4
000008b1: KECCAK256
000008b2: DUP1
000008b3: SLOAD
000008b4: DUP10
000008b5: ADD
000008b6: SWAP1
000008b7: SSTORE
000008b8: PUSH1 0x05
000008ba: SLOAD
000008bb: DUP6
000008bc: AND
000008bd: DUP4
000008be: MSTORE
000008bf: DUP1
000008c0: DUP4
000008c1: KECCAK256
000008c2: DUP1
000008c3: SLOAD
000008c4: DUP9
000008c5: ADD
000008c6: SWAP1
000008c7: SSTORE
000008c8: ADDRESS
000008c9: SWAP1
000008ca: SWAP5
000008cb: AND
000008cc: DUP1
000008cd: DUP4
000008ce: MSTORE
000008cf: SWAP2
000008d0: DUP5
000008d1: SWAP1
000008d2: KECCAK256
000008d3: DUP1
000008d4: SLOAD
000008d5: DUP9
000008d6: DUP9
000008d7: ADD
000008d8: SWAP1
000008d9: SUB
000008da: SWAP1
000008db: SSTORE
000008dc: DUP4
000008dd: MLOAD
000008de: DUP8
000008df: DUP2
000008e0: MSTORE
000008e1: SWAP4
000008e2: MLOAD
000008e3: SWAP3
000008e4: SWAP4
000008e5: SWAP2
000008e6: SWAP3
000008e7: PUSH1 0x00
000008e9: DUP1
000008ea: MLOAD
000008eb: PUSH1 0x20
000008ed: PUSH2 0x09b6
000008f0: DUP4
000008f1: CODECOPY
000008f2: DUP2
000008f3: MLOAD
000008f4: SWAP2
000008f5: MSTORE
000008f6: SWAP3
000008f7: DUP2
000008f8: SWAP1
000008f9: SUB
000008fa: SWAP1
000008fb: SWAP2
000008fc: ADD
000008fd: SWAP1
000008fe: LOG3
000008ff: PUSH1 0x05
00000901: SLOAD
00000902: PUSH1 0x40
00000904: DUP1
00000905: MLOAD
00000906: DUP5
00000907: DUP2
00000908: MSTORE
00000909: SWAP1
0000090a: MLOAD
0000090b: PUSH1 0x01
0000090d: PUSH1 0xa0
0000090f: PUSH1 0x02
00000911: EXP
00000912: SUB
00000913: SWAP3
00000914: DUP4
00000915: AND
00000916: SWAP3
00000917: ADDRESS
00000918: AND
00000919: SWAP2
0000091a: PUSH1 0x00
0000091c: DUP1
0000091d: MLOAD
0000091e: PUSH1 0x20
00000920: PUSH2 0x09b6
exec
/bin/bash -lc 'BYTECODE=$(jq -r '"'.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json); cast disassemble \""'$BYTECODE" | sed -n '"'1720,2020p'" in /tmp/codex-n86eu21s
succeeded in 0ms:
00000920: PUSH2 0x09b6
00000923: DUP4
00000924: CODECOPY
00000925: DUP2
00000926: MLOAD
00000927: SWAP2
00000928: MSTORE
00000929: SWAP2
0000092a: SWAP1
0000092b: DUP2
0000092c: SWAP1
0000092d: SUB
0000092e: PUSH1 0x20
00000930: ADD
00000931: SWAP1
00000932: LOG3
00000933: POP
00000934: POP
00000935: POP
00000936: SWAP1
00000937: JUMP
00000938: JUMPDEST
00000939: POP
0000093a: ADDRESS
0000093b: PUSH1 0x01
0000093d: PUSH1 0xa0
0000093f: PUSH1 0x02
00000941: EXP
00000942: SUB
00000943: SWAP1
00000944: DUP2
00000945: AND
00000946: PUSH1 0x00
00000948: SWAP1
00000949: DUP2
0000094a: MSTORE
0000094b: PUSH1 0x09
0000094d: PUSH1 0x20
0000094f: MSTORE
00000950: PUSH1 0x40
00000952: DUP1
00000953: DUP3
00000954: KECCAK256
00000955: DUP1
00000956: SLOAD
00000957: DUP6
00000958: ADD
00000959: SWAP1
0000095a: SSTORE
0000095b: CALLER
0000095c: SWAP1
0000095d: SWAP3
0000095e: AND
0000095f: DUP1
00000960: DUP3
00000961: MSTORE
00000962: DUP3
00000963: DUP3
00000964: KECCAK256
00000965: DUP1
00000966: SLOAD
00000967: DUP6
00000968: SWAP1
00000969: SUB
0000096a: SWAP1
0000096b: SSTORE
0000096c: SWAP2
0000096d: MLOAD
0000096e: PUSH1 0x08
00000970: SLOAD
00000971: DUP5
00000972: MUL
00000973: SWAP3
00000974: SWAP2
00000975: SWAP1
00000976: DUP4
00000977: SWAP1
00000978: DUP3
00000979: DUP2
0000097a: DUP2
0000097b: DUP2
0000097c: DUP6
0000097d: DUP9
0000097e: DUP4
0000097f: CALL
00000980: POP
00000981: POP
00000982: PUSH1 0x40
00000984: DUP1
00000985: MLOAD
00000986: DUP7
00000987: DUP2
00000988: MSTORE
00000989: SWAP1
0000098a: MLOAD
0000098b: ADDRESS
0000098c: PUSH1 0x01
0000098e: PUSH1 0xa0
00000990: PUSH1 0x02
00000992: EXP
00000993: SUB
00000994: AND
00000995: SWAP5
00000996: SWAP4
00000997: POP
00000998: PUSH1 0x00
0000099a: DUP1
0000099b: MLOAD
0000099c: PUSH1 0x20
0000099e: PUSH2 0x09b6
000009a1: DUP4
000009a2: CODECOPY
000009a3: DUP2
000009a4: MLOAD
000009a5: SWAP2
000009a6: MSTORE
000009a7: SWAP3
000009a8: POP
000009a9: SWAP1
000009aa: DUP2
000009ab: SWAP1
000009ac: SUB
000009ad: PUSH1 0x20
000009af: ADD
000009b0: SWAP1
000009b1: LOG3
000009b2: SWAP2
000009b3: SWAP1
000009b4: POP
000009b5: JUMP
000009b6: UNKNOWN(0xDD)
000009b7: CALLCODE
000009b8: MSTORE
000009b9: UNKNOWN(0xAD)
000009ba: SHL
000009bb: UNKNOWN(0xE2)
000009bc: UNKNOWN(0xC8)
000009bd: SWAP12
000009be: PUSH10 0xc2b068fc378daa952ba7
000009c9: CALL
000009ca: PUSH4 0xc4a11628
000009cf: CREATE2
000009d0: GAS
000009d1: UNKNOWN(0x4D)
000009d2: CREATE2
000009d3: UNKNOWN(0x23)
000009d4: UNKNOWN(0xB3)
000009d5: UNKNOWN(0xEF)
exec
/bin/bash -lc "jq '.analysis_run | keys' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
"address",
"block_number",
"chain_id",
"child_links",
"created_at",
"id",
"parent_links",
"status",
"updated_at"
]
exec
/bin/bash -lc "jq '.artifact | keys' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
"codehash",
"compiler_json",
"implementation_address",
"is_proxy",
"runtime_bytecode",
"verified_source"
]
exec
/bin/bash -lc "jq '.analysis_artifact | keys' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
[
"address",
"artifact_hash",
"artifact_json",
"block_number",
"chain_id",
"codehash",
"created_at",
"id",
"updated_at",
"version"
]
exec
/bin/bash -lc "jq '.artifact.compiler_json' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
{
"etherscan": {
"skipped": true
}
}
exec
/bin/bash -lc "jq '.artifact.is_proxy, .artifact.implementation_address, .artifact.verified_source' BYTECODE_BUNDLE.json" in /tmp/codex-n86eu21s
succeeded in 0ms:
false
null
false
exec
/bin/bash -lc "cast sig 'approveAndCall(address,uint256,bytes)' && cast sig 'receiveApproval(address,uint256,address,bytes)' && cast sig 'buy()' && cast sig 'sell(uint256)'" in /tmp/codex-n86eu21s
succeeded in 0ms:
0xcae9ca51
0x8f4ffcb1
0xa6f2ae3a
0xe4849b32
exec
/bin/bash -lc "cast sig 'price()' && cast sig 'wallet()' && cast sig 'payout()' && cast sig 'jackpot()' && cast sig 'bet()' && cast sig 'maxBet()' && cast sig 'treasury()'" in /tmp/codex-n86eu21s
succeeded in 0ms:
0xa035b1fe
0x521eb273
0x63bd1d4a
0x6b31ee01
0x11610c25
0x2e5b2168
0x61d027b3
exec
/bin/bash -lc "python3 - <<'PY'
import subprocess, json, re
from collections import defaultdict
import sys
import shlex
# get disassembly
bytecode = subprocess.check_output(\"jq -r '.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json\", shell=True, cwd='/tmp/codex-n86eu21s', text=True).strip()
dis = subprocess.check_output(['bash','-lc', f'cast disassemble {shlex.quote(bytecode)}'], cwd='/tmp/codex-n86eu21s', text=True)
ops = {}
for line in dis.splitlines():
m = re.match(r'([0-9a-fA-F]{8}):\\s+([A-Z0-9_]+)(?:\\s+(.*))?"'$'"', line)
if not m: continue
pc = int(m.group(1),16)
op = m.group(2)
arg = m.group(3)
ops[pc]=(op,arg)
# sequential pc mapping
pcs = sorted(ops)
nextpc = {pcs[i]: (pcs[i+1] if i+1 < len(pcs) else None) for i in range(len(pcs))}
def sym(op,*args):
return f\"{op}({', '.join(map(str,args))})\"
# stack top at end of list
stack=[]
mem={}
storage={}
pc=0x0507
# path choices: take JUMPI at 052e to 0938
steps=0
while pc is not None and steps<600:
steps+=1
op,arg=ops[pc]
def pop():
return stack.pop() if stack else 'UNDERFLOW'
def push(x):
stack.append(x)
# print(pc, op, arg, stack)
if op.startswith('PUSH'):
push(arg)
elif op.startswith('DUP'):
n=int(op[3:])
push(stack[-n])
elif op.startswith('SWAP'):
n=int(op[4:])
stack[-1], stack[-1-n] = stack[-1-n], stack[-1]
elif op=='CALLDATALOAD':
off=pop(); push(f'calldata[{off}]')
elif op=='CALLER':
push('caller')
elif op=='ADDRESS':
push('this')
elif op=='CALLVALUE':
push('callvalue')
elif op in ('ADD','SUB','MUL','DIV','MOD','EXP','AND','OR','LT','GT','EQ'):
a=pop(); b=pop(); push(sym(op,b,a))
elif op=='ISZERO':
a=pop(); push(sym('ISZERO',a))
elif op=='NOT':
a=pop(); push(sym('NOT',a))
elif op=='MLOAD':
off=pop(); push(mem.get(off, f'mem[{off}]'))
elif op=='MSTORE':
off=pop(); val=pop(); mem[off]=val
elif op=='SLOAD':
slot=pop(); push(storage.get(slot, f'storage[{slot}]'))
elif op=='SSTORE':
slot=pop(); val=pop(); storage[slot]=val
elif op=='KECCAK256':
off=pop(); size=pop(); push(sym('KECCAK', off, size, mem.copy()))
elif op=='POP':
pop()
elif op=='JUMPI':
dest=pop(); cond=pop()
if pc==0x052e:
pc=0x0938
continue
elif pc in (0x000a,0x001e,0x0029,0x0034,0x003f,0x004a,0x0055,0x0060,0x006b,0x0076,0x0081,0x008c,0x0097,0x00a2,0x00ad,0x00b8,0x00c3,0x00ce,0x00d9,0x00e4,0x00ef,0x00fa,0x0105):
# dispatcher not used
pass
else:
print('Unhandled JUMPI at',hex(pc),'dest',dest,'cond',cond); break
elif op=='JUMP':
dest=pop()
print('JUMP to',dest,'from',hex(pc),'stack',stack)
break
elif op=='LOG3':
mstart=pop(); msz=pop(); t1=pop(); t2=pop(); t3=pop();
elif op=='NUMBER': push('block.number')
elif op=='TIMESTAMP': push('block.timestamp')
elif op=='BLOCKHASH': a=pop(); push(sym('BLOCKHASH',a))
elif op=='CODECOPY':
dest=pop(); off=pop(); size=pop(); mem[dest]=f'code[{off}:{size}]'
elif op=='RETURN':
print('RETURN',stack); break
elif op=='CALL':
out_size=pop(); out_off=pop(); in_size=pop(); in_off=pop(); value=pop(); to=pop(); gas=pop();
print('CALL at',hex(pc), 'gas=',gas,'to=',to,'value=',value,'in_off=',in_off,'in_size=',in_size,'out_off=',out_off,'out_size=',out_size)
push(f'call_result@{hex(pc)}')
else:
print('Unhandled op',op,'at',hex(pc)); break
pc=nextpc[pc]
print('final stack',stack)
print('mem keys',list(mem.keys())[:10])
print('storage writes',storage)
PY" in /tmp/codex-n86eu21s
succeeded in 125ms:
Unhandled op JUMPDEST at 0x507
final stack []
mem keys []
storage writes {}
exec
/bin/bash -lc "python3 - <<'PY'
import subprocess, re, shlex
bytecode = subprocess.check_output(\"jq -r '.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json\", shell=True, cwd='/tmp/codex-n86eu21s', text=True).strip()
dis = subprocess.check_output(['bash','-lc', f'cast disassemble {shlex.quote(bytecode)}'], cwd='/tmp/codex-n86eu21s', text=True)
ops = {}
for line in dis.splitlines():
m = re.match(r'([0-9a-fA-F]{8}):\\s+([A-Z0-9_]+)(?:\\s+(.*))?"'$'"', line)
if m:
ops[int(m.group(1),16)] = (m.group(2), m.group(3))
pcs=sorted(ops)
nextpc={pcs[i]: (pcs[i+1] if i+1<len(pcs) else None) for i in range(len(pcs))}
def sym(op,*args): return f\"{op}({', '.join(map(str,args))})\"
stack=[]; mem={}; storage={}; pc=0x0507
for _ in range(800):
op,arg=ops[pc]
def pop(): return stack.pop() if stack else 'UNDERFLOW'
def push(x): stack.append(x)
#print(hex(pc), op, arg, 'STACK', stack)
if op=='JUMPDEST':
pass
elif op.startswith('PUSH'):
push(arg)
elif op.startswith('DUP'):
push(stack[-int(op[3:])])
elif op.startswith('SWAP'):
n=int(op[4:]); stack[-1],stack[-1-n]=stack[-1-n],stack[-1]
elif op=='CALLDATALOAD': push(f'calldata[{pop()}]')
elif op=='CALLER': push('caller')
elif op=='ADDRESS': push('this')
elif op=='CALLVALUE': push('callvalue')
elif op in ('ADD','SUB','MUL','DIV','MOD','EXP','AND','OR','LT','GT','EQ'):
a=pop(); b=pop(); push(sym(op,b,a))
elif op=='ISZERO': push(sym('ISZERO',pop()))
elif op=='NOT': push(sym('NOT',pop()))
elif op=='MLOAD': push(mem.get(pop(), f'mem[{pop}]'))
elif op=='MSTORE':
off=pop(); val=pop(); mem[off]=val
elif op=='SLOAD':
slot=pop(); push(storage.get(slot, f'storage[{slot}]'))
elif op=='SSTORE':
slot=pop(); val=pop(); storage[slot]=val
elif op=='KECCAK256':
off=pop(); size=pop(); push(sym('KECCAK', off, size))
elif op=='POP': pop()
elif op=='JUMPI':
dest=pop(); cond=pop()
if pc==0x052e:
pc=0x0938; continue
else:
# assume fallthrough for others
pass
elif op=='JUMP':
dest=pop(); print('JUMP from',hex(pc),'to',dest); break
elif op=='LOG3':
[pop() for __ in range(5)]
elif op=='NUMBER': push('block.number')
elif op=='TIMESTAMP': push('block.timestamp')
elif op=='BLOCKHASH': push(sym('BLOCKHASH',pop()))
elif op=='CODECOPY':
dest=pop(); off=pop(); size=pop(); mem[dest]=f'code[{off}:{size}]'
elif op=='RETURN':
print('RETURN',stack); break
elif op=='CALL':
out_size=pop(); out_off=pop(); in_size=pop(); in_off=pop(); value=pop(); to=pop(); gas=pop();
print('CALL at',hex(pc), 'gas=',gas,'to=',to,'value=',value,'in_off=',in_off,'in_size=',in_size,'out_off=',out_off,'out_size=',out_size)
push(f'call_result@{hex(pc)}')
else:
print('Unhandled',op,'at',hex(pc)); break
pc=nextpc[pc]
else:
print('loop end')
print('FINAL STACK',stack)
print('MEM',mem)
print('STORAGE',storage)
PY" in /tmp/codex-n86eu21s
succeeded in 0ms:
CALL at 0x97f gas= 0x00 to= mem[<function pop at 0x7f08db166520>] value= 0x00 in_off= mem[<function pop at 0x7f08db166520>] in_size= MUL(storage[0x08], calldata[0x04]) out_off= AND(caller, SUB(0x01, EXP(0xa0, 0x02))) out_size= 0x00
JUMP from 0x9b5 to 0x05d4
FINAL STACK ['MUL(storage[0x08], calldata[0x04])']
MEM {'0x00': 'AND(caller, SUB(0x01, EXP(0xa0, 0x02)))', '0x20': '0x09', 'mem[<function pop at 0x7f08db1659e0>]': 'calldata[0x04]'}
STORAGE {'KECCAK(0x00, 0x40)': 'SUB(calldata[0x04], ADD(storage[KECCAK(0x00, 0x40)], calldata[0x04]))'}
exec
/bin/bash -lc "python3 - <<'PY'
import subprocess, re, shlex
bytecode = subprocess.check_output(\"jq -r '.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json\", shell=True, cwd='/tmp/codex-n86eu21s', text=True).strip()
dis = subprocess.check_output(['bash','-lc', f'cast disassemble {shlex.quote(bytecode)}'], cwd='/tmp/codex-n86eu21s', text=True)
ops={}
for line in dis.splitlines():
m=re.match(r'([0-9a-fA-F]{8}):\\s+([A-Z0-9_]+)(?:\\s+(.*))?"'$'"', line)
if m: ops[int(m.group(1),16)]=(m.group(2),m.group(3))
pcs=sorted(ops)
nextpc={pcs[i]: (pcs[i+1] if i+1<len(pcs) else None) for i in range(len(pcs))}
def sym(op,*args): return f\"{op}({', '.join(map(str,args))})\"
stack=[]; mem={}; storage={}; pc=0x0507
for _ in range(500):
op,arg=ops[pc]
def pop(): return stack.pop() if stack else 'UNDERFLOW'
def push(x): stack.append(x)
if op=='JUMPDEST': pass
elif op.startswith('PUSH'): push(arg)
elif op.startswith('DUP'): push(stack[-int(op[3:])])
elif op.startswith('SWAP'):
n=int(op[4:]); stack[-1],stack[-1-n]=stack[-1-n],stack[-1]
elif op=='CALLDATALOAD': off=pop(); push(f'calldata[{off}]')
elif op=='CALLER': push('caller')
elif op=='ADDRESS': push('this')
elif op=='CALLVALUE': push('callvalue')
elif op in ('ADD','SUB','MUL','DIV','MOD','EXP','AND','OR','LT','GT','EQ'):
a=pop(); b=pop(); push(sym(op,b,a))
elif op=='ISZERO': a=pop(); push(sym('ISZERO',a))
elif op=='NOT': a=pop(); push(sym('NOT',a))
elif op=='MLOAD': off=pop(); push(mem.get(off, f'mem[{off}]'))
elif op=='MSTORE': off=pop(); val=pop(); mem[off]=val
elif op=='SLOAD': slot=pop(); push(storage.get(slot, f'storage[{slot}]'))
elif op=='SSTORE': slot=pop(); val=pop(); storage[slot]=val
elif op=='KECCAK256': off=pop(); size=pop(); push(sym('KECCAK',off,size))
elif op=='POP': pop()
elif op=='JUMPI':
dest=pop(); cond=pop();
if pc==0x052e: pc=0x0938; continue
elif op=='JUMP':
print('JUMP',hex(pc),'to',pop()); break
elif op=='LOG3':
mstart=pop(); msize=pop(); t1=pop(); t2=pop(); t3=pop();
elif op=='NUMBER': push('block.number')
elif op=='TIMESTAMP': push('block.timestamp')
elif op=='BLOCKHASH': a=pop(); push(sym('BLOCKHASH',a))
elif op=='CODECOPY': dest=pop(); off=pop(); size=pop(); mem[dest]=f'code[{off}:{size}]'
elif op=='RETURN': print('RETURN',stack); break
elif op=='CALL':
out_size=pop(); out_off=pop(); in_size=pop(); in_off=pop(); value=pop(); to=pop(); gas=pop();
print('CALL at',hex(pc))
print(' gas ',gas) ; print(' to ',to); print(' value ',value); print(' in_off ',in_off); print(' in_size ',in_size); print(' out_off ',out_off); print(' out_size ',out_size)
push(f'call_result@{hex(pc)}')
else:
print('Unhandled',op,hex(pc)); break
pc=nextpc[pc]
print('stack',stack)
print('mem',mem)
print('storage',storage)
PY" in /tmp/codex-n86eu21s
succeeded in 0ms:
CALL at 0x97f
gas 0x00
to mem[0x40]
value 0x00
in_off mem[0x40]
in_size MUL(storage[0x08], calldata[0x04])
out_off AND(caller, SUB(0x01, EXP(0xa0, 0x02)))
out_size 0x00
JUMP 0x9b5 to 0x05d4
stack ['MUL(storage[0x08], calldata[0x04])']
mem {'0x00': 'AND(caller, SUB(0x01, EXP(0xa0, 0x02)))', '0x20': '0x09', 'mem[0x40]': 'calldata[0x04]'}
storage {'KECCAK(0x00, 0x40)': 'SUB(calldata[0x04], ADD(storage[KECCAK(0x00, 0x40)], calldata[0x04]))'}
exec
/bin/bash -lc "python3 - <<'PY'
import subprocess, re, shlex
bytecode = subprocess.check_output(\"jq -r '.. | .runtime_bytecode?.full // empty' BYTECODE_BUNDLE.json\", shell=True, cwd='/tmp/codex-n86eu21s', text=True).strip()
dis = subprocess.check_output(['bash','-lc', f'cast disassemble {shlex.quote(bytecode)}'], cwd='/tmp/codex-n86eu21s', text=True)
ops={}
for line in dis.splitlines():
m=re.match(r'([0-9a-fA-F]{8}):\\s+([A-Z0-9_]+)(?:\\s+(.*))?"'$'"', line)
if m: ops[int(m.group(1),16)]=(m.group(2),m.group(3))
pcs=sorted(ops)
nextpc={pcs[i]: (pcs[i+1] if i+1<len(pcs) else None) for i in range(len(pcs))}
def simp(x):
return {'0x00':'0','0x20':'32','0x40':'64','0x80':'128'}.get(x,x)
def sym(op,*args): return f\"{op}({', '.join(map(str,args))})\"
stack=[]; mem={'0x40':'0x80'}; storage={}; pc=0x0507
for _ in range(500):
op,arg=ops[pc]
def pop(): return stack.pop() if stack else 'UNDERFLOW'
def push(x): stack.append(simp(x))
if op=='JUMPDEST': pass
elif op.startswith('PUSH'): push(arg)
elif op.startswith('DUP'): push(stack[-int(op[3:])])
elif op.startswith('SWAP'):
n=int(op[4:]); stack[-1],stack[-1-n]=stack[-1-n],stack[-1]
elif op=='CALLDATALOAD': off=pop(); push(f'calldata[{off}]')
elif op=='CALLER': push('caller')
elif op=='ADDRESS': push('this')
elif op=='CALLVALUE': push('callvalue')
elif op in ('ADD','SUB','MUL','DIV','MOD','EXP','AND','OR','LT','GT','EQ'):
a=pop(); b=pop(); push(sym(op,b,a))
elif op=='ISZERO': a=pop(); push(sym('ISZERO',a))
elif op=='NOT': a=pop(); push(sym('NOT',a))
elif op=='MLOAD': off=pop(); push(mem.get(off, f'mem[{off}]'))
elif op=='MSTORE': off=pop(); val=pop(); mem[off]=val
elif op=='SLOAD': slot=pop(); push(storage.get(slot, f'storage[{slot}]'))
elif op=='SSTORE': slot=pop(); val=pop(); storage[slot]=val
elif op=='KECCAK256': off=pop(); size=pop(); push(sym('KECCAK',off,size))
elif op=='POP': pop()
elif op=='JUMPI':
dest=pop(); cond=pop();
if pc==0x052e: pc=0x0938; continue
elif op=='JUMP':
print('JUMP',hex(pc),'to',pop()); break
elif op=='LOG3': [pop() for __ in range(5)]
elif op=='NUMBER': push('block.number')
elif op=='TIMESTAMP': push('block.timestamp')
elif op=='BLOCKHASH': a=pop(); push(sym('BLOCKHASH',a))
elif op=='CODECOPY': dest=pop(); off=pop(); size=pop(); mem[dest]=f'code[{off}:{size}]'
elif op=='RETURN': print('RETURN',stack); break
elif op=='CALL':
out_size=pop(); out_off=pop(); in_size=pop(); in_off=pop(); value=pop(); to=pop(); gas=pop();
print('CALL at',hex(pc), {'gas':gas,'to':to,'value':value,'in_off':in_off,'in_size':in_size,'out_off':out_off,'out_size':out_size})
push(f'call_result@{hex(pc)}')
else:
print('Unhandled',op,hex(pc)); break
pc=nextpc[pc]
print('stack',stack)
print('mem',mem)
print('storage',storage)
PY" in /tmp/codex-n86eu21s
succeeded in 0ms:
CALL at 0x97f {'gas': '0', 'to': 'mem[64]', 'value': '0', 'in_off': 'mem[64]', 'in_size': 'MUL(storage[0x08], calldata[0x04])', 'out_off': 'AND(caller, SUB(0x01, EXP(0xa0, 0x02)))', 'out_size': '0'}
JUMP 0x9b5 to 0x05d4
stack ['MUL(storage[0x08], calldata[0x04])']
mem {'0x40': '0x80', '0': 'AND(caller, SUB(0x01, EXP(0xa0, 0x02)))', '32': '0x09', 'mem[64]': 'calldata[0x04]'}
storage {'KECCAK(0, 64)': 'SUB(calldata[0x04], ADD(storage[KECCAK(0, 64)], calldata[0x04]))'}
exec
/bin/bash -lc "cast sig 'buyPrice()' && cast sig 'sellPrice()' && cast sig 'setBuyPrice(uint256)' && cast sig 'setSellPrice(uint256)'" in /tmp/codex-n86eu21s
succeeded in 0ms:
0x8620410b
0x4b750334
0x63ae8d6c
0xfc6634b9
exec
/bin/bash -lc "cast sig 'ownerWallet()' && cast sig 'setOwnerWallet(address)' && cast sig 'jackpotLimit()' && cast sig 'setJackpotLimit(uint32)'" in /tmp/codex-n86eu21s
succeeded in 0ms:
0x9335dcb7
0xbb542ef0
0x1a23d2a2
0x4617f100
exec
/bin/bash -lc "cast sig 'maxBet()' && cast sig 'setMaxBet(uint256)' && cast sig 'winPercentage()' && cast sig 'setWinPercentage(uint32)' && cast sig 'houseAddress()' && cast sig 'setHouseAddress(address)'" in /tmp/codex-n86eu21s
succeeded in 0ms:
0x2e5b2168
0x881eff1e
0x01c67203
0xc63d06f1
0xd7cee31e
0xef3aaf54
exec
/bin/bash -lc "cast sig 'threshold()' && cast sig 'setThreshold(uint32)' && cast sig 'bankroll()' && cast sig 'bank()' && cast sig 'setBank(address)' && cast sig 'wallet()' && cast sig 'setWallet(address)'" in /tmp/codex-n86eu21s
succeeded in 0ms:
0x42cde4e8
0x6693f253
0x0c657eb0
0x76cdb03b
0x090d23b9
0x521eb273
0xdeaa59df
codex
{"no_findings":false,"summary":"Bytecode is not a proxy and I did not see reachable DELEGATECALL. The meaningful issues are a silent-failure payout path in `sell(uint256)` and value-bearing randomness derived from block variables in `buy()`. I treated the generic CALL/CALLCODE detector output conservatively: one CALLCODE is in embedded event-topic data at pc 0x09b7, and the validated CALL targets included the identity precompile and self, so I did not elevate those generic findings by themselves.","findings":[{"severity":"medium","category":"other","title":"`sell(uint256)` updates balances before a low-level payout CALL whose success is ignored","exploit_scenario":"A user calls `sell(uint256)` from an address or contract that causes the payout CALL to fail, or the contract simply lacks funds for the computed payout. The function still updates storage to move/burn the seller's tokens, then discards the CALL result and returns normally. The seller can lose tokens without receiving the expected proceeds, and the contract's economic state diverges from the intended sell-for-value invariant.","recommendation":"Make the payout leg revert on failure: capture the CALL success flag and `require(success)` before keeping the storage writes, or switch to a pull-payment pattern. If external interaction must remain inline, keep checks-effects-interactions and explicitly handle the failure case.","evidence":"Selector `0xe4849b32` matches `sell(uint256)`. After the balance check, execution jumps into the sell handler at pc `0x0938`. That path performs storage writes before the external interaction (`SSTORE` around pc `0x095a` and `0x096b`), computes the payout from `slot8 * amount` at pc `0x0970`-`0x0972`, then executes `CALL` at pc `0x097f`. The very next instruction is `POP` at pc `0x0980`, with no conditional branch or revert on failure. The exact CALL target is stack-computed and not fully recoverable from bytecode alone, but this is the payout leg of `sell(uint256)`.","locations":["selector:0xe4849b32","pc:0x0938","pc:0x095a","pc:0x096b","pc:0x097f","pc:0x0980"]},{"severity":"medium","category":"oracle","title":"`buy()` uses miner/validator-influenced block data as entropy for value-bearing outcomes","exploit_scenario":"A validator, builder, or sophisticated searcher can bias or selectively include `buy()` transactions when the derived random branch is favorable. Because the outcome depends on `block.number`, `block.timestamp`, historical `BLOCKHASH`, and `msg.value`, the randomness is not unpredictable for an adversary controlling inclusion or timestamp within normal protocol bounds. If this branch controls token rewards or jackpot-like payouts, the game can be systematically biased.","recommendation":"Do not derive value-bearing randomness from block variables alone. Use a commit-reveal flow, an external VRF, or another scheme where the party deciding inclusion cannot cheaply bias the result.","evidence":"Selector `0xa6f2ae3a` matches `buy()`. In the buy path, pc `0x083a` loads `NUMBER` and pc `0x083d` loads `TIMESTAMP`; the code then hashes these values and jumps into the helper at pc `0x01e7`, which invokes `BLOCKHASH` at pc `0x0201` and reduces the result modulo 10 at pc `0x0216`-`0x0219`. The resulting value is compared against the owner-settable threshold in `slot7` at pc `0x085f`-`0x086d` and again around pc `0x0876`-`0x0894`, and that branch feeds subsequent balance updates. This is classic weak entropy from block data rather than an unbiased randomness source.","locations":["selector:0xa6f2ae3a","pc:0x083a","pc:0x083d","pc:0x01e7","pc:0x0201","pc:0x0219","pc:0x085f","pc:0x0894"]}]}
tokens used
100,095
{
"codex": {
"ran_at": "2026-04-05T06:40:17.406289+00:00",
"returncode": 0
},
"project": {
"mode": "bytecode",
"bytecode_length": 5038,
"bytecode_truncated": false,
"capability_graph_present": true,
"analysis_artifact_present": true
},
"summary": "Bytecode is not a proxy and I did not see reachable DELEGATECALL. The meaningful issues are a silent-failure payout path in `sell(uint256)` and value-bearing randomness derived from block variables in `buy()`. I treated the generic CALL/CALLCODE detector output conservatively: one CALLCODE is in embedded event-topic data at pc 0x09b7, and the validated CALL targets included the identity precompile and self, so I did not elevate those generic findings by themselves.",
"raw_final": {
"summary": "Bytecode is not a proxy and I did not see reachable DELEGATECALL. The meaningful issues are a silent-failure payout path in `sell(uint256)` and value-bearing randomness derived from block variables in `buy()`. I treated the generic CALL/CALLCODE detector output conservatively: one CALLCODE is in embedded event-topic data at pc 0x09b7, and the validated CALL targets included the identity precompile and self, so I did not elevate those generic findings by themselves.",
"findings": [
{
"title": "`sell(uint256)` updates balances before a low-level payout CALL whose success is ignored",
"category": "other",
"evidence": "Selector `0xe4849b32` matches `sell(uint256)`. After the balance check, execution jumps into the sell handler at pc `0x0938`. That path performs storage writes before the external interaction (`SSTORE` around pc `0x095a` and `0x096b`), computes the payout from `slot8 * amount` at pc `0x0970`-`0x0972`, then executes `CALL` at pc `0x097f`. The very next instruction is `POP` at pc `0x0980`, with no conditional branch or revert on failure. The exact CALL target is stack-computed and not fully recoverable from bytecode alone, but this is the payout leg of `sell(uint256)`.",
"severity": "medium",
"locations": [
"selector:0xe4849b32",
"pc:0x0938",
"pc:0x095a",
"pc:0x096b",
"pc:0x097f",
"pc:0x0980"
],
"recommendation": "Make the payout leg revert on failure: capture the CALL success flag and `require(success)` before keeping the storage writes, or switch to a pull-payment pattern. If external interaction must remain inline, keep checks-effects-interactions and explicitly handle the failure case.",
"exploit_scenario": "A user calls `sell(uint256)` from an address or contract that causes the payout CALL to fail, or the contract simply lacks funds for the computed payout. The function still updates storage to move/burn the seller's tokens, then discards the CALL result and returns normally. The seller can lose tokens without receiving the expected proceeds, and the contract's economic state diverges from the intended sell-for-value invariant."
},
{
"title": "`buy()` uses miner/validator-influenced block data as entropy for value-bearing outcomes",
"category": "oracle",
"evidence": "Selector `0xa6f2ae3a` matches `buy()`. In the buy path, pc `0x083a` loads `NUMBER` and pc `0x083d` loads `TIMESTAMP`; the code then hashes these values and jumps into the helper at pc `0x01e7`, which invokes `BLOCKHASH` at pc `0x0201` and reduces the result modulo 10 at pc `0x0216`-`0x0219`. The resulting value is compared against the owner-settable threshold in `slot7` at pc `0x085f`-`0x086d` and again around pc `0x0876`-`0x0894`, and that branch feeds subsequent balance updates. This is classic weak entropy from block data rather than an unbiased randomness source.",
"severity": "medium",
"locations": [
"selector:0xa6f2ae3a",
"pc:0x083a",
"pc:0x083d",
"pc:0x01e7",
"pc:0x0201",
"pc:0x0219",
"pc:0x085f",
"pc:0x0894"
],
"recommendation": "Do not derive value-bearing randomness from block variables alone. Use a commit-reveal flow, an external VRF, or another scheme where the party deciding inclusion cannot cheaply bias the result.",
"exploit_scenario": "A validator, builder, or sophisticated searcher can bias or selectively include `buy()` transactions when the derived random branch is favorable. Because the outcome depends on `block.number`, `block.timestamp`, historical `BLOCKHASH`, and `msg.value`, the randomness is not unpredictable for an adversary controlling inclusion or timestamp within normal protocol bounds. If this branch controls token rewards or jackpot-like payouts, the game can be systematically biased."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x0106 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 0x0108 0000001e: JUMPI 0000001f: DUP1 00000020: PUSH4 0x18160ddd 00000025: EQ 00000026: PUSH2 0x0165 00000029: JUMPI 0000002a: DUP1 0000002b: PUSH4 0x1fe9eabc 00000030: EQ 00000031: PUSH2 0x016e 00000034: JUMPI 00000035: DUP1 00000036: PUSH4 0x233de126 0000003b: EQ 0000003c: PUSH2 0x0190 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x23b872dd 00000046: EQ 00000047: PUSH2 0x019f 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x313ce567 00000051: EQ 00000052: PUSH2 0x01d1 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x41fa4876 0000005c: EQ 0000005d: PUSH2 0x01dd 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x70a08231 00000067: EQ 00000068: PUSH2 0x0233 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0x7f2a8a80 00000072: EQ 00000073: PUSH2 0x024b 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0x8da5cb5b 0000007d: EQ 0000007e: PUSH2 0x026c 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0x95d89b41 00000088: EQ 00000089: PUSH2 0x027e 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0xa6f2ae3a 00000093: EQ 00000094: PUSH2 0x02d9 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xa9059cbb 0000009e: EQ 0000009f: PUSH2 0x02f4 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0xaa295de9 000000a9: EQ 000000aa: PUSH2 0x0323 000000ad: JUMPI 000000ae: DUP1 000000af: PUSH4 0xbc094049 000000b4: EQ 000000b5: PUSH2 0x032c 000000b8: JUMPI 000000b9: DUP1 000000ba: PUSH4 0xc4839e8b 000000bf: EQ 000000c0: PUSH2 0x0335 000000c3: JUMPI 000000c4: DUP1 000000c5: PUSH4 0xcae9ca51 000000ca: EQ 000000cb: PUSH2 0x0356 000000ce: JUMPI 000000cf: DUP1 000000d0: PUSH4 0xdc3080f2 000000d5: EQ 000000d6: PUSH2 0x04bd 000000d9: JUMPI 000000da: DUP1 000000db: PUSH4 0xdd62ed3e 000000e0: EQ 000000e1: PUSH2 0x04e2 000000e4: JUMPI 000000e5: DUP1 000000e6: PUSH4 0xe4849b32 000000eb: EQ 000000ec: PUSH2 0x0507 000000ef: JUMPI 000000f0: DUP1 000000f1: PUSH4 0xf2fde38b 000000f6: EQ 000000f7: PUSH2 0x0533 000000fa: JUMPI 000000fb: DUP1 000000fc: PUSH4 0xff9b3acf 00000101: EQ 00000102: PUSH2 0x0554 00000105: JUMPI 00000106: JUMPDEST 00000107: STOP 00000108: JUMPDEST 00000109: PUSH1 0x40 0000010b: DUP1 0000010c: MLOAD 0000010d: PUSH1 0x01 0000010f: DUP1 00000110: SLOAD 00000111: PUSH1 0x20 00000113: PUSH1 0x02 00000115: DUP3 00000116: DUP5 00000117: AND 00000118: ISZERO 00000119: PUSH2 0x0100 0000011c: MUL 0000011d: PUSH1 0x00 0000011f: NOT 00000120: ADD 00000121: SWAP1 00000122: SWAP3 00000123: AND 00000124: SWAP2 00000125: SWAP1 00000126: SWAP2 00000127: DIV 00000128: PUSH1 0x1f 0000012a: DUP2 0000012b: ADD 0000012c: DUP3 0000012d: SWAP1 0000012e: DIV 0000012f: DUP3 00000130: MUL 00000131: DUP5 00000132: ADD 00000133: DUP3 00000134: ADD 00000135: SWAP1 00000136: SWAP5 00000137: MSTORE 00000138: DUP4 00000139: DUP4 0000013a: MSTORE 0000013b: PUSH2 0x0566 0000013e: SWAP4 0000013f: SWAP1 00000140: DUP4 00000141: ADD 00000142: DUP3 00000143: DUP3 00000144: DUP1 00000145: ISZERO 00000146: PUSH2 0x0680 00000149: JUMPI 0000014a: DUP1 0000014b: PUSH1 0x1f 0000014d: LT 0000014e: PUSH2 0x0655 00000151: JUMPI 00000152: PUSH2 0x0100 00000155: DUP1 00000156: DUP4 00000157: SLOAD 00000158: DIV 00000159: MUL 0000015a: DUP4 0000015b: MSTORE 0000015c: SWAP2 0000015d: PUSH1 0x20 0000015f: ADD 00000160: SWAP2 00000161: PUSH2 0x0680 00000164: JUMP 00000165: JUMPDEST 00000166: PUSH2 0x05d4 00000169: PUSH1 0x04 0000016b: SLOAD 0000016c: DUP2 0000016d: JUMP 0000016e: JUMPDEST 0000016f: PUSH2 0x0106 00000172: PUSH1 0x04 00000174: CALLDATALOAD 00000175: PUSH1 0x00 00000177: SLOAD 00000178: PUSH1 0x01 0000017a: PUSH1 0xa0 0000017c: PUSH1 0x02 0000017e: EXP 0000017f: SUB 00000180: SWAP1 00000181: DUP2 00000182: AND 00000183: CALLER 00000184: SWAP1 00000185: SWAP2 00000186: AND 00000187: EQ 00000188: PUSH2 0x07fc 0000018b: JUMPI 0000018c: PUSH2 0x0002 0000018f: JUMP 00000190: JUMPDEST 00000191: PUSH2 0x05e6 00000194: PUSH1 0x07 00000196: SLOAD 00000197: PUSH4 0xffffffff 0000019c: AND 0000019d: DUP2 0000019e: JUMP 0000019f: JUMPDEST 000001a0: PUSH2 0x05d4 000001a3: PUSH1 0x04 000001a5: CALLDATALOAD 000001a6: PUSH1 0x24 000001a8: CALLDATALOAD 000001a9: PUSH1 0x44 000001ab: CALLDATALOAD 000001ac: PUSH1 0x01 000001ae: PUSH1 0xa0 000001b0: PUSH1 0x02 000001b2: EXP 000001b3: SUB 000001b4: DUP4 000001b5: AND 000001b6: PUSH1 0x00 000001b8: SWAP1 000001b9: DUP2 000001ba: MSTORE 000001bb: PUSH1 0x09 000001bd: PUSH1 0x20 000001bf: MSTORE 000001c0: PUSH1 0x40 000001c2: DUP2 000001c3: KECCAK256 000001c4: SLOAD 000001c5: DUP3 000001c6: SWAP1 000001c7: LT 000001c8: ISZERO 000001c9: PUSH2 0x0711 000001cc: JUMPI 000001cd: PUSH2 0x0002 000001d0: JUMP 000001d1: JUMPDEST 000001d2: PUSH2 0x0600 000001d5: PUSH1 0x03 000001d7: SLOAD 000001d8: PUSH1 0xff 000001da: AND 000001db: DUP2 000001dc: JUMP 000001dd: JUMPDEST 000001de: PUSH2 0x05d4 000001e1: PUSH1 0x04 000001e3: CALLDATALOAD 000001e4: PUSH1 0x24 000001e6: CALLDATALOAD 000001e7: JUMPDEST 000001e8: PUSH1 0x00 000001ea: DUP1 000001eb: DUP1 000001ec: JUMPDEST 000001ed: DUP4 000001ee: DUP2 000001ef: LT 000001f0: ISZERO 000001f1: PUSH2 0x0688 000001f4: JUMPI 000001f5: PUSH1 0x40 000001f7: DUP1 000001f8: MLOAD 000001f9: NUMBER 000001fa: DUP4 000001fb: SWAP1 000001fc: SUB 000001fd: PUSH1 0x00 000001ff: NOT 00000200: ADD 00000201: BLOCKHASH 00000202: DUP2 00000203: MSTORE 00000204: PUSH1 0x20 00000206: DUP2 00000207: ADD 00000208: DUP8 00000209: SWAP1 0000020a: MSTORE 0000020b: DUP2 0000020c: MLOAD 0000020d: SWAP1 0000020e: DUP2 0000020f: SWAP1 00000210: SUB 00000211: SWAP1 00000212: SWAP2 00000213: ADD 00000214: SWAP1 00000215: KECCAK256 00000216: PUSH1 0x02 00000218: SWAP1 00000219: MOD 0000021a: PUSH1 0x00 0000021c: EQ 0000021d: ISZERO 0000021e: PUSH2 0x022b 00000221: JUMPI 00000222: PUSH1 0x02 00000224: DUP2 00000225: SWAP1 00000226: EXP 00000227: SWAP1 00000228: SWAP2 00000229: ADD 0000022a: SWAP1 0000022b: JUMPDEST 0000022c: PUSH1 0x01 0000022e: ADD 0000022f: PUSH2 0x01ec 00000232: JUMP 00000233: JUMPDEST 00000234: PUSH2 0x05d4 00000237: PUSH1 0x04 00000239: CALLDATALOAD 0000023a: PUSH1 0x09 0000023c: PUSH1 0x20 0000023e: MSTORE 0000023f: PUSH1 0x00 00000241: SWAP1 00000242: DUP2 00000243: MSTORE 00000244: PUSH1 0x40 00000246: SWAP1 00000247: KECCAK256 00000248: SLOAD 00000249: DUP2 0000024a: JUMP 0000024b: JUMPDEST 0000024c: PUSH2 0x0106 0000024f: PUSH1 0x04 00000251: CALLDATALOAD 00000252: PUSH1 0x00 00000254: SLOAD 00000255: CALLER 00000256: PUSH1 0x01 00000258: PUSH1 0xa0 0000025a: PUSH1 0x02 0000025c: EXP 0000025d: SUB 0000025e: SWAP1 0000025f: DUP2 00000260: AND 00000261: SWAP2 00000262: AND 00000263: EQ 00000264: PUSH2 0x0801 00000267: JUMPI 00000268: PUSH2 0x0002 0000026b: JUMP 0000026c: JUMPDEST 0000026d: PUSH2 0x0616 00000270: PUSH1 0x00 00000272: SLOAD 00000273: PUSH1 0x01 00000275: PUSH1 0xa0 00000277: PUSH1 0x02 00000279: EXP 0000027a: SUB 0000027b: AND 0000027c: DUP2 0000027d: JUMP 0000027e: JUMPDEST 0000027f: PUSH2 0x0566 00000282: PUSH1 0x02 00000284: DUP1 00000285: SLOAD 00000286: PUSH1 0x40 00000288: DUP1 00000289: MLOAD 0000028a: PUSH1 0x20 0000028c: PUSH1 0x01 0000028e: DUP5 0000028f: AND 00000290: ISZERO 00000291: PUSH2 0x0100 00000294: MUL 00000295: PUSH1 0x00 00000297: NOT 00000298: ADD 00000299: SWAP1 0000029a: SWAP4 0000029b: AND 0000029c: DUP5 0000029d: SWAP1 0000029e: DIV 0000029f: PUSH1 0x1f 000002a1: DUP2 000002a2: ADD 000002a3: DUP5 000002a4: SWAP1 000002a5: DIV 000002a6: DUP5 000002a7: MUL 000002a8: DUP3 000002a9: ADD 000002aa: DUP5 000002ab: ADD 000002ac: SWAP1 000002ad: SWAP3 000002ae: MSTORE 000002af: DUP2 000002b0: DUP2 000002b1: MSTORE 000002b2: SWAP3 000002b3: SWAP2 000002b4: DUP4 000002b5: ADD 000002b6: DUP3 000002b7: DUP3 000002b8: DUP1 000002b9: ISZERO 000002ba: PUSH2 0x0680 000002bd: JUMPI 000002be: DUP1 000002bf: PUSH1 0x1f 000002c1: LT 000002c2: PUSH2 0x0655 000002c5: JUMPI 000002c6: PUSH2 0x0100 000002c9: DUP1 000002ca: DUP4 000002cb: SLOAD 000002cc: DIV 000002cd: MUL 000002ce: DUP4 000002cf: MSTORE 000002d0: SWAP2 000002d1: PUSH1 0x20 000002d3: ADD 000002d4: SWAP2 000002d5: PUSH2 0x0680 000002d8: JUMP 000002d9: JUMPDEST 000002da: PUSH2 0x05d4 000002dd: PUSH1 0x06 000002df: SLOAD 000002e0: CALLVALUE 000002e1: SWAP1 000002e2: PUSH1 0x00 000002e4: SWAP1 000002e5: DUP2 000002e6: SWAP1 000002e7: DUP2 000002e8: SWAP1 000002e9: DUP5 000002ea: GT 000002eb: ISZERO 000002ec: PUSH2 0x0835 000002ef: JUMPI 000002f0: PUSH2 0x0002 000002f3: JUMP 000002f4: JUMPDEST 000002f5: PUSH2 0x0106 000002f8: PUSH1 0x04 000002fa: CALLDATALOAD 000002fb: PUSH1 0x24 000002fd: CALLDATALOAD 000002fe: CALLER 000002ff: PUSH1 0x01 00000301: PUSH1 0xa0 00000303: PUSH1 0x02 00000305: EXP 00000306: SUB 00000307: AND 00000308: PUSH1 0x00 0000030a: SWAP1 0000030b: DUP2 0000030c: MSTORE 0000030d: PUSH1 0x09 0000030f: PUSH1 0x20 00000311: MSTORE 00000312: PUSH1 0x40 00000314: SWAP1 00000315: KECCAK256 00000316: SLOAD 00000317: DUP2 00000318: SWAP1 00000319: LT 0000031a: ISZERO 0000031b: PUSH2 0x0690 0000031e: JUMPI 0000031f: PUSH2 0x0002 00000322: JUMP 00000323: JUMPDEST 00000324: PUSH2 0x05d4 00000327: PUSH1 0x06 00000329: SLOAD 0000032a: DUP2 0000032b: JUMP 0000032c: JUMPDEST 0000032d: PUSH2 0x05d4 00000330: PUSH1 0x08 00000332: SLOAD 00000333: DUP2 00000334: JUMP 00000335: JUMPDEST 00000336: PUSH2 0x0106 00000339: PUSH1 0x04 0000033b: CALLDATALOAD 0000033c: PUSH1 0x00 0000033e: SLOAD 0000033f: CALLER 00000340: PUSH1 0x01 00000342: PUSH1 0xa0 00000344: PUSH1 0x02 00000346: EXP 00000347: SUB 00000348: SWAP1 00000349: DUP2 0000034a: AND 0000034b: SWAP2 0000034c: AND 0000034d: EQ 0000034e: PUSH2 0x0823 00000351: JUMPI 00000352: PUSH2 0x0002 00000355: JUMP 00000356: JUMPDEST 00000357: PUSH1 0x40 00000359: DUP1 0000035a: MLOAD 0000035b: PUSH1 0x20 0000035d: PUSH1 0x44 0000035f: CALLDATALOAD 00000360: PUSH1 0x04 00000362: DUP2 00000363: DUP2 00000364: ADD 00000365: CALLDATALOAD 00000366: PUSH1 0x1f 00000368: DUP2 00000369: ADD 0000036a: DUP5 0000036b: SWAP1 0000036c: DIV 0000036d: DUP5 0000036e: MUL 0000036f: DUP6 00000370: ADD 00000371: DUP5 00000372: ADD 00000373: SWAP1 00000374: SWAP6 00000375: MSTORE 00000376: DUP5 00000377: DUP5 00000378: MSTORE 00000379: PUSH2 0x05d4 0000037c: SWAP5 0000037d: DUP2 0000037e: CALLDATALOAD 0000037f: SWAP5 00000380: PUSH1 0x24 00000382: DUP1 00000383: CALLDATALOAD 00000384: SWAP6 00000385: SWAP4 00000386: SWAP5 00000387: PUSH1 0x64 00000389: SWAP5 0000038a: SWAP3 0000038b: SWAP4 0000038c: SWAP2 0000038d: ADD 0000038e: SWAP2 0000038f: DUP2 00000390: SWAP1 00000391: DUP5 00000392: ADD 00000393: DUP4 00000394: DUP3 00000395: DUP1 00000396: DUP3 00000397: DUP5 00000398: CALLDATACOPY 00000399: POP 0000039a: SWAP5 0000039b: SWAP7 0000039c: POP 0000039d: POP 0000039e: POP 0000039f: POP 000003a0: POP 000003a1: POP 000003a2: POP 000003a3: PUSH1 0x00 000003a5: PUSH1 0x00 000003a7: DUP4 000003a8: PUSH1 0x0a 000003aa: PUSH1 0x00 000003ac: POP 000003ad: PUSH1 0x00 000003af: CALLER 000003b0: PUSH1 0x01 000003b2: PUSH1 0xa0 000003b4: PUSH1 0x02 000003b6: EXP 000003b7: SUB 000003b8: AND 000003b9: DUP2 000003ba: MSTORE 000003bb: PUSH1 0x20 000003bd: ADD 000003be: SWAP1 000003bf: DUP2 000003c0: MSTORE 000003c1: PUSH1 0x20 000003c3: ADD 000003c4: PUSH1 0x00 000003c6: KECCAK256 000003c7: PUSH1 0x00 000003c9: POP 000003ca: PUSH1 0x00 000003cc: DUP8 000003cd: PUSH1 0x01 000003cf: PUSH1 0xa0 000003d1: PUSH1 0x02 000003d3: EXP 000003d4: SUB 000003d5: AND 000003d6: DUP2 000003d7: MSTORE 000003d8: PUSH1 0x20 000003da: ADD 000003db: SWAP1 000003dc: DUP2 000003dd: MSTORE 000003de: PUSH1 0x20 000003e0: ADD 000003e1: PUSH1 0x00 000003e3: KECCAK256 000003e4: PUSH1 0x00 000003e6: POP 000003e7: DUP2 000003e8: SWAP1 000003e9: SSTORE 000003ea: POP 000003eb: DUP5 000003ec: SWAP1 000003ed: POP 000003ee: DUP1 000003ef: PUSH1 0x01 000003f1: PUSH1 0xa0 000003f3: PUSH1 0x02 000003f5: EXP 000003f6: SUB 000003f7: AND 000003f8: PUSH4 0x8f4ffcb1 000003fd: CALLER 000003fe: DUP7 000003ff: ADDRESS 00000400: DUP8 00000401: PUSH1 0x40 00000403: MLOAD 00000404: DUP6 00000405: PUSH1 0xe0 00000407: PUSH1 0x02 00000409: EXP 0000040a: MUL 0000040b: DUP2 0000040c: MSTORE 0000040d: PUSH1 0x04 0000040f: ADD 00000410: DUP1 00000411: DUP6 00000412: PUSH1 0x01 00000414: PUSH1 0xa0 00000416: PUSH1 0x02 00000418: EXP 00000419: SUB 0000041a: AND 0000041b: DUP2 0000041c: MSTORE 0000041d: PUSH1 0x20 0000041f: ADD 00000420: DUP5 00000421: DUP2 00000422: MSTORE 00000423: PUSH1 0x20 00000425: ADD 00000426: DUP4 00000427: PUSH1 0x01 00000429: PUSH1 0xa0 0000042b: PUSH1 0x02 0000042d: EXP 0000042e: SUB 0000042f: AND 00000430: DUP2 00000431: MSTORE 00000432: PUSH1 0x20 00000434: ADD 00000435: DUP1 00000436: PUSH1 0x20 00000438: ADD 00000439: DUP3 0000043a: DUP2 0000043b: SUB 0000043c: DUP3 0000043d: MSTORE 0000043e: DUP4 0000043f: DUP2 00000440: DUP2 00000441: MLOAD 00000442: DUP2 00000443: MSTORE 00000444: PUSH1 0x20 00000446: ADD 00000447: SWAP2 00000448: POP 00000449: DUP1 0000044a: MLOAD 0000044b: SWAP1 0000044c: PUSH1 0x20 0000044e: ADD 0000044f: SWAP1 00000450: DUP1 00000451: DUP4 00000452: DUP4 00000453: DUP3 00000454: SWAP1 00000455: PUSH1 0x00 00000457: PUSH1 0x04 00000459: PUSH1 0x20 0000045b: DUP5 0000045c: PUSH1 0x1f 0000045e: ADD 0000045f: DIV 00000460: PUSH1 0x0f 00000462: MUL 00000463: PUSH1 0x03 00000465: ADD 00000466: CALL 00000467: POP 00000468: SWAP1 00000469: POP 0000046a: SWAP1 0000046b: DUP2 0000046c: ADD 0000046d: SWAP1 0000046e: PUSH1 0x1f 00000470: AND 00000471: DUP1 00000472: ISZERO 00000473: PUSH2 0x0490 00000476: JUMPI 00000477: DUP1 00000478: DUP3 00000479: SUB 0000047a: DUP1 0000047b: MLOAD 0000047c: PUSH1 0x01 0000047e: DUP4 0000047f: PUSH1 0x20 00000481: SUB 00000482: PUSH2 0x0100 00000485: EXP 00000486: SUB 00000487: NOT 00000488: AND 00000489: DUP2 0000048a: MSTORE 0000048b: PUSH1 0x20 0000048d: ADD 0000048e: SWAP2 0000048f: POP 00000490: JUMPDEST 00000491: POP 00000492: SWAP6 00000493: POP 00000494: POP 00000495: POP 00000496: POP 00000497: POP 00000498: POP 00000499: PUSH1 0x00 0000049b: PUSH1 0x40 0000049d: MLOAD 0000049e: DUP1 0000049f: DUP4 000004a0: SUB 000004a1: DUP2 000004a2: PUSH1 0x00 000004a4: DUP8 000004a5: PUSH2 0x61da 000004a8: GAS 000004a9: SUB 000004aa: CALL 000004ab: ISZERO 000004ac: PUSH2 0x0002 000004af: JUMPI 000004b0: POP 000004b1: PUSH1 0x01 000004b3: SWAP8 000004b4: SWAP7 000004b5: POP 000004b6: POP 000004b7: POP 000004b8: POP 000004b9: POP 000004ba: POP 000004bb: POP 000004bc: JUMP 000004bd: JUMPDEST 000004be: PUSH1 0x0b 000004c0: PUSH1 0x20 000004c2: SWAP1 000004c3: DUP2 000004c4: MSTORE 000004c5: PUSH1 0x04 000004c7: CALLDATALOAD 000004c8: PUSH1 0x00 000004ca: SWAP1 000004cb: DUP2 000004cc: MSTORE 000004cd: PUSH1 0x40 000004cf: DUP1 000004d0: DUP3 000004d1: KECCAK256 000004d2: SWAP1 000004d3: SWAP3 000004d4: MSTORE 000004d5: PUSH1 0x24 000004d7: CALLDATALOAD 000004d8: DUP2 000004d9: MSTORE 000004da: KECCAK256 000004db: SLOAD 000004dc: PUSH2 0x05d4 000004df: SWAP1 000004e0: DUP2 000004e1: JUMP 000004e2: JUMPDEST 000004e3: PUSH1 0x0a 000004e5: PUSH1 0x20 000004e7: SWAP1 000004e8: DUP2 000004e9: MSTORE 000004ea: PUSH1 0x04 000004ec: CALLDATALOAD 000004ed: PUSH1 0x00 000004ef: SWAP1 000004f0: DUP2 000004f1: MSTORE 000004f2: PUSH1 0x40 000004f4: DUP1 000004f5: DUP3 000004f6: KECCAK256 000004f7: SWAP1 000004f8: SWAP3 000004f9: MSTORE 000004fa: PUSH1 0x24 000004fc: CALLDATALOAD 000004fd: DUP2 000004fe: MSTORE 000004ff: KECCAK256 00000500: SLOAD 00000501: PUSH2 0x05d4 00000504: SWAP1 00000505: DUP2 00000506: JUMP 00000507: JUMPDEST 00000508: PUSH2 0x05d4 0000050b: PUSH1 0x04 0000050d: CALLDATALOAD 0000050e: CALLER 0000050f: PUSH1 0x01 00000511: PUSH1 0xa0 00000513: PUSH1 0x02 00000515: EXP 00000516: SUB 00000517: AND 00000518: PUSH1 0x00 0000051a: SWAP1 0000051b: DUP2 0000051c: MSTORE 0000051d: PUSH1 0x09 0000051f: PUSH1 0x20 00000521: MSTORE 00000522: PUSH1 0x40 00000524: DUP2 00000525: KECCAK256 00000526: SLOAD 00000527: DUP3 00000528: SWAP1 00000529: LT 0000052a: ISZERO 0000052b: PUSH2 0x0938 0000052e: JUMPI 0000052f: PUSH2 0x0002 00000532: JUMP 00000533: JUMPDEST 00000534: PUSH2 0x0106 00000537: PUSH1 0x04 00000539: CALLDATALOAD 0000053a: PUSH1 0x00 0000053c: SLOAD 0000053d: CALLER 0000053e: PUSH1 0x01 00000540: PUSH1 0xa0 00000542: PUSH1 0x02 00000544: EXP 00000545: SUB 00000546: SWAP1 00000547: DUP2 00000548: AND 00000549: SWAP2 0000054a: AND 0000054b: EQ 0000054c: PUSH2 0x0633 0000054f: JUMPI 00000550: PUSH2 0x0002 00000553: JUMP 00000554: JUMPDEST 00000555: PUSH2 0x0616 00000558: PUSH1 0x05 0000055a: SLOAD 0000055b: PUSH1 0x01 0000055d: PUSH1 0xa0 0000055f: PUSH1 0x02 00000561: EXP 00000562: SUB 00000563: AND 00000564: DUP2 00000565: JUMP 00000566: JUMPDEST 00000567: PUSH1 0x40 00000569: MLOAD 0000056a: DUP1 0000056b: DUP1 0000056c: PUSH1 0x20 0000056e: ADD 0000056f: DUP3 00000570: DUP2 00000571: SUB 00000572: DUP3 00000573: MSTORE 00000574: DUP4 00000575: DUP2 00000576: DUP2 00000577: MLOAD 00000578: DUP2 00000579: MSTORE 0000057a: PUSH1 0x20 0000057c: ADD 0000057d: SWAP2 0000057e: POP 0000057f: DUP1 00000580: MLOAD 00000581: SWAP1 00000582: PUSH1 0x20 00000584: ADD 00000585: SWAP1 00000586: DUP1 00000587: DUP4 00000588: DUP4 00000589: DUP3 0000058a: SWAP1 0000058b: PUSH1 0x00 0000058d: PUSH1 0x04 0000058f: PUSH1 0x20 00000591: DUP5 00000592: PUSH1 0x1f 00000594: ADD 00000595: DIV 00000596: PUSH1 0x0f 00000598: MUL 00000599: PUSH1 0x03 0000059b: ADD 0000059c: CALL 0000059d: POP 0000059e: SWAP1 0000059f: POP 000005a0: SWAP1 000005a1: DUP2 000005a2: ADD 000005a3: SWAP1 000005a4: PUSH1 0x1f 000005a6: AND 000005a7: DUP1 000005a8: ISZERO 000005a9: PUSH2 0x05c6 000005ac: JUMPI 000005ad: DUP1 000005ae: DUP3 000005af: SUB 000005b0: DUP1 000005b1: MLOAD 000005b2: PUSH1 0x01 000005b4: DUP4 000005b5: PUSH1 0x20 000005b7: SUB 000005b8: PUSH2 0x0100 000005bb: EXP 000005bc: SUB 000005bd: NOT 000005be: AND 000005bf: DUP2 000005c0: MSTORE 000005c1: PUSH1 0x20 000005c3: ADD 000005c4: SWAP2 000005c5: POP 000005c6: JUMPDEST 000005c7: POP 000005c8: SWAP3 000005c9: POP 000005ca: POP 000005cb: POP 000005cc: PUSH1 0x40 000005ce: MLOAD 000005cf: DUP1 000005d0: SWAP2 000005d1: SUB 000005d2: SWAP1 000005d3: RETURN 000005d4: JUMPDEST 000005d5: PUSH1 0x40 000005d7: DUP1 000005d8: MLOAD 000005d9: SWAP2 000005da: DUP3 000005db: MSTORE 000005dc: MLOAD 000005dd: SWAP1 000005de: DUP2 000005df: SWAP1 000005e0: SUB 000005e1: PUSH1 0x20 000005e3: ADD 000005e4: SWAP1 000005e5: RETURN 000005e6: JUMPDEST 000005e7: PUSH1 0x40 000005e9: DUP1 000005ea: MLOAD 000005eb: PUSH4 0xffffffff 000005f0: SWAP3 000005f1: SWAP1 000005f2: SWAP3 000005f3: AND 000005f4: DUP3 000005f5: MSTORE 000005f6: MLOAD 000005f7: SWAP1 000005f8: DUP2 000005f9: SWAP1 000005fa: SUB 000005fb: PUSH1 0x20 000005fd: ADD 000005fe: SWAP1 000005ff: RETURN 00000600: JUMPDEST 00000601: PUSH1 0x40 00000603: DUP1 00000604: MLOAD 00000605: PUSH1 0xff 00000607: SWAP1 00000608: SWAP3 00000609: AND 0000060a: DUP3 0000060b: MSTORE 0000060c: MLOAD 0000060d: SWAP1 0000060e: DUP2 0000060f: SWAP1 00000610: SUB 00000611: PUSH1 0x20 00000613: ADD 00000614: SWAP1 00000615: RETURN 00000616: JUMPDEST 00000617: PUSH1 0x40 00000619: DUP1 0000061a: MLOAD 0000061b: PUSH1 0x01 0000061d: PUSH1 0xa0 0000061f: PUSH1 0x02 00000621: EXP 00000622: SUB 00000623: SWAP3 00000624: SWAP1 00000625: SWAP3 00000626: AND 00000627: DUP3 00000628: MSTORE 00000629: MLOAD 0000062a: SWAP1 0000062b: DUP2 0000062c: SWAP1 0000062d: SUB 0000062e: PUSH1 0x20 00000630: ADD 00000631: SWAP1 00000632: RETURN 00000633: JUMPDEST 00000634: PUSH1 0x00 00000636: DUP1 00000637: SLOAD 00000638: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000064d: NOT 0000064e: AND 0000064f: DUP3 00000650: OR 00000651: SWAP1 00000652: SSTORE 00000653: POP 00000654: JUMP 00000655: JUMPDEST 00000656: DUP3 00000657: ADD 00000658: SWAP2 00000659: SWAP1 0000065a: PUSH1 0x00 0000065c: MSTORE 0000065d: PUSH1 0x20 0000065f: PUSH1 0x00 00000661: KECCAK256 00000662: SWAP1 00000663: JUMPDEST 00000664: DUP2 00000665: SLOAD 00000666: DUP2 00000667: MSTORE 00000668: SWAP1 00000669: PUSH1 0x01 0000066b: ADD 0000066c: SWAP1 0000066d: PUSH1 0x20 0000066f: ADD 00000670: DUP1 00000671: DUP4 00000672: GT 00000673: PUSH2 0x0663 00000676: JUMPI 00000677: DUP3 00000678: SWAP1 00000679: SUB 0000067a: PUSH1 0x1f 0000067c: AND 0000067d: DUP3 0000067e: ADD 0000067f: SWAP2 00000680: JUMPDEST 00000681: POP 00000682: POP 00000683: POP 00000684: POP 00000685: POP 00000686: DUP2 00000687: JUMP 00000688: JUMPDEST 00000689: POP 0000068a: SWAP4 0000068b: SWAP3 0000068c: POP 0000068d: POP 0000068e: POP 0000068f: JUMP 00000690: JUMPDEST 00000691: PUSH1 0x01 00000693: PUSH1 0xa0 00000695: PUSH1 0x02 00000697: EXP 00000698: SUB 00000699: DUP3 0000069a: AND 0000069b: PUSH1 0x00 0000069d: SWAP1 0000069e: DUP2 0000069f: MSTORE 000006a0: PUSH1 0x09 000006a2: PUSH1 0x20 000006a4: MSTORE 000006a5: PUSH1 0x40 000006a7: SWAP1 000006a8: KECCAK256 000006a9: SLOAD 000006aa: DUP2 000006ab: DUP2 000006ac: ADD 000006ad: LT 000006ae: ISZERO 000006af: PUSH2 0x06b7 000006b2: JUMPI 000006b3: PUSH2 0x0002 000006b6: JUMP 000006b7: JUMPDEST 000006b8: CALLER 000006b9: PUSH1 0x01 000006bb: PUSH1 0xa0 000006bd: PUSH1 0x02 000006bf: EXP 000006c0: SUB 000006c1: SWAP1 000006c2: DUP2 000006c3: AND 000006c4: PUSH1 0x00 000006c6: DUP2 000006c7: DUP2 000006c8: MSTORE 000006c9: PUSH1 0x09 000006cb: PUSH1 0x20 000006cd: SWAP1 000006ce: DUP2 000006cf: MSTORE 000006d0: PUSH1 0x40 000006d2: DUP1 000006d3: DUP4 000006d4: KECCAK256 000006d5: DUP1 000006d6: SLOAD 000006d7: DUP8 000006d8: SWAP1 000006d9: SUB 000006da: SWAP1 000006db: SSTORE 000006dc: SWAP4 000006dd: DUP7 000006de: AND 000006df: DUP1 000006e0: DUP4 000006e1: MSTORE 000006e2: SWAP2 000006e3: DUP5 000006e4: SWAP1 000006e5: KECCAK256 000006e6: DUP1 000006e7: SLOAD 000006e8: DUP7 000006e9: ADD 000006ea: SWAP1 000006eb: SSTORE 000006ec: DUP4 000006ed: MLOAD 000006ee: DUP6 000006ef: DUP2 000006f0: MSTORE 000006f1: SWAP4 000006f2: MLOAD 000006f3: SWAP2 000006f4: SWAP4 000006f5: PUSH1 0x00 000006f7: DUP1 000006f8: MLOAD 000006f9: PUSH1 0x20 000006fb: PUSH2 0x09b6 000006fe: DUP4 000006ff: CODECOPY 00000700: DUP2 00000701: MLOAD 00000702: SWAP2 00000703: MSTORE 00000704: SWAP3 00000705: SWAP1 00000706: DUP2 00000707: SWAP1 00000708: SUB 00000709: SWAP1 0000070a: SWAP2 0000070b: ADD 0000070c: SWAP1 0000070d: LOG3 0000070e: POP 0000070f: POP 00000710: JUMP 00000711: JUMPDEST 00000712: PUSH1 0x01 00000714: PUSH1 0xa0 00000716: PUSH1 0x02 00000718: EXP 00000719: SUB 0000071a: DUP4 0000071b: AND 0000071c: PUSH1 0x00 0000071e: SWAP1 0000071f: DUP2 00000720: MSTORE 00000721: PUSH1 0x09 00000723: PUSH1 0x20 00000725: MSTORE 00000726: PUSH1 0x40 00000728: SWAP1 00000729: KECCAK256 0000072a: SLOAD 0000072b: DUP1 0000072c: DUP4 0000072d: ADD 0000072e: LT 0000072f: ISZERO 00000730: PUSH2 0x0738 00000733: JUMPI 00000734: PUSH2 0x0002 00000737: JUMP 00000738: JUMPDEST 00000739: PUSH1 0x01 0000073b: PUSH1 0xa0 0000073d: PUSH1 0x02 0000073f: EXP 00000740: SUB 00000741: DUP5 00000742: DUP2 00000743: AND 00000744: PUSH1 0x00 00000746: DUP2 00000747: DUP2 00000748: MSTORE 00000749: PUSH1 0x0a 0000074b: PUSH1 0x20 0000074d: SWAP1 0000074e: DUP2 0000074f: MSTORE 00000750: PUSH1 0x40 00000752: DUP1 00000753: DUP4 00000754: KECCAK256 00000755: CALLER 00000756: SWAP1 00000757: SWAP6 00000758: AND 00000759: DUP1 0000075a: DUP5 0000075b: MSTORE 0000075c: SWAP5 0000075d: DUP3 0000075e: MSTORE 0000075f: DUP1 00000760: DUP4 00000761: KECCAK256 00000762: SLOAD 00000763: SWAP4 00000764: DUP4 00000765: MSTORE 00000766: PUSH1 0x0b 00000768: DUP3 00000769: MSTORE 0000076a: DUP1 0000076b: DUP4 0000076c: KECCAK256 0000076d: SWAP5 0000076e: DUP4 0000076f: MSTORE 00000770: SWAP4 00000771: SWAP1 00000772: MSTORE 00000773: SWAP2 00000774: SWAP1 00000775: SWAP2 00000776: KECCAK256 00000777: SLOAD 00000778: DUP4 00000779: ADD 0000077a: GT 0000077b: ISZERO 0000077c: PUSH2 0x0784 0000077f: JUMPI 00000780: PUSH2 0x0002 00000783: JUMP 00000784: JUMPDEST 00000785: PUSH1 0x01 00000787: PUSH1 0xa0 00000789: PUSH1 0x02 0000078b: EXP 0000078c: SUB 0000078d: DUP5 0000078e: DUP2 0000078f: AND 00000790: PUSH1 0x00 00000792: DUP2 00000793: DUP2 00000794: MSTORE 00000795: PUSH1 0x09 00000797: PUSH1 0x20 00000799: SWAP1 0000079a: DUP2 0000079b: MSTORE 0000079c: PUSH1 0x40 0000079e: DUP1 0000079f: DUP4 000007a0: KECCAK256 000007a1: DUP1 000007a2: SLOAD 000007a3: DUP9 000007a4: SWAP1 000007a5: SUB 000007a6: SWAP1 000007a7: SSTORE 000007a8: DUP8 000007a9: DUP6 000007aa: AND 000007ab: DUP1 000007ac: DUP5 000007ad: MSTORE 000007ae: DUP2 000007af: DUP5 000007b0: KECCAK256 000007b1: DUP1 000007b2: SLOAD 000007b3: DUP10 000007b4: ADD 000007b5: SWAP1 000007b6: SSTORE 000007b7: DUP5 000007b8: DUP5 000007b9: MSTORE 000007ba: PUSH1 0x0b 000007bc: DUP4 000007bd: MSTORE 000007be: DUP2 000007bf: DUP5 000007c0: KECCAK256 000007c1: CALLER 000007c2: SWAP1 000007c3: SWAP7 000007c4: AND 000007c5: DUP5 000007c6: MSTORE 000007c7: SWAP5 000007c8: DUP3 000007c9: MSTORE 000007ca: SWAP2 000007cb: DUP3 000007cc: SWAP1 000007cd: KECCAK256 000007ce: DUP1 000007cf: SLOAD 000007d0: DUP8 000007d1: ADD 000007d2: SWAP1 000007d3: SSTORE 000007d4: DUP2 000007d5: MLOAD 000007d6: DUP7 000007d7: DUP2 000007d8: MSTORE 000007d9: SWAP2 000007da: MLOAD 000007db: PUSH1 0x00 000007dd: DUP1 000007de: MLOAD 000007df: PUSH1 0x20 000007e1: PUSH2 0x09b6 000007e4: DUP4 000007e5: CODECOPY 000007e6: DUP2 000007e7: MLOAD 000007e8: SWAP2 000007e9: MSTORE 000007ea: SWAP3 000007eb: DUP2 000007ec: SWAP1 000007ed: SUB 000007ee: SWAP1 000007ef: SWAP2 000007f0: ADD 000007f1: SWAP1 000007f2: LOG3 000007f3: POP 000007f4: PUSH1 0x01 000007f6: SWAP4 000007f7: SWAP3 000007f8: POP 000007f9: POP 000007fa: POP 000007fb: JUMP 000007fc: JUMPDEST 000007fd: PUSH1 0x06 000007ff: SSTORE 00000800: JUMP 00000801: JUMPDEST 00000802: PUSH1 0x05 00000804: DUP1 00000805: SLOAD 00000806: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000081b: NOT 0000081c: AND 0000081d: DUP3 0000081e: OR 0000081f: SWAP1 00000820: SSTORE 00000821: POP 00000822: JUMP 00000823: JUMPDEST 00000824: PUSH1 0x07 00000826: DUP1 00000827: SLOAD 00000828: PUSH4 0xffffffff 0000082d: NOT 0000082e: AND 0000082f: DUP3 00000830: OR 00000831: SWAP1 00000832: SSTORE 00000833: POP 00000834: JUMP 00000835: JUMPDEST 00000836: PUSH1 0x40 00000838: DUP1 00000839: MLOAD 0000083a: NUMBER 0000083b: DUP2 0000083c: MSTORE 0000083d: TIMESTAMP 0000083e: PUSH1 0x20 00000840: DUP3 00000841: ADD 00000842: MSTORE 00000843: DUP1 00000844: DUP3 00000845: ADD 00000846: DUP7 00000847: SWAP1 00000848: MSTORE 00000849: SWAP1 0000084a: MLOAD 0000084b: SWAP1 0000084c: DUP2 0000084d: SWAP1 0000084e: SUB 0000084f: PUSH1 0x60 00000851: ADD 00000852: SWAP1 00000853: KECCAK256 00000854: PUSH2 0x085e 00000857: SWAP1 00000858: PUSH1 0x0a 0000085a: PUSH2 0x01e7 0000085d: JUMP 0000085e: JUMPDEST 0000085f: PUSH1 0x07 00000861: SLOAD 00000862: SWAP1 00000863: SWAP2 00000864: POP 00000865: PUSH4 0xffffffff 0000086a: AND 0000086b: DUP2 0000086c: LT 0000086d: PUSH2 0x0875 00000870: JUMPI 00000871: PUSH1 0x01 00000873: SWAP3 00000874: POP 00000875: JUMPDEST 00000876: PUSH1 0x07 00000878: SLOAD 00000879: PUSH1 0x00 0000087b: NOT 0000087c: DUP6 0000087d: ADD 0000087e: SWAP3 0000087f: POP 00000880: PUSH4 0xffffffff 00000885: AND 00000886: DUP2 00000887: LT 00000888: ISZERO 00000889: PUSH2 0x0894 0000088c: JUMPI 0000088d: PUSH2 0x4e1e 00000890: DUP5 00000891: MUL 00000892: SWAP3 00000893: POP 00000894: JUMPDEST 00000895: CALLER 00000896: PUSH1 0x01 00000898: PUSH1 0xa0 0000089a: PUSH1 0x02 0000089c: EXP 0000089d: SUB 0000089e: SWAP1 0000089f: DUP2 000008a0: AND 000008a1: PUSH1 0x00 000008a3: DUP2 000008a4: DUP2 000008a5: MSTORE 000008a6: PUSH1 0x09 000008a8: PUSH1 0x20 000008aa: SWAP1 000008ab: DUP2 000008ac: MSTORE 000008ad: PUSH1 0x40 000008af: DUP1 000008b0: DUP4 000008b1: KECCAK256 000008b2: DUP1 000008b3: SLOAD 000008b4: DUP10 000008b5: ADD 000008b6: SWAP1 000008b7: SSTORE 000008b8: PUSH1 0x05 000008ba: SLOAD 000008bb: DUP6 000008bc: AND 000008bd: DUP4 000008be: MSTORE 000008bf: DUP1 000008c0: DUP4 000008c1: KECCAK256 000008c2: DUP1 000008c3: SLOAD 000008c4: DUP9 000008c5: ADD 000008c6: SWAP1 000008c7: SSTORE 000008c8: ADDRESS 000008c9: SWAP1 000008ca: SWAP5 000008cb: AND 000008cc: DUP1 000008cd: DUP4 000008ce: MSTORE 000008cf: SWAP2 000008d0: DUP5 000008d1: SWAP1 000008d2: KECCAK256 000008d3: DUP1 000008d4: SLOAD 000008d5: DUP9 000008d6: DUP9 000008d7: ADD 000008d8: SWAP1 000008d9: SUB 000008da: SWAP1 000008db: SSTORE 000008dc: DUP4 000008dd: MLOAD 000008de: DUP8 000008df: DUP2 000008e0: MSTORE 000008e1: SWAP4 000008e2: MLOAD 000008e3: SWAP3 000008e4: SWAP4 000008e5: SWAP2 000008e6: SWAP3 000008e7: PUSH1 0x00 000008e9: DUP1 000008ea: MLOAD 000008eb: PUSH1 0x20 000008ed: PUSH2 0x09b6 000008f0: DUP4 000008f1: CODECOPY 000008f2: DUP2 000008f3: MLOAD 000008f4: SWAP2 000008f5: MSTORE 000008f6: SWAP3 000008f7: DUP2 000008f8: SWAP1 000008f9: SUB 000008fa: SWAP1 000008fb: SWAP2 000008fc: ADD 000008fd: SWAP1 000008fe: LOG3 000008ff: PUSH1 0x05 00000901: SLOAD 00000902: PUSH1 0x40 00000904: DUP1 00000905: MLOAD 00000906: DUP5 00000907: DUP2 00000908: MSTORE 00000909: SWAP1 0000090a: MLOAD 0000090b: PUSH1 0x01 0000090d: PUSH1 0xa0 0000090f: PUSH1 0x02 00000911: EXP 00000912: SUB 00000913: SWAP3 00000914: DUP4 00000915: AND 00000916: SWAP3 00000917: ADDRESS 00000918: AND 00000919: SWAP2 0000091a: PUSH1 0x00 0000091c: DUP1 0000091d: MLOAD 0000091e: PUSH1 0x20 00000920: PUSH2 0x09b6 00000923: DUP4 00000924: CODECOPY 00000925: DUP2 00000926: MLOAD 00000927: SWAP2 00000928: MSTORE 00000929: SWAP2 0000092a: SWAP1 0000092b: DUP2 0000092c: SWAP1 0000092d: SUB 0000092e: PUSH1 0x20 00000930: ADD 00000931: SWAP1 00000932: LOG3 00000933: POP 00000934: POP 00000935: POP 00000936: SWAP1 00000937: JUMP 00000938: JUMPDEST 00000939: POP 0000093a: ADDRESS 0000093b: PUSH1 0x01 0000093d: PUSH1 0xa0 0000093f: PUSH1 0x02 00000941: EXP 00000942: SUB 00000943: SWAP1 00000944: DUP2 00000945: AND 00000946: PUSH1 0x00 00000948: SWAP1 00000949: DUP2 0000094a: MSTORE 0000094b: PUSH1 0x09 0000094d: PUSH1 0x20 0000094f: MSTORE 00000950: PUSH1 0x40 00000952: DUP1 00000953: DUP3 00000954: KECCAK256 00000955: DUP1 00000956: SLOAD 00000957: DUP6 00000958: ADD 00000959: SWAP1 0000095a: SSTORE 0000095b: CALLER 0000095c: SWAP1 0000095d: SWAP3 0000095e: AND 0000095f: DUP1 00000960: DUP3 00000961: MSTORE 00000962: DUP3 00000963: DUP3 00000964: KECCAK256 00000965: DUP1 00000966: SLOAD 00000967: DUP6 00000968: SWAP1 00000969: SUB 0000096a: SWAP1 0000096b: SSTORE 0000096c: SWAP2 0000096d: MLOAD 0000096e: PUSH1 0x08 00000970: SLOAD 00000971: DUP5 00000972: MUL 00000973: SWAP3 00000974: SWAP2 00000975: SWAP1 00000976: DUP4 00000977: SWAP1 00000978: DUP3 00000979: DUP2 0000097a: DUP2 0000097b: DUP2 0000097c: DUP6 0000097d: DUP9 0000097e: DUP4 0000097f: CALL 00000980: POP 00000981: POP 00000982: PUSH1 0x40 00000984: DUP1 00000985: MLOAD 00000986: DUP7 00000987: DUP2 00000988: MSTORE 00000989: SWAP1 0000098a: MLOAD 0000098b: ADDRESS 0000098c: PUSH1 0x01 0000098e: PUSH1 0xa0 00000990: PUSH1 0x02 00000992: EXP 00000993: SUB 00000994: AND 00000995: SWAP5 00000996: SWAP4 00000997: POP 00000998: PUSH1 0x00 0000099a: DUP1 0000099b: MLOAD 0000099c: PUSH1 0x20 0000099e: PUSH2 0x09b6 000009a1: DUP4 000009a2: CODECOPY 000009a3: DUP2 000009a4: MLOAD 000009a5: SWAP2 000009a6: MSTORE 000009a7: SWAP3 000009a8: POP 000009a9: SWAP1 000009aa: DUP2 000009ab: SWAP1 000009ac: SUB 000009ad: PUSH1 0x20 000009af: ADD 000009b0: SWAP1 000009b1: LOG3 000009b2: SWAP2 000009b3: SWAP1 000009b4: POP 000009b5: JUMP 000009b6: UNKNOWN(0xDD) 000009b7: CALLCODE 000009b8: MSTORE 000009b9: UNKNOWN(0xAD) 000009ba: SHL 000009bb: UNKNOWN(0xE2) 000009bc: UNKNOWN(0xC8) 000009bd: SWAP12 000009be: PUSH10 0xc2b068fc378daa952ba7 000009c9: CALL 000009ca: PUSH4 0xc4a11628 000009cf: CREATE2 000009d0: GAS 000009d1: UNKNOWN(0x4D) 000009d2: CREATE2 000009d3: UNKNOWN(0x23) 000009d4: UNKNOWN(0xB3) 000009d5: UNKNOWN(0xEF)
Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment.
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | ETH value transfer possible | 55 | yes | yes |
viewtrace_id: 0x3ce6bbfd7fb102b7a4d9114203725380a4f698b34d8c422656d1a316303b00be
call_targets:
0x0000000000000000000000000000000000000004, 0xf5540ea5638cf4bda40e6e34ebc005095926aafc
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x3ce6bbfd7fb102b7a4d9114203725380a4f698b34d8c422656d1a316303b00be",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0xf5540ea5638cf4bda40e6e34ebc005095926aafc"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1fe9eabc",
"selector": "0x1fe9eabc",
"calldata_variants": [
"0x1fe9eabc",
"0x1fe9eabc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x233de126",
"selector": "0x233de126",
"calldata_variants": [
"0x233de126",
"0x233de1260000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41fa4876",
"selector": "0x41fa4876",
"calldata_variants": [
"0x41fa4876",
"0x41fa48760000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x70a08231",
"selector": "0x70a08231",
"calldata_variants": [
"0x70a08231",
"0x70a082310000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1126,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1194,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1436,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 6,
"guards_detected": []
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | yes | yes |
viewtrace_id: 0x3ce6bbfd7fb102b7a4d9114203725380a4f698b34d8c422656d1a316303b00be
call_targets:
0x0000000000000000000000000000000000000004, 0xf5540ea5638cf4bda40e6e34ebc005095926aafc
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x3ce6bbfd7fb102b7a4d9114203725380a4f698b34d8c422656d1a316303b00be",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0xf5540ea5638cf4bda40e6e34ebc005095926aafc"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1fe9eabc",
"selector": "0x1fe9eabc",
"calldata_variants": [
"0x1fe9eabc",
"0x1fe9eabc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x233de126",
"selector": "0x233de126",
"calldata_variants": [
"0x233de126",
"0x233de1260000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41fa4876",
"selector": "0x41fa4876",
"calldata_variants": [
"0x41fa4876",
"0x41fa48760000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x70a08231",
"selector": "0x70a08231",
"calldata_variants": [
"0x70a08231",
"0x70a082310000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1126,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1194,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1436,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 6,
"guards_detected": [],
"untrusted_call_count": 6
}
|
| medium | other | detector | CREATE/CREATE2 reachable | 45 | no | no |
viewtrace_id: 0x452663a790b9804fcae803623814571567435489435a205594c196d7d9371b34
validation_json{
"sink": "CREATE",
"errors": 0,
"status": "unknown",
"attempts": 32,
"trace_id": "0x452663a790b9804fcae803623814571567435489435a205594c196d7d9371b34",
"confirmed": false,
"trace_mode": "structLogs",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1fe9eabc",
"selector": "0x1fe9eabc",
"calldata_variants": [
"0x1fe9eabc",
"0x1fe9eabc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x233de126",
"selector": "0x233de126",
"calldata_variants": [
"0x233de126",
"0x233de1260000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41fa4876",
"selector": "0x41fa4876",
"calldata_variants": [
"0x41fa4876",
"0x41fa48760000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x70a08231",
"selector": "0x70a08231",
"calldata_variants": [
"0x70a08231",
"0x70a082310000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"create_count": 0,
"create2_count": 2
}
|
| medium | other | codex | `sell(uint256)` updates balances before a low-level payout CALL whose success is ignored | 75 | no | — |
viewevidence_json{
"evidence": "Selector `0xe4849b32` matches `sell(uint256)`. After the balance check, execution jumps into the sell handler at pc `0x0938`. That path performs storage writes before the external interaction (`SSTORE` around pc `0x095a` and `0x096b`), computes the payout from `slot8 * amount` at pc `0x0970`-`0x0972`, then executes `CALL` at pc `0x097f`. The very next instruction is `POP` at pc `0x0980`, with no conditional branch or revert on failure. The exact CALL target is stack-computed and not fully recoverable from bytecode alone, but this is the payout leg of `sell(uint256)`.",
"locations": [
"selector:0xe4849b32",
"pc:0x0938",
"pc:0x095a",
"pc:0x096b",
"pc:0x097f",
"pc:0x0980"
],
"recommendation": "Make the payout leg revert on failure: capture the CALL success flag and `require(success)` before keeping the storage writes, or switch to a pull-payment pattern. If external interaction must remain inline, keep checks-effects-interactions and explicitly handle the failure case.",
"exploit_scenario": "A user calls `sell(uint256)` from an address or contract that causes the payout CALL to fail, or the contract simply lacks funds for the computed payout. The function still updates storage to move/burn the seller's tokens, then discards the CALL result and returns normally. The seller can lose tokens without receiving the expected proceeds, and the contract's economic state diverges from the intended sell-for-value invariant."
}
|
| medium | oracle | codex | `buy()` uses miner/validator-influenced block data as entropy for value-bearing outcomes | 75 | no | — |
viewevidence_json{
"evidence": "Selector `0xa6f2ae3a` matches `buy()`. In the buy path, pc `0x083a` loads `NUMBER` and pc `0x083d` loads `TIMESTAMP`; the code then hashes these values and jumps into the helper at pc `0x01e7`, which invokes `BLOCKHASH` at pc `0x0201` and reduces the result modulo 10 at pc `0x0216`-`0x0219`. The resulting value is compared against the owner-settable threshold in `slot7` at pc `0x085f`-`0x086d` and again around pc `0x0876`-`0x0894`, and that branch feeds subsequent balance updates. This is classic weak entropy from block data rather than an unbiased randomness source.",
"locations": [
"selector:0xa6f2ae3a",
"pc:0x083a",
"pc:0x083d",
"pc:0x01e7",
"pc:0x0201",
"pc:0x0219",
"pc:0x085f",
"pc:0x0894"
],
"recommendation": "Do not derive value-bearing randomness from block variables alone. Use a commit-reveal flow, an external VRF, or another scheme where the party deciding inclusion cannot cheaply bias the result.",
"exploit_scenario": "A validator, builder, or sophisticated searcher can bias or selectively include `buy()` transactions when the derived random branch is favorable. Because the outcome depends on `block.number`, `block.timestamp`, historical `BLOCKHASH`, and `msg.value`, the randomness is not unpredictable for an adversary controlling inclusion or timestamp within normal protocol bounds. If this branch controls token rewards or jackpot-like payouts, the game can be systematically biased."
}
|