An interactive web application for learning token issuance and liquidity provisioning on the XRP Ledger. This project is the companion application to the XRPL Commons Token Issuance and Liquidity training workshop.
This training application guides participants through the complete lifecycle of token deployment and liquidity management on the XRP Ledger:
- Creating Accounts - Set up issuer and receiver wallets
- Issuing Tokens - Create fungible tokens with trust lines and rippling
- Creating AMM Pools - Build automated market maker pools for liquidity
Participants connect via Xaman wallet and interact with the XRP Ledger testnet to gain hands-on experience with:
- Token creation and transfers
- Trust line establishment
- AMM pool creation and management
- Asset swapping through liquidity pools
Follow along with the full training documentation:
- Node.js 20.x or higher
- Xaman Wallet installed on your mobile device
- Xaman Developer Account for API credentials
- Clone the repository:
git clone https://github.com/xrpl-commons/xrpl-amm-workflow.git
cd xrpl-amm-workflow- Install dependencies:
npm install- Create a
.envfile in the root directory with the following variables:
# Xaman API credentials (get from https://apps.xumm.dev/)
XAMAN_API_KEY=
XAMAN_SECRET_KEY=
# XRPL Commons account (create from https://xrpl.org/resources/dev-tools/xrp-faucets)
XRPL_COMMONS_ADDRESS=
XRPL_COMMONS_SECRET=
# Network configuration
WSS_EXPLORER=wss://s.altnet.rippletest.net:51233
NETWORK=TESTNETNote: For production use, set
NETWORK=MAINNETand updateWSS_EXPLORERto a mainnet WebSocket endpoint.
Start the development server:
npm run devThe application will be available at http://localhost:3000.
Server-side code logs through the Pino facade in server/utils/logger.ts (the fleet standard, shared with the other XRPL Commons apps):
import { createLogger } from '~/server/utils/logger'
const log = createLogger('store')
log.info('user created', { xrplAddress })
log.error('failed to persist users.json', { err }) // errors always go in `err`, never in the message- Development (
npm run dev): coloured, multi-linepino-prettyoutput. - Production (
NODE_ENV=production): one JSON line per event on stdout, at most 1900 bytes, withdt,level,msg,service, anderr/eventwhen relevant. This is what Better Stack and the fleet-wide alerts (level = ERROR|FATAL,event = startup) consume. The Nitro pluginserver/plugins/00.logging.tsalso routes any strayconsole.*(including Nitro's own request errors) through the facade, emits oneevent=startupline at boot (commitcomes fromCOMMIT_SHA), and turns uncaught exceptions / unhandled rejections into a singleFATALline before exiting with code 1. LOG_LEVEL(optional, defaultinfo) selects the minimum level:fatal,error,warn,info,debug,trace.
Level discipline matters because ERROR pages a human: use WARN for expected, handled failures (validation rejects, 4xx returned to a client, optional integration unavailable), ERROR only for failures the app could not handle (5xx, upstream call failed, invariant violated), and INFO for lifecycle and business events, not per-request chatter (that is DEBUG).
Run the logging contract tests with npm test.
Page views are tracked with Fathom (privacy-friendly, cookie-free, no consent banner). plugins/fathom.client.ts injects https://cdn.usefathom.com/script.js in production builds only; development never loads it. The site id (TXPDCLCO) is public because it ships in the client script, so it is hard-coded in nuxt.config.ts under runtimeConfig.public.fathomSiteId rather than read from an env var.
- Nuxt 3 - Vue.js framework
- Nuxt UI - UI component library
- xrpl.js - XRP Ledger JavaScript library
- Xaman SDK - Wallet integration
- Tailwind CSS - Styling
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is open source and available under the MIT License.
Built with love by XRPL Commons