Skip to content

Instantly share code, notes, and snippets.

@o-az
Created March 24, 2026 21:11
Show Gist options
  • Select an option

  • Save o-az/afac7041acdc2eef5a2ab2b4fe22f2ff to your computer and use it in GitHub Desktop.

Select an option

Save o-az/afac7041acdc2eef5a2ab2b4fe22f2ff to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -euo pipefail
# ── Parse args ──────────────────────────────────────────────────────────
HUMAN_AMOUNT="4400"
while [[ $# -gt 0 ]]; do
case "$1" in
--amount) HUMAN_AMOUNT="$2"; shift 2 ;;
*) echo "Usage: $0 [--amount <PUSD amount, e.g. 4400>]"; exit 1 ;;
esac
done
# ── Config ──────────────────────────────────────────────────────────────
RPC="https://rpc.testnet.tempo.xyz"
DEX="0xDEc0000000000000000000000000000000000000"
PUSD="0x20c0000000000000000000000000000000000000" # PathUSD (6 decimals)
MMUSD="0x20c000000000000000000000bab1849608b83d2c" # mmUSD (6 decimals)
AMOUNT=$(echo "$HUMAN_AMOUNT * 1000000" | bc | sed 's/\..*//') # convert to 6 decimals
# ── 1. Generate wallet ─────────────────────────────────────────────────
echo "=== Generating wallet ==="
KEYFILE=$(mktemp /tmp/tempo-key-XXXXXX)
cast wallet new --json | tee "$KEYFILE"
ADDRESS=$(jq -r '.[0].address' "$KEYFILE")
PRIVKEY=$(jq -r '.[0].private_key' "$KEYFILE")
rm "$KEYFILE"
echo ""
echo "Address: $ADDRESS"
echo "Private Key: $PRIVKEY"
echo ""
# ── 2. Fund the wallet via testnet faucet ──────────────────────────────
echo "=== Funding $ADDRESS via tempo_fundAddress ==="
cast rpc tempo_fundAddress "$ADDRESS" --rpc-url "$RPC"
# ── 3. Check PathUSD balance ───────────────────────────────────────────
echo ""
echo "=== Checking PathUSD balance ==="
BAL=$(cast call "$PUSD" "balanceOf(address)(uint256)" "$ADDRESS" --rpc-url "$RPC")
echo "PathUSD balance: $BAL (raw, 6 decimals)"
# ── 4. Quote the swap ─────────────────────────────────────────────────
echo ""
echo "=== Quoting swap: $AMOUNT PathUSD → mmUSD ==="
QUOTE=$(cast call "$DEX" \
"quoteSwapExactAmountIn(address,address,uint128)(uint128)" \
"$PUSD" "$MMUSD" "$AMOUNT" \
--rpc-url "$RPC")
echo "Expected mmUSD out: $QUOTE (raw, 6 decimals)"
# ── 5. Approve DEX to spend PathUSD ───────────────────────────────────
echo ""
echo "=== Approving DEX to spend PathUSD ==="
cast send "$PUSD" \
"approve(address,uint256)" "$DEX" "$AMOUNT" \
--rpc-url "$RPC" \
--private-key "$PRIVKEY"
# ── 6. Execute the swap ───────────────────────────────────────────────
echo ""
echo "=== Swapping $AMOUNT PathUSD → mmUSD (minOut=0) ==="
cast send "$DEX" \
"swapExactAmountIn(address,address,uint128,uint128)(uint128)" \
"$PUSD" "$MMUSD" "$AMOUNT" "0" \
--rpc-url "$RPC" \
--private-key "$PRIVKEY"
# ── 7. Check final balances ───────────────────────────────────────────
echo ""
echo "=== Final balances ==="
echo -n "PathUSD: "
cast call "$PUSD" "balanceOf(address)(uint256)" "$ADDRESS" --rpc-url "$RPC"
echo -n "mmUSD: "
cast call "$MMUSD" "balanceOf(address)(uint256)" "$ADDRESS" --rpc-url "$RPC"
echo ""
echo "✅ Done!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment