UNPKG

@ferra-labs/clmm

Version:

SDK for concentrated liquidity market maker

237 lines (177 loc) 5.01 kB
# ferra-sdks A monorepo containing SDKs for CLMM (Concentrated Liquidity Market Maker), DLMM (Discrete Liquidity Market Maker) protocols, and DEX Aggregator. ## Packages - [`@ferra-labs/clmm`](./packages/clmm) - Concentrated Liquidity Market Maker SDK - [`@ferra-labs/dlmm`](./packages/dlmm) - Discrete Liquidity Market Maker SDK - [`@ferra-labs/aggregator`](./packages/aggregator) - DEX Aggregator SDK ### Package Installation ```bash # Install CLMM only npm install @ferra-labs/clmm # Install DLMM only npm install @ferra-labs/dlmm # Install Aggregator only npm install @ferra-labs/aggregator # Install all packages npm install @ferra-labs/clmm @ferra-labs/dlmm @ferra-labs/aggregator ``` ## Quick Start ```bash # Install dependencies pnpm install # Build all packages pnpm build # Run tests pnpm test # Lint code pnpm lint ``` ## Development ### Prerequisites - Node.js >= 16 - pnpm >= 8 ### Setup ```bash git clone <repository-url> cd ferra-sdks pnpm install pnpm prepare ``` ### Available Scripts - `pnpm build` - Build all packages - `pnpm dev` - Start development mode with watch - `pnpm lint` - Lint all packages - `pnpm test` - Run tests for all packages - `pnpm clean` - Clean build outputs - `pnpm changeset` - Create a changeset for releases ### Package-Specific Commands ```bash # Build specific package pnpm --filter @ferra-labs/clmm build pnpm --filter @ferra-labs/dlmm build pnpm --filter @ferra-labs/aggregator build # Run tests for specific package pnpm --filter @ferra-labs/clmm test pnpm --filter @ferra-labs/dlmm test pnpm --filter @ferra-labs/aggregator test # Start development mode for specific package pnpm --filter @ferra-labs/clmm dev pnpm --filter @ferra-labs/dlmm dev pnpm --filter @ferra-labs/aggregator dev ``` ### Publishing This project uses Changesets for version management and publishing. ```bash # 1. Create changeset pnpm changeset # 2. Version packages pnpm version-packages # 3. Publish pnpm release ``` ### Contributing 1. Fork the repository 2. Create your feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'feat: add amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## 🎯 Key Features of This Setup ### ✅ **Monorepo Benefits** - **Shared configuration** across packages - **Unified development workflow** - **Cross-package dependency management** - **Consistent tooling and standards** ### ✅ **Independent Publishing** - Each package can be **installed separately** - **Individual versioning** with changesets - **Selective updates** for users - **Modular architecture** ### ✅ **Developer Experience** - **Fast builds** with tsup - **Hot reloading** in development - **Automated linting** and formatting - **Git hooks** for quality control - **TypeScript support** throughout ### ✅ **Production Ready** - **Multiple output formats** (CJS + ESM) - **TypeScript declarations** - **Source maps** for debugging - **Tree shaking** support - **Minification** for production ### ✅ **Maintenance** - **Automated releases** with changesets - **Consistent code style** with prettier/eslint - **Commit message standards** with commitlint - **Pre-commit hooks** with husky --- ## 🔧 Next Steps 1. **Initialize the repository:** ```bash mkdir ferra-sdks cd ferra-sdks git init ``` 2. **Create the structure:** ```bash # Create directories mkdir -p packages/clmm/src packages/dlmm/src packages/aggregator/src shared .husky/_ .changeset # Copy all the configuration files above ``` 3. **Setup and install:** ```bash pnpm install pnpm prepare ``` 4. **Start developing:** ```bash # Add your CLMM logic to packages/clmm/src/ # Add your DLMM logic to packages/dlmm/src/ # Add your Aggregator logic to packages/aggregator/src/ ``` 5. **Build and test:** ```bash pnpm build pnpm test ``` This setup provides a production-ready monorepo that allows users to install `@ferra-labs/clmm`, `@ferra-labs/dlmm`, and `@ferra-labs/aggregator` independently! --- # NPM Packages Management ### Publishing Workflow ```bash # Create changeset pnpm changeset ``` ### Version packages ```bash pnpm version-packages ``` ### Publish to npm ```bash pnpm release ``` ### Package Installation (After Publishing) ```bash # Install CLMM only npm install @ferra-labs/clmm # Install DLMM only npm install @ferra-labs/dlmm # Install Aggregator only npm install @ferra-labs/aggregator # Install specific combination npm install @ferra-labs/clmm @ferra-labs/aggregator # Install all packages npm install @ferra-labs/clmm @ferra-labs/dlmm @ferra-labs/aggregator ``` ### Pre-release Testing ```bash # Publish beta version pnpm changeset pre enter beta pnpm version-packages pnpm release # Install beta versions npm install @ferra-labs/clmm@beta npm install @ferra-labs/dlmm@beta npm install @ferra-labs/aggregator@beta # Exit pre-release mode pnpm changeset pre exit ```