Files
serai/processor/ethereum/deployer
2025-11-04 10:20:17 -05:00
..
2025-11-04 10:20:17 -05:00
2025-08-26 14:13:00 -04:00
2025-08-25 10:06:35 -04:00

Ethereum Smart Contracts Deployer

The deployer for Serai's Ethereum contracts.

Goals

It should be possible to efficiently locate the Serai Router on a blockchain with the EVM, without relying on any centralized (or even federated) entities. While deploying and locating an instance of the Router would be trivial, by using a fixed signature for the deployment transaction, the Router must be constructed with the correct key for the Serai network (or set to have the correct key post-construction). Since this cannot be guaranteed to occur, the process must be retryable and the first successful invocation must be efficiently findable.

Methodology

We define a contract, the Deployer, to deploy the Router. This contract could use CREATE2 with the key representing Serai as the salt, yet this would be open to collision attacks with just 2**80 complexity. Instead, we use CREATE which would require 2**80 on-chain transactions (infeasible) to use as the basis of a collision.

In order to efficiently find the contract for a key, the Deployer contract saves the addresses of deployed contracts (indexed by the initialization code's hash). This allows using a single call to a contract with a known address to find the proper Router. Saving the address to the state enables finding the Router's address even if the connected-to node's logs have been pruned for historical blocks.