Jumpa is a Telegram-based collaborative trading bot that enables users to create groups for collective cryptocurrency trading on Solana and EVM blockchains.
Test the bot on Telegram π Jumpa Bot
Watch the Demo Video on YouTube π Demo Video
- Multi-Chain Support: Trade on Solana and EVM-compatible chains
- Collaborative Trading: Create groups and make collective trading decisions
- Multi-Wallet Management: Support for multiple Solana and EVM wallets
- Secure Key Storage: Encrypted private key storage
- Fiat On/Off Ramp: NGN withdrawal support via integrated payment gateway
- On-Chain State: Anchor smart contract integration for transparent group management
- Social Trading: Referral system and community-driven decision making
- Runtime: Node.js with TypeScript
- Bot Framework: Telegraf (Telegram Bot API)
- Database: MongoDB with Mongoose ODM
- Blockchain:
- Solana (web3.js, Anchor, SPL Token)
- EVM (ethers.js)
@solana/web3.js- Solana blockchain interaction@coral-xyz/anchor- Solana smart contract framework@amadeus-protocol/sdk- Amadeus blockchain SDK@modelcontextprotocol/sdk- Model Context Protocol client@anthropic-ai/sdk- Claude AI agenttelegraf- Telegram bot developmentethers- Ethereum wallet & transactionsmongoose- MongoDB object modeling
Jumpa integrates with the Amadeus Protocol to enable AI-agent blockchain operations and provide users with secure, verifiable on-chain identity. This integration fulfills multiple aspects of decentralized agent infrastructure.
Jumpa connects to the Amadeus MCP server at https://mcp.ama.one to provide the AI agent with real-time blockchain capabilities:
- Dynamic Tool Loading: The MCPRegistry dynamically fetches available tools from the Amadeus MCP server, allowing the AI to execute blockchain operations like creating transactions, querying balances, and claiming testnet tokens.
- Tool Execution: When users request blockchain actions in natural language, the AI agent automatically selects and invokes the appropriate MCP tools.
- Configuration: See mcp.config.ts for MCP server configuration.
Implementation Files:
- MCPRegistry.ts - MCP client registry and tool orchestration
- agent.config.ts - AI agent system prompts and MCP tool integration
Each user in Jumpa has a persistent Amadeus wallet that serves as their on-chain identity:
- Database Schema: Amadeus wallets are stored in MongoDB with encrypted private keys. See the
amadeusWalletsfield in the User model. - Automatic Wallet Creation: When a user registers, an Amadeus wallet is automatically generated and associated with their account.
- Multi-Wallet Support: Users can manage up to 3 Amadeus wallets per account.
- Session Persistence: The AI agent remembers the user's Amadeus address across conversations, enabling continuous identity tracking.
Agent Identity Injection:
// The AI agent is provided with the user's Amadeus address
const userAddress = user.amadeusWallets[0].publicKey;
systemInjection = `OFFICIAL SIGNER ADDRESS: ${userAddress}`;Amadeus uses BLS12-381 signatures for transaction signing:
- Keypair Generation: Wallets are generated using the Amadeus SDK's
generateKeypair()function. - Signature Creation: Transactions are signed using the signTransaction function, which implements BLS12-381 long signatures with domain separation.
- Private Key Encryption: All private keys are encrypted using AES-256 before storage.
- Key Derivation: The SDK derives secret keys from Base58-encoded seeds using
deriveSkAndSeed64FromBase58Seed().
Implementation Files:
- amadeusFunctions.ts - Wallet generation, balance queries, and transaction signing
The AI agent orchestrates a two-step transaction process for Amadeus blockchain operations:
Step 1: Transaction Creation
- User requests an action (e.g., "Send 10 AMA to [address]")
- AI agent calls the
create_transactionMCP tool - Amadeus MCP server returns
signing_payloadandblob - AI pauses and requests user confirmation
Step 2: Signature & Submission
- User confirms transaction
- Application signs the
signing_payloadusing BLS12-381 - AI agent calls
submit_transactionwith the signature and blob - Transaction is submitted to the Amadeus network
- AI returns the transaction hash with an explorer link
Implementation Files:
- AIAgentCallback.ts - Handles AI agent transaction flow, signature confirmation, and submission
- agent.config.ts - System prompts defining the transaction creation protocol
Example Transaction Parameters:
{
signer: "user_amadeus_address",
contract: "Coin",
function: "transfer",
args: [
{ b58: "RECIPIENT_ADDRESS" },
"10000000000", // 10 AMA (1 AMA = 1,000,000,000 base units)
"AMA"
]
}- On-Chain Verification: All transactions are recorded on the Amadeus blockchain with cryptographic proofs.
- Explorer Integration: Transaction hashes link to the Amadeus testnet explorer at
https://testnet.explorer.ama.one/network/tx/[TxHash]and mainnet explorer athttps://explorer.ama.one/network/tx/[TxHash]. - Balance Queries: The
getAmadeusBalance()function queries on-chain wallet state directly from Amadeus nodes.
The Amadeus TypeScript SDK (@amadeus-protocol/sdk) serves as a high-level wrapper over the Amadeus WASM runtime, providing:
- Keypair generation and key derivation
- Balance queries from Amadeus nodes
- Transaction utilities and serialization
- Base58 encoding/decoding for addresses
SDK Version: ^1.0.2 (see package.json)
The following Amadeus features are planned for future integration:
- uPoW (Useful Proof of Work): Integrate Amadeus's uPoW consensus mechanism for agent participation in network security
- Oracle Streams: Connect to Amadeus oracle networks for real-time off-chain data feeds
- Swarm Coordination: Enable multi-agent coordination and consensus using Amadeus's swarm protocols
jumpa/
βββ src/ # Source code
β βββ index.ts # Application entry point
β βββ core/ # Core configuration & infrastructure
β β βββ config/ # Environment configuration
β β βββ database/ # Database connection & models
β β βββ models/ # Mongoose schemas (User, Group, Wallet, etc.)
β βββ blockchain/ # Blockchain integrations
β β βββ solana/ # Solana & Anchor services
β β βββ base/ # Base chain integration
β β βββ shared/ # Shared blockchain utilities
β β βββ interfaces/ # Common interfaces
β β βββ types/ # Type definitions
β β βββ utils/ # Shared blockchain helpers
β βββ features/ # Feature modules (Domain-Driven Design)
β β βββ onboarding/ # User registration & onboarding
β β β βββ commands/ # /start command
β β β βββ callbacks/ # Callback query handlers
β β β βββ handlers/ # Message handlers
β β β βββ services/ # Business logic
β β β βββ utils/ # Helper functions
β β βββ wallets/ # Wallet management
β β β βββ commands/ # /wallet, /import commands
β β β βββ callbacks/ # Wallet action handlers
β β β βββ services/ # Balance, creation services
β β β βββ utils/ # Wallet utilities
β β βββ groups/ # Group operations
β β β βββ commands/ # /create_group, /join, /leave commands
β β β βββ callbacks/ # Group action handlers
β β β βββ services/ # Group management logic
β β β βββ utils/ # Group helpers
β β βββ trading/ # Token trading
β β β βββ commands/ # /buy, /sell commands
β β β βββ callbacks/ # Trade confirmation handlers
β β β βββ services/ # Trading logic & execution
β β β βββ utils/ # Trade utilities
β β βββ payments/ # Fiat on/off ramp
β β β βββ commands/ # /withdraw command
β β β βββ callbacks/ # Payment flow handlers
β β β βββ services/ # Payment gateway integration
β β β βββ utils/ # Payment helpers & conversions
β β βββ users/ # User management
β β β βββ commands/ # User-related commands
β β β βββ callbacks/ # User action handlers
β β β βββ services/ # User services
β β β βββ utils/ # User utilities
β β βββ referrals/ # Referral system
β β βββ commands/ # Referral commands
β β βββ callbacks/ # Referral handlers
β β βββ services/ # Referral logic
β β βββ utils/ # Referral utilities
β βββ telegram/ # Telegram bot infrastructure
β β βββ commands/ # Command manager & registration
β β βββ callbacks/ # Callback query router
β βββ shared/ # Shared utilities
β β βββ utils/ # Helper functions (encryption, formatting)
β β βββ state/ # In-memory state management
β βββ images/ # Static assets
βββ docs/ # Documentation
β βββ ARCHITECTURE_SUMMARY.md # Architecture overview
β βββ ON_CHAIN_COMMANDS_GUIDE.md # On-chain integration guide
β βββ TESTING_GUIDE.md # Testing instructions
β βββ debug/ # Debug logs & artifacts
βββ scripts/ # Utility scripts
- Node.js (v18 or higher)
- npm or yarn
- MongoDB database
- Telegram Bot Token (from @BotFather)
- Solana RPC endpoint (Mainnet/Devnet)
- (Optional) EVM RPC endpoint
-
Clone the repository
git clone https://github.com/official-jumpa/jumpa.git cd jumpa -
Install dependencies
npm install
-
Configure environment variables
Create a
.envfile in the root directory:# Bot Configuration BOT_TOKEN=your_telegram_bot_token # Database # DB_URL=mongodb+srv://username:password@cluster.mongodb.net/jumpa # Solana SOL_MAINNET=https://api.mainnet-beta.solana.com SOL_DEVNET=https://api.devnet.solana.com RPC_URL=https://api.mainnet-beta.solana.com # EVM (Optional) EVM_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/your-key # Payment Gateway (Yara) PAYMENT_WIDGET_URL= PAYMENT_RATE_URL= YARA_API_KEY=your_yara_api_key # Security ENCRYPTION_KEY=your_256_bit_hex_key GEMINI_API_KEY="xxxx" PAYSTACK_BEARER_KEY="xxxxx"
-
Generate encryption key
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"Copy the output to
ENCRYPTION_KEYin.env
npm run devnpm run buildnpm run build
npm startThe project uses TypeScript path aliases for clean imports:
import { config } from "@core/config/config";
import { User } from "@database/models/user";
import { WalletService } from "@modules/wallets/balanceService";
import { encryption } from "@shared/utils/encryption";Features are organized by domain (Domain-Driven Design):
- Each feature contains its commands, callbacks, and utils
- Clear separation of concerns
- Easy to test and maintain
In-memory state management for multi-step user flows:
- User actions (wallet import, PIN setup)
- Withdrawal flows
- Trade confirmations
- Bank updates
# Railway will automatically:
# 1. Run npm install
# 2. Run npm run build
# 3. Run npm startSet the following:
- Build Command:
npm run build - Start Command:
npm start - Environment Variables: Add all variables from
.env
BOT_TOKEN- Telegram bot tokenDB_URL- MongoDB connection stringRPC_URL- Solana RPC endpointENCRYPTION_KEY- 256-bit encryption key- All other variables from
.envfile
- Private Key Encryption: All private keys are encrypted
- Environment Variables: Sensitive data stored in environment variables
- Rate Limiting: Built-in rate limiting for bot commands
npm testSee Testing Guide for detailed testing instructions.
/start- Register and create wallet/wallet- Manage wallets/create_group- Create/manage groups/buy- Buy tokens/sell- Sell tokens/withdraw- Withdraw to NGN/help- Show help message
/create_group- Create new group/join- Join existing group/leave_group- Leave group/group- View group details/poll- Create poll for trading decision
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
ISC License
- CEO and Co-founder - Anita Ndukwe
- COO and Co-founder - Udoma Christian
- CTO and Fullstack Developer - Damian Olebuezie
Report issues at: https://github.com/official-jumpa/jumpa/issues