diff --git a/Makefile b/Makefile index 0073e5e6..06b4d3bc 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ ############################# HELP MESSAGE ############################# # Make sure the help command stays first, so that it's printed by default when `make` is called without arguments -.PHONY: help bindings mocks tests tests-cover fmt format-lines lint GO_LINES_IGNORED_DIRS=contracts GO_PACKAGES=./chainio/... ./crypto/... ./logging/... \ @@ -8,28 +7,28 @@ GO_PACKAGES=./chainio/... ./crypto/... ./logging/... \ ./signerv2/... ./aws/... ./internal/... ./metrics/... \ ./nodeapi/... ./cmd/... ./services/... ./testutils/... GO_FOLDERS=$(shell echo ${GO_PACKAGES} | sed -e "s/\.\///g" | sed -e "s/\/\.\.\.//g") + +.PHONY: help help: @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' -bindings: ## generates contract bindings - cd contracts && rm -rf bindings/* && ./generate-bindings.sh - -eigenpod-bindings: ## generates contract bindings for eigenpod - cd chainio/clients/eigenpod && ./generate.sh - +.PHONY: mocks mocks: ## generates mocks go install go.uber.org/mock/mockgen@v0.4.0 go generate ./... +.PHONY: tests tests: ## runs all tests go test -race ./... -timeout=1m +.PHONY: tests-cover tests-cover: ## run all tests with test coverge go test -race ./... -coverprofile=coverage.out -covermode=atomic -v -count=1 go tool cover -html=coverage.out -o coverage.html open coverage.html godoc-port = 6060 +.PHONY: godoc godoc: ## runs godoc server and opens in browser @echo "Starting godoc server on port $(godoc-port)..." @-godoc -http=:$(godoc-port) & echo $$! > godoc.pid @@ -42,22 +41,87 @@ godoc: ## runs godoc server and opens in browser @# The read varname command will keep the make command running (waiting for input) until you press CTRL+C. @trap 'kill `cat godoc.pid` && rm -f godoc.pid' EXIT; read varname +.PHONY: fmt fmt: ## formats all go files go fmt ./... make format-lines +.PHONY: format-lines format-lines: ## formats all go files with golines go install github.com/segmentio/golines@latest golines -w -m 120 --ignore-generated --shorten-comments --ignored-dirs=${GO_LINES_IGNORED_DIRS} ${GO_FOLDERS} +.PHONY: lint lint: ## runs all linters go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest golangci-lint run ./... + +___BINDINGS___: ## + +core_default := "DelegationManager IRewardsCoordinator ISlasher StrategyManager EigenPod EigenPodManager IStrategy IAVSDirectory" +core_location := "./lib/eigenlayer-middleware/lib/eigenlayer-contracts" +core_bindings_location := "../../../../bindings" + +middleware_default := "RegistryCoordinator IndexRegistry OperatorStateRetriever StakeRegistry BLSApkRegistry IBLSSignatureChecker ServiceManagerBase IERC20" +middleware_location := "./lib/eigenlayer-middleware" +middleware_bindings_location := "../../bindings" + +sdk_default := "MockAvsServiceManager ContractsRegistry" +sdk_location := "." +sdk_bindings_location := "./bindings" + +# To generate bindings for specific contracts, run `make core-bindings contracts="DelegationManager IRewardsCoordinator"` +.PHONY: core-bindings ## generates core contracts bindings +core-bindings: ## generates core bindings + @echo "Starting core bindings generation" +ifneq ($(contracts),) + @echo "Contracts: $(contracts)" + cd contracts && ./generate-bindings.sh $(core_location) $(contracts) $(core_bindings_location) +else + @echo "Contracts: $(core_default)" + cd contracts && ./generate-bindings.sh $(core_location) $(core_default) $(core_bindings_location) +endif + +# To generate bindings for specific contracts, run `make middleware-bindings contracts="RegistryCoordinator"` +.PHONY: middleware-bindings ## generates middleware contracts bindings +middleware-bindings: ## generates middleware bindings + @echo "Starting middleware bindings generation" +ifneq ($(contracts),) + @echo "Contracts: $(contracts)" + cd contracts && ./generate-bindings.sh $(middleware_location) $(contracts) $(middleware_bindings_location) +else + @echo "Contracts: $(middleware_default)" + cd contracts && ./generate-bindings.sh $(middleware_location) $(middleware_default) $(middleware_bindings_location) +endif + +# To generate bindings for specific contracts, run `make sdk-bindings contracts="MockAvsServiceManager"` +.PHONY: sdk-bindings ## generates sdk contracts bindings +sdk-bindings: ## generates sdk bindings + @echo "Starting sdk bindings generation" +ifneq ($(contracts),) + @echo "Contracts: $(contracts)" + cd contracts && ./generate-bindings.sh $(sdk_location) $(contracts) $(sdk_bindings_location) +else + @echo "Contracts: $(middleware_default)" + cd contracts && ./generate-bindings.sh $(sdk_location) $(sdk_default) $(sdk_bindings_location) +endif + +.PHONY: eigenpod-bindings +eigenpod-bindings: ## generates contract bindings for eigenpod + cd chainio/clients/eigenpod && ./generate.sh + +.PHONY: bindings +bindings: ## generates all contract bindings + rm -rf bindings/* && make core-bindings middleware-bindings sdk-bindings eigenpod-bindings + + ___CONTRACTS___: ## -deploy-contracts-to-anvil-and-save-state: ## +.PHONY: deploy-contracts-to-anvil-and-save-state +deploy-contracts-to-anvil-and-save-state: ## ./contracts/anvil/deploy-contracts-save-anvil-state.sh +.PHONY: start-anvil-with-contracts-deployed start-anvil-with-contracts-deployed: ## ./contracts/anvil/start-anvil-chain-with-el-and-avs-deployed.sh diff --git a/contracts/generate-bindings.sh b/contracts/generate-bindings.sh index 929f1b84..4f5f8983 100755 --- a/contracts/generate-bindings.sh +++ b/contracts/generate-bindings.sh @@ -33,33 +33,17 @@ function create_binding { rm -rf data/tmp.abi data/tmp.bin } -cd $script_path -forge build -sdk_contracts="MockAvsServiceManager ContractsRegistry" -for contract in $sdk_contracts; do - sleep 1 # this is a hack to fix the issue with abigen randomly failing for some contracts - create_binding . $contract ./bindings -done - -EIGENLAYER_MIDDLEWARE_PATH=$script_path/lib/eigenlayer-middleware -cd $EIGENLAYER_MIDDLEWARE_PATH -# you might want to run forge clean if the contracts have changed -forge build +path=$1 +echo "Generating bindings for contracts in path: $path" +cd "$path" +pwd -# No idea why but ordering of the contracts matters here... when I move them around sometimes bindings fail -avs_contracts="RegistryCoordinator IndexRegistry OperatorStateRetriever StakeRegistry BLSApkRegistry IBLSSignatureChecker ServiceManagerBase IERC20" -for contract in $avs_contracts; do - sleep 1 # this is a hack to fix the issue with abigen randomly failing for some contracts - create_binding . $contract ../../bindings -done +contracts=$2 +bindings_path=$3 -EIGENLAYER_CONTRACT_PATH=$EIGENLAYER_MIDDLEWARE_PATH/lib/eigenlayer-contracts -cd $EIGENLAYER_CONTRACT_PATH forge build - -# No idea why but the ordering of the contracts matters, and for some orderings abigen fails... -el_contracts="DelegationManager IRewardsCoordinator ISlasher StrategyManager EigenPod EigenPodManager IStrategy IAVSDirectory" -for contract in $el_contracts; do +echo "Generating bindings for contracts: $contracts" +for contract in $contracts; do sleep 1 # this is a hack to fix the issue with abigen randomly failing for some contracts - create_binding . $contract ../../../../bindings -done + create_binding . "$contract" "$bindings_path" +done \ No newline at end of file