# Aspens SDK Examples

## Quickstart

The core trading workflow in five steps: **connect, check balances, deposit, trade, withdraw**.

### Using the CLI

```bash
# 1. Connect & check status
aspens-cli status

# 2. View balances
aspens-cli balance

# 3. Deposit tokens (network, token symbol, amount in smallest unit)
aspens-cli deposit anvil-1 USDC 1000000

# 4. Trade
aspens-cli buy-limit <MARKET_ID> 1.5 100.50               # limit buy: quantity, price
aspens-cli buy-limit <MARKET_ID> 1.5 100.50 --post-only   # maker-only: rejected if it would cross
aspens-cli sell-market <MARKET_ID> 0.5                    # market sell: quantity

# 5. Withdraw tokens back to your wallet
aspens-cli withdraw anvil-1 USDC 500000
```

### Using the Rust SDK

See [`quickstart.rs`](quickstart.rs) for a complete example showing how to use
the `aspens` library crate directly.

### Using the REPL

```bash
aspens-repl
aspens> config
aspens> balance
aspens> deposit anvil-1 USDC 1000000
aspens> buy-limit <MARKET_ID> 1.5 100.50
aspens> buy-limit <MARKET_ID> 1.5 100.50 --post-only
aspens> withdraw anvil-1 USDC 500000
aspens> quit
```

## Setup

1. Copy `.env.sample` to `.env` and fill in:
   ```
   ASPENS_MARKET_STACK_URL=http://localhost:50051
   TRADER_PRIVKEY=<64-char-hex-private-key>
   ```

2. Verify connectivity:
   ```bash
   aspens-cli status
   aspens-cli config
   ```

## Other Examples

- [`quickstart.rs`](quickstart.rs) — Full SDK workflow (connect, deposit, trade, withdraw)
- [`transaction_hash_example.rs`](transaction_hash_example.rs) — Working with transaction hashes from order responses

## Key Concepts

- **Deposit/withdraw amounts** are in the token's smallest unit (e.g., `1000000` = 1 USDC with 6 decimals)
- **Order quantities and prices** are human-readable strings (e.g., `"1.5"`, `"100.50"`) — the SDK converts to pair decimals automatically
- **Market IDs** follow the format: `chain_network::token_address::chain_network::token_address`
- **`--post-only`** on `buy-limit`/`sell-limit` rejects the order if it would cross at submission (no on-chain lock, no gas spent) — use it to guarantee maker-side execution
- Run `aspens-cli config` to see available chains, tokens, and markets
