Add mainnet checkpoint stack: ISO attestation, participant Etherscan surface, and services.
Some checks failed
CI/CD Pipeline / Solidity Contracts (push) Failing after 1m3s
CI/CD Pipeline / Security Scanning (push) Successful in 2m18s
CI/CD Pipeline / Lint and Format (push) Failing after 34s
CI/CD Pipeline / Terraform Validation (push) Failing after 20s
CI/CD Pipeline / Kubernetes Validation (push) Successful in 22s
Deploy ChainID 138 / Deploy ChainID 138 (push) Failing after 40s
HYBX OMNL TypeScript & anchor / token-aggregation build + reconcile artifact (push) Failing after 49s
OMNL reconcile anchor / Run omnl:reconcile and upload artifacts (push) Failing after 21s
Validation / validate-genesis (push) Successful in 25s
Validation / validate-terraform (push) Failing after 21s
Validation / validate-kubernetes (push) Failing after 8s
Validation / validate-smart-contracts (push) Failing after 8s
Validation / validate-security (push) Failing after 1m11s
Validation / validate-documentation (push) Failing after 14s
Verify Deployment / Verify Deployment (push) Failing after 45s
Some checks failed
CI/CD Pipeline / Solidity Contracts (push) Failing after 1m3s
CI/CD Pipeline / Security Scanning (push) Successful in 2m18s
CI/CD Pipeline / Lint and Format (push) Failing after 34s
CI/CD Pipeline / Terraform Validation (push) Failing after 20s
CI/CD Pipeline / Kubernetes Validation (push) Successful in 22s
Deploy ChainID 138 / Deploy ChainID 138 (push) Failing after 40s
HYBX OMNL TypeScript & anchor / token-aggregation build + reconcile artifact (push) Failing after 49s
OMNL reconcile anchor / Run omnl:reconcile and upload artifacts (push) Failing after 21s
Validation / validate-genesis (push) Successful in 25s
Validation / validate-terraform (push) Failing after 21s
Validation / validate-kubernetes (push) Failing after 8s
Validation / validate-smart-contracts (push) Failing after 8s
Validation / validate-security (push) Failing after 1m11s
Validation / validate-documentation (push) Failing after 14s
Verify Deployment / Verify Deployment (push) Failing after 45s
Ship AddressActivityRegistry V1/V2, ISO20022IntakeGateway, Chain138ParticipantSurface, checkpoint hub contracts, checkpoint-core package, aggregator/indexer/sdk services, relay profile guards, M00 diamond bridge facet, and OMNL compliance contracts. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -4,19 +4,29 @@ set -euo pipefail
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
CALLER_FACTORY="${FACTORY:-}"
|
||||
CALLER_RPC_URL="${RPC_URL:-}"
|
||||
CALLER_TOKEN_A="${TOKEN_A:-}"
|
||||
CALLER_TOKEN_B="${TOKEN_B:-}"
|
||||
CALLER_FEE="${FEE:-}"
|
||||
CALLER_EXECUTE="${EXECUTE:-}"
|
||||
CALLER_EXPECTED_CHAIN_ID="${EXPECTED_CHAIN_ID:-}"
|
||||
CALLER_SQRT_PRICE_X96="${SQRT_PRICE_X96:-}"
|
||||
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
load_deployment_env --repo-root "$REPO_ROOT"
|
||||
fi
|
||||
|
||||
FACTORY="${FACTORY:-${UNISWAP_V3_FACTORY:-}}"
|
||||
RPC_URL="${RPC_URL:-}"
|
||||
TOKEN_A="${TOKEN_A:-}"
|
||||
TOKEN_B="${TOKEN_B:-}"
|
||||
FEE="${FEE:-500}"
|
||||
EXECUTE="${EXECUTE:-0}"
|
||||
SQRT_PRICE_X96="${SQRT_PRICE_X96:-79228162514264337593543950336}"
|
||||
FACTORY="${CALLER_FACTORY:-${FACTORY:-${UNISWAP_V3_FACTORY:-}}}"
|
||||
RPC_URL="${CALLER_RPC_URL:-${ETHEREUM_MAINNET_RPC:-${ETH_MAINNET_RPC_URL:-${RPC_URL:-}}}}"
|
||||
TOKEN_A="${CALLER_TOKEN_A:-${TOKEN_A:-}}"
|
||||
TOKEN_B="${CALLER_TOKEN_B:-${TOKEN_B:-}}"
|
||||
FEE="${CALLER_FEE:-${FEE:-500}}"
|
||||
EXECUTE="${CALLER_EXECUTE:-${EXECUTE:-0}}"
|
||||
EXPECTED_CHAIN_ID="${CALLER_EXPECTED_CHAIN_ID:-${EXPECTED_CHAIN_ID:-}}"
|
||||
SQRT_PRICE_X96="${CALLER_SQRT_PRICE_X96:-${SQRT_PRICE_X96:-79228162514264337593543950336}}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
if [[ -z "$FACTORY" || -z "$RPC_URL" || -z "$TOKEN_A" || -z "$TOKEN_B" ]]; then
|
||||
@@ -24,11 +34,67 @@ if [[ -z "$FACTORY" || -z "$RPC_URL" || -z "$TOKEN_A" || -z "$TOKEN_B" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n "$EXPECTED_CHAIN_ID" ]]; then
|
||||
chain_id="$(cast chain-id --rpc-url "$RPC_URL")"
|
||||
if [[ "$chain_id" != "$EXPECTED_CHAIN_ID" ]]; then
|
||||
echo "Refusing to continue: RPC chain-id is $chain_id, expected $EXPECTED_CHAIN_ID" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
factory_code="$(cast code "$FACTORY" --rpc-url "$RPC_URL" 2>/dev/null || true)"
|
||||
factory_code="${factory_code//$'\n'/}"
|
||||
if [[ -z "$factory_code" || "$factory_code" == "0x" ]]; then
|
||||
echo "Refusing to continue: FACTORY has no contract code at $FACTORY on the selected RPC" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROXMOX_ROOT="$(cd "$REPO_ROOT/.." && pwd)"
|
||||
if [[ -f "$PROXMOX_ROOT/scripts/lib/mainnet_gas_api.sh" ]]; then
|
||||
# shellcheck source=/dev/null
|
||||
source "$PROXMOX_ROOT/scripts/lib/mainnet_gas_api.sh"
|
||||
export_mesh_mainnet_gas
|
||||
fi
|
||||
|
||||
get_pool() {
|
||||
cast call "$FACTORY" \
|
||||
"getPool(address,address,uint24)(address)" \
|
||||
"$TOKEN_A" "$TOKEN_B" "$FEE" \
|
||||
--rpc-url "$RPC_URL" 2>/dev/null || true
|
||||
--rpc-url "$RPC_URL"
|
||||
}
|
||||
|
||||
cast_send_wait() {
|
||||
local to="$1"
|
||||
local sig="$2"
|
||||
shift 2
|
||||
local -a extra=()
|
||||
local from nonce
|
||||
from="$(cast wallet address --private-key "$PRIVATE_KEY")"
|
||||
nonce="$(cast nonce "$from" --rpc-url "$RPC_URL" --block pending)"
|
||||
extra+=(--nonce "$nonce")
|
||||
if [[ "${CAST_USE_LEGACY:-1}" == "1" ]]; then
|
||||
extra+=(--legacy)
|
||||
if [[ -n "${CAST_GAS_PRICE:-}" ]]; then
|
||||
extra+=(--gas-price "$CAST_GAS_PRICE")
|
||||
fi
|
||||
else
|
||||
if [[ -n "${CAST_MAX_FEE_PER_GAS:-}" ]]; then
|
||||
extra+=(--max-fee-per-gas "$CAST_MAX_FEE_PER_GAS")
|
||||
fi
|
||||
if [[ -n "${CAST_MAX_PRIORITY_FEE_PER_GAS:-}" ]]; then
|
||||
extra+=(--priority-gas-price "$CAST_MAX_PRIORITY_FEE_PER_GAS")
|
||||
fi
|
||||
fi
|
||||
local out tx
|
||||
out="$(cast send "$to" "$sig" "$@" \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
--timeout "${CAST_SEND_TIMEOUT:-1800}" \
|
||||
"${extra[@]}")"
|
||||
tx="$(printf '%s\n' "$out" | grep -oE '0x[a-fA-F0-9]{64}' | head -1)"
|
||||
[[ -n "$tx" ]] || { echo "cast send did not return tx hash: $out" >&2; return 1; }
|
||||
echo " tx submitted: $tx (nonce $nonce)"
|
||||
wait_for_mainnet_receipt "$tx" "$RPC_URL" || return 1
|
||||
}
|
||||
|
||||
pool="$(get_pool)"
|
||||
@@ -44,38 +110,55 @@ if [[ -z "$pool" || "$pool" == "0x0000000000000000000000000000000000000000" ]];
|
||||
echo "PRIVATE_KEY is required when EXECUTE=1" >&2
|
||||
exit 1
|
||||
fi
|
||||
cast send "$FACTORY" \
|
||||
if ! cast_send_wait "$FACTORY" \
|
||||
"createPool(address,address,uint24)" \
|
||||
"$TOKEN_A" "$TOKEN_B" "$FEE" \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
-vv
|
||||
"$TOKEN_A" "$TOKEN_B" "$FEE"; then
|
||||
echo " WARN: createPool receipt wait failed; re-checking getPool..." >&2
|
||||
fi
|
||||
pool="$(get_pool)"
|
||||
pool="${pool//$'\n'/}"
|
||||
fi
|
||||
|
||||
if [[ ! "$pool" =~ ^0x[0-9a-fA-F]{40}$ || "$pool" == "0x0000000000000000000000000000000000000000" ]]; then
|
||||
echo "Refusing to initialize: factory getPool returned invalid pool address: '$pool'" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Pool address: $pool"
|
||||
|
||||
slot0="$(cast call "$pool" "slot0()((uint160,int24,uint16,uint16,uint16,uint8,bool))" --rpc-url "$RPC_URL" 2>/dev/null || true)"
|
||||
slot0_no_ws="$(printf '%s' "$slot0" | tr -d '[:space:]')"
|
||||
|
||||
if [[ "$slot0_no_ws" == "(0,0,0,0,0,0,false)" || -z "$slot0_no_ws" ]]; then
|
||||
echo "Pool is not initialized"
|
||||
if [[ "$EXECUTE" != "1" ]]; then
|
||||
echo "Dry run: set EXECUTE=1 to initialize at sqrtPriceX96=$SQRT_PRICE_X96"
|
||||
exit 0
|
||||
fi
|
||||
if [[ -z "$PRIVATE_KEY" ]]; then
|
||||
echo "PRIVATE_KEY is required when EXECUTE=1" >&2
|
||||
exit 1
|
||||
fi
|
||||
cast send "$pool" \
|
||||
"initialize(uint160)" \
|
||||
"$SQRT_PRICE_X96" \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
-vv
|
||||
echo "Initialized pool at sqrtPriceX96=$SQRT_PRICE_X96"
|
||||
else
|
||||
echo "Pool already initialized: $slot0"
|
||||
PROXMOX_MESH_OPS="$(cd "$REPO_ROOT/.." && pwd)/scripts/lib/cw_mesh_pool_ops.sh"
|
||||
if [[ -f "$PROXMOX_MESH_OPS" ]]; then
|
||||
# shellcheck source=/dev/null
|
||||
source "$PROXMOX_MESH_OPS"
|
||||
export RPC="$RPC_URL"
|
||||
fi
|
||||
|
||||
needs_init=1
|
||||
if [[ -f "$PROXMOX_MESH_OPS" ]] && mesh_pool_initialized "$pool" "$RPC_URL"; then
|
||||
needs_init=0
|
||||
fi
|
||||
|
||||
slot0="$(cast call "$pool" "slot0()((uint160,int24,uint16,uint16,uint16,uint8,bool))" --rpc-url "$RPC_URL" 2>/dev/null || true)"
|
||||
if [[ "$needs_init" -eq 0 ]]; then
|
||||
echo "Pool already initialized: $slot0"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Pool is not initialized"
|
||||
if [[ "$EXECUTE" != "1" ]]; then
|
||||
echo "Dry run: set EXECUTE=1 to initialize at sqrtPriceX96=$SQRT_PRICE_X96"
|
||||
exit 0
|
||||
fi
|
||||
if [[ -z "$PRIVATE_KEY" ]]; then
|
||||
echo "PRIVATE_KEY is required when EXECUTE=1" >&2
|
||||
exit 1
|
||||
fi
|
||||
if cast_send_wait "$pool" \
|
||||
"initialize(uint160)" \
|
||||
"$SQRT_PRICE_X96"; then
|
||||
echo "Initialized pool at sqrtPriceX96=$SQRT_PRICE_X96"
|
||||
elif [[ -f "$PROXMOX_MESH_OPS" ]] && mesh_pool_initialized "$pool" "$RPC_URL"; then
|
||||
echo "Initialize receipt wait timed out but pool is initialized on-chain."
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
# Fund all CCIP WETH9/WETH10 bridge contracts with LINK on each chain.
|
||||
# Amount via tag (not .env): --link <amount> (default 10 LINK), --dry-run to print commands only.
|
||||
# --cap-to-deployer: per chain, each bridge gets min(--link, deployer_LINK_balance // bridges_on_chain).
|
||||
# Usage: ./scripts/deployment/fund-ccip-bridges-with-link.sh [--link 10] [--cap-to-deployer] [--dry-run]
|
||||
# --chain gnosis [celo ...]: limit to named chains (138, eth, gnosis, celo, wemix, cronos, ...).
|
||||
# Usage: ./scripts/deployment/fund-ccip-bridges-with-link.sh [--link 10] [--cap-to-deployer] [--chain gnosis] [--dry-run]
|
||||
|
||||
set -euo pipefail
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
@@ -12,7 +13,18 @@ cd "$PROJECT_ROOT"
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
source "$SCRIPT_DIR/../lib/deployment/prompts.sh"
|
||||
load_deployment_env
|
||||
parse_link_tags "$@"
|
||||
parse_chain_filter "$@"
|
||||
parse_link_tags "${PARSE_CHAIN_FILTER_REMAINING[@]}"
|
||||
|
||||
chain_selected() {
|
||||
local want="$1"
|
||||
[[ ${#CHAIN_FILTER[@]} -eq 0 ]] && return 0
|
||||
local c
|
||||
for c in "${CHAIN_FILTER[@]}"; do
|
||||
[[ "$c" == "$want" ]] && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
[[ -f "$SCRIPT_DIR/../lib/infura.sh" ]] && source "$SCRIPT_DIR/../lib/infura.sh" 2>/dev/null || true
|
||||
[[ -n "${PRIVATE_KEY:-}" && ! "$PRIVATE_KEY" =~ ^0x ]] && PRIVATE_KEY="0x$PRIVATE_KEY"
|
||||
@@ -135,7 +147,7 @@ echo "Deployer: $DEPLOYER_ADDR"
|
||||
echo ""
|
||||
|
||||
# Chain 138 (Besu: gas estimation often fails; use explicit legacy gas like manual cast)
|
||||
if [[ -n "${RPC_URL_138:-}" && -n "${LINK_TOKEN_CHAIN138:-${LINK_TOKEN:-}}" ]]; then
|
||||
if chain_selected CHAIN138 && [[ -n "${RPC_URL_138:-}" && -n "${LINK_TOKEN_CHAIN138:-${LINK_TOKEN:-}}" ]]; then
|
||||
link="${LINK_TOKEN_CHAIN138:-$LINK_TOKEN}"
|
||||
link="${link,,}"
|
||||
rpc=$(ensure_rpc "$RPC_URL_138")
|
||||
@@ -171,7 +183,7 @@ if [[ -n "${RPC_URL_138:-}" && -n "${LINK_TOKEN_CHAIN138:-${LINK_TOKEN:-}}" ]];
|
||||
fi
|
||||
|
||||
# Ethereum
|
||||
if [[ -n "${ETHEREUM_MAINNET_RPC:-}" && -n "${MAINNET_LINK_TOKEN:-${CCIP_ETH_LINK_TOKEN:-}}" ]]; then
|
||||
if chain_selected ETH && [[ -n "${ETHEREUM_MAINNET_RPC:-}" && -n "${MAINNET_LINK_TOKEN:-${CCIP_ETH_LINK_TOKEN:-}}" ]]; then
|
||||
link="${MAINNET_LINK_TOKEN:-$CCIP_ETH_LINK_TOKEN}"
|
||||
rpc=$(ensure_rpc "$ETHEREUM_MAINNET_RPC")
|
||||
echo "Ethereum Mainnet"
|
||||
@@ -207,6 +219,7 @@ fi
|
||||
|
||||
# BSC, Polygon, Base, Optimism, Arbitrum, Avalanche, Cronos, Gnosis, Celo, Wemix (matches check-link-balance-config-ready-chains.sh)
|
||||
for label in BSC POLYGON BASE OPTIMISM ARBITRUM AVALANCHE CRONOS GNOSIS CELO WEMIX; do
|
||||
chain_selected "$label" || continue
|
||||
case "$label" in
|
||||
BSC) rpc_var="BSC_RPC_URL"; link_var="CCIP_BSC_LINK_TOKEN"; ;;
|
||||
POLYGON) rpc_var="POLYGON_MAINNET_RPC"; link_var="CCIP_POLYGON_LINK_TOKEN"; ;;
|
||||
|
||||
@@ -4,23 +4,34 @@ set -euo pipefail
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
CALLER_POSITION_MANAGER="${POSITION_MANAGER:-}"
|
||||
CALLER_RPC_URL="${RPC_URL:-}"
|
||||
CALLER_TOKEN_A="${TOKEN_A:-}"
|
||||
CALLER_TOKEN_B="${TOKEN_B:-}"
|
||||
CALLER_AMOUNT_A="${AMOUNT_A:-}"
|
||||
CALLER_AMOUNT_B="${AMOUNT_B:-}"
|
||||
CALLER_FEE="${FEE:-}"
|
||||
CALLER_EXECUTE="${EXECUTE:-}"
|
||||
CALLER_RECIPIENT="${RECIPIENT:-}"
|
||||
CALLER_PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
|
||||
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
||||
load_deployment_env --repo-root "$REPO_ROOT"
|
||||
fi
|
||||
|
||||
POSITION_MANAGER="${POSITION_MANAGER:-}"
|
||||
RPC_URL="${RPC_URL:-}"
|
||||
TOKEN_A="${TOKEN_A:-}"
|
||||
TOKEN_B="${TOKEN_B:-}"
|
||||
AMOUNT_A="${AMOUNT_A:-}"
|
||||
AMOUNT_B="${AMOUNT_B:-}"
|
||||
FEE="${FEE:-500}"
|
||||
EXECUTE="${EXECUTE:-0}"
|
||||
POSITION_MANAGER="${CALLER_POSITION_MANAGER:-${POSITION_MANAGER:-}}"
|
||||
RPC_URL="${CALLER_RPC_URL:-${ETHEREUM_MAINNET_RPC:-${ETH_MAINNET_RPC_URL:-${RPC_URL:-}}}}"
|
||||
TOKEN_A="${CALLER_TOKEN_A:-${TOKEN_A:-}}"
|
||||
TOKEN_B="${CALLER_TOKEN_B:-${TOKEN_B:-}}"
|
||||
AMOUNT_A="${CALLER_AMOUNT_A:-${AMOUNT_A:-}}"
|
||||
AMOUNT_B="${CALLER_AMOUNT_B:-${AMOUNT_B:-}}"
|
||||
FEE="${CALLER_FEE:-${FEE:-500}}"
|
||||
EXECUTE="${CALLER_EXECUTE:-${EXECUTE:-0}}"
|
||||
DEADLINE_SECONDS="${DEADLINE_SECONDS:-3600}"
|
||||
RECIPIENT="${RECIPIENT:-}"
|
||||
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
||||
RECIPIENT="${CALLER_RECIPIENT:-${RECIPIENT:-}}"
|
||||
PRIVATE_KEY="${CALLER_PRIVATE_KEY:-${PRIVATE_KEY:-}}"
|
||||
|
||||
if [[ -z "$POSITION_MANAGER" || -z "$RPC_URL" || -z "$TOKEN_A" || -z "$TOKEN_B" || -z "$AMOUNT_A" || -z "$AMOUNT_B" ]]; then
|
||||
echo "Required: POSITION_MANAGER RPC_URL TOKEN_A TOKEN_B AMOUNT_A AMOUNT_B" >&2
|
||||
@@ -88,25 +99,101 @@ if [[ -z "$PRIVATE_KEY" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cast send "$token0" \
|
||||
"approve(address,uint256)" \
|
||||
"$POSITION_MANAGER" \
|
||||
"$amount0" \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
-q
|
||||
cast_send_wait() {
|
||||
local to="$1"
|
||||
local sig="$2"
|
||||
local use_gas_limit="${CAST_GAS_LIMIT:-}"
|
||||
shift 2
|
||||
local -a extra=()
|
||||
local from nonce
|
||||
from="$(cast wallet address --private-key "$PRIVATE_KEY")"
|
||||
nonce="$(cast nonce "$from" --rpc-url "$RPC_URL" --block pending)"
|
||||
extra+=(--nonce "$nonce")
|
||||
if [[ -n "$use_gas_limit" ]]; then
|
||||
extra+=(--gas-limit "$use_gas_limit")
|
||||
fi
|
||||
if [[ "${CAST_USE_LEGACY:-1}" == "1" ]]; then
|
||||
extra+=(--legacy)
|
||||
if [[ -n "${CAST_GAS_PRICE:-}" ]]; then
|
||||
extra+=(--gas-price "$CAST_GAS_PRICE")
|
||||
fi
|
||||
elif [[ -n "${CAST_MAX_PRIORITY_FEE_PER_GAS:-}" ]]; then
|
||||
extra+=(--priority-gas-price "$CAST_MAX_PRIORITY_FEE_PER_GAS")
|
||||
fi
|
||||
local out tx
|
||||
out="$(cast send "$to" "$sig" "$@" \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
--async \
|
||||
--timeout "${CAST_SEND_TIMEOUT:-1800}" \
|
||||
"${extra[@]}")"
|
||||
tx="$(printf '%s\n' "$out" | grep -oE '0x[a-fA-F0-9]{64}' | head -1)"
|
||||
[[ -n "$tx" ]] || { echo "cast send did not return tx hash: $out" >&2; return 1; }
|
||||
echo " tx: $tx (nonce $nonce)"
|
||||
if wait_for_mainnet_receipt "$tx" "$RPC_URL"; then
|
||||
return 0
|
||||
fi
|
||||
if [[ -n "${MESH_FUND_VERIFY_POOL:-}" && -n "${MESH_FUND_VERIFY_TOKEN:-}" && -n "${MESH_FUND_VERIFY_MIN:-}" ]]; then
|
||||
local vb
|
||||
vb="$(cast call "${MESH_FUND_VERIFY_TOKEN}" "balanceOf(address)(uint256)" "${MESH_FUND_VERIFY_POOL}" --rpc-url "$RPC_URL" | awk '{print $1}')"
|
||||
if python3 -c "import sys; vb=int('$vb'); m=int('${MESH_FUND_VERIFY_MIN}'); sys.exit(0 if vb >= m - 10**12 else 1)"; then
|
||||
echo " receipt timeout; on-chain pool leg OK (balance=$vb)"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
cast send "$token1" \
|
||||
"approve(address,uint256)" \
|
||||
"$POSITION_MANAGER" \
|
||||
"$amount1" \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
-q
|
||||
allowance_of() {
|
||||
cast call "$1" "allowance(address,address)(uint256)" "$RECIPIENT" "$POSITION_MANAGER" --rpc-url "$RPC_URL" | awk '{print $1}'
|
||||
}
|
||||
|
||||
cast send "$POSITION_MANAGER" \
|
||||
allowance_lt() {
|
||||
python3 - "$1" "$2" <<'PY'
|
||||
import sys
|
||||
print("yes" if int(sys.argv[1]) < int(sys.argv[2]) else "no")
|
||||
PY
|
||||
}
|
||||
|
||||
PROXMOX_ROOT="$(cd "$REPO_ROOT/.." && pwd)"
|
||||
if [[ -f "$PROXMOX_ROOT/scripts/lib/mainnet_gas_api.sh" ]]; then
|
||||
# shellcheck source=/dev/null
|
||||
source "$PROXMOX_ROOT/scripts/lib/mainnet_gas_api.sh"
|
||||
export_mesh_mainnet_gas
|
||||
fi
|
||||
|
||||
need0="$(allowance_of "$token0")"
|
||||
if [[ "$(allowance_lt "$need0" "$amount0")" == yes ]]; then
|
||||
CAST_GAS_LIMIT="" cast_send_wait "$token0" \
|
||||
"approve(address,uint256)" \
|
||||
"$POSITION_MANAGER" \
|
||||
"$amount0"
|
||||
else
|
||||
echo " skip approve token0 (allowance sufficient)"
|
||||
fi
|
||||
|
||||
need1="$(allowance_of "$token1")"
|
||||
if [[ "$(allowance_lt "$need1" "$amount1")" == yes ]]; then
|
||||
CAST_GAS_LIMIT="" cast_send_wait "$token1" \
|
||||
"approve(address,uint256)" \
|
||||
"$POSITION_MANAGER" \
|
||||
"$amount1"
|
||||
else
|
||||
echo " skip approve token1 (allowance sufficient)"
|
||||
fi
|
||||
|
||||
if [[ "${CAST_GAS_ESTIMATE_MINT:-1}" == "1" ]]; then
|
||||
mint_est="$(cast estimate "$POSITION_MANAGER" \
|
||||
"mint((address,address,uint24,int24,int24,uint256,uint256,uint256,uint256,address,uint256))" \
|
||||
"($token0,$token1,$FEE,$tick_lower,$tick_upper,$amount0,$amount1,0,0,$RECIPIENT,$deadline)" \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--from "$RECIPIENT" 2>/dev/null | awk '{print $1}')" || true
|
||||
if [[ -n "$mint_est" && "$mint_est" -gt 0 ]]; then
|
||||
export CAST_GAS_LIMIT="$(( mint_est * 130 / 100 ))"
|
||||
echo " mint gas estimate: $mint_est → limit $CAST_GAS_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
cast_send_wait "$POSITION_MANAGER" \
|
||||
"mint((address,address,uint24,int24,int24,uint256,uint256,uint256,uint256,address,uint256))" \
|
||||
"($token0,$token1,$FEE,$tick_lower,$tick_upper,$amount0,$amount1,0,0,$RECIPIENT,$deadline)" \
|
||||
--rpc-url "$RPC_URL" \
|
||||
--private-key "$PRIVATE_KEY" \
|
||||
-vv
|
||||
"($token0,$token1,$FEE,$tick_lower,$tick_upper,$amount0,$amount1,0,0,$RECIPIENT,$deadline)"
|
||||
|
||||
@@ -56,12 +56,12 @@ RPC_URL_138="${RPC_URL_138:-${RPC_URL:-http://192.168.11.211:8545}}"
|
||||
if [[ -n "$ORIG_DODO_PMM_INTEGRATION_ADDRESS" ]]; then
|
||||
DODO_PMM_INTEGRATION_ADDRESS="$ORIG_DODO_PMM_INTEGRATION_ADDRESS"
|
||||
else
|
||||
DODO_PMM_INTEGRATION_ADDRESS="${CHAIN_138_DODO_PMM_INTEGRATION:-0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d}"
|
||||
DODO_PMM_INTEGRATION_ADDRESS="${CHAIN_138_DODO_PMM_INTEGRATION:-0x86ADA6Ef91A3B450F89f2b751e93B1b7A3218895}"
|
||||
fi
|
||||
if [[ -n "$ORIG_DODO_PMM_PROVIDER_ADDRESS" ]]; then
|
||||
DODO_PMM_PROVIDER_ADDRESS="$ORIG_DODO_PMM_PROVIDER_ADDRESS"
|
||||
else
|
||||
DODO_PMM_PROVIDER_ADDRESS="${CHAIN_138_DODO_PMM_PROVIDER:-0x5CAe6Ce155b7f08D3a956F5Dc82fC9945f29B381}"
|
||||
DODO_PMM_PROVIDER_ADDRESS="${CHAIN_138_DODO_PMM_PROVIDER:-0x3f729632E9553EBacCdE2e9b4c8F2B285b014F2e}"
|
||||
fi
|
||||
DRY_RUN="${DRY_RUN:-0}"
|
||||
|
||||
|
||||
@@ -37,6 +37,12 @@ declare -A ROOT_SCRIPT_SCOPE_ALIASES=(
|
||||
["DeployWETH.s.sol"]="tokens"
|
||||
["DeployWETH10.s.sol"]="tokens"
|
||||
["DeployWETHWithCCIP.s.sol"]="full"
|
||||
["DeployRWATokenFactory138.s.sol"]="rwa"
|
||||
["DeployM00DiamondHub138.s.sol"]="m00-diamond"
|
||||
["UpgradeM00DiamondAcl138.s.sol"]="m00-diamond"
|
||||
["FundBridgeLinkViaCcip138.s.sol"]="ccip"
|
||||
["FundBridgeLinkViaCcipMainnet.s.sol"]="ccip"
|
||||
["DeployCCIPRelayBridgeLINK.s.sol"]="relay"
|
||||
)
|
||||
|
||||
usage() {
|
||||
@@ -232,7 +238,14 @@ prepare_scope_env() {
|
||||
local label
|
||||
label=$(scope_label "$scope")
|
||||
|
||||
export FOUNDRY_SRC="$src_dir"
|
||||
if [[ "$scope" == "rwa" ]]; then
|
||||
export FOUNDRY_SRC="contracts/rwa,contracts/compliance"
|
||||
elif [[ "$scope" == "m00-diamond" ]]; then
|
||||
export FOUNDRY_SRC="contracts/m00-diamond,contracts/rwa"
|
||||
export FOUNDRY_PROFILE="${FOUNDRY_PROFILE:-m00-diamond}"
|
||||
else
|
||||
export FOUNDRY_SRC="$src_dir"
|
||||
fi
|
||||
export FOUNDRY_OUT="out/scopes/$label"
|
||||
export FOUNDRY_CACHE_PATH="cache/scopes/$label"
|
||||
export FOUNDRY_SPARSE_MODE="${FOUNDRY_SPARSE_MODE:-true}"
|
||||
|
||||
@@ -116,7 +116,7 @@ parse_phase_tags() {
|
||||
}
|
||||
|
||||
# Canonical L2 list for deploy-pmm, deploy-trustless, fund-ccip, etc.
|
||||
L2_CHAIN_NAMES=( BSC POLYGON BASE OPTIMISM ARBITRUM AVALANCHE CRONOS GNOSIS )
|
||||
L2_CHAIN_NAMES=( BSC POLYGON BASE OPTIMISM ARBITRUM AVALANCHE CRONOS GNOSIS CELO WEMIX )
|
||||
|
||||
# Parse --chain <name> [<name> ...] from "$@". Names case-insensitive (bsc, BSC, Polygon, etc.).
|
||||
# Sets CHAIN_FILTER=() (empty = all) or CHAIN_FILTER=( BSC POLYGON ... ). Unconsumed in PARSE_CHAIN_FILTER_REMAINING.
|
||||
@@ -130,6 +130,10 @@ normalize_chain_name() {
|
||||
AVALANCHE) echo AVALANCHE ;;
|
||||
CRONOS) echo CRONOS ;;
|
||||
GNOSIS) echo GNOSIS ;;
|
||||
CELO) echo CELO ;;
|
||||
WEMIX) echo WEMIX ;;
|
||||
ETH|ETHEREUM|MAINNET) echo ETH ;;
|
||||
138|CHAIN138|CHAIN_138) echo CHAIN138 ;;
|
||||
*) echo "" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user