xaut-trade

安装量: 37
排名: #18919

安装

npx skills add https://github.com/aurehub/skills --skill xaut-trade
xaut-trade
Execute
USDT -> XAUT
buy and
XAUT -> USDT
sell flows via Uniswap V3 + Foundry
cast
.
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 Foundry via
curl | bash
. Inform the user before executing any external communication for the first time. See the README for a full list.
Environment Readiness Check (run first on every session)
Before handling any user intent
(except knowledge queries), run these checks:
Is
cast
available:
cast --version
Fail (command not found) → Foundry is not installed; run the setup script before anything else
Does
~/.aurehub/.env
exist:
ls ~/.aurehub/.env
Does keystore account
aurehub-wallet
exist:
cast wallet list
output contains
aurehub-wallet
Does
~/.aurehub/.wallet.password
exist:
ls ~/.aurehub/.wallet.password
Is runtime
PRIVATE_KEY
unset: after sourcing env, check
[ -z "${PRIVATE_KEY:-}" ]
Fail → hard-stop and ask user to migrate to keystore runtime mode via setup.sh
If
all pass
source
~/.aurehub/.env
, then proceed to intent detection.
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
(or
set -a; source ~/.aurehub/.env; set +a
to auto-export all variables).
WALLET_ADDRESS is not stored in
.env
— it must be derived fresh in every bash block that uses it:
source
~/.aurehub/.env
WALLET_ADDRESS
=
$(
cast wallet address
--account
"
$FOUNDRY_ACCOUNT
"
--password-file
"
$KEYSTORE_PASSWORD_FILE
"
)
This ensures the address always matches the actual keystore, regardless of session state.
If
any fail
do not continue with the original intent. Note which checks failed, then present the following options to the user (fill in [original intent] with a one-sentence summary of what the user originally asked for): Environment not ready ([specific failing items]). Please choose: A) 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 B) 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 B, continue original request ([original intent]).
Wait for the user's reply:
User chooses
A
→ load
references/onboarding.md
and follow the agent-guided steps
User chooses
B
or completes setup.sh and reports back → re-run all environment checks (steps 0–4); if all pass, continue original intent; if any still fail, report the specific item and show the options again
Proceed to intent detection.
Extra checks for limit orders
(only when the intent is limit buy / sell / query / cancel):
Is Node.js >= 18 available:
node --version
Fail → go to the "Extra Dependencies for Limit Orders" section in
references/onboarding.md
, install, then continue
Are limit order dependencies installed: resolve
SCRIPTS_DIR
first, then check
node_modules
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)"
Check:
ls "$SCRIPTS_DIR/node_modules"
Fail → run
cd "$SCRIPTS_DIR" && npm install
, then continue
Is
UNISWAPX_API_KEY
configured:
[ -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)
.env
path:
~/.aurehub/.env
config.yaml
path:
~/.aurehub/config.yaml
Contract addresses and defaults come from
skills/xaut-trade/config.example.yaml
; copy to
~/.aurehub/config.yaml
during 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
cast send
.
Trade execution confirmation follows USD thresholds:
< risk.confirm_trade_usd
show full preview, then execute without blocking confirmation
>= risk.confirm_trade_usd
and
< risk.large_trade_usd
single confirmation
>= risk.large_trade_usd
or estimated slippage exceeds
risk.max_slippage_bps_warn
double confirmation
Approval confirmation follows
risk.approve_confirmation_mode
(
always
/
first_only
/
never
, where
never
is high-risk) with a mandatory safety override:
If approve amount
> risk.approve_force_confirm_multiple * AMOUNT_IN
, require explicit approval confirmation.
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.
If any
cast call
or
cast send
command fails and its output contains any of the following:
429
,
502
,
503
,
timeout
,
connection refused
,
rate limit
,
Too Many Requests
,
-32603
,
no response
,
method is not whitelisted
,
HTTP error 403
Then:
Try the same command with each fallback URL in order (replace
--rpc-url "$ETH_RPC_URL"
with the fallback URL)
First success → set that URL as the active RPC for this operation class in this session:
read operations (
cast call
, quote, balance checks)
write operations (
cast send
)
All fallbacks exhausted → hard-stop with:
RPC unavailable. All configured nodes failed (primary + N fallbacks).
To fix: add a paid RPC (Alchemy/Infura) at the front of
ETH_RPC_URL_FALLBACK
in
~/.aurehub/.env
Do NOT trigger fallback for non-network errors: insufficient balance, contract revert, invalid parameters, nonce mismatch. Report these directly to the user.
Session stickiness:
Once a fallback is selected, keep it sticky per operation class (read/write) for the rest of the session. Do not switch back to primary unless the active node fails.
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
XAUT knowledge query
contains "troy ounce", "grams", "conversion", "what is XAUT" → answer directly, no on-chain operations or environment checks needed
Buy Flow (USDT → XAUT)
Step 1: Pre-flight Checks
Follow
references/balance.md
:
cast --version
cast block-number --rpc-url $ETH_RPC_URL
ETH and stablecoin balance checks
Step 2: Quote & Risk Warnings
Follow
references/quote.md
:
Call QuoterV2 for
amountOut
Calculate
minAmountOut
Display estimated fill, slippage protection, gas risk
Step 3: Buy Execution
Follow
references/buy.md
:
allowance check
approve if needed (USDT requires
approve(0)
then
approve(amount)
)
Execute swap with the confirmation level required by thresholds/policy
Return tx hash and post-trade balance
Sell Flow (XAUT → USDT)
Step 1: Pre-flight Checks
Follow
references/balance.md
:
cast --version
cast block-number --rpc-url $ETH_RPC_URL
ETH balance check
XAUT balance check (required)
hard-stop if insufficient
Step 2: Quote & Risk Warnings
Follow
references/sell.md
:
Precision check (hard-stop if more than 6 decimal places)
Call QuoterV2 for
amountOut
(XAUT → USDT direction)
Calculate
minAmountOut
Large-trade check: estimate USD value using USDT
amountOut
Display estimated fill, reference rate, slippage protection, gas risk
Step 3: Sell Execution
Follow
references/sell.md
:
allowance check
approve (XAUT is standard ERC-20,
no prior reset needed
)
Execute swap with the confirmation level required by thresholds/policy
Return tx hash and post-trade USDT balance
Post-Trade Registration
After
any
on-chain trade completes successfully (buy swap, sell swap, or limit order placed):
source ~/.aurehub/.env
Derive WALLET_ADDRESS from keystore mode:
WALLET_ADDRESS=$(cast wallet address --account "$FOUNDRY_ACCOUNT" --password-file "$KEYSTORE_PASSWORD_FILE")
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
NICKNAME
is empty: ask user for nickname
Persist opt-in in
~/.aurehub/.env
(
RANKINGS_OPT_IN=true
,
NICKNAME=
)
If
RANKINGS_OPT_IN
==
"true"
and nickname exists, 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
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:
Stage
:
Preview
or
Ready to Execute
Input
token, amount, chain
Quote
estimated XAUT amount, slippage setting,
minAmountOut
Reference rate
:
1 XAUT ≈ X USDT
(for comparison with spot price; shown for both buy and sell)
Risk warnings
large trade / slippage / gas
Command
full
cast
command
Result
tx hash, post-trade balance (after execution) Error Handling Missing prerequisite variable: prompt to add the variable to .env and 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) 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 cast 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
返回排行榜