# SyncSwap SDK

SyncSwap SDK is a TypeScript library that provides access to SyncSwap's decentralized exchange functionality on multiple networks including Sophon, zkSync, Linea, and Scroll.

## Installation

```bash
npm install @syncswap/sdk
```

## Getting Started

```typescript
import SyncSwapSDK from "@syncswap/sdk";

const sdk = new SyncSwapSDK({ network: "sophonMainnet" });
await sdk.initialize(signer);
```

## Basic Swap Example

```typescript
import SyncSwapSDK from "@syncswap/sdk";
import { BigNumber } from "ethers";

const sdk = new SyncSwapSDK({ network: "sophonMainnet" });
await sdk.initialize(signer);

const tokenIn = "0x..."; // USDC address
const tokenOut = "0x..."; // ETH address  
const amountIn = BigNumber.from("1000000"); // Amount to swap
const account = await signer.getAddress();

// Get route data
const routePools = await sdk.fetchSyncSwapRouteData(tokenIn, tokenOut, account);

// Calculate best route
const route = await sdk.calculateSyncSwapRoute(routePools, tokenIn, tokenOut, amountIn);

// Try permit for gasless approval
const permitSignature = await sdk.signPermit(tokenIn, amountIn);

// Execute swap
const swapTx = await sdk.swapExactInput(route, permitSignature, account);
const tx = await signer.sendTransaction(swapTx);
```

## Token Management

```typescript
// Get all token information (no network parameter needed)
const allTokens = sdk.getAllTokens();
const verifiedTokens = sdk.getVerifiedTokens();
const indexedTokens = sdk.getIndexedTokens();

// Find specific tokens
const usdcToken = sdk.getTokenBySymbol("USDC");
const tokenByAddress = sdk.getTokenByAddress("0x...");

// Check token status
const isVerified = sdk.isTokenVerified("0x...");
const isIndexed = sdk.isTokenIndexed("0x...");

// Get network-specific addresses
const wethAddress = sdk.getWETHAddress();
const routeTokens = sdk.getRouteTokens();
```

## Advanced Configuration

You can configure the SDK with various options:

```typescript
const sdk = new SyncSwapSDK({
  network: "sophonMainnet", // Network name
  allowUniswapV3Pools: true, // Enable Uniswap V3 style pools
  aquaPoolOnly: false, // Only use Aqua pools
  enableHops: true, // Enable multi-hop swaps
  enableSplits: true, // Enable split routes
  slidePage: "auto", // Slippage configuration
});
```

## Supported Networks

- Sophon Mainnet (`sophonMainnet`)
- zkSync Mainnet (`zkSyncMainnet`)
- Linea Mainnet (`lineaMainnet`)
- Scroll Mainnet (`scrollMainnet`)
- Sophon Testnet (`sophonTestnet`)
- zkSync Testnet (`zkSyncTestnet`)

## API Reference

For complete working examples, please see [`example/index.ts`](./example/index.ts).

### Key Methods

- `initialize(provider)` - Set up SDK with provider/signer
- `fetchSyncSwapRouteData(tokenA, tokenB, userAccount?, routeTokens?)` - Get route pool data
- `calculateSyncSwapRoute(routePools, tokenIn, tokenOut, amountIn)` - Calculate optimal swap route
- `getTokenPermitData(tokenAddress)` - Check permit support (cached)
- `signPermit(tokenAddress, amount, spender?, deadline?)` - Create approval signatures
- `swapExactInput(route, signature, to)` - Execute token swaps
- `getAllTokens()` - Get all registered tokens
- `getTokenByAddress(address)` - Find token by address  
- `getTokenBySymbol(symbol)` - Find token by symbol
- `getWETHAddress()` - Get wrapped ETH address for current network
- `getRouteTokens()` - Get route tokens for current network

## License

ISC
