chore: update DBIS contracts and integrate EIP-712 helper
- Updated DBIS_ConversionRouter and DBIS_SettlementRouter to utilize IDBIS_EIP712Helper for EIP-712 hashing and signature recovery, improving stack depth management. - Refactored minting logic in DBIS_GRU_MintController to streamline recipient processing. - Enhanced BUILD_NOTES.md with updated build instructions and test coverage details. - Added new functions in DBIS_SignerRegistry for duplicate signer checks and active signer validation. - Introduced a new submodule, DBIS_EIP712Helper, to encapsulate EIP-712 related functionalities. Made-with: Cursor
This commit is contained in:
128
scripts/create-pmm-full-mesh-chain138.sh
Executable file
128
scripts/create-pmm-full-mesh-chain138.sh
Executable file
@@ -0,0 +1,128 @@
|
||||
#!/usr/bin/env bash
|
||||
# Create the full PMM pool mesh on Chain 138: all c* vs c* pairs plus c* vs official USDT/USDC.
|
||||
# Uses DODOPMMIntegration.createPool() and registers each pool with DODOPMMProvider.
|
||||
# Skip pairs that already have a pool. Requires POOL_MANAGER_ROLE on integration and provider.
|
||||
#
|
||||
# Usage:
|
||||
# ./scripts/create-pmm-full-mesh-chain138.sh # all c* mesh + optional official pairs
|
||||
# MESH_ONLY_C_STAR=1 ./scripts/create-pmm-full-mesh-chain138.sh # only c* vs c* (no official)
|
||||
# DRY_RUN=1 ./scripts/create-pmm-full-mesh-chain138.sh # print only, no txs
|
||||
#
|
||||
# Requires: PRIVATE_KEY, RPC_URL_138, DODO_PMM_INTEGRATION_ADDRESS, DODO_PMM_PROVIDER_ADDRESS in .env
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
cd "$PROJECT_ROOT"
|
||||
[[ -f .env ]] && set -a && source .env && set +a
|
||||
|
||||
RPC="${RPC_URL_138:-${RPC_URL:-http://192.168.11.211:8545}}"
|
||||
INT="${DODO_PMM_INTEGRATION_ADDRESS:-${DODO_PMM_INTEGRATION:-}}"
|
||||
PROV="${DODO_PMM_PROVIDER_ADDRESS:-}"
|
||||
LP_FEE="${LP_FEE_RATE:-3}"
|
||||
I="${INITIAL_PRICE:-1000000000000000000}"
|
||||
K="${K_FACTOR:-500000000000000000}"
|
||||
TWAP="${ENABLE_TWAP:-false}"
|
||||
DRY_RUN="${DRY_RUN:-0}"
|
||||
MESH_ONLY_C_STAR="${MESH_ONLY_C_STAR:-0}"
|
||||
|
||||
# 12 c* tokens on Chain 138 (symbol:address)
|
||||
declare -a C_STAR_SYMS=(cUSDT cUSDC cEURC cEURT cGBPC cGBPT cAUDC cJPYC cCHFC cCADC cXAUC cXAUT)
|
||||
declare -a C_STAR_ADDRS=(
|
||||
0x93E66202A11B1772E55407B32B44e5Cd8eda7f22
|
||||
0xf22258f57794CC8E06237084b353Ab30fFfa640b
|
||||
0x8085961F9cF02b4d800A3c6d386D31da4B34266a
|
||||
0xdf4b71c61E5912712C1Bdd451416B9aC26949d72
|
||||
0x003960f16D9d34F2e98d62723B6721Fb92074aD2
|
||||
0x350f54e4D23795f86A9c03988c7135357CCaD97c
|
||||
0xD51482e567c03899eecE3CAe8a058161FD56069D
|
||||
0xEe269e1226a334182aace90056EE4ee5Cc8A6770
|
||||
0x873990849DDa5117d7C644f0aF24370797C03885
|
||||
0x54dBd40cF05e15906A2C21f600937e96787f5679
|
||||
0x290E52a8819A4fbD0714E517225429aA2B70EC6b
|
||||
0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E
|
||||
)
|
||||
|
||||
[[ -n "${PRIVATE_KEY:-}" ]] || { echo "PRIVATE_KEY not set"; exit 1; }
|
||||
[[ -n "$INT" ]] || { echo "DODO_PMM_INTEGRATION_ADDRESS (or DODO_PMM_INTEGRATION) not set"; exit 1; }
|
||||
[[ -n "$PROV" ]] || { echo "DODO_PMM_PROVIDER_ADDRESS not set"; exit 1; }
|
||||
|
||||
# Official USDT/USDC on 138 (from integration if available)
|
||||
OFFICIAL_USDT="${OFFICIAL_USDT_ADDRESS:-0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619}"
|
||||
OFFICIAL_USDC="${OFFICIAL_USDC_ADDRESS:-}"
|
||||
if [[ -z "$OFFICIAL_USDC" ]] && command -v cast &>/dev/null; then
|
||||
OFFICIAL_USDC=$(cast call "$INT" "officialUSDC()(address)" --rpc-url "$RPC" 2>/dev/null | cast --to-addr 2>/dev/null || true)
|
||||
fi
|
||||
[[ -z "$OFFICIAL_USDC" ]] && OFFICIAL_USDC="0x0000000000000000000000000000000000000000"
|
||||
|
||||
created=0
|
||||
skipped=0
|
||||
failed=0
|
||||
|
||||
pool_exists() {
|
||||
local base="$1" quote="$2"
|
||||
local addr
|
||||
addr=$(cast call "$INT" "pools(address,address)(address)" "$base" "$quote" --rpc-url "$RPC" 2>/dev/null | cast --to-addr 2>/dev/null || echo "0x0")
|
||||
[[ -n "$addr" && "$addr" != "0x0000000000000000000000000000000000000000" ]]
|
||||
}
|
||||
|
||||
create_pool() {
|
||||
local base="$1" quote="$2" label="$3"
|
||||
if pool_exists "$base" "$quote"; then
|
||||
echo " SKIP $label (pool exists)"
|
||||
((skipped++)) || true
|
||||
return 0
|
||||
fi
|
||||
if [[ "$DRY_RUN" == "1" ]]; then
|
||||
echo " [DRY] would create $label"
|
||||
((created++)) || true
|
||||
return 0
|
||||
fi
|
||||
if cast send "$INT" "createPool(address,address,uint256,uint256,uint256,bool)" \
|
||||
"$base" "$quote" "$LP_FEE" "$I" "$K" "$TWAP" \
|
||||
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit 500000 -q 2>/dev/null; then
|
||||
local pool_addr
|
||||
pool_addr=$(cast call "$INT" "pools(address,address)(address)" "$base" "$quote" --rpc-url "$RPC" | cast --to-addr)
|
||||
echo " OK $label -> $pool_addr"
|
||||
if [[ -n "$PROV" ]]; then
|
||||
cast send "$PROV" "registerPool(address,address,address)" "$base" "$quote" "$pool_addr" \
|
||||
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit 200000 -q 2>/dev/null && echo " registered with provider" || echo " provider register failed"
|
||||
fi
|
||||
((created++)) || true
|
||||
else
|
||||
echo " FAIL $label"
|
||||
((failed++)) || true
|
||||
fi
|
||||
}
|
||||
|
||||
echo "=== PMM full mesh Chain 138 ==="
|
||||
echo " Integration: $INT Provider: $PROV RPC: $RPC"
|
||||
echo " Mesh: c* vs c* (+ c* vs official USDT/USDC if MESH_ONLY_C_STAR != 1)"
|
||||
echo ""
|
||||
|
||||
# 1) All c* vs c* pairs (base < quote by address to avoid duplicates)
|
||||
n=${#C_STAR_ADDRS[@]}
|
||||
for ((i=0; i<n; i++)); do
|
||||
for ((j=i+1; j<n; j++)); do
|
||||
base="${C_STAR_ADDRS[$i]}"
|
||||
quote="${C_STAR_ADDRS[$j]}"
|
||||
label="${C_STAR_SYMS[$i]}/${C_STAR_SYMS[$j]}"
|
||||
create_pool "$base" "$quote" "$label"
|
||||
done
|
||||
done
|
||||
|
||||
# 2) c* vs official USDT and c* vs official USDC (optional)
|
||||
if [[ "$MESH_ONLY_C_STAR" != "1" ]] && [[ "$OFFICIAL_USDT" != "0x0000000000000000000000000000000000000000" ]]; then
|
||||
for ((i=0; i<n; i++)); do
|
||||
create_pool "${C_STAR_ADDRS[$i]}" "$OFFICIAL_USDT" "${C_STAR_SYMS[$i]}/USDT"
|
||||
done
|
||||
fi
|
||||
if [[ "$MESH_ONLY_C_STAR" != "1" ]] && [[ "$OFFICIAL_USDC" != "0x0000000000000000000000000000000000000000" ]]; then
|
||||
for ((i=0; i<n; i++)); do
|
||||
create_pool "${C_STAR_ADDRS[$i]}" "$OFFICIAL_USDC" "${C_STAR_SYMS[$i]}/USDC"
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Done. Created: $created Skipped: $skipped Failed: $failed"
|
||||
31
scripts/mint-all-c-star-138.sh
Executable file
31
scripts/mint-all-c-star-138.sh
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
# Mint all 12 c* tokens on Chain 138 to the deployer.
|
||||
# Usage: ./scripts/mint-all-c-star-138.sh [amount_human]
|
||||
# amount_human = 1000000 (default = 1M each). 6 decimals.
|
||||
# Requires: PRIVATE_KEY, RPC_URL_138 in .env.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
cd "$PROJECT_ROOT"
|
||||
[ -f .env ] && set -a && source .env && set +a
|
||||
|
||||
RPC="${RPC_URL_138:-${RPC_URL:-http://192.168.11.211:8545}}"
|
||||
AMOUNT_HUMAN="${1:-1000000}"
|
||||
BASE_UNITS=$((AMOUNT_HUMAN * 1000000))
|
||||
|
||||
[ -n "${PRIVATE_KEY:-}" ] || { echo "PRIVATE_KEY not set"; exit 1; }
|
||||
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null) || exit 1
|
||||
|
||||
echo "=== Mint all c* on Chain 138 ==="
|
||||
echo " Deployer: $DEPLOYER Amount: $AMOUNT_HUMAN tokens each ($BASE_UNITS base)"
|
||||
echo ""
|
||||
|
||||
for pair in "cUSDT:0x93E66202A11B1772E55407B32B44e5Cd8eda7f22" "cUSDC:0xf22258f57794CC8E06237084b353Ab30fFfa640b" "cEURC:0x8085961F9cF02b4d800A3c6d386D31da4B34266a" "cEURT:0xdf4b71c61E5912712C1Bdd451416B9aC26949d72" "cGBPC:0x003960f16D9d34F2e98d62723B6721Fb92074aD2" "cGBPT:0x350f54e4D23795f86A9c03988c7135357CCaD97c" "cAUDC:0xD51482e567c03899eecE3CAe8a058161FD56069D" "cJPYC:0xEe269e1226a334182aace90056EE4ee5Cc8A6770" "cCHFC:0x873990849DDa5117d7C644f0aF24370797C03885" "cCADC:0x54dBd40cF05e15906A2C21f600937e96787f5679" "cXAUC:0x290E52a8819A4fbD0714E517225429aA2B70EC6b" "cXAUT:0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E"; do
|
||||
sym="${pair%%:*}"
|
||||
addr="${pair#*:}"
|
||||
echo -n "Minting $sym... "
|
||||
if cast send "$addr" "mint(address,uint256)" "$DEPLOYER" "$BASE_UNITS" --rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 2>/dev/null; then echo "OK"; else echo "FAIL"; fi
|
||||
done
|
||||
echo "Done."
|
||||
56
scripts/mint-cw-on-chain.sh
Executable file
56
scripts/mint-cw-on-chain.sh
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
# Mint cW* tokens on a given chain to the deployer. Deployer has MINTER_ROLE on CompliantWrappedToken.
|
||||
# Usage: ./scripts/mint-cw-on-chain.sh <CHAIN_NAME> [amount_human]
|
||||
# CHAIN_NAME = Mainnet | Cronos | BSC | Polygon | Gnosis | Avalanche | Base | Arbitrum | Optimism
|
||||
# amount_human = tokens in human units (default 1000000 = 1M). 6 decimals.
|
||||
# Requires: PRIVATE_KEY, <CHAIN>_RPC, CWUSDT_<CHAIN>, CWUSDC_<CHAIN>, etc. in .env.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
cd "$PROJECT_ROOT"
|
||||
[[ -f .env ]] && set -a && source .env && set +a
|
||||
|
||||
CHAIN_NAME="${1:-}"
|
||||
AMOUNT_HUMAN="${2:-1000000}"
|
||||
BASE_UNITS=$((AMOUNT_HUMAN * 10**6))
|
||||
|
||||
[[ -n "$CHAIN_NAME" ]] || { echo "Usage: $0 <CHAIN_NAME> [amount_human]. CHAIN_NAME=Mainnet|Cronos|BSC|Polygon|Gnosis|Avalanche|Base|Arbitrum|Optimism"; exit 1; }
|
||||
[[ -n "${PRIVATE_KEY:-}" ]] || { echo "PRIVATE_KEY not set"; exit 1; }
|
||||
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null) || exit 1
|
||||
|
||||
CHAIN_UPPER=$(echo "$CHAIN_NAME" | tr '[:lower:]' '[:upper:]')
|
||||
|
||||
get_rpc() {
|
||||
case "$CHAIN_UPPER" in
|
||||
MAINNET) echo "${ETHEREUM_MAINNET_RPC:-${ETH_MAINNET_RPC_URL:-}}";;
|
||||
CRONOS) echo "${CRONOS_RPC_URL:-${CRONOS_RPC:-}}";;
|
||||
BSC) echo "${BSC_RPC_URL:-${BSC_RPC:-}}";;
|
||||
POLYGON) echo "${POLYGON_MAINNET_RPC:-${POLYGON_RPC_URL:-}}";;
|
||||
GNOSIS) echo "${GNOSIS_RPC:-${GNOSIS_MAINNET_RPC:-}}";;
|
||||
AVALANCHE) echo "${AVALANCHE_RPC_URL:-${AVALANCHE_RPC:-}}";;
|
||||
BASE) echo "${BASE_MAINNET_RPC:-${BASE_RPC_URL:-}}";;
|
||||
ARBITRUM) echo "${ARBITRUM_MAINNET_RPC:-${ARBITRUM_RPC:-}}";;
|
||||
OPTIMISM) echo "${OPTIMISM_MAINNET_RPC:-${OPTIMISM_RPC:-}}";;
|
||||
*) echo "";;
|
||||
esac
|
||||
}
|
||||
|
||||
RPC=$(get_rpc)
|
||||
[[ -n "$RPC" ]] || { echo "No RPC for $CHAIN_NAME. Set e.g. POLYGON_MAINNET_RPC in .env"; exit 1; }
|
||||
|
||||
# cW* env vars: CWUSDT_POLYGON, CWUSDC_POLYGON, ...
|
||||
for var in CWUSDT CWUSDC CWEURC CWEURT CWGBPC CWGBPT CWAUDC CWJPYC CWCHFC CWCADC CWXAUC CWXAUT; do
|
||||
addr_var="${var}_${CHAIN_UPPER}"
|
||||
addr="${!addr_var:-}"
|
||||
[[ -n "$addr" ]] || continue
|
||||
echo -n "Minting ${var}... "
|
||||
if cast send "$addr" "mint(address,uint256)" "$DEPLOYER" "$BASE_UNITS" \
|
||||
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 2>/dev/null; then
|
||||
echo "OK"
|
||||
else
|
||||
echo "FAIL"
|
||||
fi
|
||||
done
|
||||
echo "Done. Ensure CWUSDT_${CHAIN_UPPER}, CWUSDC_${CHAIN_UPPER}, etc. are in .env (from DeployCWTokens output)."
|
||||
@@ -63,8 +63,9 @@ mint_one() {
|
||||
echo " SKIP $name: contract owner is $OWNER, deployer is $DEPLOYER (only owner can mint)"
|
||||
return 0
|
||||
fi
|
||||
GAS_PRICE="${GAS_PRICE_138:-1000000000}"
|
||||
if cast send "$addr" "mint(address,uint256)" "$DEPLOYER" "$amount_base" \
|
||||
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy; then
|
||||
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 --gas-price "$GAS_PRICE"; then
|
||||
echo " OK $name"
|
||||
else
|
||||
echo " FAIL $name"
|
||||
@@ -77,8 +78,10 @@ mint_one "$CUSDC" "cUSDC" "$BASE_CUSDC"
|
||||
|
||||
echo ""
|
||||
echo "Mint done. Deployer balances:"
|
||||
cast call "$CUSDT" "balanceOf(address)(uint256)" "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null | xargs -I {} echo " cUSDT: {}"
|
||||
cast call "$CUSDC" "balanceOf(address)(uint256)" "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null | xargs -I {} echo " cUSDC: {}"
|
||||
B1=$(cast call "$CUSDT" "balanceOf(address)(uint256)" "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null || echo "?")
|
||||
B2=$(cast call "$CUSDC" "balanceOf(address)(uint256)" "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null || echo "?")
|
||||
echo " cUSDT: $B1"
|
||||
echo " cUSDC: $B2"
|
||||
echo ""
|
||||
|
||||
if [[ "$RUN_ADD_LIQUIDITY" == true ]]; then
|
||||
@@ -94,9 +97,12 @@ if [[ "$RUN_ADD_LIQUIDITY" == true ]]; then
|
||||
export POOL_CUSDTUSDT="${POOL_CUSDTUSDT:-0xa3Ee6091696B28e5497b6F491fA1e99047250c59}"
|
||||
export POOL_CUSDCUSDC="${POOL_CUSDCUSDC:-0x90bd9Bf18Daa26Af3e814ea224032d015db58Ea5}"
|
||||
if [[ -n "${DODO_PMM_INTEGRATION:-}" || -n "${DODO_PMM_INTEGRATION_ADDRESS:-}" ]]; then
|
||||
# Use pending nonce so broadcast does not get -32001 "Nonce too low" (mints just used N and N+1)
|
||||
NEXT_NONCE=$(cast nonce "$DEPLOYER" --rpc-url "$RPC" --block pending 2>/dev/null || true)
|
||||
[[ -n "$NEXT_NONCE" && "$NEXT_NONCE" =~ ^[0-9]+$ ]] && export NEXT_NONCE || unset -v NEXT_NONCE
|
||||
echo "Running AddLiquidityPMMPoolsChain138 (cUSDT/cUSDC pool only if base/quote set)..."
|
||||
forge script script/dex/AddLiquidityPMMPoolsChain138.s.sol:AddLiquidityPMMPoolsChain138 \
|
||||
--rpc-url "$RPC" --broadcast --private-key "$PRIVATE_KEY" --with-gas-price 1000000000
|
||||
--rpc-url "$RPC" --broadcast --private-key "$PRIVATE_KEY" --with-gas-price 1000000000 --gas-estimate-multiplier 150
|
||||
echo "Add-liquidity done."
|
||||
else
|
||||
echo "Set DODO_PMM_INTEGRATION (or DODO_PMM_INTEGRATION_ADDRESS) and POOL_* in .env, then run:"
|
||||
|
||||
Reference in New Issue
Block a user