From 2016c52a37335b818a477e8476e483d681358a21 Mon Sep 17 00:00:00 2001 From: Vishakh Date: Tue, 3 Feb 2026 14:57:21 -0500 Subject: [PATCH 1/6] Updated the nilAI endpoint URL. --- lib/llm-client.ts | 7 +++++-- lib/llm-config.ts | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/llm-client.ts b/lib/llm-client.ts index 01d891e..fea98f8 100644 --- a/lib/llm-client.ts +++ b/lib/llm-client.ts @@ -8,6 +8,9 @@ import { NilaiOpenAIClient, AuthType, NilAuthInstance } from '@nillion/nilai-ts'; import { getLLMConfig, getModelIdentifier, getAPIEndpoint } from './llm-config'; +// Import the centralized nilAI endpoint +const NILAI_API_ENDPOINT = getAPIEndpoint({ provider: 'nilai', model: 'gpt-oss-20b' }); + export interface LLMMessage { role: 'system' | 'user' | 'assistant'; content: string; @@ -170,7 +173,7 @@ async function callNilAI( ): Promise { // Initialize client const client = new NilaiOpenAIClient({ - baseURL: 'https://nilai-f910.nillion.network/nuc/v1/', + baseURL: NILAI_API_ENDPOINT, authType: AuthType.DELEGATION_TOKEN, nilauthInstance: NilAuthInstance.PRODUCTION, }); @@ -380,7 +383,7 @@ async function* streamNilAI( modelId: string ): AsyncGenerator { const client = new NilaiOpenAIClient({ - baseURL: 'https://nilai-f910.nillion.network/nuc/v1/', + baseURL: NILAI_API_ENDPOINT, authType: AuthType.DELEGATION_TOKEN, nilauthInstance: NilAuthInstance.PRODUCTION, }); diff --git a/lib/llm-config.ts b/lib/llm-config.ts index d99c7ff..f65f655 100644 --- a/lib/llm-config.ts +++ b/lib/llm-config.ts @@ -102,13 +102,18 @@ export function getModelIdentifier(config: LLMConfig): string { } } +/** + * nilAI API endpoint + */ +const NILAI_API_ENDPOINT = 'https://api.nilai.nillion.network/nuc/v1/'; + /** * Get the API endpoint for the current provider */ export function getAPIEndpoint(config: LLMConfig): string { switch (config.provider) { case 'nilai': - return 'https://nilai-f910.nillion.network/nuc/v1/'; + return NILAI_API_ENDPOINT; case 'ollama': const address = config.ollamaAddress || 'localhost'; const port = config.ollamaPort || 11434; From a82fbe98cc9a36bfa10d82df40fda33ec72d3656 Mon Sep 17 00:00:00 2001 From: Vishakh Date: Tue, 3 Feb 2026 15:07:51 -0500 Subject: [PATCH 2/6] Removed L2 support, keeping only L1. --- .env.local.example | 39 +++++---------------------------- STABLECOIN_PAYMENTS.md | 13 ++++------- app/components/PaymentModal.tsx | 22 +------------------ lib/subscription-indexer.ts | 16 -------------- 4 files changed, 11 insertions(+), 79 deletions(-) diff --git a/.env.local.example b/.env.local.example index efc9ea5..175bc91 100644 --- a/.env.local.example +++ b/.env.local.example @@ -32,54 +32,27 @@ ALCHEMY_API_KEY=your_alchemy_api_key # IMPORTANT: Set this in your .env.local for development! NEXT_PUBLIC_ENABLE_TESTNET_CHAINS=false -# EVM payment wallet address (same address used across all EVM chains) -# This is where users send their stablecoin payments on Ethereum, Base, Arbitrum, Optimism, Polygon +# EVM payment wallet address (used for Ethereum mainnet payments) +# This is where users send their stablecoin payments on Ethereum mainnet # NEXT_PUBLIC_ prefix is required because it's displayed in the browser UI # Format: 0x... (42 characters, EVM address) # Note: For future non-EVM chains (Solana, Monad, etc.), add separate variables like: # NEXT_PUBLIC_SOLANA_PAYMENT_WALLET_ADDRESS, NEXT_PUBLIC_MONAD_PAYMENT_WALLET_ADDRESS NEXT_PUBLIC_EVM_PAYMENT_WALLET_ADDRESS=0x0000000000000000000000000000000000000000 -# Stablecoin contract addresses (standard addresses, don't change unless deploying new token) +# Stablecoin contract addresses (standard addresses for Ethereum mainnet) -# USDC contracts +# USDC contract (Ethereum mainnet) USDC_CONTRACT_ETHEREUM=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 -USDC_CONTRACT_BASE=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 -USDC_CONTRACT_ARBITRUM=0xaf88d065e77c8cC2239327C5EDb3A432268e5831 -USDC_CONTRACT_OPTIMISM=0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 -USDC_CONTRACT_POLYGON=0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 - NEXT_PUBLIC_USDC_CONTRACT_ETHEREUM=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 -NEXT_PUBLIC_USDC_CONTRACT_BASE=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 -NEXT_PUBLIC_USDC_CONTRACT_ARBITRUM=0xaf88d065e77c8cC2239327C5EDb3A432268e5831 -NEXT_PUBLIC_USDC_CONTRACT_OPTIMISM=0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 -NEXT_PUBLIC_USDC_CONTRACT_POLYGON=0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 -# USDT contracts +# USDT contract (Ethereum mainnet) USDT_CONTRACT_ETHEREUM=0xdAC17F958D2ee523a2206206994597C13D831ec7 -USDT_CONTRACT_BASE=0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2 -USDT_CONTRACT_ARBITRUM=0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 -USDT_CONTRACT_OPTIMISM=0x94b008aA00579c1307B0EF2c499aD98a8ce58e58 -USDT_CONTRACT_POLYGON=0xc2132D05D31c914a87C6611C10748AEb04B58e8F - NEXT_PUBLIC_USDT_CONTRACT_ETHEREUM=0xdAC17F958D2ee523a2206206994597C13D831ec7 -NEXT_PUBLIC_USDT_CONTRACT_BASE=0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2 -NEXT_PUBLIC_USDT_CONTRACT_ARBITRUM=0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 -NEXT_PUBLIC_USDT_CONTRACT_OPTIMISM=0x94b008aA00579c1307B0EF2c499aD98a8ce58e58 -NEXT_PUBLIC_USDT_CONTRACT_POLYGON=0xc2132D05D31c914a87C6611C10748AEb04B58e8F -# DAI contracts +# DAI contract (Ethereum mainnet) DAI_CONTRACT_ETHEREUM=0x6B175474E89094C44Da98b954EedeAC495271d0F -DAI_CONTRACT_BASE=0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb -DAI_CONTRACT_ARBITRUM=0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1 -DAI_CONTRACT_OPTIMISM=0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1 -DAI_CONTRACT_POLYGON=0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063 - NEXT_PUBLIC_DAI_CONTRACT_ETHEREUM=0x6B175474E89094C44Da98b954EedeAC495271d0F -NEXT_PUBLIC_DAI_CONTRACT_BASE=0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb -NEXT_PUBLIC_DAI_CONTRACT_ARBITRUM=0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1 -NEXT_PUBLIC_DAI_CONTRACT_OPTIMISM=0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1 -NEXT_PUBLIC_DAI_CONTRACT_POLYGON=0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063 # Sepolia Testnet (DEV MODE ONLY - NODE_ENV=development) # Get testnet tokens from Sepolia faucets (see STABLECOIN_PAYMENTS.md) diff --git a/STABLECOIN_PAYMENTS.md b/STABLECOIN_PAYMENTS.md index fe04bc1..0077176 100644 --- a/STABLECOIN_PAYMENTS.md +++ b/STABLECOIN_PAYMENTS.md @@ -23,7 +23,7 @@ Monadic DNA Explorer Premium now uses a **database-free, stablecoin-based paymen │ ▼ ┌─────────────┐ -│ Blockchain │ Ethereum, Base, Arbitrum, Optimism, Polygon +│ Blockchain │ Ethereum mainnet │ Transaction │ Stablecoin transfer └──────┬──────┘ │ @@ -73,17 +73,13 @@ NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID=your_dynamic_environment_id ### 2. Supported Chains -The system supports 5 EVM chains (production): -- **Ethereum** -- **Base** -- **Arbitrum** -- **Optimism** -- **Polygon** +The system supports **Ethereum mainnet** only (no L2 networks): +- **Ethereum** (L1) The system also supports **Sepolia testnet** when explicitly enabled: - **Sepolia** (Ethereum testnet) - Enable by setting `NEXT_PUBLIC_ENABLE_TESTNET_CHAINS=true` in `.env.local` -**USDC**, **USDT**, and **DAI** are accepted on all chains. +**USDC**, **USDT**, and **DAI** are accepted on Ethereum mainnet. ### 3. Pricing Model @@ -270,7 +266,6 @@ If you were using the old Paddle + Database system: Potential improvements: - [ ] Add email notifications when subscription expires - [ ] Add QR code for mobile wallet payments -- [ ] Support more chains (Polygon, Avalanche, etc.) - [ ] Add token price charts in UI - [ ] Add refund mechanism (for accidental overpayments) diff --git a/app/components/PaymentModal.tsx b/app/components/PaymentModal.tsx index 4150014..2041132 100644 --- a/app/components/PaymentModal.tsx +++ b/app/components/PaymentModal.tsx @@ -3,7 +3,7 @@ import { useState, useEffect } from 'react'; import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; import { parseUnits, encodeFunctionData, createPublicClient, http, formatUnits } from 'viem'; -import { mainnet, base, arbitrum, optimism, polygon, sepolia } from 'viem/chains'; +import { mainnet, sepolia } from 'viem/chains'; import { verifyPromoCode } from '@/lib/prime-verification'; import { setPromoAccess } from '@/lib/promo-access'; import StripeSubscriptionForm from './StripeSubscriptionForm'; @@ -39,10 +39,6 @@ export default function PaymentModal({ isOpen, onClose, onSuccess }: PaymentModa // Block explorer URLs for each chain const BLOCK_EXPLORERS: Record = { 'Ethereum': 'https://etherscan.io', - 'Base': 'https://basescan.org', - 'Arbitrum One': 'https://arbiscan.io', - 'OP Mainnet': 'https://optimistic.etherscan.io', - 'Polygon': 'https://polygonscan.com', 'Sepolia': 'https://sepolia.etherscan.io', }; @@ -53,10 +49,6 @@ export default function PaymentModal({ isOpen, onClose, onSuccess }: PaymentModa const USDC_CONTRACTS: Record = { 'Ethereum': process.env.NEXT_PUBLIC_USDC_CONTRACT_ETHEREUM || '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - 'Base': process.env.NEXT_PUBLIC_USDC_CONTRACT_BASE || '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', - 'Arbitrum One': process.env.NEXT_PUBLIC_USDC_CONTRACT_ARBITRUM || '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', - 'OP Mainnet': process.env.NEXT_PUBLIC_USDC_CONTRACT_OPTIMISM || '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85', - 'Polygon': process.env.NEXT_PUBLIC_USDC_CONTRACT_POLYGON || '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', ...(testnetEnabled ? { 'Sepolia': process.env.NEXT_PUBLIC_USDC_CONTRACT_SEPOLIA || '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', } : {}), @@ -64,10 +56,6 @@ export default function PaymentModal({ isOpen, onClose, onSuccess }: PaymentModa const USDT_CONTRACTS: Record = { 'Ethereum': process.env.NEXT_PUBLIC_USDT_CONTRACT_ETHEREUM || '0xdAC17F958D2ee523a2206206994597C13D831ec7', - 'Base': process.env.NEXT_PUBLIC_USDT_CONTRACT_BASE || '0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2', - 'Arbitrum One': process.env.NEXT_PUBLIC_USDT_CONTRACT_ARBITRUM || '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', - 'OP Mainnet': process.env.NEXT_PUBLIC_USDT_CONTRACT_OPTIMISM || '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', - 'Polygon': process.env.NEXT_PUBLIC_USDT_CONTRACT_POLYGON || '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', ...(testnetEnabled ? { 'Sepolia': process.env.NEXT_PUBLIC_USDT_CONTRACT_SEPOLIA || '0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0', } : {}), @@ -75,10 +63,6 @@ export default function PaymentModal({ isOpen, onClose, onSuccess }: PaymentModa const DAI_CONTRACTS: Record = { 'Ethereum': process.env.NEXT_PUBLIC_DAI_CONTRACT_ETHEREUM || '0x6B175474E89094C44Da98b954EedeAC495271d0F', - 'Base': process.env.NEXT_PUBLIC_DAI_CONTRACT_BASE || '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb', - 'Arbitrum One': process.env.NEXT_PUBLIC_DAI_CONTRACT_ARBITRUM || '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - 'OP Mainnet': process.env.NEXT_PUBLIC_DAI_CONTRACT_OPTIMISM || '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - 'Polygon': process.env.NEXT_PUBLIC_DAI_CONTRACT_POLYGON || '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', ...(testnetEnabled ? { 'Sepolia': process.env.NEXT_PUBLIC_DAI_CONTRACT_SEPOLIA || '0xFF34B3d4Aee8ddCd6F9AFFFB6Fe49bD371b8a357', } : {}), @@ -87,10 +71,6 @@ export default function PaymentModal({ isOpen, onClose, onSuccess }: PaymentModa // Map chain names to viem chain objects const CHAIN_MAP: Record = { 'Ethereum': mainnet, - 'Base': base, - 'Arbitrum One': arbitrum, - 'OP Mainnet': optimism, - 'Polygon': polygon, ...(testnetEnabled ? { 'Sepolia': sepolia, } : {}), diff --git a/lib/subscription-indexer.ts b/lib/subscription-indexer.ts index 60cbcbb..3e3c38e 100644 --- a/lib/subscription-indexer.ts +++ b/lib/subscription-indexer.ts @@ -39,10 +39,6 @@ const TESTNET_ENABLED = process.env.NEXT_PUBLIC_ENABLE_TESTNET_CHAINS === 'true' // Network configurations for Alchemy const NETWORKS: Record = { ethereum: Network.ETH_MAINNET, - base: Network.BASE_MAINNET, - arbitrum: Network.ARB_MAINNET, - optimism: Network.OPT_MAINNET, - polygon: Network.MATIC_MAINNET, ...(TESTNET_ENABLED ? { sepolia: Network.ETH_SEPOLIA, } : {}), @@ -51,10 +47,6 @@ const NETWORKS: Record = { // USDC contract addresses for each chain const USDC_CONTRACTS: Record = { ethereum: process.env.USDC_CONTRACT_ETHEREUM || '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - base: process.env.USDC_CONTRACT_BASE || '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', - arbitrum: process.env.USDC_CONTRACT_ARBITRUM || '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', - optimism: process.env.USDC_CONTRACT_OPTIMISM || '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85', - polygon: process.env.USDC_CONTRACT_POLYGON || '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', ...(TESTNET_ENABLED ? { sepolia: process.env.USDC_CONTRACT_SEPOLIA || '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', } : {}), @@ -63,10 +55,6 @@ const USDC_CONTRACTS: Record = { // USDT contract addresses for each chain const USDT_CONTRACTS: Record = { ethereum: process.env.USDT_CONTRACT_ETHEREUM || '0xdAC17F958D2ee523a2206206994597C13D831ec7', - base: process.env.USDT_CONTRACT_BASE || '0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2', - arbitrum: process.env.USDT_CONTRACT_ARBITRUM || '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', - optimism: process.env.USDT_CONTRACT_OPTIMISM || '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', - polygon: process.env.USDT_CONTRACT_POLYGON || '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', ...(TESTNET_ENABLED ? { sepolia: process.env.USDT_CONTRACT_SEPOLIA || '0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0', } : {}), @@ -75,10 +63,6 @@ const USDT_CONTRACTS: Record = { // DAI contract addresses for each chain const DAI_CONTRACTS: Record = { ethereum: process.env.DAI_CONTRACT_ETHEREUM || '0x6B175474E89094C44Da98b954EedeAC495271d0F', - base: process.env.DAI_CONTRACT_BASE || '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb', - arbitrum: process.env.DAI_CONTRACT_ARBITRUM || '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - optimism: process.env.DAI_CONTRACT_OPTIMISM || '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - polygon: process.env.DAI_CONTRACT_POLYGON || '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', ...(TESTNET_ENABLED ? { sepolia: process.env.DAI_CONTRACT_SEPOLIA || '0xFF34B3d4Aee8ddCd6F9AFFFB6Fe49bD371b8a357', } : {}), From 736752fbbea22e20f4da4df3921b2b6c2a39a086 Mon Sep 17 00:00:00 2001 From: Vishakh Date: Tue, 3 Feb 2026 15:09:41 -0500 Subject: [PATCH 3/6] Removed the 'xNillion' toolbar button. --- app/components/MenuBar.tsx | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/app/components/MenuBar.tsx b/app/components/MenuBar.tsx index 101b427..4925add 100644 --- a/app/components/MenuBar.tsx +++ b/app/components/MenuBar.tsx @@ -288,17 +288,6 @@ export default function MenuBar() { Help - - {mounted && (