Created
March 24, 2026 21:11
-
-
Save o-az/afac7041acdc2eef5a2ab2b4fe22f2ff to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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