Built with target:
- eigenlayer-contracts v0.2.3-mainnet-m2
- eigenlayer-middleware v0.1.3-mainnet-m2+pragma-change
- eigensdk-go v0.1.6
All CLI tools come with help, if you are curious about how things work underneath. Try
go run <service>/main.go <action> -h
for example:
go run kms/main.go store -h
@For dev - entry point for each service is invoked from <service>/cmd/cmd.go
, traceback logic from there
Accounts are stored in an encrypted format using geth keystore system
To run, start with:
go run kms/main.go -p [passphrase] -k [account_private_key]
Key information will be dumped in ./keystore
folders and used for subsequent services. To load a signer to be used with respective services,
specify ACCOUNT ADDRESS and corresponding passphrase. Example config in ./configs/signer/operator/1.yaml
NOTE: recommend to store account in configs/signer/operator/1.yaml
and configs/signer/relayer/1.yaml
for subsequent calls work with default params
WARNING
Command for Operator onboarding
go run operator/main.go register-el -h
see ./operator/cmd/register.go:registerAvsCmd(..)
for full logic and options.
Default run with:
- environment:
configs/environment/testnet.yaml
- signer:
configs/signer/operator/1.yaml
populate signer config for auto account import, else manually specify --signer-address
and --passphrase
-
AVS required minimum shares/stakes allowance to opt-in. Skate AVS (holesky testnet) uses stETH as the underlying token strategy. Get stETH buy calling submit function (recommend amount: 0.01 ETH)
-
Once stETH is obtained, deposit into EigenLayer StrategyManager.
go run operator/main.go deposit -h
Default value from config is the minimum required to participate in Skate AVS
Follow the same step to customize environments as in step 1
go run operator/main.go register-avs -h
Default options is good, same environments configuration as in step 1.
NOTE: Default Operator details don't include any metadata URI. Other initialize params specified in operator/cmd/register.go:L126
Operator will monitor Skate App (on Nollie testnet) activity and sign confirmation message then publish to relayer.
Cache is maintained locally on operator environments, db config in operator/db/**
.
By default an SQLite db will be created under data/operator/skateapp.db
, files logs for schemas maintained in the same folder.
To participate (sign and publish task), run:
go run operator/monitor.go
NOTE: Follow default signer configs. if no signer provided, run with watch only-mode (no sign and publish to relayer)
Relayer will collect operator signatures, aggregates and send over to AVS for confirmation (see SkateAVS.sol:submitData(...)
)
To collect operator signatures for a task and store in database
go run relayer/main.go retrieve
To publish quorums that reached threshold to the avs
go run relayer/main.go publish
TODO: publish verified message to SkateGateway on destination chains as well
Make files ./Makefile
contains shortcut to bootstrap pilot avs services.
Please explore and config respective nodes using designated CLI tools
Prerequisites: 3 operator accounts registered with avs and 1 relayer
- Start all 3 operators:
make start-operators
- Start all relayer service (retrieve and publish):
make start-relayer
See configs/environment/testnet.yaml
Currently 3 operator (registered with Skate AVS):
configs/signer/operator/1.yaml
: 0x786775c9ecB916bd7f5a59c150491871fCfCEe86configs/signer/operator/2.yaml
: 0x72b3793B2A476c055A88dfd5e38D1E032a27e038configs/signer/operator/3.yaml
: 0xCD6DB57894AfE39AC5Db4B62E17971Ae07c5EC91
@For dev - 3 are burner accounts, contacts for private keys
Improve configuration format + finish logic in relayer/publish/skateapp.go:submitTasksToAvs(..)
Try ko toolings
WIP