Hold your transactions until validAfter has passed.
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.
Testnet:
POST https://rpc.testnet.fermata.sh
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 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
}