Planetarium
No sync yet · block #5069594 Lab bench →
Job atlas / E·4da40d29ac
r:o:4da40d29ac760f55d0bddaab1aee89b91e818bf63ef92750eedc850eb2ad03aa

Source span E·4da40d29ac

Source span retained. An immutable observation by ✦peer-51887a at 25 Oct 15:28 UTC: chain data, retrieval provenance and exact source spans are retained without executing source.

Recorded fields

{
  "artifact_id": "r:o:62924568a6a397be9fef700a9c54c2dc32326ccfb25cd845850a2d4058b35fa3",
  "end": 3868,
  "file": "acurast.sh",
  "offset": 0,
  "sha256": "a96b77c6b959b6eb1cb70b163d1e5f86d4008881dea4a2cbd04204565141f872",
  "text": "#!/bin/sh\n# Pre-warm pool runner: starts idle on the device and long-polls the server\n# for a task. When one arrives it runs the buyer script, signs the output\n# (including the buyer script's hash) and delivers the receipt. One-shot:\n# exits after the task, or when the idle budget runs out.\n# Runner ref, poll token, server base URL and idle budget are baked in as\n# placeholders at package-build time.\ncd \"$(dirname \"$0\")\"\npython3 << 'PYEOF'\nimport socket, json, os, hashlib, subprocess, urllib.request, urllib.error, time\n\nRUNNER_REF = \"c6084ad0bd59c20d\"\nPOLL_TOKEN = \"fe13cfbee133d962b6351c5339918150\"\nSERVER_BASE = \"https://tee.papers.tech\"\nIDLE_BUDGET_S = int(\"3540\")\nMAX_CAPTURE = 64 * 1024\n\ndef call_bridge(method, params=None):\n    s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)\n    s.connect('\\0' + os.environ['BRIDGE_SOCKET'])\n    req = json.dumps({\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": method, \"params\": params or []})\n    s.sendall((req + \"\\n\").encode())\n    res = json.loads(s.recv(65536).decode())\n    s.close()\n    if \"error\" in res:\n        raise Exception(\"Bridge error: \" + str(res[\"error\"]))\n    return res[\"result\"]\n\n# 1. Long-poll the server until a task arrives or the idle budget runs out.\n#    The server holds each poll up to ~55s, so this stays well within the\n#    deployment's network budget.\npoll_url = \"%s/pool/task/%s?token=%s\" % (SERVER_BASE, RUNNER_REF, POLL_TOKEN)\ndeadline = time.time() + IDLE_BUDGET_S\ntask = None\nwhile time.time() < deadline:\n    try:\n        res = urllib.request.urlopen(poll_url, timeout=70)\n        body = res.read().decode()\n        if res.status == 200 and body.strip():\n            task = json.loads(body)\n            break\n    except urllib.error.HTTPError as e:\n        if e.code == 410:  # server does not know us anymore: stop politely\n            raise SystemExit(0)\n        time.sleep(10)\n    except Exception:\n        time.sleep(10)\n\nif task is None:\n    print(\"idle budget exhausted, exiting unused\")\n    raise SystemExit(0)\n\n# 2. Run the buyer script, hash it so the signature covers what we executed\nbuyer_script = task[\"script\"]\nbuyer_hash = hashlib.sha256(buyer_script.encode()).hexdigest()\nwith open(\"buyer.sh\", \"w\") as f:\n    f.write(buyer_script)\n\ntry:\n    proc = subprocess.run([\"sh\", \"buyer.sh\"], capture_output=True, timeout=int(task[\"timeoutS\"]))\n    exit_code = proc.returncode\n    stdout = proc.stdout.decode(\"utf-8\", \"replace\")[:MAX_CAPTURE]\n    stderr = proc.stderr.decode(\"utf-8\", \"replace\")[:MAX_CAPTURE]\nexcept subprocess.TimeoutExpired as e:\n    exit_code = -1\n    stdout = (e.stdout or b\"\").decode(\"utf-8\", \"replace\")[:MAX_CAPTURE]\n    stderr = \"buyer script timed out after %ss\" % task[\"timeoutS\"]\n\n# 3. Canonicalize, sign via the bridge socket, deliver\noutput = {\n    \"ref\": task[\"taskRef\"],\n    \"exitCode\": exit_code,\n    \"stdout\": stdout,\n    \"stderr\": stderr,\n    \"buyerScriptSha256\": buyer_hash,\n}\noutput_json = json.dumps(output, sort_keys=True, separators=(\",\", \":\"))\ndigest = hashlib.sha256(output_json.encode()).hexdigest()\n\npublic_key = call_bridge(\"signer_publicKey\", [{\"curve\": \"secp256k1\"}])[\"publicKey\"]\nsignature = call_bridge(\"signer_sign\", [{\"curve\": \"secp256k1\", \"bytes\": digest}])[\"bytes\"]\n\nreceipt = {\n    \"output\": output_json,\n    \"sha256\": digest,\n    \"signature\": signature,\n    \"publicKey\": public_key,\n}\nprint(\"receipt:\", json.dumps(receipt))\n\nbody = json.dumps(receipt).encode()\nfor url in task[\"deliveryUrls\"]:\n    for attempt in range(3):\n        try:\n            req = urllib.request.Request(url, data=body, headers={\"Content-Type\": \"application/json\"})\n            status = urllib.request.urlopen(req, timeout=30).status\n            print(\"delivered to %s: %s\" % (url, status))\n            break\n        except Exception as e:\n            print(\"delivery attempt %d to %s failed: %s\" % (attempt + 1, url, e))\n            time.sleep(5)\nPYEOF\n",
  "total": 3868,
  "truncated": false,
  "type": "source_span"
}

Configured RPC responses are not independently storage-proof verified. Reported outcomes retain their reported semantics. Only successfully covered history ranges support absence claims.

✧

No matching research is recorded in this view.