Nonceworks

Moving off OpenZeppelin Defender

OpenZeppelin retired the hosted Defender service on 2026-07-01 and removed its pages from the docs on 2026-10-02, the migration guide with them; the old URL now redirects to the docs home (OpenZeppelin/docs #243). The steps for relayers, monitors and Actions are below in our own words, with a link to the last version of the original.

Dates

WhatWhenSource
Defender sign-upsClosed 2025-06-30OpenZeppelin, 2025-06-30
Hosted Defender serviceRetired 2026-07-01Defender sunset FAQ
Defender docs and migration guideRemoved 2026-10-02#243; last version of the guide

Defender Relayer to OpenZeppelin Relayer

Defender's export button was in its UI, which closed on 2026-07-01. If you clicked "OpenZeppelin Relayer Configurations" before July, the ZIP has a config.json and, for forked or private networks, a networks/ folder. Both go into the relayer's config/ directory, and each relayer then needs a signer, the notification webhook with its signing key, and its policies. Without the ZIP, config.json is written by hand.

Defender relayer keys could not be exported: they lived in AWS KMS, so every relayer gets a new address. Before the funds move, every place that names the old address needs the new one: access control roles, receiver whitelists, trusted forwarders, and any contract that compares msg.sender with a stored keeper. On a Safe that is one batch; behind a timelock, the delay is added to the move.

Then move a small amount first, send one test transaction, and move the rest. The original guide recommends running both relayers side by side and shifting traffic over in steps, which is still the safe order.

Code on @openzeppelin/defender-sdk moves to @openzeppelin/relayer-sdk. Each call has a counterpart, but they are not drop-in: the Relayer SDK takes the relayer id as its first argument and uses snake_case fields, so gasLimit becomes gas_limit. The table follows OpenZeppelin's original, whose left column mixes the SDK's client.relaySigner with the older relay client's relayer object.

Defender SDKRelayer SDK
client.relaySigner.sendTransaction()relayerApi.sendTransaction()
relayer.getTransaction()relayerApi.getTransactionById()
relayer.list()relayerApi.listTransactions()
relayer.replaceTransactionById()relayerApi.replaceTransaction()
relayer.cancelTransactionById()relayerApi.cancelTransaction()
relayer.sign(), relayer.signTypedData()relayerApi.sign(), relayerApi.signTypedData()

If your code uses the last row, read the note on the sign endpoints before you move it: on the OpenZeppelin Relayer those two calls run outside the relayer's policies. Code built on the ethers adapters from the relay client (DefenderRelaySigner, DefenderRelayProvider) needs another signer, either the relayer API or an ethers signer backed by your KMS.

Defender Monitor to OpenZeppelin Monitor

The Monitor export was close to drop-in. The files from the "OpenZeppelin Monitor Configurations" ZIP go into the Monitor's config folders once the placeholders are filled: API keys, RPC URLs, webhook URLs, and the Slack, Telegram or Discord credentials. Custom Actions attached to Defender monitors were not exported and have to be rebuilt as Monitor triggers or scripts. Defender's alert threshold and its minimum time between notifications have no equivalent in Monitor 1.6.0, so a monitor that leaned on them gets noisier after the move. The validator here runs the control plane's checks on an export, including the one for env written where the Monitor expects environment, which makes the Monitor exit on startup.

Defender Actions

Actions have no successor. Origin Protocol moved its Actions into a runner of its own, Talos (origin-dollar #2928); other teams went to keeper services. defender-action2plugin scaffolds an OpenZeppelin Relayer plugin from an Action and marks what does not map. The Relayer has no scheduler, so the plugin still needs something to call it on time.

Moving with us

Nonceworks is setting up hosted Monitor and Relayer for small teams, with the signing key in your own KMS or Turnkey account. Moving a Defender stack is $400, fixed: up to three relayers and ten monitors on your keys, the address changes as one Safe batch, and the SDK swap as a pull request. Hosting after the move is $49 a month, first month free; the pricing page lists what each includes.

AWS KMS signing has been tested end to end against a real AWS key; Google Cloud KMS and Turnkey have not, so before a move we run your key end to end on a testnet. Running your own Defender export through the validator costs nothing. Gelato and Chainlink Automation, which also stopped this year, are on the migrations page.