Files
smom-dbis-138/scripts/mint-xau-chain138.sh
defiQUG 6ba33a4d3f
Some checks failed
CI/CD Pipeline / Solidity Contracts (push) Failing after 1m18s
CI/CD Pipeline / Security Scanning (push) Successful in 2m27s
CI/CD Pipeline / Lint and Format (push) Failing after 46s
CI/CD Pipeline / Terraform Validation (push) Failing after 28s
CI/CD Pipeline / Kubernetes Validation (push) Successful in 29s
Deploy ChainID 138 / Deploy ChainID 138 (push) Failing after 1m0s
HYBX OMNL TypeScript & anchor / token-aggregation build + reconcile artifact (push) Failing after 29s
Validation / validate-genesis (push) Successful in 30s
Validation / validate-terraform (push) Failing after 32s
Validation / validate-kubernetes (push) Failing after 10s
Validation / validate-smart-contracts (push) Failing after 13s
Validation / validate-security (push) Failing after 1m23s
Validation / validate-documentation (push) Failing after 22s
Verify Deployment / Verify Deployment (push) Failing after 11m53s
Add mainnet cW market registry and align ops scripts with Stack A.
- CWTokenMarketRegistry + USD feeds for mainnet cW* market anchors
- HYBX cross-chain treasury line registry expansion
- PMM seed default → live DODOPMMIntegration (0x86ADA6Ef…)
- mint-xau-chain138: troy-ounce mint helper with multisig path
- relay: prefer CCIP_MAINNET_LINK138 relayer key on default profile

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-22 19:50:52 -07:00

138 lines
4.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Mint cXAUC and/or cXAUT on Chain 138 to the minter (owner) address.
# Amounts are always in TROY OUNCES (1 full token = 1 troy oz Au; 6 decimals).
#
# Usage:
# ./scripts/mint-xau-chain138.sh <troy_ounces> # mint both tokens (default)
# ./scripts/mint-xau-chain138.sh <troy_ounces> --cxauc-only
# ./scripts/mint-xau-chain138.sh <troy_ounces> --cxaut-only
# MINT_TO=0x... ./scripts/mint-xau-chain138.sh <troy_ounces> # recipient (default: deployer from PRIVATE_KEY)
# DRY_RUN=1 ./scripts/mint-xau-chain138.sh 100
#
# Requires: PRIVATE_KEY, RPC_URL_138 (or RPC_URL) 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
CXAUC="0x290E52a8819A4fbD0714E517225429aA2B70EC6b"
CXAUT="0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E"
RPC="${RPC_URL_138:-${RPC_URL:-http://192.168.11.211:8545}}"
GAS_LIMIT="${GAS_LIMIT:-200000}"
[ -n "${PRIVATE_KEY:-}" ] || { echo "PRIVATE_KEY not set"; exit 1; }
OZ="${1:-}"
[ -n "$OZ" ] || { echo "Usage: $0 <troy_ounces> [--cxauc-only|--cxaut-only]"; exit 1; }
shift || true
DO_CXAUC=1
DO_CXAUT=1
for a in "$@"; do
case "$a" in
--cxauc-only) DO_CXAUC=1; DO_CXAUT=0 ;;
--cxaut-only) DO_CXAUC=0; DO_CXAUT=1 ;;
*) echo "Unknown option: $a"; exit 1 ;;
esac
done
BASE_UNITS="$(python3 -c "
from decimal import Decimal, ROUND_DOWN
import sys
d = Decimal(sys.argv[1].strip())
if d <= 0:
sys.exit('troy_ounces must be positive')
# 1 troy oz = 10^6 base units (6 decimals)
b = (d * Decimal(10**6)).to_integral_value(rounding=ROUND_DOWN)
if b <= 0 or b > 2**256 - 1:
sys.exit('amount out of range')
print(int(b))
" "$OZ")" || exit 1
if [ -n "${MINT_TO:-}" ]; then
TO="$MINT_TO"
else
TO="$(cast wallet address "$PRIVATE_KEY")" || exit 1
fi
echo "=== Mint XAU-compliant tokens (troy oz) ==="
echo " RPC: $RPC"
echo " Recipient: $TO"
echo " Troy ounces: $OZ -> base units: $BASE_UNITS"
echo " cXAUC: $DO_CXAUC cXAUT: $DO_CXAUT"
echo ""
MULTISIG="${ADDR_MULTISIG:-0xb9E29cFa1f89d369671E640d0BB3aD94Cab43965}"
GAS_LIMIT_MULTISIG="${GAS_LIMIT_MULTISIG:-600000}"
GAS_PRICE="${GAS_PRICE_138:-1000000000}"
extract_tx_hash() {
awk '/^transactionHash[[:space:]]/ {print $2; exit}'
}
tx_status_ok() {
local txhash="$1"
[[ -n "$txhash" && "$txhash" == 0x* ]] || return 1
local st
st=$(cast receipt "$txhash" status --rpc-url "$RPC" 2>/dev/null | awk '{print $1}' || echo "")
[[ "$st" == "1" || "$st" == "true" ]]
}
mint_via_multisig() {
local addr="$1" label="$2"
local data txid exec_out txhash count
data=$(cast calldata "mint(address,uint256)" "$TO" "$BASE_UNITS")
echo -n " multisig mint $label... "
if [ -n "${DRY_RUN:-}" ]; then
echo "[dry-run]"
return 0
fi
cast send "$MULTISIG" \
"submitTransaction(address,uint256,bytes)" "$addr" 0 "$data" \
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy \
--gas-limit "$GAS_LIMIT_MULTISIG" --gas-price "$GAS_PRICE" >/dev/null || {
echo "FAIL (submit)"; return 1
}
count=$(cast call "$MULTISIG" "getTransactionCount()(uint256)" --rpc-url "$RPC" | awk '{print $1}')
txid=$((count - 1))
exec_out=$(cast send "$MULTISIG" "executeTransaction(uint256)" "$txid" \
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy \
--gas-limit "$GAS_LIMIT_MULTISIG" --gas-price "$GAS_PRICE" 2>&1) || {
echo "FAIL (execute)"; return 1
}
txhash=$(echo "$exec_out" | extract_tx_hash)
if tx_status_ok "$txhash"; then
echo "OK (tx $txhash)"
return 0
fi
echo "FAIL (receipt: $txhash)"
return 1
}
run_mint() {
local addr="$1"
local label="$2"
local owner lc_to lc_own lc_ms
owner=$(cast call "$addr" "owner()(address)" --rpc-url "$RPC" 2>/dev/null || echo "")
lc_to=$(echo "$TO" | tr '[:upper:]' '[:lower:]')
lc_own=$(echo "$owner" | tr '[:upper:]' '[:lower:]')
lc_ms=$(echo "$MULTISIG" | tr '[:upper:]' '[:lower:]')
if [[ "$lc_own" == "$lc_ms" ]]; then
mint_via_multisig "$addr" "$label" || return 1
return 0
fi
if [ -n "${DRY_RUN:-}" ]; then
echo "[dry-run] cast send $label $addr mint $TO $BASE_UNITS"
return 0
fi
cast send "$addr" "mint(address,uint256)" "$TO" "$BASE_UNITS" \
--rpc-url "$RPC" --private-key "$PRIVATE_KEY" --legacy --gas-limit "$GAS_LIMIT"
}
[ "$DO_CXAUC" = 1 ] && run_mint "$CXAUC" "cXAUC"
[ "$DO_CXAUT" = 1 ] && run_mint "$CXAUT" "cXAUT"
echo "Done."