Scheduled transactions on the Flow blockchain enable smart contracts to autonomously execute predefined logic at specific future times without requiring continuous off-chain triggers. This functionality is currently provided by the Cadence FlowTransactionScheduler
contract.
The limitation today is that Flow’s EVM environment cannot directly access this scheduler, meaning that Solidity contracts deployed in Flow EVM cannot natively leverage scheduling.
The objective of this document is to explore a design that would expose Flow’s scheduling feature to the EVM world.
The implementation of the EVM Scheduler introduces new components that integrate with the existing FlowTransactionScheduler
contract to enable the scheduling and execution of EVM transactions on Flow. The design ensures coordination between Cadence and Solidity contracts, enabling reliable scheduling, execution, and status tracking of cross-environment transactions.
Description: A Cadence contract that bridges EVM transactions into the Flow scheduling framework, intended to be called by Cadence Arch. It defines a schedule function that does not track transaction details, only reserving an execution slot based on effort. During execution, control passes to the Solidity scheduler proxy, which holds the full transaction context. This separation of concerns ensures that scheduling is only possible through the EVM scheduler proxy and data is deduplicated.
Responsibilities:
FlowTransactionScheduler
.FlowTransactionScheduler
API:
FlowTransactionScheduler.Handler
interface which is used during execution by the Flow transaction scheduler contract.pub interface EVMScheduler {
// Schedules a new EVM transaction
// - timestamp: timestamp for scheduled transaction
// - priority: priority of the transaction
// - gasLimit: maximum gas allowed for execution
// - fees: Flow tokens to fund the scheduling
// Returns: an ID of the scheduled transaction
pub fun schedule(
timestamp: Uint64,
priority: Priority,
gasLimit: UInt64,
fees: UFix64
): UInt64
}