Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
22b9e77
added automation deployment
Sunnesoft Sep 12, 2025
2c056e4
fixed type conv issues
Sunnesoft Sep 12, 2025
b02a9ab
fixed deploy-fee-taker
Sunnesoft Sep 12, 2025
15f6e69
fixed rv6 address
Sunnesoft Sep 12, 2025
517a535
fixed ct3 address
Sunnesoft Sep 12, 2025
09572d0
fixed at address
Sunnesoft Sep 12, 2025
07e96b6
fixed create3 deploy args
Sunnesoft Sep 13, 2025
50c200b
fixed Makefile vars
Sunnesoft Sep 22, 2025
74d7bbe
fixed JSON.parse
Sunnesoft Sep 22, 2025
517fc12
fixed JSON.parse
Sunnesoft Sep 22, 2025
3aedc3c
added salt's management; simplified constants processing;
Sunnesoft Sep 25, 2025
bfee782
fixed linter issues
Sunnesoft Sep 25, 2025
d51e656
exlude json files from deployment processing
Sunnesoft Sep 25, 2025
998d8a7
removed default value for deployment method
Sunnesoft Sep 25, 2025
00200ec
fixed makefile upsert-constant double quotting
Sunnesoft Sep 25, 2025
dea67a4
fixed skipFiles
Sunnesoft Sep 25, 2025
b2f974e
moved constants to ./config
Sunnesoft Sep 25, 2025
a57134b
removed deploy from hardhat.config.js
Sunnesoft Sep 25, 2025
3690c38
fixed makefile paths
Sunnesoft Sep 25, 2025
8282d8f
refactored constants.js to read json directly by node
Sunnesoft Sep 25, 2025
31ef67c
Merge branch 'deploy/native-order' into feature/deployment-automation
Sunnesoft Sep 29, 2025
2cd2388
added native-order-factory to deployment automation
Sunnesoft Sep 29, 2025
d60ad18
fixed linter
Sunnesoft Sep 29, 2025
4d59766
fixed Makefile
Sunnesoft Sep 29, 2025
1896516
fixed == POSIX
Sunnesoft Oct 12, 2025
fbe6ae8
added print of salt in deployment script
Sunnesoft Oct 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ yarn-error.log
.coverage_contracts
.coverage_artifacts
.idea
.env
.env*
.cache
239 changes: 239 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,239 @@
# Conditionally include .env or .env.automation based on OPS_LAUNCH_MODE
ifeq ($(OPS_LAUNCH_MODE),auto)
-include .env.automation
else
-include .env
endif
export

OPS_NETWORK := $(subst ",,$(OPS_NETWORK))
OPS_CHAIN_ID := $(subst ",,$(OPS_CHAIN_ID))
OPS_DEPLOYMENT_METHOD := $(subst ",,$(OPS_DEPLOYMENT_METHOD))

CURRENT_DIR:=$(shell pwd)

FILE_DEPLOY_HELPERS:=$(CURRENT_DIR)/deploy/deploy-helpers.js
FILE_DEPLOY_FEE_TAKER:=$(CURRENT_DIR)/deploy/deploy-fee-taker.js
FILE_DEPLOY_LOP:=$(CURRENT_DIR)/deploy/deploy.js
FILE_DEPLOY_NATIVE_ORDER_FACTORY:=$(CURRENT_DIR)/deploy/deploy-native-order-factory.js

FILE_CONSTANTS_JSON:=$(CURRENT_DIR)/config/constants.json

IS_ZKSYNC := $(findstring zksync,$(OPS_NETWORK))

deploy-helpers:
@$(MAKE) OPS_CURRENT_DEP_FILE=$(FILE_DEPLOY_HELPERS) OPS_DEPLOYMENT_METHOD=$(if $(OPS_DEPLOYMENT_METHOD),$(OPS_DEPLOYMENT_METHOD),create3) validate-helpers deploy-skip-all deploy-noskip deploy-impl deploy-skip

deploy-lop:
@$(MAKE) OPS_CURRENT_DEP_FILE=$(FILE_DEPLOY_LOP) validate-lop deploy-skip-all deploy-noskip deploy-impl deploy-skip

deploy-fee-taker:
@$(MAKE) OPS_CURRENT_DEP_FILE=$(FILE_DEPLOY_FEE_TAKER) validate-fee-taker deploy-skip-all deploy-noskip deploy-impl deploy-skip

deploy-native-order-factory:
@$(MAKE) OPS_CURRENT_DEP_FILE=$(FILE_DEPLOY_NATIVE_ORDER_FACTORY) validate-native-order-factory deploy-skip-all deploy-noskip deploy-impl deploy-skip

deploy-impl:
@{ \
yarn deploy $(OPS_NETWORK) || exit 1; \
}

# Validation targets
validate-common:
@{ \
$(MAKE) ID=OPS_NETWORK validate || exit 1; \
$(MAKE) ID=OPS_CHAIN_ID validate || exit 1; \
if [ "$(OPS_NETWORK)" = "hardhat" ]; then \
$(MAKE) ID=MAINNET_RPC_URL validate || exit 1; \
fi; \
$(MAKE) ID=OPS_WETH_ADDRESS validate || exit 1; \
$(MAKE) process-weth || exit 1; \
}

validate-helpers:
@{ \
$(MAKE) validate-common || exit 1; \
$(MAKE) ID=OPS_LOP_HELPER_CONFIGS validate || exit 1; \
if [ "$(OPS_DEPLOYMENT_METHOD)" = "create3" ]; then \
$(MAKE) ID=OPS_CREATE3_DEPLOYER_ADDRESS validate || exit 1; \
fi; \
if echo "$(OPS_LOP_HELPER_CONFIGS)" | grep -q 'OrderRegistrator' || echo "$(OPS_LOP_HELPER_CONFIGS)" | grep -q 'SafeOrderBuilder'; then \
$(MAKE) ID=OPS_AGGREGATION_ROUTER_V6_ADDRESS validate || exit 1; \
fi; \
$(MAKE) process-router-v6 process-order-registrator process-create3-deployer || exit 1; \
}

validate-fee-taker:
@{ \
$(MAKE) validate-common || exit 1; \
$(MAKE) ID=OPS_AGGREGATION_ROUTER_V6_ADDRESS validate || exit 1; \
$(MAKE) ID=OPS_ACCESS_TOKEN_ADDRESS validate || exit 1; \
if [ "$(IS_ZKSYNC)" = "" ]; then \
$(MAKE) ID=OPS_CREATE3_DEPLOYER_ADDRESS validate || exit 1; \
$(MAKE) ID=OPS_FEE_TAKER_SALT validate || exit 1; \
fi; \
$(MAKE) process-router-v6 process-access-token process-fee-taker-salt process-create3-deployer || exit 1; \
}

validate-native-order-factory:
@{ \
$(MAKE) validate-common || exit 1; \
$(MAKE) ID=OPS_AGGREGATION_ROUTER_V6_ADDRESS validate || exit 1; \
$(MAKE) ID=OPS_ACCESS_TOKEN_ADDRESS validate || exit 1; \
if [ "$(IS_ZKSYNC)" = "" ]; then \
$(MAKE) ID=OPS_CREATE3_DEPLOYER_ADDRESS validate || exit 1; \
$(MAKE) ID=OPS_NATIVE_ORDER_SALT validate || exit 1; \
fi; \
$(MAKE) process-router-v6 process-access-token process-native-order-factory-salt process-create3-deployer || exit 1; \
}

validate-lop:
@$(MAKE) validate-common || exit 1

# Process constant functions for new addresses
process-create3-deployer:
@if [ -n "$$OPS_CREATE3_DEPLOYER_ADDRESS" ]; then $(MAKE) OPS_GEN_VAL='$(OPS_CREATE3_DEPLOYER_ADDRESS)' OPS_GEN_KEY='create3Deployer' upsert-constant; fi

process-weth:
@$(MAKE) OPS_GEN_VAL='$(OPS_WETH_ADDRESS)' OPS_GEN_KEY='weth' upsert-constant

process-router-v6:
@if [ -n "$$OPS_AGGREGATION_ROUTER_V6_ADDRESS" ]; then $(MAKE) OPS_GEN_VAL='$(OPS_AGGREGATION_ROUTER_V6_ADDRESS)' OPS_GEN_KEY='routerV6' upsert-constant; fi

process-order-registrator:
@if [ -n "$$OPS_ORDER_REGISTRATOR_ADDRESS" ]; then $(MAKE) OPS_GEN_VAL='$(OPS_ORDER_REGISTRATOR_ADDRESS)' OPS_GEN_KEY='orderRegistrator' upsert-constant; fi

process-access-token:
@$(MAKE) OPS_GEN_VAL='$(OPS_ACCESS_TOKEN_ADDRESS)' OPS_GEN_KEY='accessToken' upsert-constant

process-fee-taker-salt:
@if [ -n "$$OPS_FEE_TAKER_SALT" ]; then $(MAKE) OPS_GEN_VAL='$(OPS_FEE_TAKER_SALT)' OPS_GEN_KEY='feeTakerSalt' upsert-constant; fi

process-native-order-factory-salt:
@if [ -n "$$OPS_NATIVE_ORDER_SALT" ]; then $(MAKE) OPS_GEN_VAL='$(OPS_NATIVE_ORDER_SALT)' OPS_GEN_KEY='nativeOrderSalt' upsert-constant; fi

process-permit2-witness-proxy-salt:
@if [ -n "$$OPS_PERMIT2_WITNESS_PROXY_SALT" ]; then $(MAKE) OPS_GEN_VAL='$(OPS_PERMIT2_WITNESS_PROXY_SALT)' OPS_GEN_KEY='permit2WitnessProxySalt' upsert-constant; fi

upsert-constant:
@{ \
$(MAKE) ID=OPS_GEN_VAL validate || exit 1; \
$(MAKE) ID=OPS_GEN_KEY validate || exit 1; \
$(MAKE) ID=OPS_CHAIN_ID validate || exit 1; \
tmpfile=$$(mktemp); \
jq '.$(OPS_GEN_KEY)."$(OPS_CHAIN_ID)" = $(OPS_GEN_VAL)' $(FILE_CONSTANTS_JSON) > $$tmpfile && mv $$tmpfile $(FILE_CONSTANTS_JSON); \
echo "Updated $(OPS_GEN_KEY)[$(OPS_CHAIN_ID)] = $(OPS_GEN_VAL)"; \
}

deploy-skip-all:
@{ \
for secret in $(FILE_DEPLOY_HELPERS) \
$(FILE_DEPLOY_LOP) \
$(FILE_DEPLOY_FEE_TAKER); do \
$(MAKE) OPS_CURRENT_DEP_FILE=$$secret deploy-skip; \
done \
}

deploy-skip:
@sed -i '' 's/module.exports.skip.*/module.exports.skip = async () => true;/g' $(OPS_CURRENT_DEP_FILE)

deploy-noskip:
@sed -i '' 's/module.exports.skip.*/module.exports.skip = async () => false;/g' $(OPS_CURRENT_DEP_FILE)

launch-hh-node:
@{ \
$(MAKE) ID=NODE_RPC validate || exit 1; \
echo "Launching Hardhat node with RPC: $(NODE_RPC)"; \
npx hardhat node --fork $(NODE_RPC) --vvvv --full-trace; \
}

install: install-utils install-dependencies

install-utils:
brew install yarn wget jq

install-dependencies:
yarn

clean:
@rm -Rf $(CURRENT_DIR)/deployments/$(OPS_NETWORK)/*


# Get deployed contract addresses from deployment files
get:
@{ \
$(MAKE) ID=PARAMETER validate || exit 1; \
$(MAKE) ID=OPS_NETWORK validate || exit 1; \
CONTRACT_FILE=""; \
case "$(PARAMETER)" in \
"OPS_FEE_TAKER_ADDRESS") CONTRACT_FILE="FeeTaker.json" ;; \
"OPS_LOP_ADDRESS") CONTRACT_FILE="LimitOrderProtocol.json" ;; \
"OPS_ORDER_REGISTRATOR_ADDRESS") CONTRACT_FILE="OrderRegistrator.json" ;; \
"OPS_SAFE_ORDER_BUILDER_ADDRESS") CONTRACT_FILE="SafeOrderBuilder.json" ;; \
"OPS_SERIES_NONCE_MANAGER_ADDRESS") CONTRACT_FILE="SeriesNonceManager.json" ;; \
"OPS_PRIORITY_FEE_LIMITER_ADDRESS") CONTRACT_FILE="PriorityFeeLimiter.json" ;; \
"OPS_CALLS_SIMULATOR_ADDRESS") CONTRACT_FILE="CallsSimulator.json" ;; \
"OPS_NATIVE_ORDER_FACTORY_ADDRESS") CONTRACT_FILE="NativeOrderFactory.json" ;; \
*) echo "Error: Unknown parameter $(PARAMETER)"; exit 1 ;; \
esac; \
DEPLOYMENT_FILE="$(CURRENT_DIR)/deployments/$(OPS_NETWORK)/$$CONTRACT_FILE"; \
if [ ! -f "$$DEPLOYMENT_FILE" ]; then \
echo "Error: Deployment file $$DEPLOYMENT_FILE not found"; \
exit 1; \
fi; \
ADDRESS=$$(cat "$$DEPLOYMENT_FILE" | grep '"address"' | head -1 | sed 's/.*"address": *"\([^"]*\)".*/\1/'); \
echo "$$ADDRESS"; \
}

validate:
@{ \
VALUE=$$(echo "$${!ID}" | tr -d '"'); \
if [ -z "$${VALUE}" ]; then \
echo "$${ID} is not set (Value: '$${VALUE}')!"; \
exit 1; \
fi; \
}

help:
@echo "Available targets:"
@echo " install Install utilities and dependencies"
@echo " install-utils Install yarn and wget via brew"
@echo " install-dependencies Install JS dependencies via yarn"
@echo " clean Remove deployments for current network"
@echo " deploy-helpers Deploy helper contracts"
@echo " deploy-lop Deploy LimitOrderProtocol contract"
@echo " deploy-fee-taker Deploy FeeTaker contract"
@echo " deploy-native-order-factory Deploy NativeOrderFactory contract"
@echo " deploy-impl Run deployment script for current file"
@echo " deploy-skip Set skip=true in deployment file"
@echo " deploy-noskip Set skip=false in deployment file"
@echo " deploy-skip-all Set skip=true for all deployment files"
@echo " launch-hh-node Launch Hardhat node with forked RPC"
@echo " get PARAMETER=... Get deployed contract address by parameter"
@echo " help Show this help message"
@echo ""
@echo "Validation targets:"
@echo " validate-helpers Validate environment for helpers deployment"
@echo " validate-fee-taker Validate environment for FeeTaker deployment"
@echo " validate-lop Validate environment for LOP deployment"
@echo ""
@echo "Process targets (update constants):"
@echo " process-create3-deployer"
@echo " process-weth"
@echo " process-router-v6"
@echo " process-order-registrator"
@echo " process-access-token"
@echo ""
@echo "Usage examples:"
@echo " make deploy-helpers OPS_NETWORK=mainnet OPS_CHAIN_ID=1"
@echo " make get PARAMETER=OPS_FEE_TAKER_ADDRESS OPS_NETWORK=mainnet"

.PHONY: \
install install-utils install-dependencies clean \
deploy-helpers deploy-lop deploy-fee-taker deploy-impl \
deploy-skip deploy-noskip deploy-skip-all deploy-native-order-factory \
get help \
validate-helpers validate-fee-taker validate-lop \
process-create3-deployer process-weth process-router-v6 process-order-registrator process-access-token \
process-fee-taker-salt process-permit2-witness-proxy-salt process-native-order-factory-salt \
upsert-constant validate validate-common launch-hh-node
12 changes: 12 additions & 0 deletions config/constants.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const constants = require('./constants.json');

module.exports = {
WETH: constants.weth || {},
ROUTER_V6: constants.routerV6 || {},
ACCESS_TOKEN: constants.accessToken || {},
CREATE3_DEPLOYER: constants.create3Deployer || {},
ORDER_REGISTRATOR: constants.orderRegistrator || {},
FEE_TAKER_SALT: constants.feeTakerSalt || {},
PERMIT2_WITNESS_PROXY_SALT: constants.permit2WitnessProxySalt || {},
NATIVE_ORDER_SALT: constants.nativeOrderSalt || {},
};
82 changes: 82 additions & 0 deletions config/constants.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
{
"weth": {
"31337": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"1": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"56": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
"137": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",
"42161": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
"10": "0x4200000000000000000000000000000000000006",
"43114": "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",
"100": "0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d",
"250": "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83",
"1313161554": "0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB",
"8217": "0xe4f05A66Ec68B54A58B17c22107b02e0232cC817",
"8453": "0x4200000000000000000000000000000000000006",
"59144": "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f",
"146": "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38",
"130": "0x4200000000000000000000000000000000000006",
"324": "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91"
},
"routerV6": {
"1": "0x111111125421ca6dc452d289314280a0f8842a65",
"56": "0x111111125421ca6dc452d289314280a0f8842a65",
"137": "0x111111125421ca6dc452d289314280a0f8842a65",
"42161": "0x111111125421ca6dc452d289314280a0f8842a65",
"10": "0x111111125421ca6dc452d289314280a0f8842a65",
"43114": "0x111111125421ca6dc452d289314280a0f8842a65",
"100": "0x111111125421ca6dc452d289314280a0f8842a65",
"250": "0x111111125421ca6dc452d289314280a0f8842a65",
"1313161554": "0x111111125421ca6dc452d289314280a0f8842a65",
"8217": "0x111111125421ca6dc452d289314280a0f8842a65",
"8453": "0x111111125421ca6dc452d289314280a0f8842a65",
"59144": "0x111111125421ca6dc452d289314280a0f8842a65",
"146": "0x111111125421ca6dc452d289314280a0f8842a65",
"130": "0x111111125421ca6dc452d289314280a0f8842a65",
"31337": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"324": "0x6fd4383cB451173D5f9304F041C7BCBf27d561fF"
},
"accessToken": {
"1": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"56": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"137": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"42161": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"10": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"43114": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"100": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"250": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"1313161554": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"8217": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"8453": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"59144": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"324": "0x4888651051B2Dc08Ac55Cd0f7D671e0FCba0DEED",
"146": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"130": "0xAcce5500000f71A32B5E5514D1577E14b7aacC4a",
"31337": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
},
"create3Deployer": {
"1": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"56": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"137": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"42161": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"10": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"43114": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"100": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"250": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"1313161554": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"8217": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"8453": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"59144": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"146": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"130": "0xD935a2bb926019E0ed6fb31fbD5b1Bbb7c05bf65",
"31337": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
},
"orderRegistrator": {
"31337": "0x0000000000000000000000000000000000000000"
},
"nativeOrderSalt": {
"31337": "sdasd ssfsfd"
},
"feeTakerSalt": {
"31337": "asdasd asdasd"
}
}
39 changes: 0 additions & 39 deletions deploy/deploy-FeeTaker-zksync.js

This file was deleted.

Loading
Loading