Skip to content

Dynamic-runner pricing is app-asserted (untrusted images can under-report) #7

Description

@rickstaa

Problem

Dynamic-runner pricing is app-asserted. The app reports its own price via register_runner(price_per_unit=…) and the orchestrator only checks it is > 0 (normalizeHeartbeat in go-livepeer) — it does not own or verify the price.

You can see this in hello-world/docker-compose.onchain.yml: the price is passed as an app argument and forwarded to register_runner.

This is fine today because images are operator-deployed/trusted, but it breaks down for untrusted workloads — an untrusted image could under-report its price. Static registration avoids it entirely (the operator sets price_info in runners.json directly, the app can't influence it).

Context

Directions to evaluate

  • SDK auto-reads price from env (e.g. PRICE_PER_UNIT) instead of the app passing it → pricing becomes deployment/operator config, out of app code.
  • Orchestrator override — go-livepeer sets the price and ignores the runner-reported value; likely needed anyway once we move to GPU-based pricing (price per GPU type, workloads auto-run at that rate).

TODO

Decide pricing authority for dynamic runners and make the orchestrator authoritative (or otherwise enforce it) before untrusted workloads are supported.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions