stacksagent 1.5.2 β 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ An intelligent AI assistant that provides development guidance for Clarity smart
|
|
|
21
21
|
- π« **Zero Deprecated Code** - All modern @stacks/connect v7+ API patterns
|
|
22
22
|
- π **Security-First Examples** - Post-conditions, error handling, real vulnerabilities
|
|
23
23
|
|
|
24
|
-
**
|
|
24
|
+
**557+ Knowledge Base Entries Across 15 Domains:**
|
|
25
25
|
|
|
26
26
|
### Core Language & Tools (175 entries)
|
|
27
27
|
- **π· 61 Clarity Functions** - Complete language reference with examples
|
|
@@ -29,10 +29,10 @@ An intelligent AI assistant that provides development guidance for Clarity smart
|
|
|
29
29
|
- **π 14 Contract Templates** - SIP-010, SIP-009, DAO, Vault, Marketplace, Stacking
|
|
30
30
|
- **π 25 Deployment Steps** - Testnet, mainnet, and devnet workflows
|
|
31
31
|
|
|
32
|
-
### Domain-Specific Integrations (
|
|
32
|
+
### Domain-Specific Integrations (247 entries)
|
|
33
33
|
- **π 21 BNS Operations** - Name registration, resolution (Clarity + JS + API)
|
|
34
34
|
- **π° 25 Stacking Guides** - PoX stacking and pool delegation (Clarity + JS + API)
|
|
35
|
-
- **π
|
|
35
|
+
- **π 87 DeFi Protocols** - Alex, Velar, Bitflow, USDCx bridging, multi-DEX routing (Clarity + JS + API)
|
|
36
36
|
- **π¨ 30 NFT Operations** - SIP-009, minting, marketplace patterns (Clarity + JS + API)
|
|
37
37
|
- **π 40 Token Operations** - SIP-010 fungible tokens, DeFi integrations (Clarity + JS + API)
|
|
38
38
|
- **π 14 Authentication** - Wallet auth, JWT, sessions, token-gating (**No Gaia** - deprecated) (Clarity + JS + API)
|
|
@@ -49,6 +49,8 @@ An intelligent AI assistant that provides development guidance for Clarity smart
|
|
|
49
49
|
- Generate Clarity smart contracts from natural language
|
|
50
50
|
- Audit contracts for security vulnerabilities
|
|
51
51
|
- Integrate with DeFi protocols (swaps, liquidity, lending)
|
|
52
|
+
- **Bridge USDC from Ethereum to Stacks (USDCx)**
|
|
53
|
+
- **Swap USDCx across multiple DEXs (Bitflow, Alex, Velar)**
|
|
52
54
|
- Integrate Pyth Network oracle for price feeds
|
|
53
55
|
- Deploy to testnet/mainnet
|
|
54
56
|
- Build dApps with Stacks.js
|
|
@@ -136,6 +138,16 @@ Reference in chat:
|
|
|
136
138
|
"Show me a secure token transfer with post-conditions"
|
|
137
139
|
```
|
|
138
140
|
|
|
141
|
+
**USDCx Bridging & Multi-DEX (New in v1.6.0):**
|
|
142
|
+
```
|
|
143
|
+
"How do I bridge USDC from Ethereum to Stacks?"
|
|
144
|
+
"Show me how to swap USDCx to STX on Bitflow"
|
|
145
|
+
"How do I get quotes from Alex and Bitflow SDKs?"
|
|
146
|
+
"Build a multi-token swap using Bitflow router"
|
|
147
|
+
"What are the contract addresses for USDCx on mainnet?"
|
|
148
|
+
"Show me a two-step swap pattern: USDCx -> STX -> ALEX"
|
|
149
|
+
```
|
|
150
|
+
|
|
139
151
|
**With Relationships:**
|
|
140
152
|
```
|
|
141
153
|
"What are the dependencies for implementing a token swap?"
|
|
@@ -310,9 +322,36 @@ Types, functions, control flow, arithmetic, comparisons, maps, tokens, STX opera
|
|
|
310
322
|
- Medium: Input validation, front-running
|
|
311
323
|
- Low: Code style, gas optimization
|
|
312
324
|
|
|
313
|
-
### DeFi Protocols (
|
|
325
|
+
### DeFi Protocols (87 entries)
|
|
314
326
|
Alex, Velar, Bitflow, Zest, StackingDAO, Boost, Faktory integration patterns
|
|
315
327
|
|
|
328
|
+
### USDCx Bridging & Multi-DEX (New in v1.6.0)
|
|
329
|
+
|
|
330
|
+
**Bridge Operations:**
|
|
331
|
+
- Deposit USDC from Ethereum β mint USDCx on Stacks
|
|
332
|
+
- Burn USDCx on Stacks β withdraw USDC on Ethereum
|
|
333
|
+
- Address encoding (Stacks β Ethereum)
|
|
334
|
+
- Bridge timing: ~15 min deposit, ~60 min withdrawal
|
|
335
|
+
|
|
336
|
+
**Multi-DEX Swap Routing:**
|
|
337
|
+
- Bitflow: `swap-helper-a/b/c` for 2/3/4-hop swaps
|
|
338
|
+
- Alex: `swap-helper`, `swap-helper-a` with factors
|
|
339
|
+
- Velar: `path-apply` with tuple-based routing
|
|
340
|
+
- Stableswap: stSTXβSTX, USDHβUSDCx
|
|
341
|
+
|
|
342
|
+
**Quote APIs:**
|
|
343
|
+
- Bitflow SDK: `getQuoteForRoute()`
|
|
344
|
+
- Alex SDK: `getAmountTo()` with Currency enums
|
|
345
|
+
- Fallback rates and price caching
|
|
346
|
+
|
|
347
|
+
**Contract Addresses:**
|
|
348
|
+
| Contract | Address |
|
|
349
|
+
|----------|---------|
|
|
350
|
+
| USDCx | `SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx` |
|
|
351
|
+
| Bitflow Router | `SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2` |
|
|
352
|
+
| Alex AMM | `SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01` |
|
|
353
|
+
| Velar | `SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.path-apply_staging` |
|
|
354
|
+
|
|
316
355
|
### Stacks.js (30 entries)
|
|
317
356
|
Wallet connection, transactions, Clarity values, API calls, post-conditions
|
|
318
357
|
|
|
@@ -366,6 +405,8 @@ node --version
|
|
|
366
405
|
- [Velar DEX](https://app.velar.co)
|
|
367
406
|
- [Bitflow DEX](https://app.bitflow.finance)
|
|
368
407
|
- [Zest Protocol](https://www.zestprotocol.com)
|
|
408
|
+
- [USDCx Bridge Docs](https://docs.stacks.co/more-guides/bridging-usdcx)
|
|
409
|
+
- [Circle xReserve](https://www.circle.com)
|
|
369
410
|
|
|
370
411
|
## π€ Contributing
|
|
371
412
|
|
|
@@ -397,6 +438,12 @@ Built for the Stacks community with:
|
|
|
397
438
|
|
|
398
439
|
## π― Roadmap
|
|
399
440
|
|
|
441
|
+
### Completed (v1.6.0) β
|
|
442
|
+
- [x] USDCx bridging from Ethereum (62 new entries)
|
|
443
|
+
- [x] Multi-DEX swap routing (Bitflow, Alex, Velar)
|
|
444
|
+
- [x] AMM quote API patterns (SDK integration)
|
|
445
|
+
- [x] 557+ total knowledge base entries
|
|
446
|
+
|
|
400
447
|
### Completed (v2.0) β
|
|
401
448
|
- [x] Multi-platform AI skill support (7 platforms)
|
|
402
449
|
- [x] 495+ knowledge base entries
|
|
@@ -24,3 +24,65 @@ id,language,protocol,category,name,description,code,imports_or_contract,notes
|
|
|
24
24
|
23,api,stackingdao,info,stackingdao-exchange-rate,"Get stSTX exchange rate","const response = await fetch('https://api.stackingdao.com/v1/info'); const info = await response.json(); const exchangeRate = info.stx_per_ststx","fetch or axios","Returns current STX/stSTX exchange rate and APY"
|
|
25
25
|
24,javascript,slippage,calculate-min-amount-out,"Calculate minimum output with slippage","function calculateMinOut(expectedAmount slippagePercent) { return Math.floor(expectedAmount * (1 - slippagePercent / 100)) }","None","Common slippage: 0.5-2%; use higher for volatile pairs"
|
|
26
26
|
25,api,aggregator,get-best-route,"Find best swap route across DEXs","const response = await fetch(`https://api.stacksswap.xyz/v1/route?from=${tokenIn}&to=${tokenOut}&amount=${amount}`); const route = await response.json(); console.log(route.path route.expectedOutput route.priceImpact)","fetch or axios","Aggregator finds optimal path across Alex Velar Bitflow"
|
|
27
|
+
26,clarity,usdcx,burn,burn-usdcx-to-eth,"Burn USDCx to withdraw to Ethereum","(contract-call? 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx-v1 burn u10000000 u0 0xa1404d9E7646b0112C49aE0296D6347C956D0867)","SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx-v1","Amount in micro-units (6 decimals); u0 = Ethereum domain; raw 20-byte ETH address"
|
|
28
|
+
27,clarity,usdcx,transfer,transfer-usdcx,"Transfer USDCx tokens","(contract-call? 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx transfer u10000000 tx-sender recipient none)","SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx","SIP-010 compliant; 6 decimals"
|
|
29
|
+
28,clarity,usdcx,read,get-usdcx-balance,"Get USDCx balance","(contract-call? 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx get-balance address)","SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx","Returns balance in micro-units (6 decimals)"
|
|
30
|
+
29,javascript,usdcx,deposit,bridge-usdc-to-stacks,"Deposit USDC from Ethereum to mint USDCx on Stacks","const approveTx = await walletClient.writeContract({ address: USDC_CONTRACT abi: ERC20_ABI functionName: 'approve' args: [X_RESERVE_CONTRACT amount] }); await waitForTransactionReceipt({ hash: approveTx }); const depositTx = await walletClient.writeContract({ address: X_RESERVE_CONTRACT abi: X_RESERVE_ABI functionName: 'depositToRemote' args: [amount 10003 encodedStacksAddress USDC_ADDRESS 0 '0x'] })","import { createWalletClient } from 'viem'; import { mainnet } from 'viem/chains'","Chain ID 10003 = Stacks mainnet; Stacks address must be encoded to bytes32"
|
|
31
|
+
30,javascript,usdcx,address,encode-stacks-address,"Encode Stacks address for Ethereum bridge","function encodeStacksAddress(stacksAddress) { const { version hash160 } = decodeStacksAddress(stacksAddress); const padding = new Uint8Array(11).fill(0); const versionByte = new Uint8Array([version]); const hashBytes = hexToBytes(hash160); return concat([padding versionByte hashBytes]) }","import { decodeStacksAddress } from '@stacks/transactions'; import { concat hexToBytes } from 'viem'","Left-pad 11 zero bytes + version byte + 20-byte hash160 = 32 bytes"
|
|
32
|
+
31,javascript,usdcx,address,format-eth-address,"Format Ethereum address for USDCx burn","function formatEthAddressAsBuffer(ethAddress) { const clean = ethAddress.toLowerCase().replace(/^0x/ ''); const buffer = new Uint8Array(20); for (let i = 0; i < 20; i++) { buffer[i] = parseInt(clean.slice(i * 2 i * 2 + 2) 16) } return buffer }","None","Returns raw 20-byte buffer; do NOT pad to 32 bytes"
|
|
33
|
+
32,javascript,usdcx,withdraw,build-usdcx-burn-tx,"Build USDCx burn transaction for withdrawal to ETH","const functionArgs = [Cl.uint(amount) Cl.uint(0) Cl.buffer(formatEthAddressAsBuffer(ethAddress))]; const postCondition = Pc.principal(sender).willSendEq(amount).ft('SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx' 'usdcx'); const txOptions = { contractAddress: 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE' contractName: 'usdcx-v1' functionName: 'burn' functionArgs postConditions: [postCondition] network: 'mainnet' }","import { Cl Pc makeContractCall } from '@stacks/transactions'","Min withdrawal: 4.80 USDCx; u0 = Ethereum domain; ~60 min settlement"
|
|
34
|
+
33,javascript,usdcx,balance,get-usdcx-balance,"Get USDCx balance via Hiro API","const response = await fetch(`https://api.hiro.so/extended/v1/address/${address}/balances`); const balances = await response.json(); const usdcx = balances.fungible_tokens['SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx::usdcx']; return usdcx ? BigInt(usdcx.balance) : 0n","fetch","Returns balance in micro-units; divide by 1e6 for display"
|
|
35
|
+
34,javascript,usdcx,conversion,convert-usdcx-decimals,"Convert USDCx between display and micro-units","function toMicroUsdcx(amount) { const [whole decimal = ''] = amount.toString().split('.'); return BigInt(whole + decimal.padEnd(6 '0').slice(0 6)) } function fromMicroUsdcx(micro) { const str = micro.toString().padStart(7 '0'); return str.slice(0 -6) + '.' + str.slice(-6) }","None","6 decimals: 100.50 USDC = 100500000 micro-units"
|
|
36
|
+
35,javascript,bitflow,swap,swap-usdcx-for-token,"Swap USDCx for other tokens via Bitflow","const path = listCV([contractPrincipalCV('SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE' 'usdcx') contractPrincipalCV(tokenOutAddr tokenOutName)]); const txOptions = { contractAddress: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR' contractName: 'router-stableswap-xyk-multihop-v-1-2' functionName: 'swap-x-for-y' functionArgs: [uintCV(amountIn) uintCV(minAmountOut) path] network: 'mainnet' }","import { makeContractCall uintCV listCV contractPrincipalCV } from '@stacks/transactions'","Bitflow router handles multi-hop; set slippage 0.5-2%"
|
|
37
|
+
36,clarity,bitflow,swap,bitflow-usdcx-swap-call,"Swap USDCx via Bitflow router","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2 swap-x-for-y u10000000 u9500000 (list 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token))","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2","Amount-in first; min-amount-out second; path is token list"
|
|
38
|
+
37,api,usdcx,contracts,usdcx-contract-addresses,"USDCx contract addresses","const USDCX_CONTRACTS = { mainnet: { token: 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx' protocol: 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx-v1' } testnet: { token: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.usdcx' protocol: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.usdcx-v1' } }; const ETH_CONTRACTS = { mainnet: { usdc: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' xReserve: '0x8888888199b2Df864bf678259607d6D5EBb4e3Ce' } sepolia: { usdc: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' xReserve: '0x008888878f94C0d87defdf0B07f46B93C1934442' } }","Reference","USDCx uses Circle xReserve protocol for cross-chain bridging"
|
|
39
|
+
38,api,usdcx,info,bridge-timing-costs,"USDCx bridge timing and costs","const BRIDGE_INFO = { deposit: { time: '~15 minutes' minAmount: 10 fee: 'ETH gas only (~$0.50 covered by Circle)' } withdrawal: { time: '~60 minutes mainnet / ~25 min testnet' minAmount: 4.80 fee: 'STX gas + $4.80 fixed' limit: '50 burn intents per tx (max 10 per batch x 5 batches)' } }","Reference","Deposits: ETH -> Stacks auto-mint; Withdrawals: burn on Stacks -> release on ETH"
|
|
40
|
+
39,javascript,usdcx,monitor,monitor-bridge-deposit,"Monitor bridge deposit status","async function monitorDeposit(ethTxHash onStatus) { onStatus('eth_confirming'); await waitForTransactionReceipt({ hash: ethTxHash confirmations: 12 }); onStatus('attesting'); await sleep(60000); onStatus('minting'); const stacksTx = await pollForStacksMint(ethTxHash); onStatus('completed'); return stacksTx }","import { waitForTransactionReceipt } from 'viem'","12 ETH confirmations required; Circle attestation automatic"
|
|
41
|
+
40,javascript,bitflow,tokens,bitflow-token-ids,"Bitflow token identifiers for USDCx swaps","const BITFLOW_TOKENS = { USDCx: { address: 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE' name: 'usdcx' id: 'token-usdcx' decimals: 6 } sBTC: { address: 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4' name: 'sbtc-token' id: 'token-sbtc' decimals: 8 } wSTX: { address: 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1' name: 'wstx' id: 'token-wstx' decimals: 6 } stSTX: { address: 'SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG' name: 'ststx-token' id: 'token-ststx' decimals: 6 } }","Reference","Use with Bitflow router for USDCx swaps"
|
|
42
|
+
41,clarity,bitflow,traits,bitflow-trait-imports,"Import Bitflow traits for contract integration","(use-trait ft-trait 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.sip-010-trait-ft-standard-v-1-1.sip-010-trait) (use-trait stableswap-pool-trait 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-trait-v-1-4.stableswap-pool-trait) (use-trait xyk-pool-trait 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-trait-v-1-2.xyk-pool-trait) (use-trait stableswap-pool-trait-v12 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-trait-v-1-2.stableswap-pool-trait)","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR","Required traits for Bitflow router contract calls"
|
|
43
|
+
42,clarity,bitflow,swap,bitflow-swap-helper-a,"Bitflow swap-helper-a (1 stableswap + 1 xyk pool)","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2 swap-helper-a amount min-out none false { a: ss-token-a b: ss-token-b } { a: ss-pool } { a: xyk-token-a b: xyk-token-b } { a: xyk-pool })","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2","2-hop swap: stableswap then XYK; false=forward true=reverse"
|
|
44
|
+
43,clarity,bitflow,swap,bitflow-swap-helper-b,"Bitflow swap-helper-b (1 stableswap + 2 xyk pools)","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2 swap-helper-b amount min-out none false { a: ss-token-a b: ss-token-b } { a: ss-pool } { a: xyk-token-a b: xyk-token-b c: xyk-token-c d: xyk-token-d } { a: xyk-pool-a b: xyk-pool-b })","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2","3-hop swap: stableswap then 2 XYK pools"
|
|
45
|
+
44,clarity,bitflow,swap,bitflow-swap-helper-c,"Bitflow swap-helper-c (1 stableswap + 3 xyk pools)","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2 swap-helper-c amount min-out none false { a: ss-token-a b: ss-token-b } { a: ss-pool } { a: xyk-token-a b: xyk-token-b c: xyk-token-c d: xyk-token-d e: xyk-token-e f: xyk-token-f } { a: xyk-pool-a b: xyk-pool-b c: xyk-pool-c })","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2","4-hop swap: stableswap then 3 XYK pools; for deep liquidity paths"
|
|
46
|
+
45,clarity,bitflow,swap,bitflow-usdcx-to-stx,"Swap USDCx to STX via Bitflow","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-v-1-5 swap-helper-a amount min-out none false { a: 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx b: 'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc } { a: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-aeusdc-usdcx-v-1-1 } { a: 'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc b: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.token-stx-v-1-1 } { a: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-stx-aeusdc-v-1-1 })","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-v-1-5","Route: USDCx -> aeUSDC (stableswap) -> STX (xyk)"
|
|
47
|
+
46,clarity,bitflow,swap,bitflow-stx-to-usdcx,"Swap STX to USDCx via Bitflow (reversed)","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-v-1-5 swap-helper-a amount min-out none true { a: 'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc b: 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx } { a: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-aeusdc-usdcx-v-1-1 } { a: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.token-stx-v-1-1 b: 'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc } { a: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-stx-aeusdc-v-1-1 })","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-v-1-5","Set true for reverse direction; Route: STX -> aeUSDC -> USDCx"
|
|
48
|
+
47,clarity,bitflow,swap,bitflow-usdcx-to-sbtc,"Swap USDCx to sBTC via Bitflow","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2 swap-helper-b amount min-out none false { a: 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx b: 'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc } { a: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-aeusdc-usdcx-v-1-1 } { a: 'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc b: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.token-stx-v-1-2 c: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.token-stx-v-1-2 d: 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token } { a: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-stx-aeusdc-v-1-2 b: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-sbtc-stx-v-1-1 })","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2","Route: USDCx -> aeUSDC -> STX -> sBTC"
|
|
49
|
+
48,clarity,alex,swap,alex-swap-helper-a,"Alex AMM swap-helper-a (multi-hop with factors)","(contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01 swap-helper-a 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wstx-v2 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wcorgi 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex u100000000 u100000000 amount (some min-out))","SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01","3-hop via intermediate token; factors are 1e8 for price ratios"
|
|
50
|
+
49,clarity,alex,swap,alex-swap-helper,"Alex AMM swap-helper (direct swap)","(contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01 swap-helper 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wstx-v2 u100000000 amount (some min-out))","SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01","Direct token pair swap; factor u100000000 = 1e8"
|
|
51
|
+
50,clarity,velar,swap,velar-path-apply,"Velar path-apply swap (tuple-based routing)","(contract-call? 'SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.path-apply_staging apply (list { a: \"u\" b: 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.velar-stx c: u21 d: 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx e: 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.velar-token f: false }) amount (some token1) (some token2) none none none (some 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-share-fee-to) none none none none none none none none none none none none none none none none none none none none)","SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.path-apply_staging","a=pool-type b=pool c=pool-id d=token-in e=token-out f=reverse"
|
|
52
|
+
51,clarity,velar,swap,velar-stx-to-velar,"Swap STX to VELAR token via Velar","(contract-call? 'SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.path-apply_staging apply (list { a: \"u\" b: 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.velar-stx c: u21 d: 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx e: 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.velar-token f: false }) stx-amount (some 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx) (some 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.velar-token) none none none (some 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-share-fee-to) none none none none none none none none none none none none none none none none none none none none)","SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.path-apply_staging","Use f: true for reverse (VELAR->STX); pool u21 is STX-VELAR"
|
|
53
|
+
52,clarity,bitflow,stableswap,stableswap-ststx-to-stx,"Swap stSTX to STX via stableswap","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-swap-helper-v-1-5 swap-helper-a amount min-out none { a: 'SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststx-token b: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.token-stx-v-1-2 } { a: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-stx-ststx-v-1-4 })","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-swap-helper-v-1-5","Stableswap-only helper for correlated assets"
|
|
54
|
+
53,clarity,bitflow,stableswap,stableswap-usdh-to-usdcx,"Swap USDH to USDCx via stableswap","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-swap-helper-v-1-5 swap-helper-a amount min-out none { a: 'SPN5AKG35QZSK2M8GAMR4AFX45659RJHDW353HSG.usdh-token-v1 b: 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx } { a: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-usdh-usdcx-v-1-1 })","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-swap-helper-v-1-5","Stablecoin to stablecoin swap with low slippage"
|
|
55
|
+
54,clarity,multi-dex,pattern,two-step-swap-pattern,"Two-step swap pattern (USDCx -> STX -> Target)","(let ((stx-received (unwrap! (contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-v-1-5 swap-helper-a usdcx-amount stx-min-out none false { a: usdcx b: aeusdc } { a: stableswap-pool } { a: aeusdc b: stx } { a: xyk-pool }) ERR-SWAP-FAILED)) (contract-call? target-dex swap stx-received target-min-out))","Pattern","Capture intermediate amount in let binding; use for cross-DEX routes"
|
|
56
|
+
55,clarity,multi-dex,pattern,conditional-swap,"Conditional swap execution pattern","(if (> amount u0) (begin (unwrap! (contract-call? dex swap amount min-out ...) ERR-SWAP-FAILED) true) true)","Pattern","Skip swap if amount is zero; useful for multi-token strategies"
|
|
57
|
+
56,api,multi-dex,contracts,mainnet-dex-routers,"Mainnet DEX router contract addresses","const DEX_ROUTERS = { bitflow_v12: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-2' bitflow_v15: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-5' bitflow_simple: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-v-1-5' bitflow_stableswap: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-swap-helper-v-1-5' alex_amm: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01' velar_path: 'SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.path-apply_staging' }","Reference","Production mainnet router addresses"
|
|
58
|
+
57,api,multi-dex,contracts,mainnet-pool-addresses,"Mainnet liquidity pool addresses","const POOLS = { usdcx_aeusdc: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-aeusdc-usdcx-v-1-1' stx_aeusdc_v1: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-stx-aeusdc-v-1-1' stx_aeusdc_v2: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-stx-aeusdc-v-1-2' sbtc_stx: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-sbtc-stx-v-1-1' stx_ststx: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-stx-ststx-v-1-4' usdh_usdcx: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-usdh-usdcx-v-1-1' welsh_stx: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-welsh-stx-v-1-1' sbtc_dog: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-sbtc-dog-v-1-1' sbtc_droid: 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-pool-sbtc-droid-v-1-1' }","Reference","Bitflow liquidity pools for common pairs"
|
|
59
|
+
58,api,multi-dex,contracts,mainnet-token-addresses,"Mainnet token contract addresses","const TOKENS = { usdcx: 'SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx' aeusdc: 'SP3Y2ZSH8P7D50B0VBTSX11S7XSG24M1VB9YFQA4K.token-aeusdc' sbtc: 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token' ststx: 'SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststx-token' usdh: 'SPN5AKG35QZSK2M8GAMR4AFX45659RJHDW353HSG.usdh-token-v1' welsh: 'SP3NE50GEXFG9SZGTT51P40X2CKYSZ5CC4ZTZ7A2G.welshcorgicoin-token' leo: 'SP1AY6K3PQV5MRT6R4S671NWW2FRVPKM0BR162CT6.leo-token' dog: 'SP14NS8MVBRHXMM96BQY0727AJ59SWPV7RMHC0NCG.pontis-bridge-DOG' alex: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex' velar: 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.velar-token' wstx_alex: 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wstx-v2' wstx_velar: 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx' }","Reference","Production token contract addresses"
|
|
60
|
+
59,clarity,bitflow,swap,bitflow-v15-swap-helper-a,"Bitflow v1.5 swap-helper-a (ss14 + ss12 + xyk)","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-5 swap-helper-a amount min-out none false { a: ss14-token-a b: ss14-token-b } { a: ss14-pool } { a: ss12-token-a b: ss12-token-b } { a: ss12-pool } { a: xyk-token-a b: xyk-token-b } { a: xyk-pool })","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-5","v1.5 router supports both stableswap v1.4 and v1.2 pools"
|
|
61
|
+
60,clarity,bitflow,swap,bitflow-v15-stableswap-only,"Bitflow v1.5 swap-helper-c (stableswap only)","(contract-call? 'SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-5 swap-helper-c amount min-out none false { a: ss14-token-a b: ss14-token-b } { a: ss14-pool } { a: ss12-token-a b: ss12-token-b } { a: ss12-pool })","SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.router-stableswap-xyk-multihop-v-1-5","For stablecoin-only routes; lower slippage"
|
|
62
|
+
61,clarity,velar,info,velar-path-tuple-format,"Velar path tuple structure","{ a: pool-type b: pool-contract c: pool-id d: token-in e: token-out f: is-reverse }","SP20X3DC5R091J8B6YPQT638J8NR1W83KN6TN5BJY.path-apply_staging","a='u' for univ2; c=pool id (u21 for STX-VELAR); f=true reverses direction"
|
|
63
|
+
62,clarity,alex,info,alex-token-factors,"Alex AMM factor values","u100000000","SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01","Factors are 1e8 (100000000); maintain price ratios in weighted pools"
|
|
64
|
+
63,javascript,bitflow,swap,build-bitflow-swap-args,"Build Bitflow swap function arguments","const buildBitflowSwapArgs = (amount minOut ssTokens ssPool xykTokens xykPool) => [uintCV(amount) uintCV(minOut) noneCV() boolCV(false) tupleCV({ a: contractPrincipalCV(...ssTokens.a) b: contractPrincipalCV(...ssTokens.b) }) tupleCV({ a: contractPrincipalCV(...ssPool) }) tupleCV({ a: contractPrincipalCV(...xykTokens.a) b: contractPrincipalCV(...xykTokens.b) }) tupleCV({ a: contractPrincipalCV(...xykPool) })]","import { uintCV noneCV boolCV tupleCV contractPrincipalCV } from '@stacks/transactions'","For swap-helper-a; pass token addresses as [address name] arrays"
|
|
65
|
+
64,javascript,bitflow,swap,bitflow-swap-helper-b-args,"Build Bitflow swap-helper-b arguments (3-hop)","const args = [uintCV(amount) uintCV(minOut) noneCV() boolCV(false) tupleCV({ a: cv(ssTokenA) b: cv(ssTokenB) }) tupleCV({ a: cv(ssPool) }) tupleCV({ a: cv(xykTokenA) b: cv(xykTokenB) c: cv(xykTokenC) d: cv(xykTokenD) }) tupleCV({ a: cv(xykPoolA) b: cv(xykPoolB) })]","import { uintCV noneCV boolCV tupleCV contractPrincipalCV as cv } from '@stacks/transactions'","3-hop: stableswap + 2 XYK pools; use for USDCx->sBTC routes"
|
|
66
|
+
65,javascript,alex,swap,alex-sdk-quote,"Get swap quote from Alex SDK","const alexSDK = new AlexSDK(); const tokenInfo = await alexSDK.fetchTokenInfo(tokenId); const fromAmount = BigInt(Math.floor(amount * Math.pow(10 decimals))); const amountTo = await alexSDK.getAmountTo(Currency.STX fromAmount tokenInfo.id); return { amountOut: Number(amountTo) / Math.pow(10 outputDecimals) route: tokenInfo }","import AlexSDK { Currency } from 'alex-sdk'","Currency.STX for native STX; fetchTokenInfo for other tokens"
|
|
67
|
+
66,javascript,velar,swap,velar-sdk-swap,"Build Velar swap via SDK","const velarSDK = new VelarSDK(); const inToken = fromToken === 'STX' ? 'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.wstx' : fromContractId; const swapInstance = await velarSDK.getSwapInstance({ account: senderAddress inToken outToken: toContractId }); const swapOptions = await swapInstance.swap({ amount slippage: 1.0 })","import VelarSDK from '@velar/sdk'","Velar uses wSTX not native STX; SDK handles routing"
|
|
68
|
+
67,javascript,multi-dex,quote,batch-quote-strategy,"Batch quote fetching for portfolio strategies","const getStrategyQuotes = async (amount allocations) => { const quotes = Object.entries(allocations).filter(([_ pct]) => pct > 0).map(([token pct]) => ({ toToken: token amount: amount * pct / 100 })); const responses = await Promise.all(quotes.map(q => fetch('/api/quote' { method: 'POST' body: JSON.stringify({ fromToken: 'USDCx' ...q }) }))); return Promise.all(responses.map(r => r.json())) }","fetch","Fetch quotes in parallel for portfolio allocation"
|
|
69
|
+
68,javascript,multi-dex,slippage,calculate-min-output,"Calculate min output with slippage","const calculateMinOutput = (expectedAmount slippagePct = 1) => { const slippageFactor = 1 - (slippagePct / 100); return Math.floor(expectedAmount * slippageFactor) }","None","Default 1% slippage; use 2-3% for volatile pairs"
|
|
70
|
+
69,javascript,bitflow,contracts,bitflow-contract-constants,"Bitflow contract address constants","const BITFLOW = { ROUTER_V12: ['SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR' 'router-stableswap-xyk-multihop-v-1-2'] ROUTER_V15: ['SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR' 'router-stableswap-xyk-multihop-v-1-5'] SS_USDCX_AEUSDC: ['SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR' 'stableswap-pool-aeusdc-usdcx-v-1-1'] XYK_STX_AEUSDC: ['SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR' 'xyk-pool-stx-aeusdc-v-1-2'] XYK_SBTC_STX: ['SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR' 'xyk-pool-sbtc-stx-v-1-1'] }","Reference","Store as [address name] tuples for contractPrincipalCV"
|
|
71
|
+
70,javascript,multi-dex,tx,build-strategy-investment-tx,"Build multi-token investment transaction","const buildInvestmentTx = async (strategy amount quotes) => { const args = buildStrategyArgs(strategy amount quotes); return makeContractCall({ contractAddress: CONTRACT_ADDRESS contractName: CONTRACT_NAME functionName: `invest-${strategy}` functionArgs: args network: 'mainnet' postConditions: buildPostConditions(amount) }) }","import { makeContractCall } from '@stacks/transactions'","Strategy names: bitcoin-maxi meme-hunter defi-yield stacks-believer"
|
|
72
|
+
71,javascript,usdcx,conversion,micro-units-helpers,"USDCx micro-unit conversion helpers","const toMicroUnits = (amount decimals = 6) => Math.floor(amount * Math.pow(10 decimals)); const fromMicroUnits = (micro decimals = 6) => micro / Math.pow(10 decimals); const formatUsdcx = (micro) => `$${fromMicroUnits(micro).toLocaleString('en-US' { minimumFractionDigits: 2 maximumFractionDigits: 2 })}`","None","USDCx has 6 decimals; 1 USDC = 1000000 micro-units"
|
|
73
|
+
72,javascript,bitflow,quote,bitflow-sdk-init,"Initialize Bitflow SDK for quotes","const bitflowSDK = new BitflowSDK({ BITFLOW_API_HOST: 'https://api.bitflowapis.finance/' BITFLOW_API_KEY: process.env.BITFLOW_API_KEY || '' READONLY_CALL_API_HOST: 'https://node.bitflowapis.finance/' READONLY_CALL_API_KEY: process.env.BITFLOW_READONLY_API_KEY || '' KEEPER_API_HOST: 'https://keeper.bitflowapis.finance/' KEEPER_API_KEY: process.env.BITFLOW_API_KEY || '' })","import { BitflowSDK } from '@bitflowlabs/core-sdk'","Requires API keys from Bitflow; READONLY for quotes KEEPER for execution"
|
|
74
|
+
73,javascript,bitflow,quote,bitflow-get-quote,"Get swap quote from Bitflow SDK","const quote = await bitflowSDK.getQuoteForRoute('token-aeusdc' bitflowTokenId amount); let amountOutMicro; if (typeof quote === 'object' && 'quote' in quote) { amountOutMicro = Number(quote.quote) } else if (typeof quote === 'bigint') { amountOutMicro = Number(quote) } else { amountOutMicro = quote }","import { BitflowSDK } from '@bitflowlabs/core-sdk'","Amount is human-readable (e.g. 100 for $100); returns micro-units"
|
|
75
|
+
74,javascript,bitflow,quote,bitflow-token-ids,"Bitflow SDK token identifiers for routing","const BITFLOW_TOKEN_IDS = { STX: 'token-stx-auto' sBTC: 'token-sbtc-auto' USDH: 'token-usdh-auto' stSTX: 'token-ststx-auto' WELSH: 'token-welsh-auto' LEO: 'token-leo-auto' DOG: 'token-dog-auto' DROID: 'token-DROID-auto' VELAR: 'token-velar' }","Reference","Use 'token-aeusdc' as source (Bitflow doesn't support USDCx directly)"
|
|
76
|
+
75,javascript,alex,quote,alex-sdk-init,"Initialize Alex SDK for quotes","const alexSDK = new AlexSDK()","import { AlexSDK Currency TokenInfo } from 'alex-sdk'","No config needed; SDK handles API connections"
|
|
77
|
+
76,javascript,alex,quote,alex-get-quote,"Get swap quote from Alex SDK","const amountInMicro = BigInt(Math.floor(amount * 100_000_000)); const aUSD = await alexSDK.fetchTokenInfo('SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-susdt::aUSD'); const amountOut = await alexSDK.getAmountTo(aUSD.id amountInMicro Currency.ALEX); const amountOutHuman = Number(amountOut) / 100_000_000","import { AlexSDK Currency TokenInfo } from 'alex-sdk'","All Alex tokens use 8 decimals; aUSD is the USDC equivalent"
|
|
78
|
+
77,javascript,alex,quote,alex-reverse-quote,"Get reverse quote from Alex (token -> USD)","const amountInMicro = BigInt(Math.floor(amount * 100_000_000)); const aUSD = await alexSDK.fetchTokenInfo('SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-susdt::aUSD'); const amountOut = await alexSDK.getAmountTo(Currency.ALEX amountInMicro aUSD.id); const usdValue = Number(amountOut) / 100_000_000","import { AlexSDK Currency } from 'alex-sdk'","Reverse: swap ALEX for aUSD; useful for sell quotes"
|
|
79
|
+
78,javascript,bitflow,quote,bitflow-reverse-quote,"Get reverse quote from Bitflow (token -> USDC)","const quote = await bitflowSDK.getQuoteForRoute(bitflowTokenId 'token-aeusdc' amount); const amountOutMicro = typeof quote === 'object' ? Number(quote.quote) : Number(quote); const usdValue = amountOutMicro / 1_000_000","import { BitflowSDK } from '@bitflowlabs/core-sdk'","Reverse route for selling; aeUSDC has 6 decimals"
|
|
80
|
+
79,javascript,multi-dex,quote,token-decimals-map,"Token decimal places for conversions","const TOKEN_DECIMALS = { STX: 6 sBTC: 8 USDH: 8 stSTX: 6 WELSH: 6 LEO: 6 DOG: 8 DROID: 6 ALEX: 8 VELAR: 6 USDCx: 6 }","Reference","Critical for micro-unit conversions; sBTC/DOG/ALEX use 8 decimals"
|
|
81
|
+
80,javascript,multi-dex,quote,normalize-token-symbol,"Normalize token symbol for lookups","function normalizeTokenSymbol(symbol) { const upper = symbol.toUpperCase(); const map = { 'SBTC': 'sBTC' 'STSTX': 'stSTX' 'USDCX': 'USDCx' }; return map[upper] || symbol }","None","Strategy uses lowercase but lookups need mixed case"
|
|
82
|
+
81,javascript,multi-dex,quote,unified-quote-function,"Unified quote function with fallback","async function getQuote(fromToken toToken amount) { const normalized = normalizeTokenSymbol(toToken); if (normalized === 'ALEX') { const alexQuote = await getAlexQuote(toToken amount); if (alexQuote) return alexQuote } const bitflowQuote = await getBitflowQuote(toToken amount); if (bitflowQuote) return bitflowQuote; return getFallbackQuote(toToken amount) }","None","Try Alex for ALEX token; Bitflow for others; fallback if SDK fails"
|
|
83
|
+
82,javascript,multi-dex,quote,fallback-quote-calculation,"Calculate fallback quote from price","async function getFallbackQuote(toToken amount) { const decimals = TOKEN_DECIMALS[toToken] || 6; const price = await getTokenPrice(toToken); const rate = price > 0 ? (1 / price) : FALLBACK_RATES[toToken]; const amountOut = Math.floor(amount * rate * Math.pow(10 decimals) * 0.97); return { amountOut source: 'fallback' } }","None","3% slippage buffer; rate = tokens per $1 = 1/price"
|
|
84
|
+
83,javascript,multi-dex,quote,batch-quote-endpoint,"Batch quote API endpoint","export async function PUT(request) { const { quotes } = await request.json(); const results = []; let totalUsdValue = 0; for (const { fromToken = 'USDCx' toToken amount } of quotes) { const quote = await getQuote(fromToken toToken amount); results.push(quote); totalUsdValue += quote.usdValue } return NextResponse.json({ success: true results totalUsdValue }) }","import { NextResponse } from 'next/server'","Process quotes sequentially to avoid rate limiting"
|
|
85
|
+
84,javascript,multi-dex,quote,price-cache-pattern,"Price caching with TTL","let pricesCache = null; const CACHE_DURATION = 60 * 1000; async function fetchRealPrices() { const now = Date.now(); if (pricesCache && now - pricesCache.timestamp < CACHE_DURATION) { return pricesCache.data } const response = await fetch('/api/token-prices'); const data = await response.json(); pricesCache = { data: prices timestamp: now }; return prices }","None","1 minute cache; prevents excessive API calls"
|
|
86
|
+
85,api,multi-dex,quote,quote-api-endpoints,"Quote API endpoint structure","POST /api/quote { fromToken: 'USDCx' toToken: 'STX' amount: 100 } -> { success: true quote: { amountIn amountOut amountOutFormatted usdValue price source } }; PUT /api/quote { quotes: [...] } -> { success: true results: [...] totalUsdValue }; GET /api/quote?fromToken=STX&amount=10 -> reverse quote","REST API","POST=single quote PUT=batch quotes GET=reverse quote (sell)"
|
|
87
|
+
86,api,bitflow,quote,bitflow-api-hosts,"Bitflow API endpoints","const BITFLOW_HOSTS = { api: 'https://api.bitflowapis.finance/' node: 'https://node.bitflowapis.finance/' keeper: 'https://keeper.bitflowapis.finance/' }","Reference","api=general node=readonly-calls keeper=execution"
|
|
88
|
+
87,javascript,multi-dex,quote,quote-result-interface,"Quote result TypeScript interface","interface QuoteResult { fromToken: string toToken: string amountIn: number amountOut: number amountOutFormatted: string usdValue: number price: number source: 'bitflow' | 'alex' | 'fallback' priceImpact?: number }","TypeScript","Standard quote response format across all AMMs"
|