What is your oracle agent doing off-chain, and what threatens it?
LLMs can't reliably separate data from instructions, so they are easy to manipulate. Decentralisation helps with some threats: independent data sources, checks for hallucinations and freezes, and liveness across APIs.
Against prompt injection, though, decentralisation alone doesn't do much. The attack can come through input data or memory poisoning.
Injection in input data is often handled with a better prompt. That's not enough. Repeated, adaptive attempts can find a bypass. The stronger defence is in the architecture: the part that reads external content holds no keys or action tools. It only returns a proposed value. A deterministic service decides whether to sign without reading untrusted text. It checks range, deviation, data age, and independent reference data where available. The agent returns strict JSON: a proposed number or an alert.
If something goes wrong, you must be able to trace why. Pin the model and prompt versions, set a low temperature, and log inputs, outputs, decisions, and memory changes. Commit log hashes on-chain if you need public tamper evidence. A quorum won't protect against shared model or infrastructure failures. Protect the control panel with MFA, separated permissions, and an audit log.
Memory poisoning is sneakier. A poisoned record looks like the agent's own knowledge and can affect later steps, making the damage hard to trace. A study using ElizaOS found memory attacks significantly more effective than regular prompt injection in its tested setting. The prompt injection defences it tested offered limited protection.
The simplest way to remove this attack surface is to give the agent no persistent memory. If you need memory, keep configuration (sources, thresholds, parameters) outside the agent's write access and separate it from observations, such as the last price.
Writes go through a non-AI service, just like signing. It checks the schema, source, range against the previous value, and the write limit per round. If a check fails, the write is dropped and an alert fires. These checks limit damage; they don't prove an accepted value is correct.