The hardest parts of building a dApp on
@ritualnet. Honestly.
_receiveCompute(). Looks simple until it doesn't fire. It's an internal override with 9 parameters (subscriptionId, interval, redundancy, node, input, output, proof, containerId, index). Miss one or get the modifier wrong and nothing comes back. Check node logs first.
Thinking in async. You call _requestCompute() and nothing happens immediately. The result comes back later via callback. If you're used to synchronous code - this takes time to click.
abi.encode on the input, abi.decode on the output. Get the types wrong once and you'll spend an hour on it.
Container IDs. You're not calling a model directly - you're calling a container that runs the model. Small distinction, big confusion at first.
None of this is insurmountable. Docs are solid. Community helps fast.
But it's definitely not plug and play. That's also what makes it interesting.