serai/processor/ethereum/deployer
Luke Parker ee0efe7cde Don't have the Deployer store the deployment block
Also updates how re-entrancy is handled to a more efficient and portable
mechanism.
2024-09-19 23:36:32 -07:00
..
contracts Don't have the Deployer store the deployment block 2024-09-19 23:36:32 -07:00
src Don't have the Deployer store the deployment block 2024-09-19 23:36:32 -07:00
build.rs Break Ethereum Deployer into crate 2024-09-19 23:36:32 -07:00
Cargo.toml Break Ethereum Deployer into crate 2024-09-19 23:36:32 -07:00
LICENSE Break Ethereum Deployer into crate 2024-09-19 23:36:32 -07:00
README.md Break Ethereum Deployer into crate 2024-09-19 23:36:32 -07:00

Ethereum Smart Contracts Deployer

The deployer for Serai's Ethereum contracts.

Goals

It should be possible to efficiently locate the Serai Router on an 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 280 complexity. Instead, we use CREATE which would require 280 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 hash). This allows using a single call to a contract with a known address to find the proper Router.