019b3836-3fab-72b2-b454-064ea28d2ebf
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 |
|---|---|---|---|---|
| 5087 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 5088 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 48252 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 48253 | capability.graph | complete | 1 / 3 | 1 week ago |
| 48254 | detector.run | complete | 1 / 3 | 1 week ago |
| 48255 | validation.fork | complete | 1 / 3 | 1 week ago |
| 113288 | report.consolidate | complete | 1 / 6 | 1 week ago |
No slither job recorded yet.
{"no_findings":false,"summary":"Runtime bytecode matches an Oraclize/Provable-style oracle client with a public `update()` path, a `__callback(bytes32,string,bytes)` entrypoint, and a privileged `kill()` path. Based on runtime-only evidence, the main issues are missing callback/query correlation, public spending of contract ETH on oracle calls, and a retained owner kill switch. Selector names are inferred best-effort from bytecode/4byte matches.","findings":[{"severity":"medium","category":"oracle","title":"Oracle callback accepts any authorized sender response without validating a pending query id","exploit_scenario":"An attacker can trigger multiple outstanding oracle updates through the public query path. Because the callback appears to authenticate only the oracle sender and not the `bytes32` request id, a stale or later oracle reply can overwrite the currently stored result in slot 3. If the oracle/resolver side is ever misconfigured or compromised, arbitrary callback data would be accepted as long as it comes from the resolved oracle address.","recommendation":"Persist the returned query id from the query call and require `_queryId` to match an expected pending id before accepting callback data. If multiple requests are allowed, track them explicitly and clear them after use.","evidence":"Selector `0x38bbfa50` matches `__callback(bytes32,string,bytes)`. The callback path decodes three arguments, then at `pc:0x036c` checks only that `CALLER` matches the resolved oracle address before entering the string-storage routine at `pc:0x038b`. The public oracle-query path at `selector:0xa2e62045` performs `query(uint256,string,string)` via selector `0xadf59f99` at `pc:0x0703`, but the returned request id is not written to storage; storage writes are limited to slots 0/1/3 and dynamic string data.","locations":["selector:0x38bbfa50","selector:0xa2e62045","pc:0x036c","pc:0x0703"]},{"severity":"medium","category":"access_control","title":"Public `update()` path can spend ETH from contract balance on oracle queries","exploit_scenario":"If this contract holds ETH to subsidize oracle usage, any external account can call the public update function and force the contract to pay oracle fees. Repeated calls can drain the balance into oracle payments or trigger unwanted offchain queries, even if the caller is not otherwise trusted.","recommendation":"Restrict the query-triggering function to an authorized operator, or require the caller to supply and account for the exact oracle fee so existing contract balance cannot be consumed by arbitrary users.","evidence":"Selector `0xa2e62045` resolves to a public `update()` entrypoint. Its body builds a fixed Kraken URL query, calls the oracle pricing path (`getPrice(...)`) around `pc:0x065c`, and then performs the actual oracle query call at `pc:0x0703`. The artifact reports no auth guards for this function, and detector validation confirmed reachable `CALL` sites with possible nonzero ETH value and varying external targets. There is no visible `CALLVALUE`-based accounting or owner check in runtime bytecode.","locations":["selector:0xa2e62045","pc:0x065c","pc:0x0703"]},{"severity":"low","category":"auth","title":"Privileged kill switch can sweep balance via `SELFDESTRUCT`","exploit_scenario":"Whoever controls the address stored in slot 2 can invoke the kill function and force a terminal balance sweep to themselves. Even if this is intended admin functionality, compromise or abuse of that key breaks trust assumptions for funds held by the contract.","recommendation":"Remove the kill path if it is unnecessary, or gate it behind a multisig/timelock and document the administrative trust model clearly.","evidence":"Selector `0x41c0e1b5` matches `kill()`. At `pc:0x0155` the function reads slot 2, masks it to 160 bits, and compares it to `CALLER`. If equal, execution reaches `SELFDESTRUCT` at `pc:0x0174`, sending funds to the caller.","locations":["selector:0x41c0e1b5","pc:0x0155","pc:0x0174"]}]}
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-4oykfrvc
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5c24-ec5d-7da3-879e-2b3b96476531
--------
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 'rg --files' in /tmp/codex-4oykfrvc
exec
/bin/bash -lc pwd in /tmp/codex-4oykfrvc
succeeded in 0ms:
codex-output-schema.json
BYTECODE_BUNDLE.json
succeeded in 0ms:
/tmp/codex-4oykfrvc
exec
/bin/bash -lc "sed -n '1,260p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
{
"analysis_artifact": {
"address": "0xcad333e2f7ec4058aa5ba825a5de8af4139490c9",
"artifact_hash": "0x8cf0c38f88b751b08b36e028c964f71544e1a1a9425672f5c2602b18bf20ce5a",
"artifact_json": {
"auth": {
"guards": []
},
"basic_blocks": [
{
"end_pc": 24,
"hash": "0xaba4830113ff2124e4b6a56fb4cfc8c5d6f2466d3699d3483873d02fa6ee240c",
"opcodes": [
"PUSH1",
"PUSH1",
"MSTORE",
"PUSH1",
"PUSH1",
"EXP",
"PUSH1",
"CALLDATALOAD",
"DIV",
"PUSH4",
"OP_81",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 0
},
{
"end_pc": 35,
"hash": "0x99b2a2927468c03598ed9e86e395f81bbb1de1e50b894115719c77f42c8db86e",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 25
},
{
"end_pc": 46,
"hash": "0x7ab05ed8a8217d9221b8c6c23b1a1e0ea323cf904dd426a553fb69955c0fd8a7",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 36
},
{
"end_pc": 57,
"hash": "0x9e9c917038db261021607bac81bffd81dba62db76dff4cdb53466c66f46088c0",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 47
},
{
"end_pc": 59,
"hash": "0x7c03713fe289920bcbc645467e3c26e308b928c57f7f20b00dcee82e881fecf3",
"opcodes": [
"JUMPDEST",
"STOP"
],
"start_pc": 58
},
{
"end_pc": 270,
"hash": "0xac3f2029b8f76aef3e42fcd68633851e454b9703183ad77faf6ebb18516f2bbe",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_80",
"MLOAD",
"PUSH1",
"PUSH1",
"OP_80",
"CALLDATALOAD",
"PUSH1",
"OP_81",
"OP_81",
"ADD",
"CALLDATALOAD",
"PUSH1",
"OP_81",
"ADD",
"OP_85",
"OP_90",
"DIV",
"OP_85",
"MUL",
"OP_86",
"ADD",
"OP_85",
"ADD",
"OP_90",
"OP_96",
"MSTORE",
"OP_85",
"OP_85",
"MSTORE",
"PUSH2",
"OP_95",
"OP_81",
"CALLDATALOAD",
"OP_95",
"OP_91",
"OP_94",
"PUSH1",
"OP_94",
"OP_92",
"OP_93",
"OP_90",
"OP_92",
"ADD",
"OP_91",
"OP_81",
"OP_90",
"OP_84",
"ADD",
"OP_83",
"OP_82",
"OP_80",
"OP_82",
"OP_84",
"CALLDATACOPY",
"POP",
"POP",
"PUSH1",
"OP_80",
"MLOAD",
"PUSH1",
"OP_97",
"CALLDATALOAD",
"OP_80",
"OP_8A",
"ADD",
"CALLDATALOAD",
"PUSH1",
"OP_81",
"ADD",
"OP_8A",
"OP_90",
"DIV",
"OP_8A",
"MUL",
"OP_83",
"ADD",
"OP_8A",
"ADD",
"OP_90",
"OP_93",
"MSTORE",
"OP_82",
"OP_82",
"MSTORE",
"OP_96",
"OP_98",
"OP_97",
"PUSH1",
"OP_97",
"OP_91",
"OP_96",
"POP",
"PUSH1",
"OP_91",
"OP_90",
"OP_91",
"ADD",
"OP_94",
"POP",
"OP_90",
"OP_92",
"POP",
"OP_82",
"OP_91",
"POP",
"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",
"PUSH2",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"OP_80",
"MLOAD",
"PUSH1",
"PUSH1",
"EXP",
"PUSH4",
"MUL",
"OP_81",
"MSTORE",
"OP_90",
"MLOAD",
"OP_83",
"OP_92",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_91",
"PUSH4",
"OP_91",
"PUSH1",
"OP_82",
"OP_81",
"ADD",
"OP_92",
"PUSH1",
"OP_92",
"OP_91",
"OP_90",
"OP_82",
"OP_90",
"SUB",
"ADD",
"OP_81",
"OP_87",
"OP_87",
"PUSH2",
"GAS",
"SUB",
"CALL",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 60
},
{
"end_pc": 296,
"hash": "0x211e3765757daf201f1b70081aec9a7306c21cc484627fd16e4bf11765a3dcbf",
exec
/bin/bash -lc "sed -n '261,520p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"opcodes": [
"POP",
"POP",
"PUSH1",
"MLOAD",
"MLOAD",
"OP_91",
"POP",
"POP",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_81",
"AND",
"OP_82",
"EQ",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 271
},
{
"end_pc": 300,
"hash": "0x668aa9cdddb113ba7060294e573dc513608a91c364b12941519a8767bb9cc765",
"opcodes": [
"PUSH2",
"PUSH1"
],
"start_pc": 297
},
{
"end_pc": 310,
"hash": "0x92b9fb0700a02977615b94995915864fa8855c1250f6813615c9d726d4739464",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH2",
"PUSH20"
],
"start_pc": 302
},
{
"end_pc": 334,
"hash": "0xd9e173bf5a4bae3d012ac8f57221aca7ae8afd3cb7f4d5fcc09467d117a6a019",
"opcodes": [
"JUMPDEST",
"EXTCODESIZE",
"OP_90",
"JUMP"
],
"start_pc": 331
},
{
"end_pc": 361,
"hash": "0xaac8cf5520663acb0a77f19acbb813107ad0a429d956ca2f83b24df23eb19016",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"SLOAD",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_90",
"OP_81",
"AND",
"OP_91",
"AND",
"EQ",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 335
},
{
"end_pc": 372,
"hash": "0x58bc5002fea31bfdae3addd849b6ddc13de55f92292ec08a2fd43282676e9b58",
"opcodes": [
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"SELFDESTRUCT"
],
"start_pc": 362
},
{
"end_pc": 634,
"hash": "0x5066432d4453dd2e8e71cb6f74d701b6fb4e714e412ad23bfd673a40513b78e5",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_80",
"MLOAD",
"OP_80",
"OP_82",
"ADD",
"OP_82",
"MSTORE",
"PUSH1",
"OP_81",
"MSTORE",
"PUSH32",
"PUSH1",
"OP_82",
"OP_81",
"ADD",
"OP_91",
"OP_90",
"OP_91",
"MSTORE",
"OP_82",
"MLOAD",
"PUSH1",
"OP_81",
"ADD",
"OP_84",
"MSTORE",
"PUSH1",
"OP_81",
"MSTORE",
"PUSH32",
"OP_81",
"OP_83",
"ADD",
"MSTORE",
"PUSH32",
"OP_81",
"OP_85",
"ADD",
"MSTORE",
"PUSH32",
"PUSH1",
"OP_82",
"ADD",
"MSTORE",
"OP_83",
"MLOAD",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"PUSH1",
"EXP",
"PUSH4",
"MUL",
"OP_83",
"MSTORE",
"OP_95",
"MLOAD",
"PUSH2",
"OP_96",
"PUSH2",
"OP_96",
"OP_92",
"OP_95",
"OP_92",
"OP_94",
"OP_93",
"OP_86",
"OP_93",
"OP_84",
"OP_93",
"OP_84",
"OP_93",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_92",
"PUSH4",
"OP_92",
"PUSH1",
"OP_82",
"OP_81",
"ADD",
"OP_93",
"OP_91",
"OP_92",
"OP_82",
"OP_90",
"SUB",
"ADD",
"OP_81",
"OP_87",
"OP_87",
"PUSH2",
"GAS",
"SUB",
"CALL",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 373
},
{
"end_pc": 660,
"hash": "0x5d5b06fe26a45dee4a94b0285d5be969620920d6cb84b84e2912f8192fcc01d8",
"opcodes": [
"POP",
"POP",
"PUSH1",
"MLOAD",
"MLOAD",
"OP_91",
"POP",
"POP",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_81",
"AND",
"OP_82",
"EQ",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 635
},
{
"end_pc": 669,
"hash": "0x46ec6fe8edc26ddada2f8ce8bd63637f88df67a3455ec56701e7740e7e3830e8",
"opcodes": [
"PUSH2",
"PUSH1",
"PUSH2",
"JUMP"
],
"start_pc": 661
},
{
"end_pc": 738,
"hash": "0x59419d4ace83aec0c5dc262ed8d45261be9b17b2da79daa76ebd1b785bf12c66",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"OP_80",
"MLOAD",
"PUSH1",
exec
/bin/bash -lc "sed -n '521,780p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"PUSH1",
"PUSH1",
"PUSH1",
"NOT",
"PUSH2",
"PUSH1",
"OP_88",
"AND",
"ISZERO",
"MUL",
"ADD",
"OP_90",
"OP_95",
"AND",
"OP_94",
"OP_90",
"OP_94",
"DIV",
"OP_93",
"OP_84",
"ADD",
"OP_81",
"OP_90",
"DIV",
"OP_81",
"MUL",
"OP_82",
"ADD",
"OP_81",
"ADD",
"OP_90",
"OP_92",
"MSTORE",
"OP_82",
"OP_81",
"MSTORE",
"OP_92",
"OP_91",
"OP_90",
"OP_83",
"ADD",
"OP_82",
"OP_82",
"OP_80",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 670
},
{
"end_pc": 746,
"hash": "0xf6224713c9e2a0b8e9f1f13c5e17ac17b5b8c63d447f7a413c3d277abcb2dbc8",
"opcodes": [
"OP_80",
"PUSH1",
"LT",
"PUSH2",
"JUMPI"
],
"start_pc": 739
},
{
"end_pc": 765,
"hash": "0x9869ac8e4b803e7e3a7f154e14d21bbac6410a3195f0113213ef37aceb275c92",
"opcodes": [
"PUSH2",
"OP_80",
"OP_83",
"SLOAD",
"DIV",
"MUL",
"OP_83",
"MSTORE",
"OP_91",
"PUSH1",
"ADD",
"OP_91",
"PUSH2",
"JUMP"
],
"start_pc": 747
},
{
"end_pc": 836,
"hash": "0x5346a9a196bb9b2840e18d0722700a6870e3a294a7db63b0d21e43514fab1117",
"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": 766
},
{
"end_pc": 861,
"hash": "0x30c56ad98d50fea7e336250e442e13018c59281f4490843a71eb90067b653adb",
"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": 837
},
{
"end_pc": 875,
"hash": "0x74089c7f1bde6f9723ef0e54be25f4aff3bf410c8d4fc6b5554ac53671f713e4",
"opcodes": [
"JUMPDEST",
"POP",
"OP_92",
"POP",
"POP",
"POP",
"PUSH1",
"MLOAD",
"OP_80",
"OP_91",
"SUB",
"OP_90",
"RETURN"
],
"start_pc": 862
},
{
"end_pc": 902,
"hash": "0x2031d0ece65c888ea24611f294776fe07d34aa33ba02e9696b523835cf07a37a",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"EQ",
"ISZERO",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 876
},
{
"end_pc": 906,
"hash": "0xcfcaf3284c036394e35a787ec2b1ca8ef7a86a3129d7b69fac82494789e00fb3",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 903
},
{
"end_pc": 969,
"hash": "0x4a0732c9db70459222f2e9e27b5cdf03b2937fce1f3009cca0c771f25fbe00ee",
"opcodes": [
"JUMPDEST",
"OP_81",
"PUSH1",
"PUSH1",
"POP",
"OP_90",
"OP_80",
"MLOAD",
"OP_90",
"PUSH1",
"ADD",
"OP_90",
"OP_82",
"OP_80",
"SLOAD",
"PUSH1",
"OP_81",
"PUSH1",
"AND",
"ISZERO",
"PUSH2",
"MUL",
"SUB",
"AND",
"PUSH1",
"OP_90",
exec
/bin/bash -lc "sed -n '781,1040p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"DIV",
"OP_90",
"PUSH1",
"MSTORE",
"PUSH1",
"PUSH1",
"SHA3",
"OP_90",
"PUSH1",
"ADD",
"PUSH1",
"OP_90",
"DIV",
"OP_81",
"ADD",
"OP_92",
"OP_82",
"PUSH1",
"LT",
"PUSH2",
"JUMPI"
],
"start_pc": 907
},
{
"end_pc": 981,
"hash": "0x77eaadf555e4e72a4151fbb36d3b6305908c31fe2ed981d6d8d90080a2a8aca7",
"opcodes": [
"OP_80",
"MLOAD",
"PUSH1",
"NOT",
"AND",
"OP_83",
"OP_80",
"ADD",
"OR",
"OP_85",
"SSTORE"
],
"start_pc": 970
},
{
"end_pc": 989,
"hash": "0x50aea7be739d40bd88f23a02762b18f3c391a2575c8292289b01b25adea7116b",
"opcodes": [
"JUMPDEST",
"POP",
"PUSH2",
"OP_92",
"OP_91",
"POP"
],
"start_pc": 982
},
{
"end_pc": 998,
"hash": "0x9bba9bb5b0bddd231b0503f2852c402ada6de77ab33fabca7797bc5457ea54ab",
"opcodes": [
"JUMPDEST",
"OP_80",
"OP_82",
"GT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 990
},
{
"end_pc": 1009,
"hash": "0x515ecc94bd36edbc1690b24deff926d69af9979053538ec613240a06fb4cc8c9",
"opcodes": [
"PUSH1",
"OP_81",
"SSTORE",
"PUSH1",
"ADD",
"PUSH2",
"JUMP"
],
"start_pc": 999
},
{
"end_pc": 1024,
"hash": "0x895ac74a8ea1e8c264b01b11a7664cf3efbf4b60f3f6500fdae1c8426818e443",
"opcodes": [
"JUMPDEST",
"OP_82",
"OP_80",
"ADD",
"PUSH1",
"ADD",
"OP_85",
"SSTORE",
"OP_82",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1010
},
{
"end_pc": 1027,
"hash": "0xc89d53925d96de1319566417ca70c5d3665146babc73edcb788c8fd7fab9bfeb",
"opcodes": [
"OP_91",
"OP_82",
"ADD"
],
"start_pc": 1025
},
{
"end_pc": 1036,
"hash": "0x944a980703b91331e4536aca3b3c414aa402d32809291fdef02c5fe09d02c9cc",
"opcodes": [
"JUMPDEST",
"OP_82",
"OP_81",
"GT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1028
},
{
"end_pc": 1057,
"hash": "0xfec70d6fbba1fdbb4179eb356eb2d71a5245c8f3d03e9bf705bd26fed2034a29",
"opcodes": [
"OP_82",
"MLOAD",
"OP_82",
"PUSH1",
"POP",
"SSTORE",
"OP_91",
"PUSH1",
"ADD",
"OP_91",
"OP_90",
"PUSH1",
"ADD",
"OP_90",
"PUSH2",
"JUMP"
],
"start_pc": 1037
},
{
"end_pc": 1064,
"hash": "0x577ac534db6ed3582b8a2880caf73beba61d3a701a4fd4e38ab860a063c5ee4b",
"opcodes": [
"JUMPDEST",
"POP",
"POP",
"POP",
"POP",
"POP",
"JUMP"
],
"start_pc": 1058
},
{
"end_pc": 1068,
"hash": "0x642535916eb378472b24848aff66be4eec048882a5da58a7177f407e75de6c36",
"opcodes": [
"JUMPDEST",
"POP",
"OP_90",
"JUMP"
],
"start_pc": 1065
},
{
"end_pc": 1070,
"hash": "0xe388197184fa05ae9254d944206dab4c7134b33a335dbdbcbe3583b613e9f2f3",
"opcodes": [
"JUMPDEST",
"JUMP"
],
"start_pc": 1069
},
{
"end_pc": 1073,
"hash": "0x682955ccb1ab4fa2d3ca4a6a002238d2d89e812fe1b897e3bc5d965f55ccf699",
"opcodes": [
"JUMPDEST",
"POP",
"JUMP"
],
"start_pc": 1071
},
{
"end_pc": 1087,
"hash": "0x54a030bf364c8b28adfd542d2e67d75842e3dbc9327825ebac5fb226b42744bb",
"opcodes": [
"JUMPDEST",
"OP_82",
"ADD",
"OP_91",
"OP_90",
"PUSH1",
"MSTORE",
"PUSH1",
"PUSH1",
"SHA3",
"OP_90"
],
"start_pc": 1074
},
{
"end_pc": 1107,
"hash": "0x52b3de7930de8f47ae70130c0ce53b97ef1ececf3acf5387ee67d79848f0c767",
"opcodes": [
"JUMPDEST",
"OP_81",
"SLOAD",
"OP_81",
"MSTORE",
"OP_90",
"PUSH1",
"ADD",
"OP_90",
"PUSH1",
"ADD",
"OP_80",
"OP_83",
"GT",
"PUSH2",
"JUMPI"
],
"start_pc": 1088
},
{
"end_pc": 1116,
"hash": "0x126869c0d1ef5adcc020ecaaad212d70cac8a1b6582b393e9dd77dfad7836fac",
"opcodes": [
"OP_82",
"OP_90",
"SUB",
"PUSH1",
"AND",
"OP_82",
"ADD",
"OP_91"
],
"start_pc": 1108
},
{
"end_pc": 1124,
"hash": "0x1cdb8578c9f82d92d60885ba0c8552affef2a29f4d3dead47d7e55061469cb53",
"opcodes": [
"JUMPDEST",
"POP",
"POP",
"POP",
"POP",
"POP",
"OP_81",
exec
/bin/bash -lc "sed -n '1041,1300p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"JUMP"
],
"start_pc": 1117
},
{
"end_pc": 1203,
"hash": "0x8d07044fe4e2d1a301004e967054a46d2c4676aa7a0c0f823fc940e8a2eb119d",
"opcodes": [
"JUMPDEST",
"POP",
"PUSH1",
"PUSH1",
"OP_90",
"SLOAD",
"OP_90",
"PUSH2",
"EXP",
"OP_90",
"DIV",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH4",
"PUSH1",
"MLOAD",
"OP_81",
"PUSH1",
"PUSH1",
"EXP",
"MUL",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_80",
"OP_90",
"POP",
"PUSH1",
"PUSH1",
"MLOAD",
"OP_80",
"OP_83",
"SUB",
"OP_81",
"PUSH1",
"OP_87",
"PUSH2",
"GAS",
"SUB",
"CALL",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1125
},
{
"end_pc": 1212,
"hash": "0xb8e60042fb97943d1fcc0b32d8a537473d6082ad5cc4ed4a0e8ea9540c8e28f6",
"opcodes": [
"POP",
"POP",
"PUSH1",
"MLOAD",
"MLOAD",
"OP_91",
"POP",
"POP"
],
"start_pc": 1204
},
{
"end_pc": 1324,
"hash": "0x5153c47a50bb64727503e05367e565b66b351f60bb7c76a5a1408ce43c7ded1c",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"NOT",
"AND",
"OP_82",
"OR",
"OP_90",
"OP_81",
"OP_90",
"SSTORE",
"PUSH1",
"OP_80",
"MLOAD",
"PUSH32",
"OP_81",
"MSTORE",
"OP_90",
"MLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_92",
"OP_90",
"OP_92",
"AND",
"OP_91",
"PUSH4",
"OP_91",
"PUSH1",
"OP_81",
"OP_81",
"ADD",
"OP_92",
"PUSH1",
"OP_92",
"OP_90",
"OP_91",
"OP_90",
"OP_82",
"OP_90",
"SUB",
"ADD",
"OP_81",
"PUSH1",
"OP_87",
"PUSH2",
"GAS",
"SUB",
"CALL",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1213
},
{
"end_pc": 1336,
"hash": "0xd032b2aae1e519f1ecef8628dcc1651749a8917fff5a07f39fa866e564f260f2",
"opcodes": [
"POP",
"POP",
"PUSH1",
"MLOAD",
"MLOAD",
"OP_92",
"POP",
"POP",
"POP",
"OP_90",
"JUMP"
],
"start_pc": 1325
},
{
"end_pc": 1415,
"hash": "0x0232e337ceb5555f1eeb4020946bb8091cf11f1dc51928215169647607245b4c",
"opcodes": [
"JUMPDEST",
"POP",
"PUSH1",
"PUSH1",
"OP_90",
"SLOAD",
"OP_90",
"PUSH2",
"EXP",
"OP_90",
"DIV",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH4",
"PUSH1",
"MLOAD",
"OP_81",
"PUSH1",
"PUSH1",
"EXP",
"MUL",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_80",
"OP_90",
"POP",
"PUSH1",
"PUSH1",
"MLOAD",
"OP_80",
"OP_83",
"SUB",
"OP_81",
"PUSH1",
"OP_87",
"PUSH2",
"GAS",
"SUB",
"CALL",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1337
},
{
"end_pc": 1424,
"hash": "0x2b5de16672d29c00853df0d4ede8db9b14a0700763d18c949f666cd5cac99cce",
"opcodes": [
"POP",
"POP",
"PUSH1",
"MLOAD",
"MLOAD",
"OP_91",
"POP",
"POP"
],
"start_pc": 1416
},
{
"end_pc": 1579,
"hash": "0x040d2e271dbda0cb239606af7428173b882718b283f38e05b414b7c19f90193d",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"NOT",
"AND",
"OP_82",
"OR",
"OP_90",
exec
/bin/bash -lc "sed -n '1301,1560p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"OP_81",
"OP_90",
"SSTORE",
"PUSH1",
"MLOAD",
"PUSH32",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"OP_82",
"OP_81",
"ADD",
"OP_82",
"OP_81",
"MSTORE",
"OP_89",
"MLOAD",
"PUSH1",
"OP_85",
"ADD",
"MSTORE",
"OP_89",
"MLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_95",
"OP_90",
"OP_95",
"AND",
"OP_94",
"PUSH4",
"OP_94",
"OP_8B",
"OP_94",
"OP_92",
"OP_93",
"OP_84",
"OP_93",
"PUSH1",
"OP_92",
"OP_90",
"OP_92",
"ADD",
"OP_92",
"OP_86",
"OP_83",
"ADD",
"OP_92",
"OP_90",
"OP_91",
"OP_82",
"OP_91",
"OP_85",
"OP_91",
"OP_83",
"OP_91",
"OP_86",
"OP_91",
"PUSH1",
"OP_91",
"PUSH1",
"OP_85",
"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": 1425
},
{
"end_pc": 1604,
"hash": "0x93e1414178a108c51c449c4410a64b84b6d2e084829b59f57ef83985f07a89ae",
"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": 1580
},
{
"end_pc": 1633,
"hash": "0x62b82eb97950d0365e8b092322caafd55057ebd7a3793e72298f06a3774a91a6",
"opcodes": [
"JUMPDEST",
"POP",
"OP_92",
"POP",
"POP",
"POP",
"PUSH1",
"PUSH1",
"MLOAD",
"OP_80",
"OP_83",
"SUB",
"OP_81",
"PUSH1",
"OP_87",
"PUSH2",
"GAS",
"SUB",
"CALL",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1605
},
{
"end_pc": 1665,
"hash": "0xa0bc5852373a9fde229a3f7e5f1a78374d41b2ddef8734e1a855f69f927ba82b",
"opcodes": [
"POP",
"POP",
"PUSH1",
"MLOAD",
"MLOAD",
"OP_92",
"POP",
"POP",
"PUSH8",
"PUSH3",
"OP_3A",
"MUL",
"ADD",
"OP_82",
"GT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1634
},
{
"end_pc": 1670,
"hash": "0xd2fb0dd23d9c64752c07bd12c44134f7bf87dd7ee9b41f5a6e0b6cd08c33fe48",
"opcodes": [
"POP",
"PUSH1",
"OP_91",
"POP"
],
"start_pc": 1666
},
{
"end_pc": 1678,
"hash": "0xf3f421656605ff93ced962e97162d12158c7433435308f9025ef181141585677",
"opcodes": [
"JUMPDEST",
"POP",
"OP_93",
"OP_92",
"POP",
"POP",
"POP",
"JUMP"
],
"start_pc": 1671
},
{
"end_pc": 1811,
"hash": "0x8e511d014826225042535114d8923b821a07d480d6f6de9ce02350095f3b023b",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"OP_90",
"SLOAD",
"OP_90",
"PUSH2",
"EXP",
"OP_90",
"DIV",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH4",
"OP_83",
"OP_88",
"OP_88",
"OP_88",
"PUSH1",
"MLOAD",
"OP_85",
"PUSH1",
"PUSH1",
"EXP",
"MUL",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_80",
"OP_84",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_80",
"PUSH1",
"ADD",
"OP_80",
"PUSH1",
"ADD",
"OP_83",
"OP_81",
"SUB",
"OP_83",
"MSTORE",
"OP_85",
"OP_81",
"OP_81",
"MLOAD",
"OP_81",
exec
/bin/bash -lc "sed -n '1561,1820p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"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": 1679
},
{
"end_pc": 1836,
"hash": "0x0fbe6329ef683dc2100ad50f1fbb416847d003fa358f4c076508ac3d454820d9",
"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": 1812
},
{
"end_pc": 1900,
"hash": "0x21bc3c4ad3b7b5a1c504b0d546a05cb3ed213ef5abacba9565755428c3234bda",
"opcodes": [
"JUMPDEST",
"POP",
"OP_83",
"OP_81",
"SUB",
"OP_82",
"MSTORE",
"OP_84",
"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": 1837
},
{
"end_pc": 1925,
"hash": "0x815742a77240d5366e4e6fd9577c86fd1c0f790d7f119ac0d533dce6eefd5de4",
"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": 1901
},
{
"end_pc": 1956,
"hash": "0x10575e5245e3c74a6f6596e1e1cb7241a8eb25b2412626c142b9b9418cd86594",
"opcodes": [
"JUMPDEST",
"POP",
"OP_95",
"POP",
"POP",
"POP",
"POP",
"POP",
"POP",
"PUSH1",
"PUSH1",
"MLOAD",
"OP_80",
"OP_83",
"SUB",
"OP_81",
"OP_85",
"OP_88",
"PUSH2",
"GAS",
"SUB",
"CALL",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1926
},
{
"end_pc": 1972,
"hash": "0x850af865e51ff0a73025e2cf811ced241dcd418a29c661f7d20c1eb909527a3f",
"opcodes": [
"POP",
"POP",
"PUSH1",
"MLOAD",
"MLOAD",
"OP_94",
"POP",
"PUSH2",
"OP_92",
"POP",
"POP",
"POP",
"JUMP"
],
"start_pc": 1957
},
{
"end_pc": 1975,
"hash": "0xb2e6121a2f6ab63394b8175340abfe0d03a101697bae37348318b68cb7f45f82",
"opcodes": [
"JUMPDEST",
"POP",
"PUSH1"
],
"start_pc": 1973
},
{
"end_pc": 1981,
"hash": "0xe4194e3e0a14cfaad6a3740b86815a587592b48d942c6c95f8de485ec89f6713",
"opcodes": [
"JUMPDEST",
"OP_91",
"OP_90",
"POP",
"JUMP"
],
"start_pc": 1977
},
{
"end_pc": 1988,
"hash": "0xd0a3078f3776851fb284190573d8411c7a45c74c62714b16b686a69da2bcbc93",
"opcodes": [
"JUMPDEST",
"GT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1982
},
{
"end_pc": 2033,
"hash": "0x0d02bf081005303d5897b8e3823b651448050c2f67849e133e34bde7573e631b",
"opcodes": [
"POP",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"NOT",
"AND",
"PUSH20",
exec
/bin/bash -lc "sed -n '1821,2080p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"OR",
"OP_90",
"SSTORE",
"PUSH1",
"PUSH2",
"JUMP"
],
"start_pc": 1989
},
{
"end_pc": 2064,
"hash": "0x7607ee9f3b447f0bef515c82693372367131b6ad757de2100033c6b7883ad7ac",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH2",
"PUSH20",
"PUSH2",
"JUMP"
],
"start_pc": 2034
},
{
"end_pc": 2071,
"hash": "0x27468012cd2c4e6a4785e651ab0ad51142805c845a9bfdaf051cba49612bbe6d",
"opcodes": [
"JUMPDEST",
"GT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 2065
},
{
"end_pc": 2118,
"hash": "0xed44d886591b935cf6c7c660459d036a8678ac5271991fc52b4368a346556587",
"opcodes": [
"POP",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH20",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"NOT",
"OP_90",
"OP_91",
"AND",
"OR",
"OP_90",
"SSTORE",
"PUSH1",
"PUSH2",
"JUMP"
],
"start_pc": 2072
},
{
"end_pc": 2149,
"hash": "0xb0ade73ebbf7365a8901eb9286a458e0e140a7883bccfd5d8f7bbdae67bd035a",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH2",
"PUSH20",
"PUSH2",
"JUMP"
],
"start_pc": 2119
},
{
"end_pc": 2156,
"hash": "0xfe8ac693858f299b9c4ac41f6c71a81fbf4f4f4b5992c19fd8fdbe5f1599a91c",
"opcodes": [
"JUMPDEST",
"GT",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 2150
},
{
"end_pc": 2203,
"hash": "0xc81ec5bd94bfbaea925ecd557116b765db19758176097c09ac51d99ed39e80f5",
"opcodes": [
"POP",
"PUSH1",
"OP_80",
"SLOAD",
"PUSH20",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"NOT",
"OP_90",
"OP_91",
"AND",
"OR",
"OP_90",
"SSTORE",
"PUSH1",
"PUSH2",
"JUMP"
],
"start_pc": 2157
}
],
"callsites": [
{
"opcode": "CALL",
"pc": 265,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 629,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 820,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1198,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1319,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1410,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1563,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1628,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1795,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1884,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1951,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"cfg_edges": [
{
"from": "bb:0",
"to": "bb:60",
"type": "control_flow"
},
{
"from": "bb:0",
"to": "bb:25",
"type": "control_flow_fallthrough"
},
{
"from": "bb:25",
"to": "bb:335",
"type": "control_flow"
},
{
"from": "bb:25",
"to": "bb:36",
"type": "control_flow_fallthrough"
},
{
"from": "bb:36",
"to": "bb:373",
"type": "control_flow"
},
{
"from": "bb:36",
"to": "bb:47",
"type": "control_flow_fallthrough"
},
{
"from": "bb:47",
"to": "bb:670",
"type": "control_flow"
},
{
"from": "bb:47",
"to": "bb:58",
"type": "control_flow_fallthrough"
},
{
"from": "bb:60",
"to": "bb:271",
"type": "control_flow_fallthrough"
},
{
"from": "bb:271",
"to": "bb:1213",
"type": "control_flow"
},
{
"from": "bb:271",
"to": "bb:297",
"type": "control_flow_fallthrough"
},
{
"from": "bb:297",
"to": "bb:302",
"type": "control_flow_fallthrough"
},
{
"from": "bb:302",
"to": "bb:331",
"type": "control_flow_fallthrough"
},
{
exec
/bin/bash -lc "sed -n '2081,2340p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"from": "bb:335",
"to": "bb:1069",
"type": "control_flow"
},
{
"from": "bb:335",
"to": "bb:362",
"type": "control_flow_fallthrough"
},
{
"from": "bb:373",
"to": "bb:635",
"type": "control_flow_fallthrough"
},
{
"from": "bb:635",
"to": "bb:1425",
"type": "control_flow"
},
{
"from": "bb:635",
"to": "bb:661",
"type": "control_flow_fallthrough"
},
{
"from": "bb:661",
"to": "bb:302",
"type": "control_flow"
},
{
"from": "bb:670",
"to": "bb:1117",
"type": "control_flow"
},
{
"from": "bb:670",
"to": "bb:739",
"type": "control_flow_fallthrough"
},
{
"from": "bb:739",
"to": "bb:1074",
"type": "control_flow"
},
{
"from": "bb:739",
"to": "bb:747",
"type": "control_flow_fallthrough"
},
{
"from": "bb:747",
"to": "bb:1117",
"type": "control_flow"
},
{
"from": "bb:766",
"to": "bb:862",
"type": "control_flow"
},
{
"from": "bb:766",
"to": "bb:837",
"type": "control_flow_fallthrough"
},
{
"from": "bb:837",
"to": "bb:862",
"type": "control_flow_fallthrough"
},
{
"from": "bb:876",
"to": "bb:907",
"type": "control_flow"
},
{
"from": "bb:876",
"to": "bb:903",
"type": "control_flow_fallthrough"
},
{
"from": "bb:907",
"to": "bb:1010",
"type": "control_flow"
},
{
"from": "bb:907",
"to": "bb:970",
"type": "control_flow_fallthrough"
},
{
"from": "bb:970",
"to": "bb:982",
"type": "control_flow_fallthrough"
},
{
"from": "bb:982",
"to": "bb:990",
"type": "control_flow_fallthrough"
},
{
"from": "bb:990",
"to": "bb:1065",
"type": "control_flow"
},
{
"from": "bb:990",
"to": "bb:999",
"type": "control_flow_fallthrough"
},
{
"from": "bb:999",
"to": "bb:990",
"type": "control_flow"
},
{
"from": "bb:1010",
"to": "bb:982",
"type": "control_flow"
},
{
"from": "bb:1010",
"to": "bb:1025",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1025",
"to": "bb:1028",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1028",
"to": "bb:982",
"type": "control_flow"
},
{
"from": "bb:1028",
"to": "bb:1037",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1037",
"to": "bb:1028",
"type": "control_flow"
},
{
"from": "bb:1074",
"to": "bb:1088",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1088",
"to": "bb:1088",
"type": "control_flow"
},
{
"from": "bb:1088",
"to": "bb:1108",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1108",
"to": "bb:1117",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1125",
"to": "bb:1204",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1204",
"to": "bb:1213",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1213",
"to": "bb:1325",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1337",
"to": "bb:1416",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1416",
"to": "bb:1425",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1425",
"to": "bb:1605",
"type": "control_flow"
},
{
"from": "bb:1425",
"to": "bb:1580",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1580",
"to": "bb:1605",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1605",
"to": "bb:1634",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1634",
"to": "bb:1679",
"type": "control_flow"
},
{
"from": "bb:1634",
"to": "bb:1666",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1666",
"to": "bb:1671",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1679",
"to": "bb:1837",
"type": "control_flow"
},
{
"from": "bb:1679",
"to": "bb:1812",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1812",
"to": "bb:1837",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1837",
"to": "bb:1926",
"type": "control_flow"
},
{
"from": "bb:1837",
"to": "bb:1901",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1901",
"to": "bb:1926",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1926",
"to": "bb:1957",
"type": "control_flow_fallthrough"
},
{
exec
/bin/bash -lc "sed -n '2341,2600p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"from": "bb:1973",
"to": "bb:1977",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1982",
"to": "bb:2034",
"type": "control_flow"
},
{
"from": "bb:1982",
"to": "bb:1989",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1989",
"to": "bb:1977",
"type": "control_flow"
},
{
"from": "bb:2034",
"to": "bb:331",
"type": "control_flow"
},
{
"from": "bb:2065",
"to": "bb:2119",
"type": "control_flow"
},
{
"from": "bb:2065",
"to": "bb:2072",
"type": "control_flow_fallthrough"
},
{
"from": "bb:2072",
"to": "bb:1977",
"type": "control_flow"
},
{
"from": "bb:2119",
"to": "bb:331",
"type": "control_flow"
},
{
"from": "bb:2150",
"to": "bb:1973",
"type": "control_flow"
},
{
"from": "bb:2150",
"to": "bb:2157",
"type": "control_flow_fallthrough"
},
{
"from": "bb:2157",
"to": "bb:1977",
"type": "control_flow"
}
],
"cfg_hash": "0x181fd8642c647cddc003382d07ba656cb2061fb8a1ebe3bc3d78bd4569244c90",
"dispatcher_type": "selector_jump_table",
"function_entries": [
{
"entry_pc": null,
"selector": "0x38bbfa50"
},
{
"entry_pc": 2732990533,
"selector": "0x41c0e1b5"
},
{
"entry_pc": 3077981301,
"selector": "0xa2e62045"
},
{
"entry_pc": null,
"selector": "0xb7764475"
}
],
"functions": [
{
"auth": {
"guards": []
},
"entry_pc": null,
"selector": "0x38bbfa50",
"sinks": {
"call": 11,
"delegatecall": 0,
"selfdestruct": 1,
"staticcall": 0
},
"storage": {
"reads": 15,
"slots": [
{
"op": "SLOAD",
"pc": 204,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 341,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 558,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 677,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 752,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 1132,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1217,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 1344,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1429,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 1685,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1993,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2076,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2161,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 9
}
},
{
"auth": {
"guards": []
},
"entry_pc": 2732990533,
"selector": "0x41c0e1b5",
"sinks": {
"call": 11,
"delegatecall": 0,
"selfdestruct": 1,
"staticcall": 0
},
"storage": {
"reads": 15,
"slots": [
{
"op": "SLOAD",
"pc": 204,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 341,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 558,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 677,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 752,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 1132,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1217,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 1344,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1429,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 1685,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1993,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2076,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2161,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 9
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3077981301,
"selector": "0xa2e62045",
"sinks": {
"call": 11,
"delegatecall": 0,
"selfdestruct": 1,
"staticcall": 0
exec
/bin/bash -lc "sed -n '2601,2860p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
},
"storage": {
"reads": 15,
"slots": [
{
"op": "SLOAD",
"pc": 204,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 341,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 558,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 677,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 752,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 1132,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1217,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 1344,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1429,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 1685,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1993,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2076,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2161,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 9
}
},
{
"auth": {
"guards": []
},
"entry_pc": null,
"selector": "0xb7764475",
"sinks": {
"call": 11,
"delegatecall": 0,
"selfdestruct": 1,
"staticcall": 0
},
"storage": {
"reads": 15,
"slots": [
{
"op": "SLOAD",
"pc": 204,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 341,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 558,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 677,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 752,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 1132,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1217,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 1344,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1429,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 1685,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1993,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2076,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2161,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 9
}
}
],
"selectors": [
"0x38bbfa50",
"0x41c0e1b5",
"0xa2e62045",
"0xb7764475"
],
"sinks": {
"call": 11,
"create": 0,
"create2": 0,
"delegatecall": 0,
"selfdestruct": 1,
"staticcall": 0,
"upgrade_slot_write_suspected": false
},
"storage": {
"keccak_count": 2,
"reads": 15,
"slots": [
{
"op": "SLOAD",
"pc": 204,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 341,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 558,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 677,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
},
{
"op": "SLOAD",
"pc": 752,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 1132,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1217,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 1344,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1429,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
{
"op": "SLOAD",
"pc": 1685,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1993,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2076,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2161,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 9
},
"version": "analysis_artifact_v1"
},
"block_number": null,
"chain_id": 1,
"codehash": "0xb1fc278728ff61b8338d41c1c1eba823f11bbb815560a5d95a88c6fa6cee18bf",
"created_at": "2026-04-04T19:58:14.000000Z",
"id": 2564,
"updated_at": "2026-04-04T19:58:14.000000Z",
"version": "analysis_artifact_v1"
},
"analysis_run": {
"address": "0xcad333e2f7ec4058aa5ba825a5de8af4139490c9",
"block_number": null,
"chain_id": 1,
"child_links": [],
exec
/bin/bash -lc "sed -n '2861,3120p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"created_at": "2025-12-19T20:03:57.000000Z",
"id": "019b3836-3fab-72b2-b454-064ea28d2ebf",
"parent_links": [],
"status": "running",
"updated_at": "2026-04-04T19:58:14.000000Z"
},
"artifact": {
"codehash": "0xb1fc278728ff61b8338d41c1c1eba823f11bbb815560a5d95a88c6fa6cee18bf",
"compiler_json": {
"etherscan": {
"skipped": true
}
},
"implementation_address": null,
"is_proxy": false,
"runtime_bytecode": {
"full": "0x606060405260e060020a600035046338bbfa50811461003c57806341c0e1b51461014f578063a2e6204514610175578063b77644751461029e575b005b60408051602060248035600481810135601f810185900485028601850190965285855261003a9581359591946044949293909201918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a01909352828252969897606497919650602491909101945090925082915084018382808284375094965050505050505061036c600080546040805160e060020a6338cc483102815290518392600160a060020a0316916338cc4831916004828101926020929190829003018187876161da5a03f11561000257505060405151915050600160a060020a0381168214156104bd5761046560005b600060006107be731d11e5eae3112dbd44f99266872ff1d07c77dce85b3b90565b61003a60025433600160a060020a039081169116141561042d5733600160a060020a0316ff5b604080518082018252600381527f55524c00000000000000000000000000000000000000000000000000000000006020828101919091528251608081018452604c81527f6a736f6e2868747470733a2f2f6170692e6b72616b656e2e636f6d2f302f7075818301527f626c69632f5469636b65723f706169723d455448584254292e726573756c742e818501527f58455448585842542e632e300000000000000000000000000000000000000000606082015283516000805460e060020a6338cc4831028352955161003a9661042f969295929493869384938493600160a060020a0316926338cc4831926004828101939192829003018187876161da5a03f11561000257505060405151915050600160a060020a03811682141561059157610539600061012e565b6102fe60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815292919083018282801561045d5780601f106104325761010080835404028352916020019161045d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600160a060020a031633600160a060020a031614151561038b57610002565b8160036000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106103f257805160ff19168380011785555b506104229291505b8082111561042957600081556001016103de565b828001600101855582156103d6579182015b828111156103d6578251826000505591602001919060010190610404565b5050505050565b5090565b565b50565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b505050505081565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a031916821790819055604080517fc281d19e0000000000000000000000000000000000000000000000000000000081529051600160a060020a03929092169163c281d19e9160048181019260209290919082900301816000876161da5a03f115610002575050604051519250505090565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a0319168217908190556040517f524f388900000000000000000000000000000000000000000000000000000000815260206004828101828152895160248501528951600160a060020a03959095169463524f3889948b9492938493604492909201928683019290918291859183918691600091601f850104600f02600301f150905090810190601f1680156106455780820380516001836020036101000a031916815260200191505b50925050506020604051808303816000876161da5a03f11561000257505060405151925050670de0b6b3a764000062030d403a020182111561068f5750600091505b509392505050565b600160009054906101000a9004600160a060020a0316600160a060020a031663adf59f99838888886040518560e060020a0281526004018084815260200180602001806020018381038352858181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561072d5780820380516001836020036101000a031916815260200191505b508381038252848181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156107865780820380516001836020036101000a031916815260200191505b509550505050505060206040518083038185886185025a03f11561000257505060405151945061068792505050565b5060005b919050565b11156107f2575060008054600160a060020a031916731d11e5eae3112dbd44f99266872ff1d07c77dce817905560016107b9565b6000610811739efbea6358bed926b293d2ce63a730d6d98d43dd61014b565b1115610847575060008054739efbea6358bed926b293d2ce63a730d6d98d43dd600160a060020a031990911617905560016107b9565b60006108667320e12a1f859b3feae5fb2a0a32c18f5a65555bbf61014b565b11156107b55750600080547320e12a1f859b3feae5fb2a0a32c18f5a65555bbf600160a060020a031990911617905560016107b956",
"head": null,
"length": 4410,
"tail": null,
"truncated": false
},
"verified_source": false
},
"capability_graph": {
"address": "0xcad333e2f7ec4058aa5ba825a5de8af4139490c9",
"block_number": null,
"chain_id": 1,
"codehash": "0xb1fc278728ff61b8338d41c1c1eba823f11bbb815560a5d95a88c6fa6cee18bf",
"created_at": "2026-04-04T19:58:14.000000Z",
"graph_hash": "0x98109a53e919091c6f4beb478bcb3a6239020ce8fe67c5453369625adb89c980",
"graph_json": {
"edges": [
{
"from": "bb:0",
"to": "bb:60",
"type": "control_flow"
},
{
"from": "bb:0",
"to": "bb:25",
"type": "control_flow_fallthrough"
},
{
"from": "bb:25",
"to": "bb:335",
"type": "control_flow"
},
{
"from": "bb:25",
"to": "bb:36",
"type": "control_flow_fallthrough"
},
{
"from": "bb:36",
"to": "bb:373",
"type": "control_flow"
},
{
"from": "bb:36",
"to": "bb:47",
"type": "control_flow_fallthrough"
},
{
"from": "bb:47",
"to": "bb:670",
"type": "control_flow"
},
{
"from": "bb:47",
"to": "bb:58",
"type": "control_flow_fallthrough"
},
{
"from": "bb:60",
"to": "bb:271",
"type": "control_flow_fallthrough"
},
{
"from": "bb:271",
"to": "bb:1213",
"type": "control_flow"
},
{
"from": "bb:271",
"to": "bb:297",
"type": "control_flow_fallthrough"
},
{
"from": "bb:297",
"to": "bb:302",
"type": "control_flow_fallthrough"
},
{
"from": "bb:302",
"to": "bb:331",
"type": "control_flow_fallthrough"
},
{
"from": "bb:335",
"to": "bb:1069",
"type": "control_flow"
},
{
"from": "bb:335",
"to": "bb:362",
"type": "control_flow_fallthrough"
},
{
"from": "bb:373",
"to": "bb:635",
"type": "control_flow_fallthrough"
},
{
"from": "bb:635",
"to": "bb:1425",
"type": "control_flow"
},
{
"from": "bb:635",
"to": "bb:661",
"type": "control_flow_fallthrough"
},
{
"from": "bb:661",
"to": "bb:302",
"type": "control_flow"
},
{
"from": "bb:670",
"to": "bb:1117",
"type": "control_flow"
},
{
"from": "bb:670",
"to": "bb:739",
"type": "control_flow_fallthrough"
},
{
"from": "bb:739",
"to": "bb:1074",
"type": "control_flow"
},
{
"from": "bb:739",
"to": "bb:747",
"type": "control_flow_fallthrough"
},
{
"from": "bb:747",
"to": "bb:1117",
"type": "control_flow"
},
{
"from": "bb:766",
"to": "bb:862",
"type": "control_flow"
},
{
"from": "bb:766",
"to": "bb:837",
"type": "control_flow_fallthrough"
},
{
"from": "bb:837",
"to": "bb:862",
"type": "control_flow_fallthrough"
},
{
"from": "bb:876",
"to": "bb:907",
"type": "control_flow"
},
{
"from": "bb:876",
"to": "bb:903",
"type": "control_flow_fallthrough"
},
{
"from": "bb:907",
"to": "bb:1010",
"type": "control_flow"
},
{
"from": "bb:907",
"to": "bb:970",
"type": "control_flow_fallthrough"
},
{
"from": "bb:970",
"to": "bb:982",
"type": "control_flow_fallthrough"
},
{
"from": "bb:982",
"to": "bb:990",
"type": "control_flow_fallthrough"
},
{
"from": "bb:990",
"to": "bb:1065",
"type": "control_flow"
},
{
"from": "bb:990",
"to": "bb:999",
"type": "control_flow_fallthrough"
},
{
"from": "bb:999",
"to": "bb:990",
"type": "control_flow"
},
{
"from": "bb:1010",
"to": "bb:982",
"type": "control_flow"
},
{
"from": "bb:1010",
"to": "bb:1025",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1025",
"to": "bb:1028",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1028",
"to": "bb:982",
"type": "control_flow"
},
{
"from": "bb:1028",
"to": "bb:1037",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1037",
"to": "bb:1028",
"type": "control_flow"
},
{
"from": "bb:1074",
"to": "bb:1088",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1088",
"to": "bb:1088",
"type": "control_flow"
},
{
"from": "bb:1088",
"to": "bb:1108",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1108",
exec
/bin/bash -lc "rg -n 'detector|evidence|selector_map|summary|finding|selfdestruct|38cc4831|524f3889|c281d19e|adf59f99' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
2431: "selfdestruct": 1,
2515: "selfdestruct": 1,
2599: "selfdestruct": 1,
2683: "selfdestruct": 1,
2770: "selfdestruct": 1,
2877: "full": "0x606060405260e060020a600035046338bbfa50811461003c57806341c0e1b51461014f578063a2e6204514610175578063b77644751461029e575b005b60408051602060248035600481810135601f810185900485028601850190965285855261003a9581359591946044949293909201918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a01909352828252969897606497919650602491909101945090925082915084018382808284375094965050505050505061036c600080546040805160e060020a6338cc483102815290518392600160a060020a0316916338cc4831916004828101926020929190829003018187876161da5a03f11561000257505060405151915050600160a060020a0381168214156104bd5761046560005b600060006107be731d11e5eae3112dbd44f99266872ff1d07c77dce85b3b90565b61003a60025433600160a060020a039081169116141561042d5733600160a060020a0316ff5b604080518082018252600381527f55524c00000000000000000000000000000000000000000000000000000000006020828101919091528251608081018452604c81527f6a736f6e2868747470733a2f2f6170692e6b72616b656e2e636f6d2f302f7075818301527f626c69632f5469636b65723f706169723d455448584254292e726573756c742e818501527f58455448585842542e632e300000000000000000000000000000000000000000606082015283516000805460e060020a6338cc4831028352955161003a9661042f969295929493869384938493600160a060020a0316926338cc4831926004828101939192829003018187876161da5a03f11561000257505060405151915050600160a060020a03811682141561059157610539600061012e565b6102fe60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815292919083018282801561045d5780601f106104325761010080835404028352916020019161045d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600160a060020a031633600160a060020a031614151561038b57610002565b8160036000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106103f257805160ff19168380011785555b506104229291505b8082111561042957600081556001016103de565b828001600101855582156103d6579182015b828111156103d6578251826000505591602001919060010190610404565b5050505050565b5090565b565b50565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b505050505081565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a031916821790819055604080517fc281d19e0000000000000000000000000000000000000000000000000000000081529051600160a060020a03929092169163c281d19e9160048181019260209290919082900301816000876161da5a03f115610002575050604051519250505090565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a0319168217908190556040517f524f388900000000000000000000000000000000000000000000000000000000815260206004828101828152895160248501528951600160a060020a03959095169463524f3889948b9492938493604492909201928683019290918291859183918691600091601f850104600f02600301f150905090810190601f1680156106455780820380516001836020036101000a031916815260200191505b50925050506020604051808303816000876161da5a03f11561000257505060405151925050670de0b6b3a764000062030d403a020182111561068f5750600091505b509392505050565b600160009054906101000a9004600160a060020a0316600160a060020a031663adf59f99838888886040518560e060020a0281526004018084815260200180602001806020018381038352858181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561072d5780820380516001836020036101000a031916815260200191505b508381038252848181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156107865780820380516001836020036101000a031916815260200191505b509550505050505060206040518083038185886185025a03f11561000257505060405151945061068792505050565b5060005b919050565b11156107f2575060008054600160a060020a031916731d11e5eae3112dbd44f99266872ff1d07c77dce817905560016107b9565b6000610811739efbea6358bed926b293d2ce63a730d6d98d43dd61014b565b1115610847575060008054739efbea6358bed926b293d2ce63a730d6d98d43dd600160a060020a031990911617905560016107b9565b60006108667320e12a1f859b3feae5fb2a0a32c18f5a65555bbf61014b565b11156107b55750600080547320e12a1f859b3feae5fb2a0a32c18f5a65555bbf600160a060020a031990911617905560016107b956",
3978: "detector_findings": [
3981: "evidence_json": {
4035: "evidence_json": {
4089: "evidence_json": {
4091: "selfdestruct_count": 1
4114: "heuristics_summary": {
4118: "selfdestruct_present"
4120: "selfdestruct_count": 1
exec
/bin/bash -lc "sed -n '3960,4145p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
succeeded in 0ms:
"entry_pc": 3077981301,
"id": "fn:0xa2e62045",
"selector": "0xa2e62045",
"type": "function"
},
{
"entry_pc": null,
"id": "fn:0xb7764475",
"selector": "0xb7764475",
"type": "function"
}
],
"version": "capability_graph_v1"
},
"id": 2563,
"updated_at": "2026-04-04T19:58:14.000000Z",
"version": "capability_graph_v1"
},
"detector_findings": [
{
"confidence": 60,
"evidence_json": {
"call_count": 11,
"examples": [
{
"opcode": "CALL",
"pc": 265,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 629,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 820,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"guards_detected": [],
"untrusted_call_count": 11
},
"normalized_json": {
"sink": "CALL"
},
"severity": "high",
"title": "Untrusted CALL target/value reachable",
"validated": true,
"validation_json": {
"attempts": 1,
"call_targets": [
"0x1d11e5eae3112dbd44f99266872ff1d07c77dce8",
"0x6f28b146804dba2d6f944c03528a8fdbc673df2c",
"0xcad333e2f7ec4058aa5ba825a5de8af4139490c9"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5",
"trace_mode": "callTracer"
}
},
{
"confidence": 55,
"evidence_json": {
"eth_value_calls": 11,
"examples": [
{
"opcode": "CALL",
"pc": 265,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 629,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 820,
"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": [
"0x1d11e5eae3112dbd44f99266872ff1d07c77dce8",
"0x6f28b146804dba2d6f944c03528a8fdbc673df2c",
"0xcad333e2f7ec4058aa5ba825a5de8af4139490c9"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5",
"trace_mode": "callTracer"
}
},
{
"confidence": 65,
"evidence_json": {
"guards_detected": [],
"selfdestruct_count": 1
},
"normalized_json": {
"sink": "SELFDESTRUCT"
},
"severity": "high",
"title": "SELFDESTRUCT reachable",
"validated": false,
"validation_json": {
"attempts": 8,
"call_targets": null,
"classification": "no_sink",
"confirmed": false,
"errors": 0,
"matched_probe": null,
"sink": "SELFDESTRUCT",
"status": "unknown",
"target_varies": null,
"trace_id": "0x15f197da33be53f322e49b04a4d543d589a4f2ad2e4c3695dc2468ea867783b3",
"trace_mode": "structLogs"
}
}
],
"heuristics_summary": {
"create2_count": 0,
"delegatecall_count": 0,
"flags": [
"selfdestruct_present"
],
"selfdestruct_count": 1
}
}
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
j=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=j['artifact']['runtime_bytecode']['full'][2:]
bs=bytes.fromhex(code)
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
def disasm(start,end):
pc=start
out=[]
while pc<=end and pc<len(bs):
op=bs[pc]
name=ops.get(op,f'OP_{op:02x}')
if name.startswith('PUSH'):
n=int(name[4:])
data=bs[pc+1:pc+1+n]
out.append((pc,name,'0x'+data.hex()))
pc+=1+n
else:
out.append((pc,name,''))
pc+=1
return out
for start,end in [(335,372),(373,420),(560,650),(670,875),(1125,1336),(1425,1678),(1679,1972),(1982,2203)]:
print('\\nBLOCK',start,end)
for pc,name,arg in disasm(start,end):
print(f'{pc:04x}: {name} {arg}'.rstrip())
PY" in /tmp/codex-4oykfrvc
succeeded in 0ms:
BLOCK 335 372
014f: JUMPDEST
0150: PUSH2 0x003a
0153: PUSH1 0x02
0155: SLOAD
0156: CALLER
0157: PUSH1 0x01
0159: PUSH1 0xa0
015b: PUSH1 0x02
015d: EXP
015e: SUB
015f: SWAP1
0160: DUP2
0161: AND
0162: SWAP2
0163: AND
0164: EQ
0165: ISZERO
0166: PUSH2 0x042d
0169: JUMPI
016a: CALLER
016b: PUSH1 0x01
016d: PUSH1 0xa0
016f: PUSH1 0x02
0171: EXP
0172: SUB
0173: AND
0174: SELFDESTRUCT
BLOCK 373 420
0175: JUMPDEST
0176: PUSH1 0x40
0178: DUP1
0179: MLOAD
017a: DUP1
017b: DUP3
017c: ADD
017d: DUP3
017e: MSTORE
017f: PUSH1 0x03
0181: DUP2
0182: MSTORE
0183: PUSH32 0x55524c0000000000000000000000000000000000000000000000000000000000
01a4: PUSH1 0x20
BLOCK 560 650
0230: OP_e0
0231: PUSH1 0x02
0233: EXP
0234: PUSH4 0x38cc4831
0239: MUL
023a: DUP4
023b: MSTORE
023c: SWAP6
023d: MLOAD
023e: PUSH2 0x003a
0241: SWAP7
0242: PUSH2 0x042f
0245: SWAP7
0246: SWAP3
0247: SWAP6
0248: SWAP3
0249: SWAP5
024a: SWAP4
024b: DUP7
024c: SWAP4
024d: DUP5
024e: SWAP4
024f: DUP5
0250: SWAP4
0251: PUSH1 0x01
0253: PUSH1 0xa0
0255: PUSH1 0x02
0257: EXP
0258: SUB
0259: AND
025a: SWAP3
025b: PUSH4 0x38cc4831
0260: SWAP3
0261: PUSH1 0x04
0263: DUP3
0264: DUP2
0265: ADD
0266: SWAP4
0267: SWAP2
0268: SWAP3
0269: DUP3
026a: SWAP1
026b: SUB
026c: ADD
026d: DUP2
026e: DUP8
026f: DUP8
0270: PUSH2 0x61da
0273: GAS
0274: SUB
0275: CALL
0276: ISZERO
0277: PUSH2 0x0002
027a: JUMPI
027b: POP
027c: POP
027d: PUSH1 0x40
027f: MLOAD
0280: MLOAD
0281: SWAP2
0282: POP
0283: POP
0284: PUSH1 0x01
0286: PUSH1 0xa0
0288: PUSH1 0x02
028a: EXP
BLOCK 670 875
029e: JUMPDEST
029f: PUSH2 0x02fe
02a2: PUSH1 0x03
02a4: DUP1
02a5: SLOAD
02a6: PUSH1 0x40
02a8: DUP1
02a9: MLOAD
02aa: PUSH1 0x20
02ac: PUSH1 0x1f
02ae: PUSH1 0x02
02b0: PUSH1 0x00
02b2: NOT
02b3: PUSH2 0x0100
02b6: PUSH1 0x01
02b8: DUP9
02b9: AND
02ba: ISZERO
02bb: MUL
02bc: ADD
02bd: SWAP1
02be: SWAP6
02bf: AND
02c0: SWAP5
02c1: SWAP1
02c2: SWAP5
02c3: DIV
02c4: SWAP4
02c5: DUP5
02c6: ADD
02c7: DUP2
02c8: SWAP1
02c9: DIV
02ca: DUP2
02cb: MUL
02cc: DUP3
02cd: ADD
02ce: DUP2
02cf: ADD
02d0: SWAP1
02d1: SWAP3
02d2: MSTORE
02d3: DUP3
02d4: DUP2
02d5: MSTORE
02d6: SWAP3
02d7: SWAP2
02d8: SWAP1
02d9: DUP4
02da: ADD
02db: DUP3
02dc: DUP3
02dd: DUP1
02de: ISZERO
02df: PUSH2 0x045d
02e2: JUMPI
02e3: DUP1
02e4: PUSH1 0x1f
02e6: LT
02e7: PUSH2 0x0432
02ea: JUMPI
02eb: PUSH2 0x0100
02ee: DUP1
02ef: DUP4
02f0: SLOAD
02f1: DIV
02f2: MUL
02f3: DUP4
02f4: MSTORE
02f5: SWAP2
02f6: PUSH1 0x20
02f8: ADD
02f9: SWAP2
02fa: PUSH2 0x045d
02fd: JUMP
02fe: JUMPDEST
02ff: PUSH1 0x40
0301: MLOAD
0302: DUP1
0303: DUP1
0304: PUSH1 0x20
0306: ADD
0307: DUP3
0308: DUP2
0309: SUB
030a: DUP3
030b: MSTORE
030c: DUP4
030d: DUP2
030e: DUP2
030f: MLOAD
0310: DUP2
0311: MSTORE
0312: PUSH1 0x20
0314: ADD
0315: SWAP2
0316: POP
0317: DUP1
0318: MLOAD
0319: SWAP1
031a: PUSH1 0x20
031c: ADD
031d: SWAP1
031e: DUP1
031f: DUP4
0320: DUP4
0321: DUP3
0322: SWAP1
0323: PUSH1 0x00
0325: PUSH1 0x04
0327: PUSH1 0x20
0329: DUP5
032a: PUSH1 0x1f
032c: ADD
032d: DIV
032e: PUSH1 0x0f
0330: MUL
0331: PUSH1 0x03
0333: ADD
0334: CALL
0335: POP
0336: SWAP1
0337: POP
0338: SWAP1
0339: DUP2
033a: ADD
033b: SWAP1
033c: PUSH1 0x1f
033e: AND
033f: DUP1
0340: ISZERO
0341: PUSH2 0x035e
0344: JUMPI
0345: DUP1
0346: DUP3
0347: SUB
0348: DUP1
0349: MLOAD
034a: PUSH1 0x01
034c: DUP4
034d: PUSH1 0x20
034f: SUB
0350: PUSH2 0x0100
0353: EXP
0354: SUB
0355: NOT
0356: AND
0357: DUP2
0358: MSTORE
0359: PUSH1 0x20
035b: ADD
035c: SWAP2
035d: POP
035e: JUMPDEST
035f: POP
0360: SWAP3
0361: POP
0362: POP
0363: POP
0364: PUSH1 0x40
0366: MLOAD
0367: DUP1
0368: SWAP2
0369: SUB
036a: SWAP1
036b: RETURN
BLOCK 1125 1336
0465: JUMPDEST
0466: POP
0467: PUSH1 0x00
0469: PUSH1 0x00
046b: SWAP1
046c: SLOAD
046d: SWAP1
046e: PUSH2 0x0100
0471: EXP
0472: SWAP1
0473: DIV
0474: PUSH1 0x01
0476: PUSH1 0xa0
0478: PUSH1 0x02
047a: EXP
047b: SUB
047c: AND
047d: PUSH1 0x01
047f: PUSH1 0xa0
0481: PUSH1 0x02
0483: EXP
0484: SUB
0485: AND
0486: PUSH4 0x38cc4831
048b: PUSH1 0x40
048d: MLOAD
048e: DUP2
048f: PUSH1 0xe0
0491: PUSH1 0x02
0493: EXP
0494: MUL
0495: DUP2
0496: MSTORE
0497: PUSH1 0x04
0499: ADD
049a: DUP1
049b: SWAP1
049c: POP
049d: PUSH1 0x20
049f: PUSH1 0x40
04a1: MLOAD
04a2: DUP1
04a3: DUP4
04a4: SUB
04a5: DUP2
04a6: PUSH1 0x00
04a8: DUP8
04a9: PUSH2 0x61da
04ac: GAS
04ad: SUB
04ae: CALL
04af: ISZERO
04b0: PUSH2 0x0002
04b3: JUMPI
04b4: POP
04b5: POP
04b6: PUSH1 0x40
04b8: MLOAD
04b9: MLOAD
04ba: SWAP2
04bb: POP
04bc: POP
04bd: JUMPDEST
04be: PUSH1 0x01
04c0: DUP1
04c1: SLOAD
04c2: PUSH1 0x01
04c4: PUSH1 0xa0
04c6: PUSH1 0x02
04c8: EXP
04c9: SUB
04ca: NOT
04cb: AND
04cc: DUP3
04cd: OR
04ce: SWAP1
04cf: DUP2
04d0: SWAP1
04d1: SSTORE
04d2: PUSH1 0x40
04d4: DUP1
04d5: MLOAD
04d6: PUSH32 0xc281d19e00000000000000000000000000000000000000000000000000000000
04f7: DUP2
04f8: MSTORE
04f9: SWAP1
04fa: MLOAD
04fb: PUSH1 0x01
04fd: PUSH1 0xa0
04ff: PUSH1 0x02
0501: EXP
0502: SUB
0503: SWAP3
0504: SWAP1
0505: SWAP3
0506: AND
0507: SWAP2
0508: PUSH4 0xc281d19e
050d: SWAP2
050e: PUSH1 0x04
0510: DUP2
0511: DUP2
0512: ADD
0513: SWAP3
0514: PUSH1 0x20
0516: SWAP3
0517: SWAP1
0518: SWAP2
0519: SWAP1
051a: DUP3
051b: SWAP1
051c: SUB
051d: ADD
051e: DUP2
051f: PUSH1 0x00
0521: DUP8
0522: PUSH2 0x61da
0525: GAS
0526: SUB
0527: CALL
0528: ISZERO
0529: PUSH2 0x0002
052c: JUMPI
052d: POP
052e: POP
052f: PUSH1 0x40
0531: MLOAD
0532: MLOAD
0533: SWAP3
0534: POP
0535: POP
0536: POP
0537: SWAP1
0538: JUMP
BLOCK 1425 1678
0591: JUMPDEST
0592: PUSH1 0x01
0594: DUP1
0595: SLOAD
0596: PUSH1 0x01
0598: PUSH1 0xa0
059a: PUSH1 0x02
059c: EXP
059d: SUB
059e: NOT
059f: AND
05a0: DUP3
05a1: OR
05a2: SWAP1
05a3: DUP2
05a4: SWAP1
05a5: SSTORE
05a6: PUSH1 0x40
05a8: MLOAD
05a9: PUSH32 0x524f388900000000000000000000000000000000000000000000000000000000
05ca: DUP2
05cb: MSTORE
05cc: PUSH1 0x20
05ce: PUSH1 0x04
05d0: DUP3
05d1: DUP2
05d2: ADD
05d3: DUP3
05d4: DUP2
05d5: MSTORE
05d6: DUP10
05d7: MLOAD
05d8: PUSH1 0x24
05da: DUP6
05db: ADD
05dc: MSTORE
05dd: DUP10
05de: MLOAD
05df: PUSH1 0x01
05e1: PUSH1 0xa0
05e3: PUSH1 0x02
05e5: EXP
05e6: SUB
05e7: SWAP6
05e8: SWAP1
05e9: SWAP6
05ea: AND
05eb: SWAP5
05ec: PUSH4 0x524f3889
05f1: SWAP5
05f2: DUP12
05f3: SWAP5
05f4: SWAP3
05f5: SWAP4
05f6: DUP5
05f7: SWAP4
05f8: PUSH1 0x44
05fa: SWAP3
05fb: SWAP1
05fc: SWAP3
05fd: ADD
05fe: SWAP3
05ff: DUP7
0600: DUP4
0601: ADD
0602: SWAP3
0603: SWAP1
0604: SWAP2
0605: DUP3
0606: SWAP2
0607: DUP6
0608: SWAP2
0609: DUP4
060a: SWAP2
060b: DUP7
060c: SWAP2
060d: PUSH1 0x00
060f: SWAP2
0610: PUSH1 0x1f
0612: DUP6
0613: ADD
0614: DIV
0615: PUSH1 0x0f
0617: MUL
0618: PUSH1 0x03
061a: ADD
061b: CALL
061c: POP
061d: SWAP1
061e: POP
061f: SWAP1
0620: DUP2
0621: ADD
0622: SWAP1
0623: PUSH1 0x1f
0625: AND
0626: DUP1
0627: ISZERO
0628: PUSH2 0x0645
062b: JUMPI
062c: DUP1
062d: DUP3
062e: SUB
062f: DUP1
0630: MLOAD
0631: PUSH1 0x01
0633: DUP4
0634: PUSH1 0x20
0636: SUB
0637: PUSH2 0x0100
063a: EXP
063b: SUB
063c: NOT
063d: AND
063e: DUP2
063f: MSTORE
0640: PUSH1 0x20
0642: ADD
0643: SWAP2
0644: POP
0645: JUMPDEST
0646: POP
0647: SWAP3
0648: POP
0649: POP
064a: POP
064b: PUSH1 0x20
064d: PUSH1 0x40
064f: MLOAD
0650: DUP1
0651: DUP4
0652: SUB
0653: DUP2
0654: PUSH1 0x00
0656: DUP8
0657: PUSH2 0x61da
065a: GAS
065b: SUB
065c: CALL
065d: ISZERO
065e: PUSH2 0x0002
0661: JUMPI
0662: POP
0663: POP
0664: PUSH1 0x40
0666: MLOAD
0667: MLOAD
0668: SWAP3
0669: POP
066a: POP
066b: PUSH8 0x0de0b6b3a7640000
0674: PUSH3 0x030d40
0678: GASPRICE
0679: MUL
067a: ADD
067b: DUP3
067c: GT
067d: ISZERO
067e: PUSH2 0x068f
0681: JUMPI
0682: POP
0683: PUSH1 0x00
0685: SWAP2
0686: POP
0687: JUMPDEST
0688: POP
0689: SWAP4
068a: SWAP3
068b: POP
068c: POP
068d: POP
068e: JUMP
BLOCK 1679 1972
068f: JUMPDEST
0690: PUSH1 0x01
0692: PUSH1 0x00
0694: SWAP1
0695: SLOAD
0696: SWAP1
0697: PUSH2 0x0100
069a: EXP
069b: SWAP1
069c: DIV
069d: PUSH1 0x01
069f: PUSH1 0xa0
06a1: PUSH1 0x02
06a3: EXP
06a4: SUB
06a5: AND
06a6: PUSH1 0x01
06a8: PUSH1 0xa0
06aa: PUSH1 0x02
06ac: EXP
06ad: SUB
06ae: AND
06af: PUSH4 0xadf59f99
06b4: DUP4
06b5: DUP9
06b6: DUP9
06b7: DUP9
06b8: PUSH1 0x40
06ba: MLOAD
06bb: DUP6
06bc: PUSH1 0xe0
06be: PUSH1 0x02
06c0: EXP
06c1: MUL
06c2: DUP2
06c3: MSTORE
06c4: PUSH1 0x04
06c6: ADD
06c7: DUP1
06c8: DUP5
06c9: DUP2
06ca: MSTORE
06cb: PUSH1 0x20
06cd: ADD
06ce: DUP1
06cf: PUSH1 0x20
06d1: ADD
06d2: DUP1
06d3: PUSH1 0x20
06d5: ADD
06d6: DUP4
06d7: DUP2
06d8: SUB
06d9: DUP4
06da: MSTORE
06db: DUP6
06dc: DUP2
06dd: DUP2
06de: MLOAD
06df: DUP2
06e0: MSTORE
06e1: PUSH1 0x20
06e3: ADD
06e4: SWAP2
06e5: POP
06e6: DUP1
06e7: MLOAD
06e8: SWAP1
06e9: PUSH1 0x20
06eb: ADD
06ec: SWAP1
06ed: DUP1
06ee: DUP4
06ef: DUP4
06f0: DUP3
06f1: SWAP1
06f2: PUSH1 0x00
06f4: PUSH1 0x04
06f6: PUSH1 0x20
06f8: DUP5
06f9: PUSH1 0x1f
06fb: ADD
06fc: DIV
06fd: PUSH1 0x0f
06ff: MUL
0700: PUSH1 0x03
0702: ADD
0703: CALL
0704: POP
0705: SWAP1
0706: POP
0707: SWAP1
0708: DUP2
0709: ADD
070a: SWAP1
070b: PUSH1 0x1f
070d: AND
070e: DUP1
070f: ISZERO
0710: PUSH2 0x072d
0713: JUMPI
0714: DUP1
0715: DUP3
0716: SUB
0717: DUP1
0718: MLOAD
0719: PUSH1 0x01
071b: DUP4
071c: PUSH1 0x20
071e: SUB
071f: PUSH2 0x0100
0722: EXP
0723: SUB
0724: NOT
0725: AND
0726: DUP2
0727: MSTORE
0728: PUSH1 0x20
072a: ADD
072b: SWAP2
072c: POP
072d: JUMPDEST
072e: POP
072f: DUP4
0730: DUP2
0731: SUB
0732: DUP3
0733: MSTORE
0734: DUP5
0735: DUP2
0736: DUP2
0737: MLOAD
0738: DUP2
0739: MSTORE
073a: PUSH1 0x20
073c: ADD
073d: SWAP2
073e: POP
073f: DUP1
0740: MLOAD
0741: SWAP1
0742: PUSH1 0x20
0744: ADD
0745: SWAP1
0746: DUP1
0747: DUP4
0748: DUP4
0749: DUP3
074a: SWAP1
074b: PUSH1 0x00
074d: PUSH1 0x04
074f: PUSH1 0x20
0751: DUP5
0752: PUSH1 0x1f
0754: ADD
0755: DIV
0756: PUSH1 0x0f
0758: MUL
0759: PUSH1 0x03
075b: ADD
075c: CALL
075d: POP
075e: SWAP1
075f: POP
0760: SWAP1
0761: DUP2
0762: ADD
0763: SWAP1
0764: PUSH1 0x1f
0766: AND
0767: DUP1
0768: ISZERO
0769: PUSH2 0x0786
076c: JUMPI
076d: DUP1
076e: DUP3
076f: SUB
0770: DUP1
0771: MLOAD
0772: PUSH1 0x01
0774: DUP4
0775: PUSH1 0x20
0777: SUB
0778: PUSH2 0x0100
077b: EXP
077c: SUB
077d: NOT
077e: AND
077f: DUP2
0780: MSTORE
0781: PUSH1 0x20
0783: ADD
0784: SWAP2
0785: POP
0786: JUMPDEST
0787: POP
0788: SWAP6
0789: POP
078a: POP
078b: POP
078c: POP
078d: POP
078e: POP
078f: PUSH1 0x20
0791: PUSH1 0x40
0793: MLOAD
0794: DUP1
0795: DUP4
0796: SUB
0797: DUP2
0798: DUP6
0799: DUP9
079a: PUSH2 0x8502
079d: GAS
079e: SUB
079f: CALL
07a0: ISZERO
07a1: PUSH2 0x0002
07a4: JUMPI
07a5: POP
07a6: POP
07a7: PUSH1 0x40
07a9: MLOAD
07aa: MLOAD
07ab: SWAP5
07ac: POP
07ad: PUSH2 0x0687
07b0: SWAP3
07b1: POP
07b2: POP
07b3: POP
07b4: JUMP
BLOCK 1982 2203
07be: JUMPDEST
07bf: GT
07c0: ISZERO
07c1: PUSH2 0x07f2
07c4: JUMPI
07c5: POP
07c6: PUSH1 0x00
07c8: DUP1
07c9: SLOAD
07ca: PUSH1 0x01
07cc: PUSH1 0xa0
07ce: PUSH1 0x02
07d0: EXP
07d1: SUB
07d2: NOT
07d3: AND
07d4: PUSH20 0x1d11e5eae3112dbd44f99266872ff1d07c77dce8
07e9: OR
07ea: SWAP1
07eb: SSTORE
07ec: PUSH1 0x01
07ee: PUSH2 0x07b9
07f1: JUMP
07f2: JUMPDEST
07f3: PUSH1 0x00
07f5: PUSH2 0x0811
07f8: PUSH20 0x9efbea6358bed926b293d2ce63a730d6d98d43dd
080d: PUSH2 0x014b
0810: JUMP
0811: JUMPDEST
0812: GT
0813: ISZERO
0814: PUSH2 0x0847
0817: JUMPI
0818: POP
0819: PUSH1 0x00
081b: DUP1
081c: SLOAD
081d: PUSH20 0x9efbea6358bed926b293d2ce63a730d6d98d43dd
0832: PUSH1 0x01
0834: PUSH1 0xa0
0836: PUSH1 0x02
0838: EXP
0839: SUB
083a: NOT
083b: SWAP1
083c: SWAP2
083d: AND
083e: OR
083f: SWAP1
0840: SSTORE
0841: PUSH1 0x01
0843: PUSH2 0x07b9
0846: JUMP
0847: JUMPDEST
0848: PUSH1 0x00
084a: PUSH2 0x0866
084d: PUSH20 0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf
0862: PUSH2 0x014b
0865: JUMP
0866: JUMPDEST
0867: GT
0868: ISZERO
0869: PUSH2 0x07b5
086c: JUMPI
086d: POP
086e: PUSH1 0x00
0870: DUP1
0871: SLOAD
0872: PUSH20 0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf
0887: PUSH1 0x01
0889: PUSH1 0xa0
088b: PUSH1 0x02
088d: EXP
088e: SUB
088f: NOT
0890: SWAP1
0891: SWAP2
0892: AND
0893: OR
0894: SWAP1
0895: SSTORE
0896: PUSH1 0x01
0898: PUSH2 0x07b9
089b: JUMP
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
j=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
bs=bytes.fromhex(j['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
pc=0
while pc<373:
op=bs[pc]; name=ops.get(op,f'OP_{op:02x}')
if name.startswith('PUSH'):
n=int(name[4:]); data='0x'+bs[pc+1:pc+1+n].hex();
print(f'{pc:04x}: {name} {data}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-4oykfrvc
succeeded in 0ms:
0000: PUSH1 0x60
0002: PUSH1 0x40
0004: MSTORE
0005: PUSH1 0xe0
0007: PUSH1 0x02
0009: EXP
000a: PUSH1 0x00
000c: CALLDATALOAD
000d: DIV
000e: PUSH4 0x38bbfa50
0013: DUP2
0014: EQ
0015: PUSH2 0x003c
0018: JUMPI
0019: DUP1
001a: PUSH4 0x41c0e1b5
001f: EQ
0020: PUSH2 0x014f
0023: JUMPI
0024: DUP1
0025: PUSH4 0xa2e62045
002a: EQ
002b: PUSH2 0x0175
002e: JUMPI
002f: DUP1
0030: PUSH4 0xb7764475
0035: EQ
0036: PUSH2 0x029e
0039: JUMPI
003a: JUMPDEST
003b: STOP
003c: JUMPDEST
003d: PUSH1 0x40
003f: DUP1
0040: MLOAD
0041: PUSH1 0x20
0043: PUSH1 0x24
0045: DUP1
0046: CALLDATALOAD
0047: PUSH1 0x04
0049: DUP2
004a: DUP2
004b: ADD
004c: CALLDATALOAD
004d: PUSH1 0x1f
004f: DUP2
0050: ADD
0051: DUP6
0052: SWAP1
0053: DIV
0054: DUP6
0055: MUL
0056: DUP7
0057: ADD
0058: DUP6
0059: ADD
005a: SWAP1
005b: SWAP7
005c: MSTORE
005d: DUP6
005e: DUP6
005f: MSTORE
0060: PUSH2 0x003a
0063: SWAP6
0064: DUP2
0065: CALLDATALOAD
0066: SWAP6
0067: SWAP2
0068: SWAP5
0069: PUSH1 0x44
006b: SWAP5
006c: SWAP3
006d: SWAP4
006e: SWAP1
006f: SWAP3
0070: ADD
0071: SWAP2
0072: DUP2
0073: SWAP1
0074: DUP5
0075: ADD
0076: DUP4
0077: DUP3
0078: DUP1
0079: DUP3
007a: DUP5
007b: CALLDATACOPY
007c: POP
007d: POP
007e: PUSH1 0x40
0080: DUP1
0081: MLOAD
0082: PUSH1 0x20
0084: SWAP8
0085: CALLDATALOAD
0086: DUP1
0087: DUP11
0088: ADD
0089: CALLDATALOAD
008a: PUSH1 0x1f
008c: DUP2
008d: ADD
008e: DUP11
008f: SWAP1
0090: DIV
0091: DUP11
0092: MUL
0093: DUP4
0094: ADD
0095: DUP11
0096: ADD
0097: SWAP1
0098: SWAP4
0099: MSTORE
009a: DUP3
009b: DUP3
009c: MSTORE
009d: SWAP7
009e: SWAP9
009f: SWAP8
00a0: PUSH1 0x64
00a2: SWAP8
00a3: SWAP2
00a4: SWAP7
00a5: POP
00a6: PUSH1 0x24
00a8: SWAP2
00a9: SWAP1
00aa: SWAP2
00ab: ADD
00ac: SWAP5
00ad: POP
00ae: SWAP1
00af: SWAP3
00b0: POP
00b1: DUP3
00b2: SWAP2
00b3: POP
00b4: DUP5
00b5: ADD
00b6: DUP4
00b7: DUP3
00b8: DUP1
00b9: DUP3
00ba: DUP5
00bb: CALLDATACOPY
00bc: POP
00bd: SWAP5
00be: SWAP7
00bf: POP
00c0: POP
00c1: POP
00c2: POP
00c3: POP
00c4: POP
00c5: POP
00c6: PUSH2 0x036c
00c9: PUSH1 0x00
00cb: DUP1
00cc: SLOAD
00cd: PUSH1 0x40
00cf: DUP1
00d0: MLOAD
00d1: PUSH1 0xe0
00d3: PUSH1 0x02
00d5: EXP
00d6: PUSH4 0x38cc4831
00db: MUL
00dc: DUP2
00dd: MSTORE
00de: SWAP1
00df: MLOAD
00e0: DUP4
00e1: SWAP3
00e2: PUSH1 0x01
00e4: PUSH1 0xa0
00e6: PUSH1 0x02
00e8: EXP
00e9: SUB
00ea: AND
00eb: SWAP2
00ec: PUSH4 0x38cc4831
00f1: SWAP2
00f2: PUSH1 0x04
00f4: DUP3
00f5: DUP2
00f6: ADD
00f7: SWAP3
00f8: PUSH1 0x20
00fa: SWAP3
00fb: SWAP2
00fc: SWAP1
00fd: DUP3
00fe: SWAP1
00ff: SUB
0100: ADD
0101: DUP2
0102: DUP8
0103: DUP8
0104: PUSH2 0x61da
0107: GAS
0108: SUB
0109: CALL
010a: ISZERO
010b: PUSH2 0x0002
010e: JUMPI
010f: POP
0110: POP
0111: PUSH1 0x40
0113: MLOAD
0114: MLOAD
0115: SWAP2
0116: POP
0117: POP
0118: PUSH1 0x01
011a: PUSH1 0xa0
011c: PUSH1 0x02
011e: EXP
011f: SUB
0120: DUP2
0121: AND
0122: DUP3
0123: EQ
0124: ISZERO
0125: PUSH2 0x04bd
0128: JUMPI
0129: PUSH2 0x0465
012c: PUSH1 0x00
012e: JUMPDEST
012f: PUSH1 0x00
0131: PUSH1 0x00
0133: PUSH2 0x07be
0136: PUSH20 0x1d11e5eae3112dbd44f99266872ff1d07c77dce8
014b: JUMPDEST
014c: EXTCODESIZE
014d: SWAP1
014e: JUMP
014f: JUMPDEST
0150: PUSH2 0x003a
0153: PUSH1 0x02
0155: SLOAD
0156: CALLER
0157: PUSH1 0x01
0159: PUSH1 0xa0
015b: PUSH1 0x02
015d: EXP
015e: SUB
015f: SWAP1
0160: DUP2
0161: AND
0162: SWAP2
0163: AND
0164: EQ
0165: ISZERO
0166: PUSH2 0x042d
0169: JUMPI
016a: CALLER
016b: PUSH1 0x01
016d: PUSH1 0xa0
016f: PUSH1 0x02
0171: EXP
0172: SUB
0173: AND
0174: SELFDESTRUCT
web search:
web search: 4byte 38cc4831 c281d19e 524f3889 adf59f99
web search:
web search: "c281d19e" "4byte"
web search:
web search: site:4byte.directory/event-signatures/?bytes4_signature= c281d19e
web search:
web search:
web search:
web search: "https://www.4byte.directory/api/v1/signatures/?hex_signature=0xc281d19e"
web search:
web search: "https://www.4byte.directory/api/v1/signatures/?hex_signature=0xc281d19e" site:github.com OR site:4byte.directory
web search:
web search: site:4byte.directory/signatures/ "0xc281d19e"
web search:
web search: site:4byte.directory/signatures/ "0xc281d19e"
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
j=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
bs=bytes.fromhex(j['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
pc=373
while pc<670:
op=bs[pc]; name=ops.get(op,f'OP_{op:02x}')
if name.startswith('PUSH'):
n=int(name[4:]); data='0x'+bs[pc+1:pc+1+n].hex();
print(f'{pc:04x}: {name} {data}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-4oykfrvc
succeeded in 0ms:
0175: JUMPDEST
0176: PUSH1 0x40
0178: DUP1
0179: MLOAD
017a: DUP1
017b: DUP3
017c: ADD
017d: DUP3
017e: MSTORE
017f: PUSH1 0x03
0181: DUP2
0182: MSTORE
0183: PUSH32 0x55524c0000000000000000000000000000000000000000000000000000000000
01a4: PUSH1 0x20
01a6: DUP3
01a7: DUP2
01a8: ADD
01a9: SWAP2
01aa: SWAP1
01ab: SWAP2
01ac: MSTORE
01ad: DUP3
01ae: MLOAD
01af: PUSH1 0x80
01b1: DUP2
01b2: ADD
01b3: DUP5
01b4: MSTORE
01b5: PUSH1 0x4c
01b7: DUP2
01b8: MSTORE
01b9: PUSH32 0x6a736f6e2868747470733a2f2f6170692e6b72616b656e2e636f6d2f302f7075
01da: DUP2
01db: DUP4
01dc: ADD
01dd: MSTORE
01de: PUSH32 0x626c69632f5469636b65723f706169723d455448584254292e726573756c742e
01ff: DUP2
0200: DUP6
0201: ADD
0202: MSTORE
0203: PUSH32 0x58455448585842542e632e300000000000000000000000000000000000000000
0224: PUSH1 0x60
0226: DUP3
0227: ADD
0228: MSTORE
0229: DUP4
022a: MLOAD
022b: PUSH1 0x00
022d: DUP1
022e: SLOAD
022f: PUSH1 0xe0
0231: PUSH1 0x02
0233: EXP
0234: PUSH4 0x38cc4831
0239: MUL
023a: DUP4
023b: MSTORE
023c: SWAP6
023d: MLOAD
023e: PUSH2 0x003a
0241: SWAP7
0242: PUSH2 0x042f
0245: SWAP7
0246: SWAP3
0247: SWAP6
0248: SWAP3
0249: SWAP5
024a: SWAP4
024b: DUP7
024c: SWAP4
024d: DUP5
024e: SWAP4
024f: DUP5
0250: SWAP4
0251: PUSH1 0x01
0253: PUSH1 0xa0
0255: PUSH1 0x02
0257: EXP
0258: SUB
0259: AND
025a: SWAP3
025b: PUSH4 0x38cc4831
0260: SWAP3
0261: PUSH1 0x04
0263: DUP3
0264: DUP2
0265: ADD
0266: SWAP4
0267: SWAP2
0268: SWAP3
0269: DUP3
026a: SWAP1
026b: SUB
026c: ADD
026d: DUP2
026e: DUP8
026f: DUP8
0270: PUSH2 0x61da
0273: GAS
0274: SUB
0275: CALL
0276: ISZERO
0277: PUSH2 0x0002
027a: JUMPI
027b: POP
027c: POP
027d: PUSH1 0x40
027f: MLOAD
0280: MLOAD
0281: SWAP2
0282: POP
0283: POP
0284: PUSH1 0x01
0286: PUSH1 0xa0
0288: PUSH1 0x02
028a: EXP
028b: SUB
028c: DUP2
028d: AND
028e: DUP3
028f: EQ
0290: ISZERO
0291: PUSH2 0x0591
0294: JUMPI
0295: PUSH2 0x0539
0298: PUSH1 0x00
029a: PUSH2 0x012e
029d: JUMP
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
j=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
bs=bytes.fromhex(j['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
for start,end in [(876,910),(907,1068),(1074,1124)]:
print('\\n',start,end)
pc=start
while pc<=end:
op=bs[pc]; name=ops.get(op,f'OP_{op:02x}')
if name.startswith('PUSH'):
n=int(name[4:]); data='0x'+bs[pc+1:pc+1+n].hex(); print(f'{pc:04x}: {name} {data}'); pc+=1+n
else:
print(f'{pc:04x}: {name}'); pc+=1
PY" in /tmp/codex-4oykfrvc
succeeded in 0ms:
876 910
036c: JUMPDEST
036d: PUSH1 0x01
036f: PUSH1 0xa0
0371: PUSH1 0x02
0373: EXP
0374: SUB
0375: AND
0376: CALLER
0377: PUSH1 0x01
0379: PUSH1 0xa0
037b: PUSH1 0x02
037d: EXP
037e: SUB
037f: AND
0380: EQ
0381: ISZERO
0382: ISZERO
0383: PUSH2 0x038b
0386: JUMPI
0387: PUSH2 0x0002
038a: JUMP
038b: JUMPDEST
038c: DUP2
038d: PUSH1 0x03
907 1068
038b: JUMPDEST
038c: DUP2
038d: PUSH1 0x03
038f: PUSH1 0x00
0391: POP
0392: SWAP1
0393: DUP1
0394: MLOAD
0395: SWAP1
0396: PUSH1 0x20
0398: ADD
0399: SWAP1
039a: DUP3
039b: DUP1
039c: SLOAD
039d: PUSH1 0x01
039f: DUP2
03a0: PUSH1 0x01
03a2: AND
03a3: ISZERO
03a4: PUSH2 0x0100
03a7: MUL
03a8: SUB
03a9: AND
03aa: PUSH1 0x02
03ac: SWAP1
03ad: DIV
03ae: SWAP1
03af: PUSH1 0x00
03b1: MSTORE
03b2: PUSH1 0x20
03b4: PUSH1 0x00
03b6: SHA3
03b7: SWAP1
03b8: PUSH1 0x1f
03ba: ADD
03bb: PUSH1 0x20
03bd: SWAP1
03be: DIV
03bf: DUP2
03c0: ADD
03c1: SWAP3
03c2: DUP3
03c3: PUSH1 0x1f
03c5: LT
03c6: PUSH2 0x03f2
03c9: JUMPI
03ca: DUP1
03cb: MLOAD
03cc: PUSH1 0xff
03ce: NOT
03cf: AND
03d0: DUP4
03d1: DUP1
03d2: ADD
03d3: OR
03d4: DUP6
03d5: SSTORE
03d6: JUMPDEST
03d7: POP
03d8: PUSH2 0x0422
03db: SWAP3
03dc: SWAP2
03dd: POP
03de: JUMPDEST
03df: DUP1
03e0: DUP3
03e1: GT
03e2: ISZERO
03e3: PUSH2 0x0429
03e6: JUMPI
03e7: PUSH1 0x00
03e9: DUP2
03ea: SSTORE
03eb: PUSH1 0x01
03ed: ADD
03ee: PUSH2 0x03de
03f1: JUMP
03f2: JUMPDEST
03f3: DUP3
03f4: DUP1
03f5: ADD
03f6: PUSH1 0x01
03f8: ADD
03f9: DUP6
03fa: SSTORE
03fb: DUP3
03fc: ISZERO
03fd: PUSH2 0x03d6
0400: JUMPI
0401: SWAP2
0402: DUP3
0403: ADD
0404: JUMPDEST
0405: DUP3
0406: DUP2
0407: GT
0408: ISZERO
0409: PUSH2 0x03d6
040c: JUMPI
040d: DUP3
040e: MLOAD
040f: DUP3
0410: PUSH1 0x00
0412: POP
0413: SSTORE
0414: SWAP2
0415: PUSH1 0x20
0417: ADD
0418: SWAP2
0419: SWAP1
041a: PUSH1 0x01
041c: ADD
041d: SWAP1
041e: PUSH2 0x0404
0421: JUMP
0422: JUMPDEST
0423: POP
0424: POP
0425: POP
0426: POP
0427: POP
0428: JUMP
0429: JUMPDEST
042a: POP
042b: SWAP1
042c: JUMP
1074 1124
0432: JUMPDEST
0433: DUP3
0434: ADD
0435: SWAP2
0436: SWAP1
0437: PUSH1 0x00
0439: MSTORE
043a: PUSH1 0x20
043c: PUSH1 0x00
043e: SHA3
043f: SWAP1
0440: JUMPDEST
0441: DUP2
0442: SLOAD
0443: DUP2
0444: MSTORE
0445: SWAP1
0446: PUSH1 0x01
0448: ADD
0449: SWAP1
044a: PUSH1 0x20
044c: ADD
044d: DUP1
044e: DUP4
044f: GT
0450: PUSH2 0x0440
0453: JUMPI
0454: DUP3
0455: SWAP1
0456: SUB
0457: PUSH1 0x1f
0459: AND
045a: DUP3
045b: ADD
045c: SWAP2
045d: JUMPDEST
045e: POP
045f: POP
0460: POP
0461: POP
0462: POP
0463: DUP2
0464: JUMP
web search:
web search: EIP-6780 SELFDESTRUCT semantics Cancun mainnet
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
j=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=j['artifact']['runtime_bytecode']['full'][2:]
bs=bytes.fromhex(code)
print('CALLVALUE count', bs.count(bytes([0x34])))
for i,b in enumerate(bs):
if b==0x34:
print(i)
PY" in /tmp/codex-4oykfrvc
succeeded in 0ms:
CALLVALUE count 0
web search:
web search: site:4byte.directory/signatures/ "0x41c0e1b5"
web search:
web search: site:4byte.directory/signatures/ "0xb7764475"
web search:
web search: site:4byte.directory/signatures/ "0xc281d19e" "oraclize"
web search:
web search: "api.kraken.com/0/public/Ticker?pair=ETHXBT" solidity oraclize
exec
/bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-4oykfrvc
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"}}}}}}}
web search:
web search: site:4byte.directory/signatures/ "0xa2e62045" "update()" "oraclize"
web search:
web search: site:4byte.directory/signatures/ "0x41c0e1b5" "kill()"
web search:
web search: site:4byte.directory/signatures/ "0xb7764475"
web search:
web search: site:4byte.directory/signatures/ "0x38cc4831"
web search:
web search: oraclize resolver getAddress() 38cc4831
codex
{"no_findings":false,"summary":"Runtime bytecode matches an Oraclize/Provable-style oracle client with a public `update()` path, a `__callback(bytes32,string,bytes)` entrypoint, and a privileged `kill()` path. Based on runtime-only evidence, the main issues are missing callback/query correlation, public spending of contract ETH on oracle calls, and a retained owner kill switch. Selector names are inferred best-effort from bytecode/4byte matches.","findings":[{"severity":"medium","category":"oracle","title":"Oracle callback accepts any authorized sender response without validating a pending query id","exploit_scenario":"An attacker can trigger multiple outstanding oracle updates through the public query path. Because the callback appears to authenticate only the oracle sender and not the `bytes32` request id, a stale or later oracle reply can overwrite the currently stored result in slot 3. If the oracle/resolver side is ever misconfigured or compromised, arbitrary callback data would be accepted as long as it comes from the resolved oracle address.","recommendation":"Persist the returned query id from the query call and require `_queryId` to match an expected pending id before accepting callback data. If multiple requests are allowed, track them explicitly and clear them after use.","evidence":"Selector `0x38bbfa50` matches `__callback(bytes32,string,bytes)`. The callback path decodes three arguments, then at `pc:0x036c` checks only that `CALLER` matches the resolved oracle address before entering the string-storage routine at `pc:0x038b`. The public oracle-query path at `selector:0xa2e62045` performs `query(uint256,string,string)` via selector `0xadf59f99` at `pc:0x0703`, but the returned request id is not written to storage; storage writes are limited to slots 0/1/3 and dynamic string data.","locations":["selector:0x38bbfa50","selector:0xa2e62045","pc:0x036c","pc:0x0703"]},{"severity":"medium","category":"access_control","title":"Public `update()` path can spend ETH from contract balance on oracle queries","exploit_scenario":"If this contract holds ETH to subsidize oracle usage, any external account can call the public update function and force the contract to pay oracle fees. Repeated calls can drain the balance into oracle payments or trigger unwanted offchain queries, even if the caller is not otherwise trusted.","recommendation":"Restrict the query-triggering function to an authorized operator, or require the caller to supply and account for the exact oracle fee so existing contract balance cannot be consumed by arbitrary users.","evidence":"Selector `0xa2e62045` resolves to a public `update()` entrypoint. Its body builds a fixed Kraken URL query, calls the oracle pricing path (`getPrice(...)`) around `pc:0x065c`, and then performs the actual oracle query call at `pc:0x0703`. The artifact reports no auth guards for this function, and detector validation confirmed reachable `CALL` sites with possible nonzero ETH value and varying external targets. There is no visible `CALLVALUE`-based accounting or owner check in runtime bytecode.","locations":["selector:0xa2e62045","pc:0x065c","pc:0x0703"]},{"severity":"low","category":"auth","title":"Privileged kill switch can sweep balance via `SELFDESTRUCT`","exploit_scenario":"Whoever controls the address stored in slot 2 can invoke the kill function and force a terminal balance sweep to themselves. Even if this is intended admin functionality, compromise or abuse of that key breaks trust assumptions for funds held by the contract.","recommendation":"Remove the kill path if it is unnecessary, or gate it behind a multisig/timelock and document the administrative trust model clearly.","evidence":"Selector `0x41c0e1b5` matches `kill()`. At `pc:0x0155` the function reads slot 2, masks it to 160 bits, and compares it to `CALLER`. If equal, execution reaches `SELFDESTRUCT` at `pc:0x0174`, sending funds to the caller.","locations":["selector:0x41c0e1b5","pc:0x0155","pc:0x0174"]}]}
tokens used
136,754
{
"codex": {
"ran_at": "2026-04-05T05:42:36.896248+00:00",
"returncode": 0
},
"project": {
"mode": "bytecode",
"bytecode_length": 4410,
"bytecode_truncated": false,
"capability_graph_present": true,
"analysis_artifact_present": true
},
"summary": "Runtime bytecode matches an Oraclize/Provable-style oracle client with a public `update()` path, a `__callback(bytes32,string,bytes)` entrypoint, and a privileged `kill()` path. Based on runtime-only evidence, the main issues are missing callback/query correlation, public spending of contract ETH on oracle calls, and a retained owner kill switch. Selector names are inferred best-effort from bytecode/4byte matches.",
"raw_final": {
"summary": "Runtime bytecode matches an Oraclize/Provable-style oracle client with a public `update()` path, a `__callback(bytes32,string,bytes)` entrypoint, and a privileged `kill()` path. Based on runtime-only evidence, the main issues are missing callback/query correlation, public spending of contract ETH on oracle calls, and a retained owner kill switch. Selector names are inferred best-effort from bytecode/4byte matches.",
"findings": [
{
"title": "Oracle callback accepts any authorized sender response without validating a pending query id",
"category": "oracle",
"evidence": "Selector `0x38bbfa50` matches `__callback(bytes32,string,bytes)`. The callback path decodes three arguments, then at `pc:0x036c` checks only that `CALLER` matches the resolved oracle address before entering the string-storage routine at `pc:0x038b`. The public oracle-query path at `selector:0xa2e62045` performs `query(uint256,string,string)` via selector `0xadf59f99` at `pc:0x0703`, but the returned request id is not written to storage; storage writes are limited to slots 0/1/3 and dynamic string data.",
"severity": "medium",
"locations": [
"selector:0x38bbfa50",
"selector:0xa2e62045",
"pc:0x036c",
"pc:0x0703"
],
"recommendation": "Persist the returned query id from the query call and require `_queryId` to match an expected pending id before accepting callback data. If multiple requests are allowed, track them explicitly and clear them after use.",
"exploit_scenario": "An attacker can trigger multiple outstanding oracle updates through the public query path. Because the callback appears to authenticate only the oracle sender and not the `bytes32` request id, a stale or later oracle reply can overwrite the currently stored result in slot 3. If the oracle/resolver side is ever misconfigured or compromised, arbitrary callback data would be accepted as long as it comes from the resolved oracle address."
},
{
"title": "Public `update()` path can spend ETH from contract balance on oracle queries",
"category": "access_control",
"evidence": "Selector `0xa2e62045` resolves to a public `update()` entrypoint. Its body builds a fixed Kraken URL query, calls the oracle pricing path (`getPrice(...)`) around `pc:0x065c`, and then performs the actual oracle query call at `pc:0x0703`. The artifact reports no auth guards for this function, and detector validation confirmed reachable `CALL` sites with possible nonzero ETH value and varying external targets. There is no visible `CALLVALUE`-based accounting or owner check in runtime bytecode.",
"severity": "medium",
"locations": [
"selector:0xa2e62045",
"pc:0x065c",
"pc:0x0703"
],
"recommendation": "Restrict the query-triggering function to an authorized operator, or require the caller to supply and account for the exact oracle fee so existing contract balance cannot be consumed by arbitrary users.",
"exploit_scenario": "If this contract holds ETH to subsidize oracle usage, any external account can call the public update function and force the contract to pay oracle fees. Repeated calls can drain the balance into oracle payments or trigger unwanted offchain queries, even if the caller is not otherwise trusted."
},
{
"title": "Privileged kill switch can sweep balance via `SELFDESTRUCT`",
"category": "auth",
"evidence": "Selector `0x41c0e1b5` matches `kill()`. At `pc:0x0155` the function reads slot 2, masks it to 160 bits, and compares it to `CALLER`. If equal, execution reaches `SELFDESTRUCT` at `pc:0x0174`, sending funds to the caller.",
"severity": "low",
"locations": [
"selector:0x41c0e1b5",
"pc:0x0155",
"pc:0x0174"
],
"recommendation": "Remove the kill path if it is unnecessary, or gate it behind a multisig/timelock and document the administrative trust model clearly.",
"exploit_scenario": "Whoever controls the address stored in slot 2 can invoke the kill function and force a terminal balance sweep to themselves. Even if this is intended admin functionality, compromise or abuse of that key breaks trust assumptions for funds held by the contract."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0xe0 00000007: PUSH1 0x02 00000009: EXP 0000000a: PUSH1 0x00 0000000c: CALLDATALOAD 0000000d: DIV 0000000e: PUSH4 0x38bbfa50 00000013: DUP2 00000014: EQ 00000015: PUSH2 0x003c 00000018: JUMPI 00000019: DUP1 0000001a: PUSH4 0x41c0e1b5 0000001f: EQ 00000020: PUSH2 0x014f 00000023: JUMPI 00000024: DUP1 00000025: PUSH4 0xa2e62045 0000002a: EQ 0000002b: PUSH2 0x0175 0000002e: JUMPI 0000002f: DUP1 00000030: PUSH4 0xb7764475 00000035: EQ 00000036: PUSH2 0x029e 00000039: JUMPI 0000003a: JUMPDEST 0000003b: STOP 0000003c: JUMPDEST 0000003d: PUSH1 0x40 0000003f: DUP1 00000040: MLOAD 00000041: PUSH1 0x20 00000043: PUSH1 0x24 00000045: DUP1 00000046: CALLDATALOAD 00000047: PUSH1 0x04 00000049: DUP2 0000004a: DUP2 0000004b: ADD 0000004c: CALLDATALOAD 0000004d: PUSH1 0x1f 0000004f: DUP2 00000050: ADD 00000051: DUP6 00000052: SWAP1 00000053: DIV 00000054: DUP6 00000055: MUL 00000056: DUP7 00000057: ADD 00000058: DUP6 00000059: ADD 0000005a: SWAP1 0000005b: SWAP7 0000005c: MSTORE 0000005d: DUP6 0000005e: DUP6 0000005f: MSTORE 00000060: PUSH2 0x003a 00000063: SWAP6 00000064: DUP2 00000065: CALLDATALOAD 00000066: SWAP6 00000067: SWAP2 00000068: SWAP5 00000069: PUSH1 0x44 0000006b: SWAP5 0000006c: SWAP3 0000006d: SWAP4 0000006e: SWAP1 0000006f: SWAP3 00000070: ADD 00000071: SWAP2 00000072: DUP2 00000073: SWAP1 00000074: DUP5 00000075: ADD 00000076: DUP4 00000077: DUP3 00000078: DUP1 00000079: DUP3 0000007a: DUP5 0000007b: CALLDATACOPY 0000007c: POP 0000007d: POP 0000007e: PUSH1 0x40 00000080: DUP1 00000081: MLOAD 00000082: PUSH1 0x20 00000084: SWAP8 00000085: CALLDATALOAD 00000086: DUP1 00000087: DUP11 00000088: ADD 00000089: CALLDATALOAD 0000008a: PUSH1 0x1f 0000008c: DUP2 0000008d: ADD 0000008e: DUP11 0000008f: SWAP1 00000090: DIV 00000091: DUP11 00000092: MUL 00000093: DUP4 00000094: ADD 00000095: DUP11 00000096: ADD 00000097: SWAP1 00000098: SWAP4 00000099: MSTORE 0000009a: DUP3 0000009b: DUP3 0000009c: MSTORE 0000009d: SWAP7 0000009e: SWAP9 0000009f: SWAP8 000000a0: PUSH1 0x64 000000a2: SWAP8 000000a3: SWAP2 000000a4: SWAP7 000000a5: POP 000000a6: PUSH1 0x24 000000a8: SWAP2 000000a9: SWAP1 000000aa: SWAP2 000000ab: ADD 000000ac: SWAP5 000000ad: POP 000000ae: SWAP1 000000af: SWAP3 000000b0: POP 000000b1: DUP3 000000b2: SWAP2 000000b3: POP 000000b4: DUP5 000000b5: ADD 000000b6: DUP4 000000b7: DUP3 000000b8: DUP1 000000b9: DUP3 000000ba: DUP5 000000bb: CALLDATACOPY 000000bc: POP 000000bd: SWAP5 000000be: SWAP7 000000bf: POP 000000c0: POP 000000c1: POP 000000c2: POP 000000c3: POP 000000c4: POP 000000c5: POP 000000c6: PUSH2 0x036c 000000c9: PUSH1 0x00 000000cb: DUP1 000000cc: SLOAD 000000cd: PUSH1 0x40 000000cf: DUP1 000000d0: MLOAD 000000d1: PUSH1 0xe0 000000d3: PUSH1 0x02 000000d5: EXP 000000d6: PUSH4 0x38cc4831 000000db: MUL 000000dc: DUP2 000000dd: MSTORE 000000de: SWAP1 000000df: MLOAD 000000e0: DUP4 000000e1: SWAP3 000000e2: PUSH1 0x01 000000e4: PUSH1 0xa0 000000e6: PUSH1 0x02 000000e8: EXP 000000e9: SUB 000000ea: AND 000000eb: SWAP2 000000ec: PUSH4 0x38cc4831 000000f1: SWAP2 000000f2: PUSH1 0x04 000000f4: DUP3 000000f5: DUP2 000000f6: ADD 000000f7: SWAP3 000000f8: PUSH1 0x20 000000fa: SWAP3 000000fb: SWAP2 000000fc: SWAP1 000000fd: DUP3 000000fe: SWAP1 000000ff: SUB 00000100: ADD 00000101: DUP2 00000102: DUP8 00000103: DUP8 00000104: PUSH2 0x61da 00000107: GAS 00000108: SUB 00000109: CALL 0000010a: ISZERO 0000010b: PUSH2 0x0002 0000010e: JUMPI 0000010f: POP 00000110: POP 00000111: PUSH1 0x40 00000113: MLOAD 00000114: MLOAD 00000115: SWAP2 00000116: POP 00000117: POP 00000118: PUSH1 0x01 0000011a: PUSH1 0xa0 0000011c: PUSH1 0x02 0000011e: EXP 0000011f: SUB 00000120: DUP2 00000121: AND 00000122: DUP3 00000123: EQ 00000124: ISZERO 00000125: PUSH2 0x04bd 00000128: JUMPI 00000129: PUSH2 0x0465 0000012c: PUSH1 0x00 0000012e: JUMPDEST 0000012f: PUSH1 0x00 00000131: PUSH1 0x00 00000133: PUSH2 0x07be 00000136: PUSH20 0x1d11e5eae3112dbd44f99266872ff1d07c77dce8 0000014b: JUMPDEST 0000014c: EXTCODESIZE 0000014d: SWAP1 0000014e: JUMP 0000014f: JUMPDEST 00000150: PUSH2 0x003a 00000153: PUSH1 0x02 00000155: SLOAD 00000156: CALLER 00000157: PUSH1 0x01 00000159: PUSH1 0xa0 0000015b: PUSH1 0x02 0000015d: EXP 0000015e: SUB 0000015f: SWAP1 00000160: DUP2 00000161: AND 00000162: SWAP2 00000163: AND 00000164: EQ 00000165: ISZERO 00000166: PUSH2 0x042d 00000169: JUMPI 0000016a: CALLER 0000016b: PUSH1 0x01 0000016d: PUSH1 0xa0 0000016f: PUSH1 0x02 00000171: EXP 00000172: SUB 00000173: AND 00000174: SELFDESTRUCT 00000175: JUMPDEST 00000176: PUSH1 0x40 00000178: DUP1 00000179: MLOAD 0000017a: DUP1 0000017b: DUP3 0000017c: ADD 0000017d: DUP3 0000017e: MSTORE 0000017f: PUSH1 0x03 00000181: DUP2 00000182: MSTORE 00000183: PUSH32 0x55524c0000000000000000000000000000000000000000000000000000000000 000001a4: PUSH1 0x20 000001a6: DUP3 000001a7: DUP2 000001a8: ADD 000001a9: SWAP2 000001aa: SWAP1 000001ab: SWAP2 000001ac: MSTORE 000001ad: DUP3 000001ae: MLOAD 000001af: PUSH1 0x80 000001b1: DUP2 000001b2: ADD 000001b3: DUP5 000001b4: MSTORE 000001b5: PUSH1 0x4c 000001b7: DUP2 000001b8: MSTORE 000001b9: PUSH32 0x6a736f6e2868747470733a2f2f6170692e6b72616b656e2e636f6d2f302f7075 000001da: DUP2 000001db: DUP4 000001dc: ADD 000001dd: MSTORE 000001de: PUSH32 0x626c69632f5469636b65723f706169723d455448584254292e726573756c742e 000001ff: DUP2 00000200: DUP6 00000201: ADD 00000202: MSTORE 00000203: PUSH32 0x58455448585842542e632e300000000000000000000000000000000000000000 00000224: PUSH1 0x60 00000226: DUP3 00000227: ADD 00000228: MSTORE 00000229: DUP4 0000022a: MLOAD 0000022b: PUSH1 0x00 0000022d: DUP1 0000022e: SLOAD 0000022f: PUSH1 0xe0 00000231: PUSH1 0x02 00000233: EXP 00000234: PUSH4 0x38cc4831 00000239: MUL 0000023a: DUP4 0000023b: MSTORE 0000023c: SWAP6 0000023d: MLOAD 0000023e: PUSH2 0x003a 00000241: SWAP7 00000242: PUSH2 0x042f 00000245: SWAP7 00000246: SWAP3 00000247: SWAP6 00000248: SWAP3 00000249: SWAP5 0000024a: SWAP4 0000024b: DUP7 0000024c: SWAP4 0000024d: DUP5 0000024e: SWAP4 0000024f: DUP5 00000250: SWAP4 00000251: PUSH1 0x01 00000253: PUSH1 0xa0 00000255: PUSH1 0x02 00000257: EXP 00000258: SUB 00000259: AND 0000025a: SWAP3 0000025b: PUSH4 0x38cc4831 00000260: SWAP3 00000261: PUSH1 0x04 00000263: DUP3 00000264: DUP2 00000265: ADD 00000266: SWAP4 00000267: SWAP2 00000268: SWAP3 00000269: DUP3 0000026a: SWAP1 0000026b: SUB 0000026c: ADD 0000026d: DUP2 0000026e: DUP8 0000026f: DUP8 00000270: PUSH2 0x61da 00000273: GAS 00000274: SUB 00000275: CALL 00000276: ISZERO 00000277: PUSH2 0x0002 0000027a: JUMPI 0000027b: POP 0000027c: POP 0000027d: PUSH1 0x40 0000027f: MLOAD 00000280: MLOAD 00000281: SWAP2 00000282: POP 00000283: POP 00000284: PUSH1 0x01 00000286: PUSH1 0xa0 00000288: PUSH1 0x02 0000028a: EXP 0000028b: SUB 0000028c: DUP2 0000028d: AND 0000028e: DUP3 0000028f: EQ 00000290: ISZERO 00000291: PUSH2 0x0591 00000294: JUMPI 00000295: PUSH2 0x0539 00000298: PUSH1 0x00 0000029a: PUSH2 0x012e 0000029d: JUMP 0000029e: JUMPDEST 0000029f: PUSH2 0x02fe 000002a2: PUSH1 0x03 000002a4: DUP1 000002a5: SLOAD 000002a6: PUSH1 0x40 000002a8: DUP1 000002a9: MLOAD 000002aa: PUSH1 0x20 000002ac: PUSH1 0x1f 000002ae: PUSH1 0x02 000002b0: PUSH1 0x00 000002b2: NOT 000002b3: PUSH2 0x0100 000002b6: PUSH1 0x01 000002b8: DUP9 000002b9: AND 000002ba: ISZERO 000002bb: MUL 000002bc: ADD 000002bd: SWAP1 000002be: SWAP6 000002bf: AND 000002c0: SWAP5 000002c1: SWAP1 000002c2: SWAP5 000002c3: DIV 000002c4: SWAP4 000002c5: DUP5 000002c6: ADD 000002c7: DUP2 000002c8: SWAP1 000002c9: DIV 000002ca: DUP2 000002cb: MUL 000002cc: DUP3 000002cd: ADD 000002ce: DUP2 000002cf: ADD 000002d0: SWAP1 000002d1: SWAP3 000002d2: MSTORE 000002d3: DUP3 000002d4: DUP2 000002d5: MSTORE 000002d6: SWAP3 000002d7: SWAP2 000002d8: SWAP1 000002d9: DUP4 000002da: ADD 000002db: DUP3 000002dc: DUP3 000002dd: DUP1 000002de: ISZERO 000002df: PUSH2 0x045d 000002e2: JUMPI 000002e3: DUP1 000002e4: PUSH1 0x1f 000002e6: LT 000002e7: PUSH2 0x0432 000002ea: JUMPI 000002eb: PUSH2 0x0100 000002ee: DUP1 000002ef: DUP4 000002f0: SLOAD 000002f1: DIV 000002f2: MUL 000002f3: DUP4 000002f4: MSTORE 000002f5: SWAP2 000002f6: PUSH1 0x20 000002f8: ADD 000002f9: SWAP2 000002fa: PUSH2 0x045d 000002fd: JUMP 000002fe: JUMPDEST 000002ff: PUSH1 0x40 00000301: MLOAD 00000302: DUP1 00000303: DUP1 00000304: PUSH1 0x20 00000306: ADD 00000307: DUP3 00000308: DUP2 00000309: SUB 0000030a: DUP3 0000030b: MSTORE 0000030c: DUP4 0000030d: DUP2 0000030e: DUP2 0000030f: MLOAD 00000310: DUP2 00000311: MSTORE 00000312: PUSH1 0x20 00000314: ADD 00000315: SWAP2 00000316: POP 00000317: DUP1 00000318: MLOAD 00000319: SWAP1 0000031a: PUSH1 0x20 0000031c: ADD 0000031d: SWAP1 0000031e: DUP1 0000031f: DUP4 00000320: DUP4 00000321: DUP3 00000322: SWAP1 00000323: PUSH1 0x00 00000325: PUSH1 0x04 00000327: PUSH1 0x20 00000329: DUP5 0000032a: PUSH1 0x1f 0000032c: ADD 0000032d: DIV 0000032e: PUSH1 0x0f 00000330: MUL 00000331: PUSH1 0x03 00000333: ADD 00000334: CALL 00000335: POP 00000336: SWAP1 00000337: POP 00000338: SWAP1 00000339: DUP2 0000033a: ADD 0000033b: SWAP1 0000033c: PUSH1 0x1f 0000033e: AND 0000033f: DUP1 00000340: ISZERO 00000341: PUSH2 0x035e 00000344: JUMPI 00000345: DUP1 00000346: DUP3 00000347: SUB 00000348: DUP1 00000349: MLOAD 0000034a: PUSH1 0x01 0000034c: DUP4 0000034d: PUSH1 0x20 0000034f: SUB 00000350: PUSH2 0x0100 00000353: EXP 00000354: SUB 00000355: NOT 00000356: AND 00000357: DUP2 00000358: MSTORE 00000359: PUSH1 0x20 0000035b: ADD 0000035c: SWAP2 0000035d: POP 0000035e: JUMPDEST 0000035f: POP 00000360: SWAP3 00000361: POP 00000362: POP 00000363: POP 00000364: PUSH1 0x40 00000366: MLOAD 00000367: DUP1 00000368: SWAP2 00000369: SUB 0000036a: SWAP1 0000036b: RETURN 0000036c: JUMPDEST 0000036d: PUSH1 0x01 0000036f: PUSH1 0xa0 00000371: PUSH1 0x02 00000373: EXP 00000374: SUB 00000375: AND 00000376: CALLER 00000377: PUSH1 0x01 00000379: PUSH1 0xa0 0000037b: PUSH1 0x02 0000037d: EXP 0000037e: SUB 0000037f: AND 00000380: EQ 00000381: ISZERO 00000382: ISZERO 00000383: PUSH2 0x038b 00000386: JUMPI 00000387: PUSH2 0x0002 0000038a: JUMP 0000038b: JUMPDEST 0000038c: DUP2 0000038d: PUSH1 0x03 0000038f: PUSH1 0x00 00000391: POP 00000392: SWAP1 00000393: DUP1 00000394: MLOAD 00000395: SWAP1 00000396: PUSH1 0x20 00000398: ADD 00000399: SWAP1 0000039a: DUP3 0000039b: DUP1 0000039c: SLOAD 0000039d: PUSH1 0x01 0000039f: DUP2 000003a0: PUSH1 0x01 000003a2: AND 000003a3: ISZERO 000003a4: PUSH2 0x0100 000003a7: MUL 000003a8: SUB 000003a9: AND 000003aa: PUSH1 0x02 000003ac: SWAP1 000003ad: DIV 000003ae: SWAP1 000003af: PUSH1 0x00 000003b1: MSTORE 000003b2: PUSH1 0x20 000003b4: PUSH1 0x00 000003b6: KECCAK256 000003b7: SWAP1 000003b8: PUSH1 0x1f 000003ba: ADD 000003bb: PUSH1 0x20 000003bd: SWAP1 000003be: DIV 000003bf: DUP2 000003c0: ADD 000003c1: SWAP3 000003c2: DUP3 000003c3: PUSH1 0x1f 000003c5: LT 000003c6: PUSH2 0x03f2 000003c9: JUMPI 000003ca: DUP1 000003cb: MLOAD 000003cc: PUSH1 0xff 000003ce: NOT 000003cf: AND 000003d0: DUP4 000003d1: DUP1 000003d2: ADD 000003d3: OR 000003d4: DUP6 000003d5: SSTORE 000003d6: JUMPDEST 000003d7: POP 000003d8: PUSH2 0x0422 000003db: SWAP3 000003dc: SWAP2 000003dd: POP 000003de: JUMPDEST 000003df: DUP1 000003e0: DUP3 000003e1: GT 000003e2: ISZERO 000003e3: PUSH2 0x0429 000003e6: JUMPI 000003e7: PUSH1 0x00 000003e9: DUP2 000003ea: SSTORE 000003eb: PUSH1 0x01 000003ed: ADD 000003ee: PUSH2 0x03de 000003f1: JUMP 000003f2: JUMPDEST 000003f3: DUP3 000003f4: DUP1 000003f5: ADD 000003f6: PUSH1 0x01 000003f8: ADD 000003f9: DUP6 000003fa: SSTORE 000003fb: DUP3 000003fc: ISZERO 000003fd: PUSH2 0x03d6 00000400: JUMPI 00000401: SWAP2 00000402: DUP3 00000403: ADD 00000404: JUMPDEST 00000405: DUP3 00000406: DUP2 00000407: GT 00000408: ISZERO 00000409: PUSH2 0x03d6 0000040c: JUMPI 0000040d: DUP3 0000040e: MLOAD 0000040f: DUP3 00000410: PUSH1 0x00 00000412: POP 00000413: SSTORE 00000414: SWAP2 00000415: PUSH1 0x20 00000417: ADD 00000418: SWAP2 00000419: SWAP1 0000041a: PUSH1 0x01 0000041c: ADD 0000041d: SWAP1 0000041e: PUSH2 0x0404 00000421: JUMP 00000422: JUMPDEST 00000423: POP 00000424: POP 00000425: POP 00000426: POP 00000427: POP 00000428: JUMP 00000429: JUMPDEST 0000042a: POP 0000042b: SWAP1 0000042c: JUMP 0000042d: JUMPDEST 0000042e: JUMP 0000042f: JUMPDEST 00000430: POP 00000431: JUMP 00000432: JUMPDEST 00000433: DUP3 00000434: ADD 00000435: SWAP2 00000436: SWAP1 00000437: PUSH1 0x00 00000439: MSTORE 0000043a: PUSH1 0x20 0000043c: PUSH1 0x00 0000043e: KECCAK256 0000043f: SWAP1 00000440: JUMPDEST 00000441: DUP2 00000442: SLOAD 00000443: DUP2 00000444: MSTORE 00000445: SWAP1 00000446: PUSH1 0x01 00000448: ADD 00000449: SWAP1 0000044a: PUSH1 0x20 0000044c: ADD 0000044d: DUP1 0000044e: DUP4 0000044f: GT 00000450: PUSH2 0x0440 00000453: JUMPI 00000454: DUP3 00000455: SWAP1 00000456: SUB 00000457: PUSH1 0x1f 00000459: AND 0000045a: DUP3 0000045b: ADD 0000045c: SWAP2 0000045d: JUMPDEST 0000045e: POP 0000045f: POP 00000460: POP 00000461: POP 00000462: POP 00000463: DUP2 00000464: JUMP 00000465: JUMPDEST 00000466: POP 00000467: PUSH1 0x00 00000469: PUSH1 0x00 0000046b: SWAP1 0000046c: SLOAD 0000046d: SWAP1 0000046e: PUSH2 0x0100 00000471: EXP 00000472: SWAP1 00000473: DIV 00000474: PUSH1 0x01 00000476: PUSH1 0xa0 00000478: PUSH1 0x02 0000047a: EXP 0000047b: SUB 0000047c: AND 0000047d: PUSH1 0x01 0000047f: PUSH1 0xa0 00000481: PUSH1 0x02 00000483: EXP 00000484: SUB 00000485: AND 00000486: PUSH4 0x38cc4831 0000048b: PUSH1 0x40 0000048d: MLOAD 0000048e: DUP2 0000048f: PUSH1 0xe0 00000491: PUSH1 0x02 00000493: EXP 00000494: MUL 00000495: DUP2 00000496: MSTORE 00000497: PUSH1 0x04 00000499: ADD 0000049a: DUP1 0000049b: SWAP1 0000049c: POP 0000049d: PUSH1 0x20 0000049f: PUSH1 0x40 000004a1: MLOAD 000004a2: DUP1 000004a3: DUP4 000004a4: SUB 000004a5: DUP2 000004a6: PUSH1 0x00 000004a8: DUP8 000004a9: PUSH2 0x61da 000004ac: GAS 000004ad: SUB 000004ae: CALL 000004af: ISZERO 000004b0: PUSH2 0x0002 000004b3: JUMPI 000004b4: POP 000004b5: POP 000004b6: PUSH1 0x40 000004b8: MLOAD 000004b9: MLOAD 000004ba: SWAP2 000004bb: POP 000004bc: POP 000004bd: JUMPDEST 000004be: PUSH1 0x01 000004c0: DUP1 000004c1: SLOAD 000004c2: PUSH1 0x01 000004c4: PUSH1 0xa0 000004c6: PUSH1 0x02 000004c8: EXP 000004c9: SUB 000004ca: NOT 000004cb: AND 000004cc: DUP3 000004cd: OR 000004ce: SWAP1 000004cf: DUP2 000004d0: SWAP1 000004d1: SSTORE 000004d2: PUSH1 0x40 000004d4: DUP1 000004d5: MLOAD 000004d6: PUSH32 0xc281d19e00000000000000000000000000000000000000000000000000000000 000004f7: DUP2 000004f8: MSTORE 000004f9: SWAP1 000004fa: MLOAD 000004fb: PUSH1 0x01 000004fd: PUSH1 0xa0 000004ff: PUSH1 0x02 00000501: EXP 00000502: SUB 00000503: SWAP3 00000504: SWAP1 00000505: SWAP3 00000506: AND 00000507: SWAP2 00000508: PUSH4 0xc281d19e 0000050d: SWAP2 0000050e: PUSH1 0x04 00000510: DUP2 00000511: DUP2 00000512: ADD 00000513: SWAP3 00000514: PUSH1 0x20 00000516: SWAP3 00000517: SWAP1 00000518: SWAP2 00000519: SWAP1 0000051a: DUP3 0000051b: SWAP1 0000051c: SUB 0000051d: ADD 0000051e: DUP2 0000051f: PUSH1 0x00 00000521: DUP8 00000522: PUSH2 0x61da 00000525: GAS 00000526: SUB 00000527: CALL 00000528: ISZERO 00000529: PUSH2 0x0002 0000052c: JUMPI 0000052d: POP 0000052e: POP 0000052f: PUSH1 0x40 00000531: MLOAD 00000532: MLOAD 00000533: SWAP3 00000534: POP 00000535: POP 00000536: POP 00000537: SWAP1 00000538: JUMP 00000539: JUMPDEST 0000053a: POP 0000053b: PUSH1 0x00 0000053d: PUSH1 0x00 0000053f: SWAP1 00000540: SLOAD 00000541: SWAP1 00000542: PUSH2 0x0100 00000545: EXP 00000546: SWAP1 00000547: DIV 00000548: PUSH1 0x01 0000054a: PUSH1 0xa0 0000054c: PUSH1 0x02 0000054e: EXP 0000054f: SUB 00000550: AND 00000551: PUSH1 0x01 00000553: PUSH1 0xa0 00000555: PUSH1 0x02 00000557: EXP 00000558: SUB 00000559: AND 0000055a: PUSH4 0x38cc4831 0000055f: PUSH1 0x40 00000561: MLOAD 00000562: DUP2 00000563: PUSH1 0xe0 00000565: PUSH1 0x02 00000567: EXP 00000568: MUL 00000569: DUP2 0000056a: MSTORE 0000056b: PUSH1 0x04 0000056d: ADD 0000056e: DUP1 0000056f: SWAP1 00000570: POP 00000571: PUSH1 0x20 00000573: PUSH1 0x40 00000575: MLOAD 00000576: DUP1 00000577: DUP4 00000578: SUB 00000579: DUP2 0000057a: PUSH1 0x00 0000057c: DUP8 0000057d: PUSH2 0x61da 00000580: GAS 00000581: SUB 00000582: CALL 00000583: ISZERO 00000584: PUSH2 0x0002 00000587: JUMPI 00000588: POP 00000589: POP 0000058a: PUSH1 0x40 0000058c: MLOAD 0000058d: MLOAD 0000058e: SWAP2 0000058f: POP 00000590: POP 00000591: JUMPDEST 00000592: PUSH1 0x01 00000594: DUP1 00000595: SLOAD 00000596: PUSH1 0x01 00000598: PUSH1 0xa0 0000059a: PUSH1 0x02 0000059c: EXP 0000059d: SUB 0000059e: NOT 0000059f: AND 000005a0: DUP3 000005a1: OR 000005a2: SWAP1 000005a3: DUP2 000005a4: SWAP1 000005a5: SSTORE 000005a6: PUSH1 0x40 000005a8: MLOAD 000005a9: PUSH32 0x524f388900000000000000000000000000000000000000000000000000000000 000005ca: DUP2 000005cb: MSTORE 000005cc: PUSH1 0x20 000005ce: PUSH1 0x04 000005d0: DUP3 000005d1: DUP2 000005d2: ADD 000005d3: DUP3 000005d4: DUP2 000005d5: MSTORE 000005d6: DUP10 000005d7: MLOAD 000005d8: PUSH1 0x24 000005da: DUP6 000005db: ADD 000005dc: MSTORE 000005dd: DUP10 000005de: MLOAD 000005df: PUSH1 0x01 000005e1: PUSH1 0xa0 000005e3: PUSH1 0x02 000005e5: EXP 000005e6: SUB 000005e7: SWAP6 000005e8: SWAP1 000005e9: SWAP6 000005ea: AND 000005eb: SWAP5 000005ec: PUSH4 0x524f3889 000005f1: SWAP5 000005f2: DUP12 000005f3: SWAP5 000005f4: SWAP3 000005f5: SWAP4 000005f6: DUP5 000005f7: SWAP4 000005f8: PUSH1 0x44 000005fa: SWAP3 000005fb: SWAP1 000005fc: SWAP3 000005fd: ADD 000005fe: SWAP3 000005ff: DUP7 00000600: DUP4 00000601: ADD 00000602: SWAP3 00000603: SWAP1 00000604: SWAP2 00000605: DUP3 00000606: SWAP2 00000607: DUP6 00000608: SWAP2 00000609: DUP4 0000060a: SWAP2 0000060b: DUP7 0000060c: SWAP2 0000060d: PUSH1 0x00 0000060f: SWAP2 00000610: PUSH1 0x1f 00000612: DUP6 00000613: ADD 00000614: DIV 00000615: PUSH1 0x0f 00000617: MUL 00000618: PUSH1 0x03 0000061a: ADD 0000061b: CALL 0000061c: POP 0000061d: SWAP1 0000061e: POP 0000061f: SWAP1 00000620: DUP2 00000621: ADD 00000622: SWAP1 00000623: PUSH1 0x1f 00000625: AND 00000626: DUP1 00000627: ISZERO 00000628: PUSH2 0x0645 0000062b: JUMPI 0000062c: DUP1 0000062d: DUP3 0000062e: SUB 0000062f: DUP1 00000630: MLOAD 00000631: PUSH1 0x01 00000633: DUP4 00000634: PUSH1 0x20 00000636: SUB 00000637: PUSH2 0x0100 0000063a: EXP 0000063b: SUB 0000063c: NOT 0000063d: AND 0000063e: DUP2 0000063f: MSTORE 00000640: PUSH1 0x20 00000642: ADD 00000643: SWAP2 00000644: POP 00000645: JUMPDEST 00000646: POP 00000647: SWAP3 00000648: POP 00000649: POP 0000064a: POP 0000064b: PUSH1 0x20 0000064d: PUSH1 0x40 0000064f: MLOAD 00000650: DUP1 00000651: DUP4 00000652: SUB 00000653: DUP2 00000654: PUSH1 0x00 00000656: DUP8 00000657: PUSH2 0x61da 0000065a: GAS 0000065b: SUB 0000065c: CALL 0000065d: ISZERO 0000065e: PUSH2 0x0002 00000661: JUMPI 00000662: POP 00000663: POP 00000664: PUSH1 0x40 00000666: MLOAD 00000667: MLOAD 00000668: SWAP3 00000669: POP 0000066a: POP 0000066b: PUSH8 0x0de0b6b3a7640000 00000674: PUSH3 0x030d40 00000678: GASPRICE 00000679: MUL 0000067a: ADD 0000067b: DUP3 0000067c: GT 0000067d: ISZERO 0000067e: PUSH2 0x068f 00000681: JUMPI 00000682: POP 00000683: PUSH1 0x00 00000685: SWAP2 00000686: POP 00000687: JUMPDEST 00000688: POP 00000689: SWAP4 0000068a: SWAP3 0000068b: POP 0000068c: POP 0000068d: POP 0000068e: JUMP 0000068f: JUMPDEST 00000690: PUSH1 0x01 00000692: PUSH1 0x00 00000694: SWAP1 00000695: SLOAD 00000696: SWAP1 00000697: PUSH2 0x0100 0000069a: EXP 0000069b: SWAP1 0000069c: DIV 0000069d: PUSH1 0x01 0000069f: PUSH1 0xa0 000006a1: PUSH1 0x02 000006a3: EXP 000006a4: SUB 000006a5: AND 000006a6: PUSH1 0x01 000006a8: PUSH1 0xa0 000006aa: PUSH1 0x02 000006ac: EXP 000006ad: SUB 000006ae: AND 000006af: PUSH4 0xadf59f99 000006b4: DUP4 000006b5: DUP9 000006b6: DUP9 000006b7: DUP9 000006b8: PUSH1 0x40 000006ba: MLOAD 000006bb: DUP6 000006bc: PUSH1 0xe0 000006be: PUSH1 0x02 000006c0: EXP 000006c1: MUL 000006c2: DUP2 000006c3: MSTORE 000006c4: PUSH1 0x04 000006c6: ADD 000006c7: DUP1 000006c8: DUP5 000006c9: DUP2 000006ca: MSTORE 000006cb: PUSH1 0x20 000006cd: ADD 000006ce: DUP1 000006cf: PUSH1 0x20 000006d1: ADD 000006d2: DUP1 000006d3: PUSH1 0x20 000006d5: ADD 000006d6: DUP4 000006d7: DUP2 000006d8: SUB 000006d9: DUP4 000006da: MSTORE 000006db: DUP6 000006dc: DUP2 000006dd: DUP2 000006de: MLOAD 000006df: DUP2 000006e0: MSTORE 000006e1: PUSH1 0x20 000006e3: ADD 000006e4: SWAP2 000006e5: POP 000006e6: DUP1 000006e7: MLOAD 000006e8: SWAP1 000006e9: PUSH1 0x20 000006eb: ADD 000006ec: SWAP1 000006ed: DUP1 000006ee: DUP4 000006ef: DUP4 000006f0: DUP3 000006f1: SWAP1 000006f2: PUSH1 0x00 000006f4: PUSH1 0x04 000006f6: PUSH1 0x20 000006f8: DUP5 000006f9: PUSH1 0x1f 000006fb: ADD 000006fc: DIV 000006fd: PUSH1 0x0f 000006ff: MUL 00000700: PUSH1 0x03 00000702: ADD 00000703: CALL 00000704: POP 00000705: SWAP1 00000706: POP 00000707: SWAP1 00000708: DUP2 00000709: ADD 0000070a: SWAP1 0000070b: PUSH1 0x1f 0000070d: AND 0000070e: DUP1 0000070f: ISZERO 00000710: PUSH2 0x072d 00000713: JUMPI 00000714: DUP1 00000715: DUP3 00000716: SUB 00000717: DUP1 00000718: MLOAD 00000719: PUSH1 0x01 0000071b: DUP4 0000071c: PUSH1 0x20 0000071e: SUB 0000071f: PUSH2 0x0100 00000722: EXP 00000723: SUB 00000724: NOT 00000725: AND 00000726: DUP2 00000727: MSTORE 00000728: PUSH1 0x20 0000072a: ADD 0000072b: SWAP2 0000072c: POP 0000072d: JUMPDEST 0000072e: POP 0000072f: DUP4 00000730: DUP2 00000731: SUB 00000732: DUP3 00000733: MSTORE 00000734: DUP5 00000735: DUP2 00000736: DUP2 00000737: MLOAD 00000738: DUP2 00000739: MSTORE 0000073a: PUSH1 0x20 0000073c: ADD 0000073d: SWAP2 0000073e: POP 0000073f: DUP1 00000740: MLOAD 00000741: SWAP1 00000742: PUSH1 0x20 00000744: ADD 00000745: SWAP1 00000746: DUP1 00000747: DUP4 00000748: DUP4 00000749: DUP3 0000074a: SWAP1 0000074b: PUSH1 0x00 0000074d: PUSH1 0x04 0000074f: PUSH1 0x20 00000751: DUP5 00000752: PUSH1 0x1f 00000754: ADD 00000755: DIV 00000756: PUSH1 0x0f 00000758: MUL 00000759: PUSH1 0x03 0000075b: ADD 0000075c: CALL 0000075d: POP 0000075e: SWAP1 0000075f: POP 00000760: SWAP1 00000761: DUP2 00000762: ADD 00000763: SWAP1 00000764: PUSH1 0x1f 00000766: AND 00000767: DUP1 00000768: ISZERO 00000769: PUSH2 0x0786 0000076c: JUMPI 0000076d: DUP1 0000076e: DUP3 0000076f: SUB 00000770: DUP1 00000771: MLOAD 00000772: PUSH1 0x01 00000774: DUP4 00000775: PUSH1 0x20 00000777: SUB 00000778: PUSH2 0x0100 0000077b: EXP 0000077c: SUB 0000077d: NOT 0000077e: AND 0000077f: DUP2 00000780: MSTORE 00000781: PUSH1 0x20 00000783: ADD 00000784: SWAP2 00000785: POP 00000786: JUMPDEST 00000787: POP 00000788: SWAP6 00000789: POP 0000078a: POP 0000078b: POP 0000078c: POP 0000078d: POP 0000078e: POP 0000078f: PUSH1 0x20 00000791: PUSH1 0x40 00000793: MLOAD 00000794: DUP1 00000795: DUP4 00000796: SUB 00000797: DUP2 00000798: DUP6 00000799: DUP9 0000079a: PUSH2 0x8502 0000079d: GAS 0000079e: SUB 0000079f: CALL 000007a0: ISZERO 000007a1: PUSH2 0x0002 000007a4: JUMPI 000007a5: POP 000007a6: POP 000007a7: PUSH1 0x40 000007a9: MLOAD 000007aa: MLOAD 000007ab: SWAP5 000007ac: POP 000007ad: PUSH2 0x0687 000007b0: SWAP3 000007b1: POP 000007b2: POP 000007b3: POP 000007b4: JUMP 000007b5: JUMPDEST 000007b6: POP 000007b7: PUSH1 0x00 000007b9: JUMPDEST 000007ba: SWAP2 000007bb: SWAP1 000007bc: POP 000007bd: JUMP 000007be: JUMPDEST 000007bf: GT 000007c0: ISZERO 000007c1: PUSH2 0x07f2 000007c4: JUMPI 000007c5: POP 000007c6: PUSH1 0x00 000007c8: DUP1 000007c9: SLOAD 000007ca: PUSH1 0x01 000007cc: PUSH1 0xa0 000007ce: PUSH1 0x02 000007d0: EXP 000007d1: SUB 000007d2: NOT 000007d3: AND 000007d4: PUSH20 0x1d11e5eae3112dbd44f99266872ff1d07c77dce8 000007e9: OR 000007ea: SWAP1 000007eb: SSTORE 000007ec: PUSH1 0x01 000007ee: PUSH2 0x07b9 000007f1: JUMP 000007f2: JUMPDEST 000007f3: PUSH1 0x00 000007f5: PUSH2 0x0811 000007f8: PUSH20 0x9efbea6358bed926b293d2ce63a730d6d98d43dd 0000080d: PUSH2 0x014b 00000810: JUMP 00000811: JUMPDEST 00000812: GT 00000813: ISZERO 00000814: PUSH2 0x0847 00000817: JUMPI 00000818: POP 00000819: PUSH1 0x00 0000081b: DUP1 0000081c: SLOAD 0000081d: PUSH20 0x9efbea6358bed926b293d2ce63a730d6d98d43dd 00000832: PUSH1 0x01 00000834: PUSH1 0xa0 00000836: PUSH1 0x02 00000838: EXP 00000839: SUB 0000083a: NOT 0000083b: SWAP1 0000083c: SWAP2 0000083d: AND 0000083e: OR 0000083f: SWAP1 00000840: SSTORE 00000841: PUSH1 0x01 00000843: PUSH2 0x07b9 00000846: JUMP 00000847: JUMPDEST 00000848: PUSH1 0x00 0000084a: PUSH2 0x0866 0000084d: PUSH20 0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf 00000862: PUSH2 0x014b 00000865: JUMP 00000866: JUMPDEST 00000867: GT 00000868: ISZERO 00000869: PUSH2 0x07b5 0000086c: JUMPI 0000086d: POP 0000086e: PUSH1 0x00 00000870: DUP1 00000871: SLOAD 00000872: PUSH20 0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf 00000887: PUSH1 0x01 00000889: PUSH1 0xa0 0000088b: PUSH1 0x02 0000088d: EXP 0000088e: SUB 0000088f: NOT 00000890: SWAP1 00000891: SWAP2 00000892: AND 00000893: OR 00000894: SWAP1 00000895: SSTORE 00000896: PUSH1 0x01 00000898: PUSH2 0x07b9 0000089b: JUMP
Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment.
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | yes | yes |
viewtrace_id: 0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5
call_targets:
0x1d11e5eae3112dbd44f99266872ff1d07c77dce8, 0x6f28b146804dba2d6f944c03528a8fdbc673df2c, 0xcad333e2f7ec4058aa5ba825a5de8af4139490c9
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x1d11e5eae3112dbd44f99266872ff1d07c77dce8",
"0x6f28b146804dba2d6f944c03528a8fdbc673df2c",
"0xcad333e2f7ec4058aa5ba825a5de8af4139490c9"
],
"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": "0x38bbfa50",
"selector": "0x38bbfa50",
"calldata_variants": [
"0x38bbfa50",
"0x38bbfa500000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41c0e1b5",
"selector": "0x41c0e1b5",
"calldata_variants": [
"0x41c0e1b5",
"0x41c0e1b50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa2e62045",
"selector": "0xa2e62045",
"calldata_variants": [
"0xa2e62045",
"0xa2e620450000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb7764475",
"selector": "0xb7764475",
"calldata_variants": [
"0xb7764475",
"0xb77644750000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 265,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 629,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 820,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 11,
"guards_detected": [],
"untrusted_call_count": 11
}
|
| high | other | detector | ETH value transfer possible | 55 | yes | yes |
viewtrace_id: 0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5
call_targets:
0x1d11e5eae3112dbd44f99266872ff1d07c77dce8, 0x6f28b146804dba2d6f944c03528a8fdbc673df2c, 0xcad333e2f7ec4058aa5ba825a5de8af4139490c9
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x1d11e5eae3112dbd44f99266872ff1d07c77dce8",
"0x6f28b146804dba2d6f944c03528a8fdbc673df2c",
"0xcad333e2f7ec4058aa5ba825a5de8af4139490c9"
],
"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": "0x38bbfa50",
"selector": "0x38bbfa50",
"calldata_variants": [
"0x38bbfa50",
"0x38bbfa500000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41c0e1b5",
"selector": "0x41c0e1b5",
"calldata_variants": [
"0x41c0e1b5",
"0x41c0e1b50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa2e62045",
"selector": "0xa2e62045",
"calldata_variants": [
"0xa2e62045",
"0xa2e620450000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb7764475",
"selector": "0xb7764475",
"calldata_variants": [
"0xb7764475",
"0xb77644750000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 265,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 629,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 820,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 11,
"guards_detected": []
}
|
| high | other | detector | SELFDESTRUCT reachable | 65 | no | no |
viewtrace_id: 0x15f197da33be53f322e49b04a4d543d589a4f2ad2e4c3695dc2468ea867783b3
validation_json{
"sink": "SELFDESTRUCT",
"errors": 0,
"status": "unknown",
"attempts": 8,
"trace_id": "0x15f197da33be53f322e49b04a4d543d589a4f2ad2e4c3695dc2468ea867783b3",
"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": "0x38bbfa50",
"selector": "0x38bbfa50",
"calldata_variants": [
"0x38bbfa50",
"0x38bbfa500000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x41c0e1b5",
"selector": "0x41c0e1b5",
"calldata_variants": [
"0x41c0e1b5",
"0x41c0e1b50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa2e62045",
"selector": "0xa2e62045",
"calldata_variants": [
"0xa2e62045",
"0xa2e620450000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb7764475",
"selector": "0xb7764475",
"calldata_variants": [
"0xb7764475",
"0xb77644750000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [],
"selfdestruct_count": 1
}
|
| medium | oracle | codex | Oracle callback accepts any authorized sender response without validating a pending query id | 75 | no | — |
viewevidence_json{
"evidence": "Selector `0x38bbfa50` matches `__callback(bytes32,string,bytes)`. The callback path decodes three arguments, then at `pc:0x036c` checks only that `CALLER` matches the resolved oracle address before entering the string-storage routine at `pc:0x038b`. The public oracle-query path at `selector:0xa2e62045` performs `query(uint256,string,string)` via selector `0xadf59f99` at `pc:0x0703`, but the returned request id is not written to storage; storage writes are limited to slots 0/1/3 and dynamic string data.",
"locations": [
"selector:0x38bbfa50",
"selector:0xa2e62045",
"pc:0x036c",
"pc:0x0703"
],
"recommendation": "Persist the returned query id from the query call and require `_queryId` to match an expected pending id before accepting callback data. If multiple requests are allowed, track them explicitly and clear them after use.",
"exploit_scenario": "An attacker can trigger multiple outstanding oracle updates through the public query path. Because the callback appears to authenticate only the oracle sender and not the `bytes32` request id, a stale or later oracle reply can overwrite the currently stored result in slot 3. If the oracle/resolver side is ever misconfigured or compromised, arbitrary callback data would be accepted as long as it comes from the resolved oracle address."
}
|
| medium | access_control | codex | Public `update()` path can spend ETH from contract balance on oracle queries | 75 | no | — |
viewevidence_json{
"evidence": "Selector `0xa2e62045` resolves to a public `update()` entrypoint. Its body builds a fixed Kraken URL query, calls the oracle pricing path (`getPrice(...)`) around `pc:0x065c`, and then performs the actual oracle query call at `pc:0x0703`. The artifact reports no auth guards for this function, and detector validation confirmed reachable `CALL` sites with possible nonzero ETH value and varying external targets. There is no visible `CALLVALUE`-based accounting or owner check in runtime bytecode.",
"locations": [
"selector:0xa2e62045",
"pc:0x065c",
"pc:0x0703"
],
"recommendation": "Restrict the query-triggering function to an authorized operator, or require the caller to supply and account for the exact oracle fee so existing contract balance cannot be consumed by arbitrary users.",
"exploit_scenario": "If this contract holds ETH to subsidize oracle usage, any external account can call the public update function and force the contract to pay oracle fees. Repeated calls can drain the balance into oracle payments or trigger unwanted offchain queries, even if the caller is not otherwise trusted."
}
|
| low | auth | codex | Privileged kill switch can sweep balance via `SELFDESTRUCT` | 65 | no | — |
viewevidence_json{
"evidence": "Selector `0x41c0e1b5` matches `kill()`. At `pc:0x0155` the function reads slot 2, masks it to 160 bits, and compares it to `CALLER`. If equal, execution reaches `SELFDESTRUCT` at `pc:0x0174`, sending funds to the caller.",
"locations": [
"selector:0x41c0e1b5",
"pc:0x0155",
"pc:0x0174"
],
"recommendation": "Remove the kill path if it is unnecessary, or gate it behind a multisig/timelock and document the administrative trust model clearly.",
"exploit_scenario": "Whoever controls the address stored in slot 2 can invoke the kill function and force a terminal balance sweep to themselves. Even if this is intended admin functionality, compromise or abuse of that key breaks trust assumptions for funds held by the contract."
}
|