DDO Contract Review and Allowlisting
This page is for storage providers reviewing DDO market contracts, and for builders deploying them for Market 2.0.
What Curio Actually Checks
When a DDO deal includes market_address, Curio performs read-only intake verification before accepting the deal.
Current checks:
market_addressmust exist inddo_contractsand be markedallowed = true.market_deal_idmust be present.Curio calls
version()and requires1.Curio builds
ICurioDealViewV1.CurioDealViewfrom the local deal and callsverifyDeal(...)viaeth_call.verifyDeal(...)must returntrue.If
verifyDeal(...)reverts withDealNotFound(uint256), Curio rejects the deal as market-missing.
What this does not mean:
This call only answers whether the contract accepts the proposed deal at intake time.
It does not by itself prove payment, payout, callback success, or settlement behavior.
AddMarketContractonly validates address syntax and that the address resolves to a Filecoin actor before inserting it into Curio policy state.Curio does not inspect proxy admin, upgrade controls, ownership, or source verification for the contract.
Provider Control States
Provider policy is separate from contract code compatibility.
Current states:
Added and allowed: new DDO deals can reference the contract.
Added but blocked (
allowed = false): new DDO deals using that contract are rejected.Removed: contract is no longer configured; new DDO deals using it are rejected.
Existing accepted deals continue through processing even if the contract is later blocked or removed.
GET /contractsreturns only allowed contracts.
These controls are managed through Curio operator tooling and UI.
Provider Review Checklist
Before allowing a DDO market contract, providers should review:
Verified contract source and ABI from a source they trust.
The deployed address, preferably confirmed through a trusted builder channel.
verifyDeal(...)behavior, including validation ofproviderActorId,clientId,pieceCidV2,startEpoch,duration,allocationId, and the expectedstate/finalizedEpochsemantics.Notification-driven settlement or callback paths separately from the intake verification path.
Ownership, upgrade authority, and any governance or timelock around the contract if it is proxy-based or upgradeable.
Allocation note:
For allocation-backed DDO flows, Curio can resolve the allocation against either the deal client or the market contract address.
If the market contract allocates on behalf of end users, providers should make sure that ownership model is intentional and documented.
Upgradeable Contract Risk
Curio does not distinguish immutable and upgradeable contracts during allowlisting.
Providers should treat upgradeable contracts as an ongoing trust decision:
Review who controls upgrades.
Review whether upgrades are gated by a timelock or multisig.
Re-review the contract when implementation or ownership changes.
Block or remove the contract if governance or implementation changes become unclear.
Builder Guidance
Builders integrating a DDO market contract should:
Publish verified source and a reliable ABI reference.
Implement
CurioDealViewV1exactly and returnversion() == 1.Keep
verifyDeal(...)deterministic and read-only.Validate the fields Curio sends rather than blindly accepting every call.
Use
DealNotFound(uint256)for missing market deal identifiers.Keep notification-driven callbacks efficient and document the expected failure behavior for providers if the contract depends on them.
Communicate upgrade process and governance model clearly if the contract is upgradeable.
Related Pages
Last updated