Planetarium
No sync yet · block #5101895 Lab bench →
Job atlas / Job #328481 / E·cb3ac8fc9e
r:o:cb3ac8fc9e7c940ba01919957ba78c80ec44de3050d32a537c564463c49e4609

Artifact E·cb3ac8fc9e

Artifact retrieval for job #328481. An immutable observation by ✦peer-3191b2 at 28 Oct 02:46 UTC: chain data, retrieval provenance and exact source spans are retained without executing source.

Recorded fields

{
  "evidence": {
    "artifact_bytes": 13518,
    "artifact_sha256": "5ea81c7cc22019e50728155bc3dbca253f6c2499aaf302354b969e4f562988f8",
    "cid_verified": false,
    "files": [
      {
        "bytes": 43292,
        "name": "bundle.js",
        "sha256": "a12e6c7dbc44b8a940d6aa633cc9d849fa8494ec725d0e0f946a507605b202e1",
        "text": "var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  // If the importer is in node compatibility mode or this is not an ESM\n  // file that has been converted to a CommonJS file using a Babel-\n  // compatible transform (i.e. \"__esModule\" has not been set), then set\n  // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\n\n// cert-fields.js\nvar COMPONENT_OIDS = {\n  sct: \"1.3.6.1.4.1.11129.2.4.2\",\n  ski: \"2.5.29.14\",\n  aki: \"2.5.29.35\"\n};\nvar ALIASES = { spki: \"publicKey\", pubkey: \"publicKey\", publickey: \"publicKey\" };\nvar DEFAULT_DROP = [\"publicKey\", \"sct\", \"ski\", \"aki\"];\nfunction parseDropSpec(spec = DEFAULT_DROP) {\n  const tokens = Array.isArray(spec) ? spec : String(spec).split(\",\");\n  const drop = { serial: false, publicKey: false, oids: /* @__PURE__ */ new Set() };\n  for (const raw of tokens) {\n    const token = raw.trim();\n    if (!token) continue;\n    const name = ALIASES[token.toLowerCase()] ?? token;\n    if (name === \"serial\") drop.serial = true;\n    else if (name === \"publicKey\") drop.publicKey = true;\n    else if (COMPONENT_OIDS[name.toLowerCase()]) drop.oids.add(COMPONENT_OIDS[name.toLowerCase()]);\n    else if (/^\\d+(\\.\\d+)+$/.test(name)) drop.oids.add(name);\n    else {\n      throw new Error(\n        `cert-fields: unknown component \"${token}\" (names: serial, publicKey, ${Object.keys(COMPONENT_OIDS).join(\", \")}, or a dotted OID)`\n      );\n    }\n  }\n  return drop;\n}\n\n// scraper/config.js\nvar env = (name) => typeof process !== \"undefined\" ? process.env?.[name] : void 0;\nvar str = (baked, name, dflt) => baked ?? env(name) ?? dflt;\nvar num = (baked, name, dflt) => Number(baked ?? env(name) ?? dflt);\nvar ORCH_URL = str(\n  true ? \"https://crtl.papers.tech/\" : void 0,\n  \"ORCH_URL\",\n  \"http://127.0.0.1:8080\"\n);\nvar FLEET_ID = str(\n  typeof SCRAPER_FLEET_ID !== \"undefined\" ? SCRAPER_FLEET_ID : void 0,\n  \"FLEET_ID\",\n  \"dev-fleet\"\n);\nvar JOB_TAG = str(\n  typeof SCRAPER_JOB_TAG !== \"undefined\" ? SCRAPER_JOB_TAG : void 0,\n  \"JOB_TAG\",\n  \"dev\"\n);\nvar CHUNK_ENTRIES = Math.min(\n  num(typeof SCRAPER_CHUNK_ENTRIES !== \"undefined\" ? SCRAPER_CHUNK_ENTRIES : void 0, \"CHUNK_ENTRIES\", 1e4),\n  5e4\n);\nvar FETCH_INITIAL_WINDOW = num(\n  typeof SCRAPER_FETCH_INITIAL_WINDOW !== \"undefined\" ? SCRAPER_FETCH_INITIAL_WINDOW : void 0,\n  \"FETCH_INITIAL_WINDOW\",\n  256\n);\nvar FETCH_MAX_ATTEMPTS = num(\n  true ? 30 : void 0,\n  \"FETCH_MAX_ATTEMPTS\",\n  8\n);\nvar FETCH_TIMEOUT_MS = num(\n  true ? 6e4 : void 0,\n  \"FETCH_TIMEOUT_MS\",\n  3e4\n);\nvar STOP_MARGIN_MS = num(\n  true ? 18e4 : void 0,\n  \"STOP_MARGIN_MS\",\n  45e3\n);\nvar FETCH_CONCURRENCY = num(\n  true ? 8 : void 0,\n  \"FETCH_CONCURRENCY\",\n  8\n);\nvar CHUNK_CONCURRENCY = num(\n  true ? 6 : void 0,\n  \"CHUNK_CONCURRENCY\",\n  4\n);\nvar HOST_RATE_LIMITS = str(\n  typeof SCRAPER_HOST_RATE_LIMITS !== \"undefined\" ? SCRAPER_HOST_RATE_LIMITS : void 0,\n  \"HOST_RATE_LIMITS\",\n  \"ct.cloudflare.com=3,skylight.geomys.org=0.5\"\n);\nvar EXECUTION_TIME_MS = num(\n  true ? 36e6 : void 0,\n  \"EXECUTION_TIME_MS\",\n  9e5\n);\nvar CERT_DROP = str(\n  typeof SCRAPER_CERT_DROP !== \"undefined\" ? SCRAPER_CERT_DROP : void 0,\n  \"CERT_DROP\",\n  DEFAULT_DROP.join(\",\")\n);\n\n// scraper/fetcher.js\nvar import_node_zlib = require(\"node:zlib\");\n\n// scraper/transport.js\nvar import_node_http = __toESM(require(\"node:http\"), 1);\nvar import_node_https = __toESM(require(\"node:https\"), 1);\nvar agents = {\n  \"http:\": new import_node_http.default.Agent({ keepAlive: true, maxSockets: 128 }),\n  \"https:\": new import_node_https.default.Agent({ keepAlive: true, maxSockets: 128 })\n};\nvar transportStats = { statuses: /* @__PURE__ */ new Map() };\nfunction httpRequest(url, { method = \"GET\", headers = {}, body, timeoutMs = 3e4 } = {}) {\n  return new Promise((resolve, reject) => {\n    const u = new URL(url);\n    const mod = u.protocol === \"http:\" ? import_node_http.default : import_node_https.default;\n    const req = mod.request(\n      u,\n      { method, headers, agent: agents[u.protocol], timeout: timeoutMs },\n      (res) => {\n        transportStats.statuses.set(res.statusCode, (transportStats.statuses.get(res.statusCode) ?? 0) + 1);\n        const chunks = [];\n        res.on(\"data\", (c) => chunks.push(c));\n        res.on(\n          \"end\",\n          () => resolve({ status: res.statusCode, headers: res.headers, body: Buffer.concat(chunks) })\n        );\n        res.on(\"error\", reject);\n      }\n    );\n    req.on(\"timeout\", () => req.destroy(new Error(`request to ${u.host} timed out after ${timeoutMs}ms`)));\n    req.on(\"error\", reject);\n    if (body !== void 0) req.write(body);\n    req.end();\n  });\n}\n\n// scraper/fetcher.js\nasync function httpsTransport(url, timeoutMs) {\n  const res = await httpRequest(url, { timeoutMs });\n  return {\n    status: res.status,\n    retryAfter: res.headers[\"retry-after\"] ?? null,\n    encoding: res.headers[\"content-encoding\"] ?? null,\n    body: res.body\n  };\n}\nvar newFetchStats = () => ({ requests: 0, retries: 0, status429: 0, netMs: 0, pacedMs: 0, backoffMs: 0 });\nvar DEFAULTS = {\n  initialWindow: 256,\n  minWindow: 1,\n  maxAttempts: 8,\n  baseDelayMs: 500,\n  maxDelayMs: 3e4,\n  timeoutMs: 3e4,\n  transport: httpsTransport,\n  tileSize: 256,\n  // requests never cross a tile boundary; 0 disables\n  regrowAfter: 8,\n  // full responses in a row before the window doubles back\n  hostRateLimits: {}\n  // { 'ct.cloudflare.com': 3 } — requests/s per host suffix, device-wide\n};\nvar HostLimiter = class {\n  constructor(rps) {\n    this.intervalMs = 1e3 / rps;\n    this.nextAt = 0;\n  }\n  async acquire() {\n    const now = Date.now();\n    const at = Math.max(now, this.nextAt);\n    this.nextAt = at + this.intervalMs;\n    if (at > now) await sleep(at - now);\n  }\n  defer(ms) {\n    this.nextAt = Math.max(this.nextAt, Date.now() + ms);\n  }\n};\nvar limiters = /* @__PURE__ */ new Map();\nfunction limiterFor(host, limits) {\n  for (const [suffix, rps] of Object.entries(limits ?? {})) {\n    if (!(rps > 0)) continue;\n    if (host === suffix || host.endsWith(`.${suffix}`)) {\n      const key = `${suffix}@${rps}`;\n      if (!limiters.has(key)) limiters.set(key, new HostLimiter(rps));\n      return limiters.get(key);\n    }\n  }\n  return null;\n}\nfunction parseHostRateLimits(spec) {\n  const out = {};\n  for (const part of String(spec ?? \"\").split(\",\")) {\n    const [host, rps] = part.split(\"=\").map((x) => x.trim());\n    if (host && Number(rps) > 0) out[host.toLowerCase()] = Number(rps);\n  }\n  return out;\n}\nvar FetchExhaustedError = class extends Error {\n  constructor(message, opts) {\n    super(message, opts);\n    this.name = \"FetchExhaustedError\";\n  }\n};\nvar HttpError = class extends Error {\n  constructor(status, url) {\n    super(`HTTP ${status} for ${url}`);\n    this.name = \"HttpError\";\n    this.status = status;\n  }\n};\nfunction parseRetryAfter(header) {\n  if (!header) return null;\n  const secs = Number(header);\n  if (Number.isFinite(secs)) return Math.max(0, secs);\n  const at = Date.parse(header);\n  return Number.isNaN(at) ? null : Math.max(0, Math.ceil((at - Date.now()) / 1e3));\n}\nvar RetryableHttpError = class extends HttpError {\n  constructor(status, url, retryAfter) {\n    super(status, url);\n    this.name = \"RetryableHttpError\";\n    this.retryAfter = parseRetryAfter(retryAfter);\n  }\n};\nvar AdaptiveFetcher = class {\n  #window;\n  #opts;\n  #ceiling;\n  // largest window the server has not rejected with 400\n  #fullRun = 0;\n  // consecutive full responses at the current window\n  #limiter;",
        "truncated": true
      },
      {
        "bytes": 86,
        "name": "manifest.json",
        "sha256": "346de335a6301b627fca8c492c58599822962f981bf5f64cf5705c43a390626f",
        "text": "",
        "truncated": true
      }
    ],
    "image_url": null,
    "job": {
      "job_id": "acurast:5EPLiVzfdYu2NsJzpJQdsb85eRiaaKYuvB8QzWBcKEVyovLB:328481",
      "observed_block": "0xf8ecf60324078e5b604c3ea7d30328a1248aa58b7fbc370fc3cec3cd0b03de8e",
      "script_uri": "ipfs://QmU49Bcg9UxPyE1SN6Cpzdfokufa6CQNXTvkaErcJwmZUW"
    },
    "kind": "cargo_zip"
  },
  "identity": {
    "address": "5EPLiVzfdYu2NsJzpJQdsb85eRiaaKYuvB8QzWBcKEVyovLB",
    "address_hex": "0x66aef695697aa1bcebc08f4327885013d643ebfded83cf354baca8cd2108e720",
    "id": "acurast:5EPLiVzfdYu2NsJzpJQdsb85eRiaaKYuvB8QzWBcKEVyovLB:328481",
    "origin_variant": "Acurast",
    "sequence": "328481"
  },
  "outcome": "retrieved",
  "registration_id": "r:o:ea31467c3e943c2d93f2f9faa5fe927ea0c0b076d4c216580cc76158cade0da8",
  "retrieval": {
    "cid_verified": false,
    "downloaded_bytes": 13518,
    "downloaded_sha256": "5ea81c7cc22019e50728155bc3dbca253f6c2499aaf302354b969e4f562988f8",
    "failures": [],
    "gateway_index": 0,
    "inspection_error": null,
    "retrieved_at_ms": 1793155591568,
    "state": "retrieved",
    "trust": "trusted gateway; UnixFS root not independently verified"
  },
  "type": "artifact"
}

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

Observation

Job
acurast:5EPLiVzfdYu2NsJzpJQdsb85eRiaaKYuvB8QzWBcKEVyovLB:328481
Script
ipfs://QmU49Bcg9UxPyE1SN6Cpzdfokufa6CQNXTvkaErcJwmZUW
Artifact
cargo_zip
Downloaded bytes
13518
SHA-256
5ea81c7cc22019e50728155bc3dbca253f6c2499aaf302354b969e4f562988f8
CID byte verification
Not verified against CID (download hash retained)
PRoot image reference
None recorded

Source previews

bundle.js

43292 bytes · SHA-256 a12e6c7dbc44b8a940d6aa633cc9d849fa8494ec725d0e0f946a507605b202e1

var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  // If the importer is in node compatibility mode or this is not an ESM
  // file that has been converted to a CommonJS file using a Babel-
  // compatible transform (i.e. "__esModule" has not been set), then set
  // "default" to the CommonJS "module.exports" for node compatibility.
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  mod
));

// cert-fields.js
var COMPONENT_OIDS = {
  sct: "1.3.6.1.4.1.11129.2.4.2",
  ski: "2.5.29.14",
  aki: "2.5.29.35"
};
var ALIASES = { spki: "publicKey", pubkey: "publicKey", publickey: "publicKey" };
var DEFAULT_DROP = ["publicKey", "sct", "ski", "aki"];
function parseDropSpec(spec = DEFAULT_DROP) {
  const tokens = Array.isArray(spec) ? spec : String(spec).split(",");
  const drop = { serial: false, publicKey: false, oids: /* @__PURE__ */ new Set() };
  for (const raw of tokens) {
    const token = raw.trim();
    if (!token) continue;
    const name = ALIASES[token.toLowerCase()] ?? token;
    if (name === "serial") drop.serial = true;
    else if (name === "publicKey") drop.publicKey = true;
    else if (COMPONENT_OIDS[name.toLowerCase()]) drop.oids.add(COMPONENT_OIDS[name.toLowerCase()]);
    else if (/^\d+(\.\d+)+$/.test(name)) drop.oids.add(name);
    else {
      throw new Error(
        `cert-fields: unknown component "${token}" (names: serial, publicKey, ${Object.keys(COMPONENT_OIDS).join(", ")}, or a dotted OID)`
      );
    }
  }
  return drop;
}

// scraper/config.js
var env = (name) => typeof process !== "undefined" ? process.env?.[name] : void 0;
var str = (baked, name, dflt) => baked ?? env(name) ?? dflt;
var num = (baked, name, dflt) => Number(baked ?? env(name) ?? dflt);
var ORCH_URL = str(
  true ? "https://crtl.papers.tech/" : void 0,
  "ORCH_URL",
  "http://127.0.0.1:8080"
);
var FLEET_ID = str(
  typeof SCRAPER_FLEET_ID !== "undefined" ? SCRAPER_FLEET_ID : void 0,
  "FLEET_ID",
  "dev-fleet"
);
var JOB_TAG = str(
  typeof SCRAPER_JOB_TAG !== "undefined" ? SCRAPER_JOB_TAG : void 0,
  "JOB_TAG",
  "dev"
);
var CHUNK_ENTRIES = Math.min(
  num(typeof SCRAPER_CHUNK_ENTRIES !== "undefined" ? SCRAPER_CHUNK_ENTRIES : void 0, "CHUNK_ENTRIES", 1e4),
  5e4
);
var FETCH_INITIAL_WINDOW = num(
  typeof SCRAPER_FETCH_INITIAL_WINDOW !== "undefined" ? SCRAPER_FETCH_INITIAL_WINDOW : void 0,
  "FETCH_INITIAL_WINDOW",
  256
);
var FETCH_MAX_ATTEMPTS = num(
  true ? 30 : void 0,
  "FETCH_MAX_ATTEMPTS",
  8
);
var FETCH_TIMEOUT_MS = num(
  true ? 6e4 : void 0,
  "FETCH_TIMEOUT_MS",
  3e4
);
var STOP_MARGIN_MS = num(
  true ? 18e4 : void 0,
  "STOP_MARGIN_MS",
  45e3
);
var FETCH_CONCURRENCY = num(
  true ? 8 : void 0,
  "FETCH_CONCURRENCY",
  8
);
var CHUNK_CONCURRENCY = num(
  true ? 6 : void 0,
  "CHUNK_CONCURRENCY",
  4
);
var HOST_RATE_LIMITS = str(
  typeof SCRAPER_HOST_RATE_LIMITS !== "undefined" ? SCRAPER_HOST_RATE_LIMITS : void 0,
  "HOST_RATE_LIMITS",
  "ct.cloudflare.com=3,skylight.geomys.org=0.5"
);
var EXECUTION_TIME_MS = num(
  true ? 36e6 : void 0,
  "EXECUTION_TIME_MS",
  9e5
);
var CERT_DROP = str(
  typeof SCRAPER_CERT_DROP !== "undefined" ? SCRAPER_CERT_DROP : void 0,
  "CERT_DROP",
  DEFAULT_DROP.join(",")
);

// scraper/fetcher.js
var import_node_zlib = require("node:zlib");

// scraper/transport.js
var import_node_http = __toESM(require("node:http"), 1);
var import_node_https = __toESM(require("node:https"), 1);
var agents = {
  "http:": new import_node_http.default.Agent({ keepAlive: true, maxSockets: 128 }),
  "https:": new import_node_https.default.Agent({ keepAlive: true, maxSockets: 128 })
};
var transportStats = { statuses: /* @__PURE__ */ new Map() };
function httpRequest(url, { method = "GET", headers = {}, body, timeoutMs = 3e4 } = {}) {
  return new Promise((resolve, reject) => {
    const u = new URL(url);
    const mod = u.protocol === "http:" ? import_node_http.default : import_node_https.default;
    const req = mod.request(
      u,
      { method, headers, agent: agents[u.protocol], timeout: timeoutMs },
      (res) => {
        transportStats.statuses.set(res.statusCode, (transportStats.statuses.get(res.statusCode) ?? 0) + 1);
        const chunks = [];
        res.on("data", (c) => chunks.push(c));
        res.on(
          "end",
          () => resolve({ status: res.statusCode, headers: res.headers, body: Buffer.concat(chunks) })
        );
        res.on("error", reject);
      }
    );
    req.on("timeout", () => req.destroy(new Error(`request to ${u.host} timed out after ${timeoutMs}ms`)));
    req.on("error", reject);
    if (body !== void 0) req.write(body);
    req.end();
  });
}

// scraper/fetcher.js
async function httpsTransport(url, timeoutMs) {
  const res = await httpRequest(url, { timeoutMs });
  return {
    status: res.status,
    retryAfter: res.headers["retry-after"] ?? null,
    encoding: res.headers["content-encoding"] ?? null,
    body: res.body
  };
}
var newFetchStats = () => ({ requests: 0, retries: 0, status429: 0, netMs: 0, pacedMs: 0, backoffMs: 0 });
var DEFAULTS = {
  initialWindow: 256,
  minWindow: 1,
  maxAttempts: 8,
  baseDelayMs: 500,
  maxDelayMs: 3e4,
  timeoutMs: 3e4,
  transport: httpsTransport,
  tileSize: 256,
  // requests never cross a tile boundary; 0 disables
  regrowAfter: 8,
  // full responses in a row before the window doubles back
  hostRateLimits: {}
  // { 'ct.cloudflare.com': 3 } — requests/s per host suffix, device-wide
};
var HostLimiter = class {
  constructor(rps) {
    this.intervalMs = 1e3 / rps;
    this.nextAt = 0;
  }
  async acquire() {
    const now = Date.now();
    const at = Math.max(now, this.nextAt);
    this.nextAt = at + this.intervalMs;
    if (at > now) await sleep(at - now);
  }
  defer(ms) {
    this.nextAt = Math.max(this.nextAt, Date.now() + ms);
  }
};
var limiters = /* @__PURE__ */ new Map();
function limiterFor(host, limits) {
  for (const [suffix, rps] of Object.entries(limits ?? {})) {
    if (!(rps > 0)) continue;
    if (host === suffix || host.endsWith(`.${suffix}`)) {
      const key = `${suffix}@${rps}`;
      if (!limiters.has(key)) limiters.set(key, new HostLimiter(rps));
      return limiters.get(key);
    }
  }
  return null;
}
function parseHostRateLimits(spec) {
  const out = {};
  for (const part of String(spec ?? "").split(",")) {
    const [host, rps] = part.split("=").map((x) => x.trim());
    if (host && Number(rps) > 0) out[host.toLowerCase()] = Number(rps);
  }
  return out;
}
var FetchExhaustedError = class extends Error {
  constructor(message, opts) {
    super(message, opts);
    this.name = "FetchExhaustedError";
  }
};
var HttpError = class extends Error {
  constructor(status, url) {
    super(`HTTP ${status} for ${url}`);
    this.name = "HttpError";
    this.status = status;
  }
};
function parseRetryAfter(header) {
  if (!header) return null;
  const secs = Number(header);
  if (Number.isFinite(secs)) return Math.max(0, secs);
  const at = Date.parse(header);
  return Number.isNaN(at) ? null : Math.max(0, Math.ceil((at - Date.now()) / 1e3));
}
var RetryableHttpError = class extends HttpError {
  constructor(status, url, retryAfter) {
    super(status, url);
    this.name = "RetryableHttpError";
    this.retryAfter = parseRetryAfter(retryAfter);
  }
};
var AdaptiveFetcher = class {
  #window;
  #opts;
  #ceiling;
  // largest window the server has not rejected with 400
  #fullRun = 0;
  // consecutive full responses at the current window
  #limiter;

Preview truncated.

manifest.json

86 bytes · SHA-256 346de335a6301b627fca8c492c58599822962f981bf5f64cf5705c43a390626f


Preview truncated.

Provenance

Observed by
✦peer-3191b2
Recorded
28 Oct 02:46 UTC
Submitted block
0xf8ecf60324078e5b604c3ea7d30328a1248aa58b7fbc370fc3cec3cd0b03de8e

The artifact script and block came from its linked finalized registration observation. Historical execution is a separate observation.

Local copy & sync

Available on peer-fe201b.

No successful sync reported.

A sync timestamp does not confirm remote copies of this object.