xrpl-lab 1.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. xrpl_lab-1.0.3/.github/workflows/ci.yml +51 -0
  2. xrpl_lab-1.0.3/.github/workflows/pages.yml +50 -0
  3. xrpl_lab-1.0.3/.github/workflows/release-binaries.yml +85 -0
  4. xrpl_lab-1.0.3/.github/workflows/smoke.yml +70 -0
  5. xrpl_lab-1.0.3/.gitignore +36 -0
  6. xrpl_lab-1.0.3/CHANGELOG.md +194 -0
  7. xrpl_lab-1.0.3/LICENSE +21 -0
  8. xrpl_lab-1.0.3/PKG-INFO +164 -0
  9. xrpl_lab-1.0.3/README.es.md +135 -0
  10. xrpl_lab-1.0.3/README.fr.md +135 -0
  11. xrpl_lab-1.0.3/README.hi.md +133 -0
  12. xrpl_lab-1.0.3/README.it.md +135 -0
  13. xrpl_lab-1.0.3/README.ja.md +133 -0
  14. xrpl_lab-1.0.3/README.md +135 -0
  15. xrpl_lab-1.0.3/README.pt-BR.md +135 -0
  16. xrpl_lab-1.0.3/README.zh.md +135 -0
  17. xrpl_lab-1.0.3/SECURITY.md +57 -0
  18. xrpl_lab-1.0.3/SHIP_GATE.md +82 -0
  19. xrpl_lab-1.0.3/docs/dex_notes.md +63 -0
  20. xrpl_lab-1.0.3/modules/account_hygiene.md +161 -0
  21. xrpl_lab-1.0.3/modules/amm_liquidity_101.md +174 -0
  22. xrpl_lab-1.0.3/modules/dex_inventory_guardrails.md +129 -0
  23. xrpl_lab-1.0.3/modules/dex_literacy.md +120 -0
  24. xrpl_lab-1.0.3/modules/dex_market_making_101.md +170 -0
  25. xrpl_lab-1.0.3/modules/dex_vs_amm_risk_literacy.md +188 -0
  26. xrpl_lab-1.0.3/modules/failure_literacy.md +95 -0
  27. xrpl_lab-1.0.3/modules/receipt_audit.md +100 -0
  28. xrpl_lab-1.0.3/modules/receipt_literacy.md +73 -0
  29. xrpl_lab-1.0.3/modules/reserves_101.md +112 -0
  30. xrpl_lab-1.0.3/modules/trust_line_failures.md +108 -0
  31. xrpl_lab-1.0.3/modules/trust_lines_101.md +111 -0
  32. xrpl_lab-1.0.3/presets/strategy_compare.json +8 -0
  33. xrpl_lab-1.0.3/presets/strategy_inv.json +8 -0
  34. xrpl_lab-1.0.3/presets/strategy_mm101.json +8 -0
  35. xrpl_lab-1.0.3/pyproject.toml +53 -0
  36. xrpl_lab-1.0.3/site/astro.config.mjs +29 -0
  37. xrpl_lab-1.0.3/site/package-lock.json +7539 -0
  38. xrpl_lab-1.0.3/site/package.json +18 -0
  39. xrpl_lab-1.0.3/site/src/components/dashboard/JsonViewer.astro +36 -0
  40. xrpl_lab-1.0.3/site/src/components/dashboard/LevelBadge.astro +17 -0
  41. xrpl_lab-1.0.3/site/src/components/dashboard/ModuleCard.astro +32 -0
  42. xrpl_lab-1.0.3/site/src/components/dashboard/ProgressBar.astro +25 -0
  43. xrpl_lab-1.0.3/site/src/components/dashboard/StatusCard.astro +31 -0
  44. xrpl_lab-1.0.3/site/src/content/docs/handbook/artifacts.md +91 -0
  45. xrpl_lab-1.0.3/site/src/content/docs/handbook/beginners.md +112 -0
  46. xrpl_lab-1.0.3/site/src/content/docs/handbook/commands.md +67 -0
  47. xrpl_lab-1.0.3/site/src/content/docs/handbook/getting-started.md +77 -0
  48. xrpl_lab-1.0.3/site/src/content/docs/handbook/index.md +60 -0
  49. xrpl_lab-1.0.3/site/src/content/docs/handbook/modules.md +59 -0
  50. xrpl_lab-1.0.3/site/src/content.config.ts +7 -0
  51. xrpl_lab-1.0.3/site/src/layouts/DashboardLayout.astro +134 -0
  52. xrpl_lab-1.0.3/site/src/lib/api.ts +160 -0
  53. xrpl_lab-1.0.3/site/src/pages/app/404.astro +28 -0
  54. xrpl_lab-1.0.3/site/src/pages/app/artifacts.astro +171 -0
  55. xrpl_lab-1.0.3/site/src/pages/app/doctor.astro +131 -0
  56. xrpl_lab-1.0.3/site/src/pages/app/index.astro +232 -0
  57. xrpl_lab-1.0.3/site/src/pages/app/modules/[id].astro +220 -0
  58. xrpl_lab-1.0.3/site/src/pages/app/modules/index.astro +131 -0
  59. xrpl_lab-1.0.3/site/src/pages/app/run/[id].astro +382 -0
  60. xrpl_lab-1.0.3/site/src/pages/index.astro +33 -0
  61. xrpl_lab-1.0.3/site/src/site-config.ts +83 -0
  62. xrpl_lab-1.0.3/site/src/styles/global.css +3 -0
  63. xrpl_lab-1.0.3/site/src/styles/starlight-custom.css +17 -0
  64. xrpl_lab-1.0.3/site/tsconfig.json +5 -0
  65. xrpl_lab-1.0.3/tests/__init__.py +0 -0
  66. xrpl_lab-1.0.3/tests/test_amm.py +392 -0
  67. xrpl_lab-1.0.3/tests/test_audit.py +481 -0
  68. xrpl_lab-1.0.3/tests/test_cli.py +285 -0
  69. xrpl_lab-1.0.3/tests/test_dex.py +215 -0
  70. xrpl_lab-1.0.3/tests/test_doctor.py +134 -0
  71. xrpl_lab-1.0.3/tests/test_errors.py +179 -0
  72. xrpl_lab-1.0.3/tests/test_feedback.py +63 -0
  73. xrpl_lab-1.0.3/tests/test_hygiene.py +200 -0
  74. xrpl_lab-1.0.3/tests/test_modules.py +126 -0
  75. xrpl_lab-1.0.3/tests/test_reporting.py +134 -0
  76. xrpl_lab-1.0.3/tests/test_reserves.py +153 -0
  77. xrpl_lab-1.0.3/tests/test_runner_ws.py +300 -0
  78. xrpl_lab-1.0.3/tests/test_send_fund.py +116 -0
  79. xrpl_lab-1.0.3/tests/test_server.py +446 -0
  80. xrpl_lab-1.0.3/tests/test_state.py +125 -0
  81. xrpl_lab-1.0.3/tests/test_strategy.py +579 -0
  82. xrpl_lab-1.0.3/tests/test_transport.py +78 -0
  83. xrpl_lab-1.0.3/tests/test_trust_line.py +201 -0
  84. xrpl_lab-1.0.3/tests/test_verify.py +145 -0
  85. xrpl_lab-1.0.3/tests/test_wallet.py +138 -0
  86. xrpl_lab-1.0.3/verify.sh +15 -0
  87. xrpl_lab-1.0.3/xrpl_lab/__init__.py +3 -0
  88. xrpl_lab-1.0.3/xrpl_lab/__main__.py +13 -0
  89. xrpl_lab-1.0.3/xrpl_lab/actions/__init__.py +0 -0
  90. xrpl_lab-1.0.3/xrpl_lab/actions/amm.py +214 -0
  91. xrpl_lab-1.0.3/xrpl_lab/actions/dex.py +120 -0
  92. xrpl_lab-1.0.3/xrpl_lab/actions/fund.py +10 -0
  93. xrpl_lab-1.0.3/xrpl_lab/actions/reserves.py +120 -0
  94. xrpl_lab-1.0.3/xrpl_lab/actions/send.py +21 -0
  95. xrpl_lab-1.0.3/xrpl_lab/actions/strategy.py +324 -0
  96. xrpl_lab-1.0.3/xrpl_lab/actions/trust_line.py +152 -0
  97. xrpl_lab-1.0.3/xrpl_lab/actions/verify.py +72 -0
  98. xrpl_lab-1.0.3/xrpl_lab/actions/wallet.py +71 -0
  99. xrpl_lab-1.0.3/xrpl_lab/api/__init__.py +0 -0
  100. xrpl_lab-1.0.3/xrpl_lab/api/routes.py +180 -0
  101. xrpl_lab-1.0.3/xrpl_lab/api/runner_ws.py +247 -0
  102. xrpl_lab-1.0.3/xrpl_lab/audit.py +430 -0
  103. xrpl_lab-1.0.3/xrpl_lab/cli.py +674 -0
  104. xrpl_lab-1.0.3/xrpl_lab/doctor.py +324 -0
  105. xrpl_lab-1.0.3/xrpl_lab/errors.py +100 -0
  106. xrpl_lab-1.0.3/xrpl_lab/feedback.py +98 -0
  107. xrpl_lab-1.0.3/xrpl_lab/modules.py +156 -0
  108. xrpl_lab-1.0.3/xrpl_lab/reporting.py +182 -0
  109. xrpl_lab-1.0.3/xrpl_lab/runner.py +1627 -0
  110. xrpl_lab-1.0.3/xrpl_lab/server.py +38 -0
  111. xrpl_lab-1.0.3/xrpl_lab/state.py +188 -0
  112. xrpl_lab-1.0.3/xrpl_lab/transport/__init__.py +0 -0
  113. xrpl_lab-1.0.3/xrpl_lab/transport/base.py +255 -0
  114. xrpl_lab-1.0.3/xrpl_lab/transport/dry_run.py +657 -0
  115. xrpl_lab-1.0.3/xrpl_lab/transport/xrpl_testnet.py +846 -0
@@ -0,0 +1,51 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ paths:
6
+ - "xrpl_lab/**"
7
+ - "modules/**"
8
+ - "tests/**"
9
+ - "pyproject.toml"
10
+ - ".github/workflows/**"
11
+ pull_request:
12
+ paths:
13
+ - "xrpl_lab/**"
14
+ - "modules/**"
15
+ - "tests/**"
16
+ - "pyproject.toml"
17
+ - ".github/workflows/**"
18
+ workflow_dispatch:
19
+
20
+ concurrency:
21
+ group: ${{ github.workflow }}-${{ github.ref }}
22
+ cancel-in-progress: true
23
+
24
+ permissions:
25
+ contents: read
26
+
27
+ jobs:
28
+ lint-and-test:
29
+ runs-on: ubuntu-latest
30
+ strategy:
31
+ matrix:
32
+ python-version: ["3.11", "3.12"]
33
+ steps:
34
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
35
+
36
+ - name: Set up Python ${{ matrix.python-version }}
37
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
38
+ with:
39
+ python-version: ${{ matrix.python-version }}
40
+
41
+ - name: Install dependencies
42
+ run: |
43
+ python -m pip install --upgrade pip
44
+ pip install -e ".[dev]" || pip install -e .
45
+ pip install ruff pytest pytest-asyncio
46
+
47
+ - name: Lint with ruff
48
+ run: ruff check xrpl_lab/ tests/
49
+
50
+ - name: Run tests
51
+ run: pytest tests/ -v --tb=short
@@ -0,0 +1,50 @@
1
+ name: Deploy site to GitHub Pages
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'site/**'
8
+ - '.github/workflows/pages.yml'
9
+ workflow_dispatch:
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ build:
17
+ runs-on: ubuntu-latest
18
+ permissions:
19
+ contents: read
20
+ steps:
21
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
22
+
23
+ - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
24
+ with:
25
+ node-version: 22
26
+
27
+ - name: Install site dependencies
28
+ working-directory: site
29
+ run: npm ci
30
+
31
+ - name: Build site
32
+ working-directory: site
33
+ run: npm run build
34
+
35
+ - uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
36
+ with:
37
+ path: site/dist
38
+
39
+ deploy:
40
+ needs: build
41
+ runs-on: ubuntu-latest
42
+ permissions:
43
+ pages: write
44
+ id-token: write
45
+ environment:
46
+ name: github-pages
47
+ url: ${{ steps.deployment.outputs.page_url }}
48
+ steps:
49
+ - id: deployment
50
+ uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
@@ -0,0 +1,85 @@
1
+ # Build platform binaries for npm distribution via @mcptoolshop/npm-launcher.
2
+ # Asset naming convention (locked):
3
+ # xrpl-lab-<version>-<os>-<arch>[.exe]
4
+ # checksums-<version>.txt
5
+
6
+ name: Release Binaries
7
+
8
+ on:
9
+ release:
10
+ types: [published]
11
+ workflow_dispatch:
12
+
13
+ concurrency:
14
+ group: ${{ github.workflow }}-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+ build:
19
+ strategy:
20
+ matrix:
21
+ include:
22
+ - os: ubuntu-latest
23
+ target: linux-x64
24
+ ext: ""
25
+ - os: macos-latest
26
+ target: darwin-arm64
27
+ ext: ""
28
+ # darwin-x64 omitted: macos-13 deprecated, arm64 binary works via Rosetta
29
+ - os: windows-latest
30
+ target: win-x64
31
+ ext: ".exe"
32
+ runs-on: ${{ matrix.os }}
33
+ steps:
34
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
35
+
36
+ - uses: astral-sh/setup-uv@caf0cab7a618c569241d31dcd442f54681755d39 # v3
37
+
38
+ - run: uv python install 3.12
39
+
40
+ - run: uv venv
41
+
42
+ - name: Install dependencies + PyInstaller
43
+ run: uv pip install . "pyinstaller>=6.9.0"
44
+
45
+ - name: Build binary
46
+ shell: bash
47
+ run: |
48
+ VERSION=${GITHUB_REF_NAME#v}
49
+ uv run pyinstaller --onefile --name "xrpl-lab" --console \
50
+ --collect-submodules rich \
51
+ --collect-submodules pydantic \
52
+ --collect-data xrpl \
53
+ --add-data "modules:modules" \
54
+ xrpl_lab/__main__.py
55
+ OUTNAME="xrpl-lab-${VERSION}-${{ matrix.target }}${{ matrix.ext }}"
56
+ mv "dist/xrpl-lab${{ matrix.ext }}" "dist/${OUTNAME}"
57
+ echo "ASSET_NAME=${OUTNAME}" >> "$GITHUB_ENV"
58
+
59
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
60
+ with:
61
+ name: binary-${{ matrix.target }}
62
+ path: dist/${{ env.ASSET_NAME }}
63
+
64
+ release:
65
+ needs: build
66
+ runs-on: ubuntu-latest
67
+ permissions:
68
+ contents: write
69
+ steps:
70
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
71
+ with:
72
+ path: artifacts
73
+ merge-multiple: true
74
+
75
+ - name: Generate checksums
76
+ shell: bash
77
+ run: |
78
+ VERSION=${GITHUB_REF_NAME#v}
79
+ cd artifacts
80
+ sha256sum * > "checksums-${VERSION}.txt"
81
+ cat "checksums-${VERSION}.txt"
82
+
83
+ - uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2
84
+ with:
85
+ files: artifacts/*
@@ -0,0 +1,70 @@
1
+ name: Smoke Test (Testnet)
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ concurrency:
7
+ group: ${{ github.workflow }}-${{ github.ref }}
8
+ cancel-in-progress: true
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ testnet-smoke:
15
+ runs-on: ubuntu-latest
16
+ timeout-minutes: 5
17
+ steps:
18
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
19
+
20
+ - name: Set up Python 3.12
21
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
22
+ with:
23
+ python-version: "3.12"
24
+
25
+ - name: Install xrpl-lab
26
+ run: |
27
+ python -m pip install --upgrade pip
28
+ pip install -e .
29
+ pip install httpx
30
+
31
+ - name: Run smoke test
32
+ run: |
33
+ python -c "
34
+ import asyncio
35
+ import json
36
+ from xrpl.wallet import Wallet
37
+ from xrpl_lab.transport.xrpl_testnet import XRPLTestnetTransport
38
+
39
+ async def smoke():
40
+ transport = XRPLTestnetTransport()
41
+
42
+ # 1. Check network
43
+ info = await transport.get_network_info()
44
+ assert info.connected, f'RPC not connected: {info.rpc_url}'
45
+ print(f'RPC connected: ledger {info.ledger_index}')
46
+
47
+ # 2. Create temp wallet and fund
48
+ wallet = Wallet.create()
49
+ print(f'Temp wallet: {wallet.address}')
50
+
51
+ fund = await transport.fund_from_faucet(wallet.address)
52
+ assert fund.success, f'Faucet failed: {fund.message}'
53
+ print(f'Funded: {fund.balance} XRP')
54
+
55
+ # 3. Send self-payment
56
+ result = await transport.submit_payment(
57
+ wallet.seed, wallet.address, '10', 'XRPLLAB|SMOKE'
58
+ )
59
+ assert result.success, f'Payment failed: {result.error}'
60
+ print(f'Payment OK: {result.txid[:24]}...')
61
+
62
+ # 4. Verify tx
63
+ tx = await transport.fetch_tx(result.txid)
64
+ assert tx.result_code == 'tesSUCCESS', f'Verify failed: {tx.result_code}'
65
+ print(f'Verified: {tx.result_code}, ledger {tx.ledger_index}')
66
+
67
+ print('Smoke test passed.')
68
+
69
+ asyncio.run(smoke())
70
+ "
@@ -0,0 +1,36 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+ *.egg
8
+
9
+ # Virtual environments
10
+ .venv/
11
+ venv/
12
+
13
+ # XRPL Lab user state (never commit)
14
+ .xrpl-lab/
15
+
16
+ # IDE
17
+ .vscode/
18
+ .idea/
19
+
20
+ # OS
21
+ .DS_Store
22
+ Thumbs.db
23
+
24
+ # Testing / Coverage
25
+ .coverage
26
+ htmlcov/
27
+ .pytest_cache/
28
+
29
+ # Ruff
30
+ .ruff_cache/
31
+ site/.astro/
32
+ site/dist/
33
+ site/node_modules/
34
+ .polyglot-cache.json
35
+ .astro/
36
+ node_modules/
@@ -0,0 +1,194 @@
1
+ # Changelog
2
+
3
+ ## 1.0.3 — 2026-03-29
4
+
5
+ Dogfood Swarm — comprehensive health pass, web dashboard, and 127 new tests.
6
+
7
+ ### Health Pass (Stage A-C)
8
+ - Fixed 9 HIGH-severity logic bugs (trust line, AMM, runner, state, doctor, audit)
9
+ - SHA-pinned all CI workflow actions across 4 workflows
10
+ - Added defensive guards for all float/int conversions on network data
11
+ - Exception boundary around module runner with state preservation
12
+ - Graceful faucet failure handling with actionable messages
13
+ - Corrupted state backup before reset
14
+ - Step-level progress indicators and retry visibility
15
+ - Wired XRPL_LAB_HOME env var for state directory override
16
+ - Added `network_name` property to Transport ABC
17
+
18
+ ### Web Dashboard
19
+ - FastAPI server layer with 9 REST endpoints + WebSocket module runner
20
+ - `xrpl-lab serve` command starts API server with --dry-run support
21
+ - Astro dashboard: module catalog, interactive runner, artifact viewer, doctor page
22
+ - Real-time module execution via WebSocket with terminal-style output
23
+ - 36-page site build (landing page + handbook + dashboard)
24
+
25
+ ### Feature Improvements
26
+ - Module ordering by explicit order field (not alphabetical)
27
+ - AMM modules require --dry-run with clear warning
28
+ - Prerequisite enforcement with --force bypass
29
+ - Richer module reports with action outcomes
30
+ - Certificate includes titles, tx counts, summary line
31
+ - `audit --no-pack` option to skip JSON pack
32
+ - Fixed dex_market_making_101 step ordering bug
33
+
34
+ ### Test Coverage
35
+ - 228 → 355 tests (+127)
36
+ - New test files: wallet, verify, send/fund, errors, server, runner_ws, CLI serve
37
+ - Fixed dry-run fidelity: per-address balances, instance-level counter, valid base58
38
+
39
+ ## 1.0.2 — 2026-03-25
40
+
41
+ - SHA-pinned CI actions (checkout, setup-python)
42
+ - Version test now uses dynamic `__version__` instead of hardcoded string
43
+
44
+ ## 1.0.1 — 2026-03-03
45
+
46
+ Binary launcher fix: Windows UTF-8 encoding for Rich console output.
47
+
48
+ - Fix: `UnicodeEncodeError` on Windows when Rich renders Unicode symbols (○, ✓, ✗)
49
+ - `__main__.py` reconfigures stdout/stderr to UTF-8 before any imports
50
+ - PyInstaller + npm-launcher: `npx @mcptoolshop/xrpl-lab` now works on Windows
51
+
52
+ ## 1.0.0 — 2026-03-03
53
+
54
+ Shipcheck + Full Treatment — production-ready release.
55
+
56
+ - Structured error contract: `LabError` + `LabException` with code/message/hint/cause/retryable
57
+ - Exit code mapping: INPUT/CONFIG/STATE → 1, IO/DEP/RUNTIME → 2, PARTIAL → 3
58
+ - Verify script: `verify.sh` (lint + test + build in one command)
59
+ - README: logo, badges, full 12-module table, trust model paragraph
60
+ - SECURITY.md: complete security policy with trust boundaries
61
+ - SHIP_GATE.md: all hard gates (A-D) passing
62
+ - Landing page: @mcptoolshop/site-theme
63
+ - Translations: 8 languages via polyglot-mcp
64
+
65
+ ## 0.10.0 — 2026-03-03
66
+
67
+ Strategy Track Complete: Inventory Guardrails + DEX vs AMM Capstone.
68
+
69
+ - New module: DEX Inventory Guardrails — threshold-based quoting, only safe sides placed
70
+ - New module: DEX vs AMM Risk Literacy — side-by-side comparison of DEX and AMM strategies
71
+ - `check_inventory` — evaluate XRP spendable and token balance against thresholds
72
+ - `InventoryCheck` dataclass with `can_bid`, `can_ask`, `sides_allowed`
73
+ - Runner: `check_inventory` and `place_safe_sides` action handlers
74
+ - New command: `xrpl-lab last-run` — show last module run info + audit command
75
+ - Module completion panel now shows audit verification one-liner
76
+ - Audit presets: `presets/strategy_inv.json`, `presets/strategy_compare.json`
77
+ - 12 modules total — full strategy track (beginner → intermediate → advanced)
78
+
79
+ ## 0.9.0 — 2026-03-02
80
+
81
+ DEX Market Making 101: Strategy Track Foundations.
82
+
83
+ - New module: DEX Market Making 101 — bid/ask offers, position snapshots, cleanup hygiene
84
+ - Strategy foundations: `PositionSnapshot`, `PositionComparison`, `HygieneSummary`
85
+ - `snapshot_position` — extended account state (trust lines, offers, owner count, spendable estimate)
86
+ - `compare_positions` — track owner count and offer deltas between snapshots
87
+ - `cancel_module_offers` — batch cancel strategy offers by sequence
88
+ - `hygiene_summary` — end-of-module cleanup verification (offers cleared, owner count baseline)
89
+ - `write_last_run` — outputs `last_run_txids.txt` + `last_run_meta.json` for audit integration
90
+ - Strategy memo convention: `XRPLLAB|STRAT|<MODULE>|<ACTION>|<RUNID>`
91
+ - Audit preset: `presets/strategy_mm101.json` (OfferCreate/OfferCancel types, memo prefix)
92
+ - Runner: 8 new action handlers (snapshot_position, strategy_offer_bid/ask, verify/cancel module offers, verify_position_delta, hygiene_summary)
93
+
94
+ ## 0.8.0 — 2026-03-02
95
+
96
+ AMM Liquidity 101: Providing Liquidity and Earning Fees.
97
+
98
+ - New module: AMM Liquidity 101 — create pool, deposit, verify LP, withdraw, verify
99
+ - Transport: `get_amm_info`, `submit_amm_create`, `submit_amm_deposit`, `submit_amm_withdraw`, `get_lp_token_balance`
100
+ - `AmmInfo` dataclass: pool balances, LP token, trading fee
101
+ - Dry-run transport: full AMM simulation (pool registry, LP minting/burning, proportional math)
102
+ - Actions: `ensure_amm_pair`, `amm_deposit`, `amm_withdraw`, `verify_lp_received`, `verify_withdrawal`
103
+ - Runner: 7 new AMM action handlers
104
+ - Testnet transport: AMM stubs (dry-run only for now, pending AMM amendment availability)
105
+
106
+ ## 0.7.0 — 2026-03-02
107
+
108
+ Audit Mode: Verify Receipts at Scale.
109
+
110
+ - New command: `xrpl-lab audit --txids txids.txt` — batch verify transactions
111
+ - Expectation configs: JSON with defaults + per-tx overrides (require_validated, require_success, memo_prefix, types_allowed, expected_engine_result)
112
+ - Failure vocabulary: NOT_FOUND, NOT_VALIDATED, ENGINE_RESULT_MISMATCH, TYPE_DISALLOWED, MEMO_MISSING
113
+ - Reports: Markdown table, CSV, JSON audit pack with SHA-256 integrity hash
114
+ - New module: Receipt Audit — hands-on audit mode walkthrough
115
+ - Dry-run transport: tx fixture support for deterministic audit testing
116
+ - Runner: `run_audit` action handler for module-driven audits
117
+
118
+ ## 0.6.0 — 2026-03-03
119
+
120
+ Account Hygiene: Freeing Reserves and Cleaning Up Objects.
121
+
122
+ - New module: Account Hygiene — create objects, cancel offers, remove trust lines, verify cleanup
123
+ - Trust line removal: `submit_trust_set` with `limit=0` removes trust lines (balance must be 0)
124
+ - Dry-run transport: smart trust line handling — no duplicates, limit updates, owner count decrement on removal
125
+ - Actions: `remove_trust_line`, `verify_trust_line_removed`
126
+ - Runner: `remove_trust_line` and `verify_trust_line_removed` action handlers
127
+ - Non-zero balance guard: removal fails with `tecNO_PERMISSION` if tokens still held
128
+
129
+ ## 0.5.0 — 2026-03-02
130
+
131
+ Reserves 101: Where Your XRP "Went" — account snapshots and owner count tracking.
132
+
133
+ - New module: Reserves 101 — snapshot before/after, owner count delta, reserve explanation
134
+ - Transport: `get_account_info` returns `AccountSnapshot` (balance, owner count, sequence)
135
+ - `AccountSnapshot` dataclass for point-in-time account state
136
+ - Actions: `snapshot_account`, `compare_snapshots` with `ReserveComparison` result
137
+ - Runner: `snapshot_account` and `verify_reserve_change` action handlers
138
+ - Dry-run transport tracks `_owner_count` across trust lines and offers
139
+ - Helper: `_drops_to_xrp` for human-readable balance display
140
+
141
+ ## 0.4.0 — 2026-03-02
142
+
143
+ DEX Literacy module — offers, order books, and cancellations.
144
+
145
+ - New module: DEX Literacy — create offer, verify active, cancel, verify absent
146
+ - Transport: `submit_offer_create`, `submit_offer_cancel`, `get_account_offers`
147
+ - `OfferInfo` dataclass for DEX offer representation
148
+ - Actions: `create_offer`, `cancel_offer`, `verify_offer_present`, `verify_offer_absent`
149
+ - Runner: handles DEX action types (create_offer, cancel_offer, verify_offer_*)
150
+ - Dry-run transport tracks offers with sequence numbers and supports cancellation
151
+ - DEX notes: `docs/dex_notes.md` — taker pays/gets, partial fills, why cancel matters
152
+
153
+ ## 0.3.1 — 2026-03-03
154
+
155
+ Debugging Reality: trust line failure module + ecosystem alignment.
156
+
157
+ - New module: Debugging Trust Lines — intentional failure, error decode, fix, verify
158
+ - Dry-run transport validates trust lines realistically (no trust line = tecPATH_DRY)
159
+ - `xrpl-lab self-check` — alias for `doctor` (ecosystem verb alignment)
160
+ - Proof pack receipt table: human-readable per-tx summary (txid, module, status, timestamp)
161
+ - Runner: `issue_token_expect_fail` action with result code explanation
162
+
163
+ ## 0.3.0 — 2026-03-02
164
+
165
+ Trust Lines module + feedback command.
166
+
167
+ - New module: Trust Lines 101 — create issuer, set trust line, issue tokens, verify
168
+ - Transport: `submit_trust_set`, `submit_issued_payment`, `get_trust_lines`
169
+ - Trust line actions: `set_trust_line`, `issue_token`, `verify_trust_line`
170
+ - `xrpl-lab feedback` — generates issue-ready markdown (doctor + env + proof pack)
171
+ - Runner handles trust line action types (create_issuer_wallet, fund_issuer, etc.)
172
+
173
+ ## 0.2.0 — 2026-03-02
174
+
175
+ Clinic & Proof Pack release.
176
+
177
+ - `xrpl-lab doctor` — checklist diagnostic (wallet, state, RPC, faucet, env, last error)
178
+ - XRPL result code reference with categories + actionable hints
179
+ - Transport: timeouts, retries (max 2), friendly error messages
180
+ - Proof pack upgrade: per-tx detail, endpoint, success/fail counts
181
+ - `status` shows env overrides (XRPL_LAB_RPC_URL, XRPL_LAB_FAUCET_URL)
182
+ - `reset` requires "RESET" (uppercase), adds `--keep-wallet` flag
183
+ - Manual testnet smoke test workflow (workflow_dispatch)
184
+
185
+ ## 0.1.0 — 2026-03-02
186
+
187
+ Initial release.
188
+
189
+ - 2 modules: Receipt Literacy, Failure Literacy
190
+ - CLI: `start`, `list`, `run`, `status`, `reset`, `proof-pack`, `certificate`
191
+ - Standalone commands: `wallet create/show`, `fund`, `send`, `verify`
192
+ - XRPL Testnet transport + dry-run (offline) transport
193
+ - Proof packs and certificates (no secrets, SHA-256 integrity hash)
194
+ - XRPL Camp soft-integration (certificate file detection)
xrpl_lab-1.0.3/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 MCP Tool Shop
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,164 @@
1
+ Metadata-Version: 2.4
2
+ Name: xrpl-lab
3
+ Version: 1.0.3
4
+ Summary: XRPL training workbook — learn by doing, prove by artifact
5
+ Project-URL: Homepage, https://mcp-tool-shop-org.github.io/xrpl-lab/
6
+ Project-URL: Repository, https://github.com/mcp-tool-shop-org/xrpl-lab
7
+ Project-URL: Issues, https://github.com/mcp-tool-shop-org/xrpl-lab/issues
8
+ Author-email: mcp-tool-shop <64996768+mcp-tool-shop@users.noreply.github.com>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: blockchain,cli,education,training,xrpl
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Education
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Education
19
+ Requires-Python: >=3.11
20
+ Requires-Dist: click>=8.1
21
+ Requires-Dist: fastapi>=0.115
22
+ Requires-Dist: httpx>=0.27
23
+ Requires-Dist: pydantic>=2.0
24
+ Requires-Dist: pyyaml>=6.0
25
+ Requires-Dist: rich>=13.0
26
+ Requires-Dist: uvicorn>=0.30
27
+ Requires-Dist: xrpl-py>=4.0.0
28
+ Description-Content-Type: text/markdown
29
+
30
+ <p align="center">
31
+ <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
32
+ </p>
33
+
34
+ <p align="center">
35
+ <img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/xrpl-lab/readme.png" width="400" alt="XRPL Lab">
36
+ </p>
37
+
38
+ <p align="center">
39
+ <a href="https://github.com/mcp-tool-shop-org/xrpl-lab/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/xrpl-lab/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
40
+ <a href="https://github.com/mcp-tool-shop-org/xrpl-lab/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-green.svg" alt="MIT License"></a>
41
+ <a href="https://mcp-tool-shop-org.github.io/xrpl-lab/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
42
+ </p>
43
+
44
+ XRPL training workbook — learn by doing, prove by artifact.
45
+
46
+ Each module teaches one XRPL skill and produces a verifiable artifact: a transaction ID,
47
+ a signed receipt, or a diagnostic report. No accounts, no fluff — just competence and receipts.
48
+
49
+ ## Install
50
+
51
+ ```bash
52
+ pipx install xrpl-lab
53
+ ```
54
+
55
+ Or with pip:
56
+
57
+ ```bash
58
+ pip install xrpl-lab
59
+ ```
60
+
61
+ Requires Python 3.11+.
62
+
63
+ ## Quickstart
64
+
65
+ ```bash
66
+ xrpl-lab start
67
+ ```
68
+
69
+ The guided launcher walks you through wallet setup, funding, and your first module.
70
+
71
+ ### Offline mode
72
+
73
+ ```bash
74
+ xrpl-lab start --dry-run
75
+ ```
76
+
77
+ No network required. Simulated transactions for learning the workflow.
78
+
79
+ ## Modules
80
+
81
+ 12 modules across three tracks: Beginner, Intermediate, and Advanced.
82
+
83
+ | # | Module | Track | What you learn | What you prove |
84
+ |---|--------|-------|----------------|----------------|
85
+ | 1 | Receipt Literacy | Beginner | Send a payment, read every receipt field | txid + verification report |
86
+ | 2 | Failure Literacy | Beginner | Break a tx on purpose, diagnose, fix, resubmit | failed + fixed txid trail |
87
+ | 3 | Trust Lines 101 | Beginner | Create issuer, set trust line, issue tokens | trust line + token balance |
88
+ | 4 | Debugging Trust Lines | Beginner | Intentional trust line failure, error decode, fix | error → fix txid trail |
89
+ | 5 | DEX Literacy | Intermediate | Create offers, read order books, cancel | offer create + cancel txids |
90
+ | 6 | Reserves 101 | Intermediate | Account snapshots, owner count, reserve math | before/after snapshot delta |
91
+ | 7 | Account Hygiene | Intermediate | Cancel offers, remove trust lines, free reserves | cleanup verification report |
92
+ | 8 | Receipt Audit | Intermediate | Batch verify transactions with expectations | audit pack (MD + CSV + JSON) |
93
+ | 9 | AMM Liquidity 101 | Advanced | Create pool, deposit, earn LP, withdraw | AMM lifecycle txids |
94
+ | 10 | DEX Market Making 101 | Advanced | Bid/ask offers, position snapshots, cleanup | strategy txids + hygiene report |
95
+ | 11 | Inventory Guardrails | Advanced | Threshold-based quoting, safe-side-only placement | inventory check + guarded txids |
96
+ | 12 | DEX vs AMM Risk Literacy | Advanced | Side-by-side DEX and AMM lifecycle comparison | comparison report + audit trail |
97
+
98
+ ## Commands
99
+
100
+ ```
101
+ xrpl-lab start Guided launcher
102
+ xrpl-lab list Show all modules with status
103
+ xrpl-lab run <module_id> Run a specific module
104
+ xrpl-lab status Progress, wallet, recent txs
105
+ xrpl-lab proof-pack Export shareable proof pack
106
+ xrpl-lab certificate Export completion certificate
107
+ xrpl-lab doctor Run diagnostic checks
108
+ xrpl-lab self-check Alias for doctor
109
+ xrpl-lab feedback Generate issue-ready markdown
110
+ xrpl-lab audit Batch verify transactions
111
+ xrpl-lab last-run Show last module run + audit command
112
+ xrpl-lab reset Wipe local state (requires RESET confirmation)
113
+
114
+ xrpl-lab wallet create Create a new wallet
115
+ xrpl-lab wallet show Show wallet info (no secrets)
116
+ xrpl-lab fund Fund wallet from testnet faucet
117
+ xrpl-lab send --to <address> --amount <xrp> [--memo <text>] Send a payment
118
+ xrpl-lab verify --tx <id> Verify a transaction on-ledger
119
+ ```
120
+
121
+ All commands support `--dry-run` for offline mode where applicable.
122
+
123
+ ## Artifacts
124
+
125
+ **Proof pack** (`xrpl_lab_proof_pack.json`): Shareable record of completed modules,
126
+ transaction IDs, and explorer links. Includes a SHA-256 integrity hash. No secrets.
127
+
128
+ **Certificate** (`xrpl_lab_certificate.json`): Slim completion record.
129
+
130
+ **Reports** (`reports/*.md`): Human-readable summaries of what you did and proved.
131
+
132
+ **Audit packs** (`audit_pack_*.json`): Batch verification results with SHA-256 integrity hash.
133
+
134
+ ## Security and Trust Model
135
+
136
+ **Data XRPL Lab touches:**
137
+ - Wallet seed (stored locally in `~/.xrpl-lab/wallet.json` with restrictive file permissions)
138
+ - Module progress and transaction IDs (stored in `~/.xrpl-lab/state.json`)
139
+ - XRPL Testnet RPC (public endpoint, transactions signed locally before submission)
140
+ - Testnet faucet (public HTTP, only your address is sent)
141
+
142
+ **Data XRPL Lab does NOT touch:**
143
+ - No mainnet. Testnet only
144
+ - No telemetry, analytics, or phone-home of any kind
145
+ - No cloud accounts, no registration, no third-party APIs
146
+ - No secrets in proof packs, certificates, or reports — ever
147
+
148
+ **Permissions:**
149
+ - Filesystem: reads/writes only `~/.xrpl-lab/` and `./.xrpl-lab/` (local workspace)
150
+ - Network: XRPL Testnet RPC + faucet only (both overridable via env vars, both optional with `--dry-run`)
151
+ - No elevated permissions required
152
+
153
+ See [SECURITY.md](SECURITY.md) for the full security policy.
154
+
155
+ ## Requirements
156
+
157
+ - Python 3.11+
158
+ - Internet connection for testnet (or use `--dry-run` for fully offline mode)
159
+
160
+ ## License
161
+
162
+ MIT
163
+
164
+ Built by [MCP Tool Shop](https://mcp-tool-shop.github.io/)