mirror of
https://github.com/morluto/rea.git
synced 2026-10-12 02:19:24 +00:00
* fix(build): generate catalogs and packaged skills without snapshot commits * fix(build): point skill drift recovery to uncached generation
85 lines
4.8 KiB
Markdown
85 lines
4.8 KiB
Markdown
# Offline EVM bytecode
|
|
|
|
`inspect_evm_interface` / `inspect-evm-interface` infers interface candidates
|
|
from one explicitly selected local bytecode carrier. The capability is general:
|
|
contract investigation, compatibility, audit and CTF showcases use the same
|
|
portable primitive. It does not require an active native binary target.
|
|
|
|
```sh
|
|
rea inspect-evm-interface ./runtime.hex hex --json
|
|
rea inspect-evm-interface ./runtime.bin raw --json
|
|
```
|
|
|
|
```json
|
|
{
|
|
"name": "inspect_evm_interface",
|
|
"arguments": { "path": "/artifacts/runtime.hex", "encoding": "hex" }
|
|
}
|
|
```
|
|
|
|
Initial real verification covers flat legacy bytecode on Linux x64 and unchanged
|
|
bundled EVMole 0.9.3. EOF-style EF00 containers return `unsupported_target`,
|
|
with the selected path and format reason. Provider/configuration failures retain
|
|
their distinct unavailable-provider or capability classification.
|
|
The host must already provide util-linux `prlimit`, normally `/usr/bin/prlimit`;
|
|
`REA_EVM_PRLIMIT_COMMAND` can select another absolute executable. REA installs
|
|
no system tools and changes no user configuration. [Upstream provenance and
|
|
license](https://github.com/morluto/rea/blob/main/third_party/evmole/README.md) are packaged.
|
|
|
|
## Evidence semantics
|
|
|
|
- `encoding` is required: raw bytes or UTF-8 hex, with optional `0x` prefix and
|
|
outer ASCII whitespace. Odd hex, interior separators, BOM, non-ASCII whitespace
|
|
and invalid UTF-8 are rejected. Empty bytecode is valid and has unknown coverage.
|
|
- Carrier SHA-256 identifies the exact original file, including prefix/casing
|
|
and whitespace. Decoded-byte SHA-256 identifies actual selected EVM bytes.
|
|
Neither digest is the Ethereum Keccak code hash.
|
|
- Full bytecode, upstream function offsets and original producer representation
|
|
are returned inline. Offsets are byte positions in decoded bytecode.
|
|
- Upstream also returns terminal metadata during selector recovery. Its reported
|
|
values remain in `raw_result`; integer precision and non-text-key coverage are
|
|
unknown in the JS binding. Full bytecode retains the original encoded metadata.
|
|
- Selectors, argument strings and state mutability are **inferences**. Function
|
|
names/signatures are not looked up. Optimized code may produce different
|
|
mutability candidates; recovered types are not a verified source ABI.
|
|
- Runtime/init-code identity, deployed authenticity, hardfork and discovery
|
|
completeness remain unknown. Empty candidates do not prove no callable interface.
|
|
- Analysis is offline: no target runtime execution, implicit chain/RPC/explorer
|
|
lookup, wallet action, transaction broadcast or network request.
|
|
|
|
## Resource and lifecycle limits
|
|
|
|
Inputs are limited to 4 MiB, complete replies to 16 MiB and combined diagnostic
|
|
output to 1 MiB. An owned worker has a 256 MiB JavaScript heap, 3 GiB virtual
|
|
address-space limit, 30 CPU seconds and a 30-second command deadline. Virtual
|
|
address space differs from resident memory. The worker retains inherited tighter
|
|
soft/hard limits, reports its configured soft limits inline and leaves hard limits
|
|
unchanged. WASM trap reservations are disabled
|
|
so the engine can run within that virtual limit; actual memory is not equated to
|
|
its 3 GiB allowance. Limits fail without partial success. Stable snapshots,
|
|
private files and owned processes are cleaned independently of caller cancellation.
|
|
Invalid-input, unsupported, cancellation, timeout and malformed-reply failures
|
|
retain bounded stdout/stderr under `details.captured_output`, including whether
|
|
diagnostic output was truncated. Cleanup failures preserve the
|
|
original error projection and any captured output.
|
|
Successful results expose `diagnostics.truncated` from the supervisor as well.
|
|
Excess diagnostic output fails the complete-output contract even when the worker
|
|
has written a valid reply.
|
|
SIGXCPU retains a CPU resource diagnostic and CPU-specific guidance. Observed
|
|
file-size write failures (EFBIG) and SIGXFSZ likewise retain a file-size resource
|
|
diagnostic. Exact signal/write causes remain unknown. Configured
|
|
soft limits are reported separately from unknown effective limits; the received
|
|
signal alone does not establish its exact cause.
|
|
Reserved file-size exits require a matching private marker written by the
|
|
worker's EFBIG branch. Bare launcher exits or unwritable markers retain process
|
|
diagnostics with the resource cause unverified.
|
|
|
|
Source/metadata, proxy resolution, storage/CFG and fork-explicit execution/traces
|
|
remain separate increments under #972, with materially different result or
|
|
execution authority. This primitive makes no deployment or runtime behavior claim.
|
|
|
|
The real verification lane traces representative raw/hex CLI workflows and checks
|
|
that only declared Node/prlimit launchers and process ownership inspection run.
|
|
Socket traces permit local stdio socket pairs and reject attempted network requests.
|
|
These observations verify those fixtures; they are not a general network sandbox.
|