Skip to content
LogoLogo

FAQ

Answers to our most frequented questions

Why does publishing need a remote store?

Because v2 does not write the DDO on chain. It signs the document as a verifiable credential, stores it off chain, and writes only a { remote: … } pointer that ocean-node dereferences. Without somewhere to put the document there is nothing to point at, so publish throws.

The default needs no external infrastructure — NodePersistentRemoteStore uses the node's own storage. See remote stores.

Where did the subgraph go?

Gone, along with the urql and graphql dependencies. Config has no subgraphUri at all any more. Prices are derived from contract reads plus the indexed indexedMetadata.stats[].prices, exactly as ocean.js does it.

v1's getAccessDetails and AccessDetails are replaced by getPricingInfo and getOrderPrice. See pricing.

Why is my gated asset letting everyone through?

Almost certainly because the node has no POLICY_SERVER_URL configured. ocean-node fails open: with no policy server it allows everything, regardless of what credentials the asset requires.

initializePSVerification returning null is the clean signal that no policy is being enforced. This is a deployment property, not something nautilus can compensate for.

Why am I paying twice for the same asset?

A known limitation of the current node, not of nautilus. ocean-node's access initialize returns { providerFee, datatoken, nonce, computeAddress } and no validOrder, so hasReusableOrder() is always false and every access buys a fresh datatoken — even inside the service timeout, where you already hold a valid order.

The v4 Provider returned that field; 3.2.21 does not. On a paid asset this is repeated payment for access you already have. Until it is restored, cache the download URL you get back rather than calling access again.

Never put 127.0.0.1 in a DDO

ocean-node's DEFAULT_UNSAFE_URLS blocks any URL matching it, and the failure surfaces as "URL is marked as unsafe" rather than a connection error — which sends people looking in the wrong place entirely.

Use a hostname the node can resolve. Remember that you never fetch these URLs; the node does, to encrypt the files object at publish time.

Free compute vs. paid compute

freeCompute places no order, funds no escrow and takes no payment token. It needs a compute environment that exposes free resources — if none does, the call fails and there is nothing to configure your way out of.

compute orders every input, locks funds in the Escrow contract from what the node quotes, and then starts the job.

Why does build() reject my asset?

DDO v5 requires providedBy, which had no v4 equivalent, so assets ported from v1 fail on a field that did not used to exist. build() also requires name, type, and at least one service — and container metadata when type is 'algorithm'.

Everything beyond that is checked by validate, which publish() runs automatically before spending any gas.

Do I still need separate Aquarius and Provider URLs?

No. One ocean-node serves metadata, provider services and the indexer, so metadataCacheUri and providerUri both collapse into a single oceanNodeUri. See migrating from v1.