After your proxy-router is running, register on the BASE Diamond contract. Prefer looking up an existing model and posting a bid on it — minting a new model for every provider floods the marketplace with duplicate names.
Preferred operator UI: MyProvider (guide) — especially on SecretVM, where the node already serves HTTPS. Swagger at http://localhost:8082/swagger/index.html (or https://<your-node>/swagger/) remains the API fallback.

Contract minimums

ItemValue (wei)Display
providerMinStake2000000000000000000.2 MOR
modelMinStake1000000000000000000.1 MOR
marketplaceBidFee3000000000000000000.3 MOR
bidPricePerSecondMin100000000000.00000001 MOR/sec

What you’ll need

ItemExample
Provider wallet0x9E26Fea97F7d644BAf62d0e20e4d4b8F836C166c
Public endpointserver.example.com:3333
Existing or new on-chain modelIdFrom active.mor.org — see below
Bid pricePerSecondCheck competitors first; floor is 10000000000

Step 0 — Look up models before you mint

Browse active.mor.org/status or pull the JSON snapshots:
URLUse
active_models.jsonRoutable models (healthy/degraded bids) — start here
active_bids.jsonCompeting pricePerSecond for a model name
all_models.jsonAll non-deleted on-chain models (including ones with no live healthy provider)
statusHuman UI + uptime / min price views
Decision rule:
SituationWhat to do
Same logical model already listed (same weights / name you intend to serve)Do not create a model. Register as a provider, then bid on that existing Id. Put that Id in models-config.json.
You need a tee tag and no suitable tee-tagged model existsRegister a new model with tag tee, then bid.
Genuinely new weights, fine-tune, or metadataRegister a new model (new ipfsCID / name), then bid.
Any registered provider can bid on any active model — you do not need to own the model record. Creating another model with the same display name still adds a separate marketplace entry and is what produces the duplicate clutter on active.mor.org.

Steps

TEE tag deeper context

Tagging the model tee engages two independent verifications on every session and prompt — one each side:
  • Phase 1 (consumer → your P-Node). Any v6.0.0+ consumer proxy-router will verify your P-Node’s TDX attestation (CPU quote, TLS pinning, RTMR3 of the -tee image) at session open and on every prompt before forwarding inference.
  • Phase 2 (your P-Node → backend). Your v7.0.0+ P-Node will verify the backend LLM your model’s apiUrl points to — CPU TDX quote, TLS pinning, RTMR3 replay of the backend’s docker-compose.yaml, CPU-GPU nonce binding, and NVIDIA NRAS GPU attestation — at startup and on every prompt.
A v6+ consumer benefits from Phase 2 automatically by trusting your attested v7+ P-Node — no client-side upgrade needed. Models without the tee tag are treated as standard providers; neither hop runs. If you bid on someone else’s model, you inherit that model’s tags. To offer TEE attestation to consumers, bid on an existing tee-tagged model or register your own with "tee". See TEE overview and TEE reference.

Where things show up afterward

  • Your provider on chain: GET /blockchain/providers
  • Models on chain: GET /blockchain/models
  • Your bids on chain: GET /blockchain/bids
  • Live network listings: active.mor.org
  • Operator dashboard: MyProvider

Pausing or temporarily disabling a model offering

To stop offering a model without deregistering it (so you keep any model stake bonded and can resume):
The model record stays on chain. To resume, post a new bid (which charges the 0.3 MOR marketplaceBidFee again — see pricing). If you own a model and want to completely remove it: delete all of its bids first, then call modelDeregister to recover the 0.1 MOR model stake. The contract refuses modelDeregister while any bid for that model is still active. If you only ever bid on someone else’s model, deleting your bid is enough — you have no model stake to recover.

How and when you get paid

For typical staked sessions, the protocol pays you inside closeSession via _rewardProviderAfterClose, with the funds coming from a separate protocol fundingAccount (via transferFrom), not from the consumer’s stake in real time. There is no separate “session claim” step for the standard flow — the payment for time actually used hits your provider wallet in the same transaction that closes the session. What this means for you operationally:
  • Keep your provider wallet ready to receive MOR; you don’t need to call a claim function.
  • For the direct-payment carve-out (a separate flow some sessions use), behavior differs — see the contract source and tech.mor.org/session.html for the canonical breakdown.
  • If closeSession ever fails because the protocol funding account is empty or under-approved, no provider gets paid until operators top it up — that’s a network-wide failure mode, not a per-provider one.