Install
openclaw skills install floor-otcTrustless token swaps for AI agents on Base. Two paths — relay agent-signed orders to CoW Protocol for instant batch-auction settlement (zero capital, MEV protected), or create a 1:1 on-chain escrow for human OTC. Both atomic, no middleman.
openclaw skills install floor-otcFLOOR OTC routes token swaps two ways on Base mainnet:
partnerFee mechanism, encoded in the appData the trader signs.ERC-8004 Agent #31596 on Base Mainnet.
curl -s "https://floor-a2a-production.up.railway.app/api/quote?from=USDC&to=WETH&amount=1000" | jq
curl -s -X POST https://floor-a2a-production.up.railway.app/a2a \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tasks/send","params":{"skill_id":"get_quote","arguments":{"from_token":"USDC","to_token":"WETH","amount":1000}},"id":1}'
curl -s "https://floor-a2a-production.up.railway.app/api/prices" | jq
curl -s -X POST https://floor-a2a-production.up.railway.app/a2a \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tasks/send","params":{"skill_id":"execute_trade","arguments":{"from_token":"USDC","to_token":"DAI","amount":1000}},"id":1}'
curl -s -X POST https://floor-a2a-production.up.railway.app/a2a \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tasks/send","params":{"skill_id":"check_trade","arguments":{"trade_id":"0xYOUR_TRADE_ID"}},"id":1}'
Step 1 — ask FLOOR to build the order:
curl -s -X POST https://floor-a2a-production.up.railway.app/a2a \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tasks/send","params":{"skill_id":"prepare_trade","arguments":{"sell_token":"USDC","buy_token":"WETH","sell_amount":1000,"trader_address":"0xYourAgentWallet"}},"id":1}'
You get back typed_data (EIP-712 domain + types + message), app_data (FLOOR's partnerFee doc + hash), quote_summary, preflight (balance + relayer allowance), and relayer.approve_calldata if you still need to approve the GPv2VaultRelayer.
Step 2 — sign locally with your wallet:
const signature = await wallet.signTypedData(
typed_data.domain,
typed_data.types,
typed_data.message
);
Step 3 — submit through FLOOR:
curl -s -X POST https://floor-a2a-production.up.railway.app/a2a \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tasks/send","params":{"skill_id":"submit_signed_trade","arguments":{"order":{...},"signature":"0x...","trader_address":"0xYourAgentWallet"}},"id":1}'
Returns order_uid + explorer_url. Track the fill at https://explorer.cow.fi/base/orders/{order_uid}.
curl -s -X POST https://floor-a2a-production.up.railway.app/a2a \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tasks/send","params":{"skill_id":"check_cow_order","arguments":{"order_uid":"0xYOUR_ORDER_UID"}},"id":1}'
| Token | Address |
|---|---|
| USDC | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| USDbC | 0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6Ca |
| DAI | 0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb |
| WETH | 0x4200000000000000000000000000000000000006 |
Additional tokens supported for quotes only: ETH, BTC, WBTC, UNI, LINK, AAVE.
Quotes are free at real CoinGecko market rates — zero spread. A 25 bps (0.25%) protocol fee is collected on every fill:
partnerFee mechanism in the appData the trader signs.CoW relay (recommended for agents):
FloorEscrowV2 (1:1 OTC, for humans via web UI):
Quotes & data:
https://floor-a2a-production.up.railway.app/.well-known/agent.jsonPOST https://floor-a2a-production.up.railway.app/a2aGET https://floor-a2a-production.up.railway.app/api/quote?from=USDC&to=WETH&amount=1000GET https://floor-a2a-production.up.railway.app/api/priceshttps://zesty-solace-production-13de.up.railway.app/sseGET https://floor-a2a-production.up.railway.app/health0x9EC9d882C93F52621CBD0d146D3F2e0929E53AA7 (verified on Basescan)0x9008D19f58AAbD9eD0D60971565AA8510560ab410xC92E8bdf79f0507f65a392b0ab4667716BFE01100x8004A169FB4a3325136EB29fA0ceB6D2e539a432No authentication required. Quotes are free.