Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
143 changes: 97 additions & 46 deletions base/Makefile
Original file line number Diff line number Diff line change
@@ -1,39 +1,93 @@
-include .env

# BASE_RPC=https://base-sepolia.cbhq.net
BASE_RPC=https://mainnet.base.org
# Environment mapping: ENV -> RPC URL, deployment file, BRIDGE_ENVIRONMENT
# Usage: make <target> ENV={testnet-alpha|testnet-prod|mainnet}
VALID_ENVS := testnet-alpha testnet-prod mainnet

ifeq ($(ENV),testnet-alpha)
BASE_RPC := https://base-sepolia.cbhq.net
DEPLOYMENT_FILE := deployments/base_sepolia_alpha.json
BRIDGE_ENV := alpha
else ifeq ($(ENV),testnet-prod)
BASE_RPC := https://base-sepolia.cbhq.net
DEPLOYMENT_FILE := deployments/base_sepolia_prod.json
BRIDGE_ENV := prod
else ifeq ($(ENV),mainnet)
BASE_RPC := https://mainnet.base.org
DEPLOYMENT_FILE := deployments/base_mainnet.json
BRIDGE_ENV := mainnet
endif

ifndef LEDGER_ACCOUNT
override LEDGER_ACCOUNT = 0
endif

# Update values in this section to specify token recipients / token amount
####################################################################################################
# mainnet, sepolia_alpha or sepolia_prod
ENV_NAME=mainnet
# Recipient addresses and amount (override via make args or env vars)
SOLANA_SOL_RECEIVER ?= 0x6e0019e37547b086395a9a6834f731bab5b631004ac22a6c9102047301e40c77
USER_SPL_ATA ?= 0xfc6697ab185712eed628c12e499a3f4c2d4f73ced9dcc6eab8658bea86adb0e7
USER_REMOTE_ERC20_ATA ?= 0x7227267f49cac157705e1a5f7ac9f9933c902ae5368cbcc2a12e06d0566f826c
USER_REMOTE_ETH_ATA ?= 0x3e506b04e88dab39a3687fc5eb822c18f8301fc09cfe945c3394fc6baf9aef25

SOLANA_SOL_RECEIVER = 0x6e0019e37547b086395a9a6834f731bab5b631004ac22a6c9102047301e40c77
USER_SPL_ATA = 0xfc6697ab185712eed628c12e499a3f4c2d4f73ced9dcc6eab8658bea86adb0e7
USER_REMOTE_ERC20_ATA = 0x7227267f49cac157705e1a5f7ac9f9933c902ae5368cbcc2a12e06d0566f826c
USER_REMOTE_ETH_ATA = 0x3e506b04e88dab39a3687fc5eb822c18f8301fc09cfe945c3394fc6baf9aef25
AMOUNT ?= 1000000000

AMOUNT = 1000000000
####################################################################################################
# Contract addresses (read from deployment file, only when ENV is set)
LOCAL_ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE

BRIDGE = $(shell jq -r '.Bridge' deployments/base_$(ENV_NAME).json)
LOCAL_SOL = $(shell jq -r '.WrappedSOL' deployments/base_$(ENV_NAME).json)
REMOTE_SOL = $(shell jq -r '.RemoteSOL' deployments/base_$(ENV_NAME).json)
LOCAL_SPL = $(shell jq -r '.WrappedSPL' deployments/base_$(ENV_NAME).json)
REMOTE_SPL = $(shell jq -r '.RemoteSPL' deployments/base_$(ENV_NAME).json)
REMOTE_ERC20 = $(shell jq -r '.RemoteERC20' deployments/base_$(ENV_NAME).json)
REMOTE_ETH = $(shell jq -r '.RemoteETH' deployments/base_$(ENV_NAME).json)
ifdef DEPLOYMENT_FILE
BRIDGE = $(shell jq -r '.Bridge' $(DEPLOYMENT_FILE))
LOCAL_SOL = $(shell jq -r '.WrappedSOL' $(DEPLOYMENT_FILE))
REMOTE_SOL = $(shell jq -r '.RemoteSOL' $(DEPLOYMENT_FILE))
LOCAL_SPL = $(shell jq -r '.WrappedSPL' $(DEPLOYMENT_FILE))
REMOTE_SPL = $(shell jq -r '.RemoteSPL' $(DEPLOYMENT_FILE))
REMOTE_ERC20 = $(shell jq -r '.RemoteERC20' $(DEPLOYMENT_FILE))
REMOTE_ETH = $(shell jq -r '.RemoteETH' $(DEPLOYMENT_FILE))
LOCAL_ERC20 = $(shell jq -r '.LocalERC20' $(DEPLOYMENT_FILE))
endif

LOCAL_ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
LOCAL_ERC20 = 0x4870D23984Dd663005EB8E2b616e4Ef62630183c
# LOCAL_ERC20 = 0x62C1332822983B8412A6Ffda0fd77cd7d5733Ee9
# Environment validation
.PHONY: validate-env
validate-env:
ifndef ENV
$(error ENV is required. Usage: make <target> ENV={testnet-alpha|testnet-prod|mainnet})
endif
ifeq ($(filter $(ENV),$(VALID_ENVS)),)
$(error Invalid ENV='$(ENV)'. Must be one of: $(VALID_ENVS))
endif

check:
@echo $(REMOTE_ERC20)
.PHONY: help
help:
@echo "Usage: make <target> ENV={testnet-alpha|testnet-prod|mainnet}"
@echo ""
@echo "Environments:"
@echo " testnet-alpha Base Sepolia (alpha deployment)"
@echo " testnet-prod Base Sepolia (prod deployment)"
@echo " mainnet Base Mainnet"
@echo ""
@echo "Bridge targets (require ENV):"
@echo " bridge-sol-to-solana Bridge wrapped SOL to Solana"
@echo " bridge-spl-to-solana Bridge wrapped SPL to Solana"
@echo " bridge-erc20-to-solana Bridge ERC20 to Solana"
@echo " bridge-eth-to-solana Bridge ETH to Solana"
@echo ""
@echo "Deployment targets (require ENV):"
@echo " deploy Deploy bridge contracts"
@echo " upgrade Upgrade bridge contracts"
@echo " create-wrapped-spl Create wrapped SPL token"
@echo " create-mock-token Deploy a mock ERC20"
@echo ""
@echo "Query targets (require ENV):"
@echo " check-root Check the bridge root"
@echo " check-count Check the bridge message count"
@echo ""
@echo "Other targets:"
@echo " deps Install forge dependencies"
@echo " bindings Generate Go bindings"
@echo " coverage Run test coverage"
@echo ""
@echo "Overridable variables:"
@echo " AMOUNT Token amount (default: 1000000000)"
@echo " SOLANA_SOL_RECEIVER SOL recipient address"
@echo " LEDGER_ACCOUNT Ledger HD account index (default: 0)"

.PHONY: deps
deps: clean-lib forge-deps
Expand All @@ -60,46 +114,43 @@ bindings:
coverage:
@ forge coverage --no-match-coverage "(script|test)"

.PHONY: dev-deploy
dev-deploy: deploy create-wrapped-sol create-wrapped-spl

.PHONY: deploy
deploy:
BRIDGE_ENVIRONMENT=$(ENV_NAME) forge script DeployScript --account testnet-admin --rpc-url $(BASE_RPC) --sender $(shell cast wallet address --account testnet-admin) --broadcast -vvvv
deploy: validate-env
BRIDGE_ENVIRONMENT=$(BRIDGE_ENV) forge script DeployScript --account testnet-admin --rpc-url $(BASE_RPC) --sender $(shell cast wallet address --account testnet-admin) --broadcast -vvvv

.PHONY: upgrade
upgrade:
BRIDGE_ENVIRONMENT=$(ENV_NAME) forge script UpgradeScript --account testnet-upgrade --rpc-url $(BASE_RPC) --broadcast -vvvv
upgrade: validate-env
BRIDGE_ENVIRONMENT=$(BRIDGE_ENV) forge script UpgradeScript --account testnet-upgrade --rpc-url $(BASE_RPC) --broadcast -vvvv

.PHONY: create-wrapped-spl
create-wrapped-spl:
BRIDGE_ENVIRONMENT=$(ENV_NAME) TOKEN_NAME=WrappedSPL TOKEN_SYMBOL=wSPL REMOTE_TOKEN=$(REMOTE_SPL) TOKEN_DECIMALS=9 forge script CreateTokenScript --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --rpc-url $(BASE_RPC) --broadcast -vvvv
create-wrapped-spl: validate-env
BRIDGE_ENVIRONMENT=$(BRIDGE_ENV) TOKEN_NAME=WrappedSPL TOKEN_SYMBOL=wSPL REMOTE_TOKEN=$(REMOTE_SPL) TOKEN_DECIMALS=9 forge script CreateTokenScript --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --rpc-url $(BASE_RPC) --broadcast -vvvv

.PHONY: create-mock-token
create-mock-token:
create-mock-token: validate-env
ADMIN=0x644e3DedB0e4F83Bfcf8F9992964d240224B74dc forge script DeployERC20 --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --rpc-url $(BASE_RPC) --broadcast -vvvv

.PHONY: bridge-sol-to-solana
bridge-sol-to-solana:
BRIDGE_ENVIRONMENT=$(ENV_NAME) \
bridge-sol-to-solana: validate-env
BRIDGE_ENVIRONMENT=$(BRIDGE_ENV) \
LOCAL_TOKEN=$(LOCAL_SOL) \
REMOTE_TOKEN=$(REMOTE_SOL) \
TO=$(SOLANA_SOL_RECEIVER) \
AMOUNT=$(AMOUNT) \
forge script BridgeTokensToSolanaScript --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --rpc-url $(BASE_RPC) --broadcast -vvvv

.PHONY: bridge-spl-to-solana
bridge-spl-to-solana:
BRIDGE_ENVIRONMENT=$(ENV_NAME) \
bridge-spl-to-solana: validate-env
BRIDGE_ENVIRONMENT=$(BRIDGE_ENV) \
LOCAL_TOKEN=$(LOCAL_SPL) \
REMOTE_TOKEN=$(REMOTE_SPL) \
TO=$(USER_SPL_ATA) \
AMOUNT=$(AMOUNT) \
forge script BridgeTokensToSolanaScript --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --rpc-url $(BASE_RPC) --broadcast -vvvv

.PHONY: bridge-erc20-to-solana
bridge-erc20-to-solana:
BRIDGE_ENVIRONMENT=$(ENV_NAME) \
bridge-erc20-to-solana: validate-env
BRIDGE_ENVIRONMENT=$(BRIDGE_ENV) \
LOCAL_TOKEN=$(LOCAL_ERC20) \
REMOTE_TOKEN=$(REMOTE_ERC20) \
TO=$(USER_REMOTE_ERC20_ATA) \
Expand All @@ -108,18 +159,18 @@ bridge-erc20-to-solana:
forge script BridgeTokensToSolanaScript --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --rpc-url $(BASE_RPC) --broadcast -vvvv

.PHONY: bridge-eth-to-solana
bridge-eth-to-solana:
BRIDGE_ENVIRONMENT=$(ENV_NAME) \
bridge-eth-to-solana: validate-env
BRIDGE_ENVIRONMENT=$(BRIDGE_ENV) \
LOCAL_TOKEN=$(LOCAL_ETH) \
REMOTE_TOKEN=$(REMOTE_ETH) \
TO=$(USER_REMOTE_ETH_ATA) \
AMOUNT=$(AMOUNT) \
forge script BridgeTokensToSolanaScript --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --rpc-url $(BASE_RPC) --broadcast -vvvv

.PHONY: check-root
check-root:
@ cast call $(BRIDGE) "getRoot()" --rpc-url https://base-sepolia-dev.cbhq.net:8545
check-root: validate-env
@ cast call $(BRIDGE) "getRoot()" --rpc-url $(BASE_RPC)

.PHONY: check-count
check-count:
@ cast call 0xCdfe10f911eD5039E031D6a7be3a0F97fA061C38 "count()" --rpc-url https://base-sepolia-dev.cbhq.net:8545
check-count: validate-env
@ cast call $(BRIDGE) "count()" --rpc-url $(BASE_RPC)
3 changes: 2 additions & 1 deletion base/deployments/base_mainnet.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
"RemoteERC20": "",
"RemoteETH": "",
"WrappedSOL": "0x311935Cd80B76769bF2ecC9D8Ab7635b2139cf82",
"WrappedSPL": ""
"WrappedSPL": "",
"LocalERC20": "0x4870D23984Dd663005EB8E2b616e4Ef62630183c"
}
3 changes: 2 additions & 1 deletion base/deployments/base_sepolia_alpha.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
"RemoteERC20": "0xba6a03ad9fe4921c8a5a4e8d3ef0a8d76ac6137ea1213879512abc24c6ab4376",
"RemoteETH": "0x79f4f1fa82df5ae874eaff38c8288c15a0317eab263a6a2f4ed32ca9224ba62c",
"WrappedSOL": "0x003512146Fd54b71f926C7Fd4B7bd20Fc84E22c5",
"WrappedSPL": "0x80351342c4dd23C78c0837C640E041a239e67cD8"
"WrappedSPL": "0x80351342c4dd23C78c0837C640E041a239e67cD8",
"LocalERC20": "0x62C1332822983B8412A6Ffda0fd77cd7d5733Ee9"
}
3 changes: 2 additions & 1 deletion base/deployments/base_sepolia_prod.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
"RemoteERC20": "0xc7cfe164b0b61064d6f23734f906c8141788be442d94495852d8af53b40e3212",
"RemoteETH": "0xcb3d6f70c63eee106144cdf6cf934901b684be88171380e87a3f8d03f720a185",
"WrappedSOL": "0xCace0c896714DaF7098FFD8CC54aFCFe0338b4BC",
"WrappedSPL": "0x955C7356776F9304feD38ed5AeC5699436C7C614"
"WrappedSPL": "0x955C7356776F9304feD38ed5AeC5699436C7C614",
"LocalERC20": "0x62C1332822983B8412A6Ffda0fd77cd7d5733Ee9"
}
3 changes: 2 additions & 1 deletion base/deployments/template.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
"WrappedSOL": "",
"WrappedSPL": "",
"RemoteERC20": "",
"RemoteETH": ""
"RemoteETH": "",
"LocalERC20": ""
}