𝄐

fermata.sh

Hold your transactions until validAfter has passed.

What is this?

Fermata is an RPC proxy for Tempo. Send transactions with a validAfter timestamp and Fermata will hold them until validAfter has passed, then submit automatically.

Note: Tempo RPCs currently only accept transactions up to 1 hour in the future. Fermata.sh lets you schedule further ahead.

RPC endpoint

Testnet:

POST https://rpc.testnet.fermata.sh

Get started

Point your viem client at Fermata:

import { createClient, http } from "viem"
import { tempoTestnet } from "viem/chains"
import { tempoActions } from "viem/tempo"

const client = createClient({
  chain: tempoTestnet,
  transport: http("https://rpc.testnet.fermata.sh")
}).extend(tempoActions())

Then send transactions with validAfter as normal:

const request = await client.prepareTransactionRequest({
  to: "0x...",
  data: "0x...",
  validAfter: Math.floor(Date.now() / 1000) + 60
})

const signed = await client.signTransaction(request)
const hash = await client.sendRawTransaction({
  serializedTransaction: signed
})

// hash returned immediately
// tx submitted after validAfter

Check status

Check if a scheduled transaction has been submitted:

curl https://rpc.testnet.fermata.sh/tx/0x...

Returns:

{
  "txHash": "0x...",
  "serializedTx": "0x76...",
  "status": "pending" | "sent" | "failed",
  "validAfter": 1703875200,
  "createdAt": 1703875100,
  "sentAt": 1703875201,
  "error": null
}