mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 20:29:23 +00:00
30 lines
1.4 KiB
Markdown
30 lines
1.4 KiB
Markdown
# 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.
|