xaut-trade
xaut-trade
Execute USDT -> XAUT buy and XAUT -> USDT sell flows via Uniswap V3.
When to Use
Use when the user wants to buy or sell XAUT (Tether Gold):
- Buy: USDT -> XAUT
- Sell: XAUT -> USDT
External Communications
This skill connects to external services (Ethereum RPC, UniswapX API, and optionally xaue.com rankings). On first setup, it may install dependencies via npm. Inform the user before executing any external communication for the first time. See the README for a full list.
Environment & Security Declaration
Required config files (under ~/.aurehub/)
| File | Purpose | Required |
|---|---|---|
.env |
Environment variables (WALLET_MODE, ETH_RPC_URL, password file paths) | Yes |
config.yaml |
Network and limit-order configuration (chain ID, contract addresses, UniswapX API URL) | Yes |
.wdk_vault |
Encrypted wallet vault (XSalsa20-Poly1305) | When WALLET_MODE=wdk |
.wdk_password |
Vault decryption password (file mode 0600) | When WALLET_MODE=wdk |
Environment variables
| Variable | Purpose | Required |
|---|---|---|
WALLET_MODE |
Wallet type: wdk (encrypted vault) or foundry (keystore) |
Yes |
ETH_RPC_URL |
Ethereum JSON-RPC endpoint (HTTPS) | Yes |
WDK_PASSWORD_FILE |
Path to WDK vault password file (mode 0600) | When WALLET_MODE=wdk |
KEYSTORE_PASSWORD_FILE |
Path to Foundry keystore password file (mode 0600) | When WALLET_MODE=foundry |
UNISWAPX_API_KEY |
UniswapX API key for limit orders | When using limit orders |
ETH_RPC_URL_FALLBACK |
Optional fallback RPC endpoint | No |
Network access
- Ethereum JSON-RPC (ETH_RPC_URL) — blockchain reads and transaction submission
- UniswapX API (HTTPS) — limit order nonce, submission, status, cancellation
- xaue.com Rankings API (HTTPS, opt-in) — leaderboard registration
Shell commands
node scripts/*.js— all trading operations run via Node.js subprocessescast(foundry mode only) — keystore signing
Security safeguards
- Runtime
PRIVATE_KEYis explicitly rejected; only file-based wallet modes are supported - Seed phrase export is TTY-gated and requires interactive confirmation
- Vault and password files enforce 0600 permissions
- Decrypted key material is zeroed from memory after use
Environment Readiness Check (run first on every session)
Before handling any user intent (except knowledge queries), run these checks:
- Does
~/.aurehub/.envexist:ls ~/.aurehub/.envFail -> redirect to the Setup / Create Wallet Flow below. - Read
WALLET_MODEfrom .env:source ~/.aurehub/.env && echo $WALLET_MODEFail (missing or empty) -> redirect to the Setup / Create Wallet Flow below. Do NOT auto-detect or infer the wallet mode from installed tools (e.g. do not assume Foundry mode just becausecastis installed). The user must explicitly choose. - Does
~/.aurehub/config.yamlexist:ls ~/.aurehub/config.yamlFail -> copy from config.example.yaml (see onboarding Step C1) or redirect to setup. - If
WALLET_MODE=wdk:- Check
~/.aurehub/.wdk_vaultexists:ls ~/.aurehub/.wdk_vault - Check
WDK_PASSWORD_FILEin .env and file readable:source ~/.aurehub/.env && test -r "$WDK_PASSWORD_FILE" && echo OK || echo FAIL - Check Node.js >= 18:
node -v - WDK mode has zero
castdependency
- Check
- If
WALLET_MODE=foundry:- Check
cast --versionavailable - Check keystore exists:
source ~/.aurehub/.env && ls ~/.foundry/keystores/$FOUNDRY_ACCOUNT(Optional:cast wallet listcan verify the account name appears in Foundry's keystore) - Check
KEYSTORE_PASSWORD_FILEreadable:source ~/.aurehub/.env && test -r "$KEYSTORE_PASSWORD_FILE" && echo OK || echo FAIL - Check Node.js >= 18:
node -v(needed for market module)
- Check
- Both modes: verify wallet loads by resolving
SCRIPTS_DIR(see Resolving SCRIPTS_DIR below) and running:
This outputs JSON:source ~/.aurehub/.env cd "$SCRIPTS_DIR" node swap.js address{ "address": "0x..." }. If it fails, the wallet is not configured correctly.
Important -- shell isolation: Every Bash tool call runs in a new subprocess; variables set in one call do NOT persist to the next. Therefore every Bash command block that needs env vars must begin with
source ~/.aurehub/.env(orset -a; source ~/.aurehub/.env; set +ato auto-export all variables).WALLET_ADDRESS: derive it from
node swap.js address(works for both wallet modes):source ~/.aurehub/.env cd "$SCRIPTS_DIR" WALLET_ADDRESS=$(node swap.js address | node -p "JSON.parse(require('fs').readFileSync(0,'utf8')).address")Alternatively,
node swap.js balancealso includes the address in its output.
If all pass: source ~/.aurehub/.env, then proceed to intent detection.
If any fail: do not continue with the original intent. Note which checks failed, then present the following to the user (fill in [original intent] with a one-sentence summary of what the user originally asked for):
First, if WALLET_MODE is missing or empty (check 2 failed), ask the user to choose before showing setup options:
Environment not ready ([specific failing items]).
First, choose your wallet mode:
[1] WDK (recommended) — seed-phrase based, encrypted vault, no external tools needed [2] Foundry — requires Foundry installed, keystore-based
Default to WDK if the user just presses enter or says "recommended". Remember the choice for the next step.
Skip this question if WALLET_MODE is already set (other checks failed but wallet mode is known).
Then, present the setup method options:
Please choose how to set up:
[1] Recommended: let the Agent guide setup step by step
Agent-guided mode (default behavior):
- The Agent runs all safe/non-sensitive checks and commands automatically
- The Agent pauses only when manual input is required (interactive key import / password entry / wallet funding)
- After each manual step, the Agent resumes automatically and continues original intent
[2] Fallback: run setup.sh manually
Before showing this option, silently resolve the setup.sh path (try in order, stop at first match):
# 1. Saved path from previous run (validate it still exists)
_saved=$(cat ~/.aurehub/.setup_path 2>/dev/null); [ -f "$_saved" ] && SETUP_PATH="$_saved"
# 2. Git repo (fallback)
[ -z "$SETUP_PATH" ] && { GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null); [ -n "$GIT_ROOT" ] && [ -f "$GIT_ROOT/skills/xaut-trade/scripts/setup.sh" ] && SETUP_PATH="$GIT_ROOT/skills/xaut-trade/scripts/setup.sh"; }
# 3. Bounded home search fallback
[ -z "$SETUP_PATH" ] && SETUP_PATH=$(find "$HOME" -maxdepth 6 -type f -path "*/xaut-trade/scripts/setup.sh" 2>/dev/null | head -1)
echo "$SETUP_PATH"
Then show the user only the resolved absolute path:
bash /resolved/absolute/path/to/setup.sh
Once setup is done in option 2, continue original request ([original intent]).
Wait for the user's reply:
- User chooses 1 -> load references/onboarding.md and follow the agent-guided steps, passing the already-chosen wallet mode (skip Step 0 if wallet mode was selected above)
- User chooses 2 or completes setup.sh and reports back -> re-run all environment checks; if all pass, continue original intent; if any still fail, report the specific item and show the options again
Proceed to intent detection.
Resolving SCRIPTS_DIR (used throughout this skill for running Node.js scripts):
Resolve SCRIPTS_DIR in this order:
dirname "$(cat ~/.aurehub/.setup_path 2>/dev/null)"(if file exists)- git fallback:
$(git rev-parse --show-toplevel 2>/dev/null)/skills/xaut-trade/scripts(if valid) - bounded home-search fallback:
dirname "$(find "$HOME" -maxdepth 6 -type f -path "*/xaut-trade/scripts/setup.sh" 2>/dev/null | head -1)"
All node swap.js commands assume CWD is $SCRIPTS_DIR.
Extra checks for limit orders (only when the intent is limit buy / sell / query / cancel):
- Are limit order dependencies installed:
ls "$SCRIPTS_DIR/node_modules"Fail -> runcd "$SCRIPTS_DIR" && npm install, then continue - Is
UNISWAPX_API_KEYconfigured:[ -n "$UNISWAPX_API_KEY" ] && [ "$UNISWAPX_API_KEY" != "your_api_key_here" ]Fail -> hard-stop, output:Limit orders require a UniswapX API Key. How to get one (about 5 minutes, free):
- Visit https://developers.uniswap.org/dashboard
- Sign in with Google / GitHub
- Generate a Token (choose Free tier)
- Add the key to ~/.aurehub/.env:
UNISWAPX_API_KEY=your_key - Re-submit your request
Config & Local Files
- Global config directory:
~/.aurehub/(persists across sessions, not inside the skill directory) .envpath:~/.aurehub/.envconfig.yamlpath:~/.aurehub/config.yaml- Contract addresses and defaults come from
skills/xaut-trade/config.example.yaml; copy to~/.aurehub/config.yamlduring onboarding - Human operator runbook: references/live-trading-runbook.md
Interaction & Execution Principles (semi-automated)
- Run pre-flight checks first, then quote.
- Show a complete command preview before any on-chain write.
- Trade execution confirmation follows USD thresholds:
< risk.confirm_trade_usd: show full preview, then execute without blocking confirmation>= risk.confirm_trade_usdand< risk.large_trade_usd: single confirmation>= risk.large_trade_usdor estimated slippage exceedsrisk.max_slippage_bps_warn: double confirmation
- Approval confirmation follows
risk.approve_confirmation_mode(always/first_only/never, whereneveris high-risk) with a mandatory safety override:- If approve amount
> risk.approve_force_confirm_multiple * AMOUNT_IN, require explicit approval confirmation.
- If approve amount
Mandatory Safety Gates
- When amount exceeds
risk.confirm_trade_usd, require explicit execution confirmation - When amount exceeds
risk.large_trade_usd, require double confirmation - When slippage exceeds the threshold (e.g.
risk.max_slippage_bps_warn), warn and require double confirmation - When approval amount is oversized (
> risk.approve_force_confirm_multiple * AMOUNT_IN), force approval confirmation regardless of mode - When ETH gas balance is insufficient, hard-stop and prompt to top up
- When the network or pair is unsupported, hard-stop
- When the pair is not in the whitelist (currently: USDT_XAUT / XAUT_USDT), hard-stop and reply "Only USDT/XAUT pairs are supported; [user's token] is not supported"
RPC Fallback
After sourcing ~/.aurehub/.env, parse ETH_RPC_URL_FALLBACK as a comma-separated list of fallback RPC URLs.
RPC failover is handled automatically by the FallbackProvider inside swap.js for read operations (balance, quote, allowance). When ETH_RPC_URL fails (429/502/503/timeout), the provider transparently retries with each URL in ETH_RPC_URL_FALLBACK in order, and promotes the successful URL as the new primary. Write operations (swap, approve, cancel-nonce) use the current primary URL at the time the signer is created; if a read operation has already promoted a fallback, the write will use that promoted URL. No agent action is needed for RPC switching.
If all RPCs fail, swap.js will exit with an error containing network-related messages. In that case, hard-stop with:
RPC unavailable. All configured nodes failed (primary + fallbacks). To fix: add a paid RPC (Alchemy/Infura) at the front of
ETH_RPC_URL_FALLBACKin~/.aurehub/.env
Do NOT treat non-network errors (insufficient balance, contract revert, invalid parameters, nonce mismatch) as RPC failures. Report these directly to the user.
Intent Detection
Determine the operation from the user's message:
- Buy: contains "buy", "purchase", "swap USDT for", etc. -> run buy flow
- Sell: contains "sell", "swap XAUT for", etc. -> run sell flow
- Insufficient info: ask for direction and amount -- do not execute directly
- Limit buy: contains "limit order", "when price drops to", "when price reaches", and direction is buy -> run limit buy flow
- Limit sell: contains "limit sell", "sell when price reaches", "XAUT rises to X sell", etc. -> run limit sell flow
- Query limit order: contains "check order", "order status" -> run query flow
- Cancel limit order: contains "cancel order", "cancel limit" -> run cancel flow
- Setup / Create wallet: contains "setup", "create wallet", "initialize", "init wallet" -> skip environment readiness check, go to Setup / Create Wallet Flow below.
- XAUT knowledge query: contains "troy ounce", "grams", "conversion", "what is XAUT" -> answer directly, no on-chain operations or environment checks needed
Setup / Create Wallet Flow
When the user explicitly requests setup or wallet creation:
Step 1: Ask wallet mode
Present the choice:
Which wallet mode would you like?
[1] WDK (recommended) — seed-phrase based, encrypted vault, no external tools needed [2] Foundry — requires Foundry installed, keystore-based
Default to WDK if user just presses enter or says "recommended".
Step 2: Check if wallet already exists for selected mode
If user chose WDK:
ls ~/.aurehub/.wdk_vault 2>/dev/null && echo "EXISTS" || echo "NOT_FOUND"
If EXISTS → inform user and stop:
"WDK wallet already exists. No action needed. To use it, run a trade command (e.g. 'buy 100 USDT of XAUT')."
If the current WALLET_MODE in .env is different (e.g. foundry), update it to wdk and inform:
"WDK wallet already exists. Switched wallet mode to WDK."
If user chose Foundry:
source ~/.aurehub/.env 2>/dev/null
ls ~/.foundry/keystores/${FOUNDRY_ACCOUNT:-aurehub-wallet} 2>/dev/null && echo "EXISTS" || echo "NOT_FOUND"
If EXISTS → inform user and stop:
"Foundry keystore already exists. No action needed."
If the current WALLET_MODE in .env is different, update it to foundry and inform:
"Foundry keystore already exists. Switched wallet mode to Foundry."
Step 3: Create wallet (only if NOT_FOUND)
If the wallet does not exist for the selected mode, proceed with wallet creation:
- Load references/onboarding.md and follow the setup steps for the selected mode
- After completion, update
WALLET_MODEin~/.aurehub/.env
Step 4: Security reminder (WDK mode only)
After WDK wallet creation succeeds, always display this security notice:
IMPORTANT: Back up your seed phrase
Your wallet is protected by an encrypted vault, but if the vault file or password is lost, your funds cannot be recovered.
Export your 12-word seed phrase now and store it safely (paper or hardware backup — never in cloud storage or chat).
Run this command in a private terminal:
node <scripts_dir>/lib/export-seed.jsWrite down the 12 words and keep them offline. Never share your seed phrase with anyone.
Do NOT skip this step. Do NOT display the seed phrase in chat — only provide the export command for the user to run in their own terminal.
Buy Flow (USDT -> XAUT)
Step 1: Pre-flight Checks
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
BALANCE_JSON=$(node swap.js balance)
echo "$BALANCE_JSON"
The output is JSON: { "address": "0x...", "ETH": "0.05", "USDT": "1000.0", "XAUT": "0.5" }
Parse and check:
- ETH balance: if below
risk.min_eth_for_gas, hard-stop - USDT balance: if insufficient for the buy amount, hard-stop and report the shortfall
Step 2: Quote & Risk Warnings
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
QUOTE_JSON=$(node swap.js quote --side buy --amount <USDT_AMOUNT>)
echo "$QUOTE_JSON"
The output is JSON: { "side": "buy", "amountIn": "...", "amountOut": "...", "amountOutRaw": "...", "sqrtPriceX96": "...", "gasEstimate": "..." }
Parse the JSON to extract:
amountOut: estimated XAUT to receive (human-readable)gasEstimate: estimated gas cost- Derive
minAmountOutyourself:amountOut * (1 - slippageBps / 10000)usingrisk.default_slippage_bpsfrom config.yaml - Derive reference rate:
amountIn / amountOut(both tokens have 6 decimals)
Display:
- Wallet address (from balance or address output)
- Input amount (human-readable)
- Estimated XAUT received
- Reference rate:
1 XAUT ~ X USDT - Slippage setting and
minAmountOut - Risk indicators (large trade / slippage / gas)
Determine confirmation level by USD notional and risk:
< risk.confirm_trade_usd: show full preview, then execute without blocking confirmation>= risk.confirm_trade_usdand< risk.large_trade_usd: single confirmation>= risk.large_trade_usdor estimated slippage exceedsrisk.max_slippage_bps_warn: double confirmation
Step 3: Buy Execution
Follow references/buy.md:
Allowance check:
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
ALLOWANCE_JSON=$(node swap.js allowance --token USDT)
echo "$ALLOWANCE_JSON"
Output: { "address": "0x...", "token": "USDT", "allowance": "...", "spender": "0x..." }
If allowance < amount needed, approve first.
Approve (if needed):
USDT requires reset-to-zero before approving (non-standard). The swap.js approve command handles this automatically:
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
APPROVE_JSON=$(node swap.js approve --token USDT --amount <AMOUNT>)
echo "$APPROVE_JSON"
Output: { "address": "0x...", "token": "USDT", "amount": "...", "spender": "0x...", "txHash": "0x..." }
Swap execution:
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
SWAP_JSON=$(node swap.js swap --side buy --amount <USDT_AMOUNT> --min-out <MIN_XAUT>)
echo "$SWAP_JSON"
Output: { "address": "0x...", "side": "buy", "amountIn": "...", "minAmountOut": "...", "txHash": "0x...", "status": "success", "gasUsed": "..." }
- Before executing, remind the user: "About to execute an on-chain write"
- Execute with the confirmation level required by thresholds/policy
- Return tx hash and Etherscan link:
https://etherscan.io/tx/<txHash>
Swap error recovery (CRITICAL — see references/buy.md Section 3a):
If the swap command returns an error or "status": "unconfirmed": do NOT retry. First check node swap.js balance and compare USDT balance against the pre-swap value. If USDT decreased, the swap succeeded — proceed to verification. Only retry if balance is unchanged.
Result verification:
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
node swap.js balance
Return:
- tx hash
- post-trade XAUT balance
- on failure, return retry suggestions
Sell Flow (XAUT -> USDT)
Step 1: Pre-flight Checks
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
BALANCE_JSON=$(node swap.js balance)
echo "$BALANCE_JSON"
Parse and check:
- ETH balance: if below
risk.min_eth_for_gas, hard-stop - XAUT balance check (required): hard-stop if insufficient for the sell amount
Precision check: if the input has more than 6 decimal places (e.g. 0.0000001), hard-stop:
XAUT supports a maximum of 6 decimal places. The minimum tradeable unit is 0.000001 XAUT. Please adjust the input amount.
Step 2: Quote & Risk Warnings
Follow references/sell.md:
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
QUOTE_JSON=$(node swap.js quote --side sell --amount <XAUT_AMOUNT>)
echo "$QUOTE_JSON"
Output JSON: { "side": "sell", "amountIn": "...", "amountOut": "...", "amountOutRaw": "...", "sqrtPriceX96": "...", "gasEstimate": "..." }
Parse and display:
- Wallet address (from balance or address output)
- Input amount (user-provided form)
- Estimated USDT received (
amountOut) - Reference rate:
1 XAUT ~ X USDT - Slippage setting and
minAmountOut - Risk indicators (large trade / slippage / gas)
Large-trade check: convert amountOut (USDT) to USD value; if it exceeds risk.large_trade_usd, require double confirmation.
Step 3: Sell Execution
Follow references/sell.md:
Allowance check:
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
ALLOWANCE_JSON=$(node swap.js allowance --token XAUT)
echo "$ALLOWANCE_JSON"
Output: { "address": "0x...", "token": "XAUT", "allowance": "...", "spender": "0x..." }
If allowance < amount needed, approve first.
Approve (if needed):
XAUT is standard ERC-20 -- no prior reset needed, approve directly:
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
APPROVE_JSON=$(node swap.js approve --token XAUT --amount <AMOUNT>)
echo "$APPROVE_JSON"
Output: { "address": "0x...", "token": "XAUT", "amount": "...", "spender": "0x...", "txHash": "0x..." }
Swap execution:
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
SWAP_JSON=$(node swap.js swap --side sell --amount <XAUT_AMOUNT> --min-out <MIN_USDT>)
echo "$SWAP_JSON"
Output: { "address": "0x...", "side": "sell", "amountIn": "...", "minAmountOut": "...", "txHash": "0x...", "status": "success", "gasUsed": "..." }
- Before executing, remind the user: "About to execute an on-chain write"
- Execute with the confirmation level required by thresholds/policy
- Return tx hash and Etherscan link
Swap error recovery (CRITICAL — see references/sell.md Section 7a):
If the swap command returns an error or "status": "unconfirmed": do NOT retry. First check node swap.js balance and compare XAUT balance against the pre-swap value. If XAUT decreased, the swap succeeded — proceed to verification. Only retry if balance is unchanged.
Result verification:
source ~/.aurehub/.env
cd "$SCRIPTS_DIR"
node swap.js balance
Return:
- tx hash
- post-trade USDT balance
- on failure, return retry suggestions (reduce sell amount / increase slippage tolerance / check nonce and gas)
Post-Trade Registration
After any on-chain trade completes successfully (buy swap, sell swap, or limit order placed):
source ~/.aurehub/.env- Derive WALLET_ADDRESS:
cd "$SCRIPTS_DIR" WALLET_ADDRESS=$(node swap.js address | node -p "JSON.parse(require('fs').readFileSync(0,'utf8')).address") REGISTERED=$(cat ~/.aurehub/.registered 2>/dev/null)- If
"$REGISTERED"starts with"$WALLET_ADDRESS:"-> already registered, silent skip - If
RANKINGS_OPT_IN!="true":- Check marker:
PROMPTED=$(cat ~/.aurehub/.rankings_prompted 2>/dev/null) - If marker starts with
"$WALLET_ADDRESS:"-> skip prompt - Otherwise ask once: "Join XAUT activity rankings now? (yes/no)"
- If user says
no:echo "$WALLET_ADDRESS:declined" > ~/.aurehub/.rankings_prompted; stop - If user says
yes:- If
NICKNAMEis empty: ask user for nickname - Persist opt-in in
~/.aurehub/.env(RANKINGS_OPT_IN=true,NICKNAME=<value>) - Re-source env to update in-memory variables:
source ~/.aurehub/.env
- If
- If user says
- Check marker:
- If
RANKINGS_OPT_IN=="true":- If
NICKNAMEis empty: ask "You're opted in to XAUT activity rankings — what nickname would you like to appear as?", then persist to~/.aurehub/.envand re-source:source ~/.aurehub/.env - Register:
NICKNAME_ESC=$(printf '%s' "$NICKNAME" | sed 's/\\/\\\\/g; s/"/\\"/g') REGISTER_RESP=$(curl -s -o /dev/null -w "%{http_code}" -X POST \ https://xaue.com/api/rankings/participants \ -H 'Content-Type: application/json' \ -d "{\"wallet_address\":\"$WALLET_ADDRESS\",\"nickname\":\"$NICKNAME_ESC\",\"source\":\"agent\"}")- HTTP 200 or 201:
echo "$WALLET_ADDRESS:$NICKNAME" > ~/.aurehub/.registered; inform: "Registered with nickname: $NICKNAME" - Any other status: silent continue, do not write marker file
- If
Only prompt once per wallet when rankings are not enabled yet.
Limit Buy Flow (USDT -> XAUT via UniswapX)
Follow references/limit-order-buy-place.md.
Limit Sell Flow (XAUT -> USDT via UniswapX)
Follow references/limit-order-sell-place.md.
Limit Order Query Flow
Follow references/limit-order-status.md.
Limit Order Cancel Flow
Follow references/limit-order-cancel.md.
Output Format
Output must include:
Wallet: wallet address (always show early in preview)Stage:PrevieworReady to ExecuteInput: token, amount, chainQuote: estimated XAUT amount, slippage setting,minAmountOutReference rate:1 XAUT ~ X USDT(for comparison with spot price; shown for both buy and sell)Risk warnings: large trade / slippage / gasCommand: thenode swap.jscommand to be executedResult: tx hash, post-trade balance (after execution)
Error Handling
- Missing prerequisite variable: prompt to add the variable to
.envand stop - RPC network error (429/502/timeout): trigger RPC fallback sequence (see RPC Fallback section)
- Insufficient balance: report minimum top-up amount and stop
- User has not confirmed: stay in Preview -- do not execute
- Transaction failed: return failure reason and retry suggestions (reduce amount / increase slippage tolerance / check nonce and gas)
- Swap error or
"status": "unconfirmed": NEVER retry without first checking balance. RPC errors can occur even when the transaction was successfully mined. Always compare current balance against pre-swap balance before deciding to retry. See buy.md Section 3a / sell.md Section 7a.
XAUT Knowledge Base
- 1 XAUT = 1 troy ounce = 31.1035 grams
- Minimum precision: 0.000001 XAUT (on-chain minimum unit: 1, i.e. 10^-6)
- Conversion: X grams / 31.1035 = XAUT amount
- Examples: 1g ~ 0.032151 XAUT; 10g ~ 0.32151 XAUT
- Contract address (Ethereum mainnet): 0x68749665FF8D2d112Fa859AA293F07A622782F38
Answer knowledge queries directly using the data above -- no on-chain commands needed.
First-Turn Contract (for testing)
- When information is sufficient: give a structured preview first, then ask for execution confirmation.
- When information is insufficient: clarify key details (token, amount, environment variables) -- do not claim a trade has been executed.
About
This skill is developed by Duncan.Aure (Duncan), an AI Agent created by Aurelion, the world's first NASDAQ-listed Tether Gold (XAU₮) treasury company. Duncan executes on-chain financial actions through modular AI Agent Skills. Enables automated XAU₮ trading, cross-protocol DeFi execution, and programmable digital gold allocation.
Stay Connected
For updates, new skills, and ecosystem developments:
- X: Aure_duncan
- Telegram: @aure_duncanbot
- Aurelion: aurelion.com