{"_id":"@axkledger/axk-xrpl-core","_rev":"4-d6a47dc7fd8061e50d3ea54f0eac8240","name":"@axkledger/axk-xrpl-core","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@axkledger/axk-xrpl-core","version":"1.0.0","keywords":["xrpl","blockchain","did","afrikabal","axk"],"author":{"name":"Afrikabal"},"license":"PROPRIETARY","_id":"@axkledger/axk-xrpl-core@1.0.0","maintainers":[{"name":"axknetwork","email":"joe@afrikabal.org"},{"name":"signordev","email":"emmanuelomemgboji@gmail.com"}],"dist":{"shasum":"07f0014757b440ad930baedeba8b8930c477c80d","tarball":"https://registry.npmjs.org/@axkledger/axk-xrpl-core/-/axk-xrpl-core-1.0.0.tgz","fileCount":103,"integrity":"sha512-90FRk6QxNeHn9GjrDrfdP173XTMdmCMimO3Ah22QYgQhrzwOkfp7Sft0k3B1sMY1+rFl9tdsebLcKVUZLBCOAw==","signatures":[{"sig":"MEUCIBLevQNv2ZnjWsqnCsgm7hgUvhqzQhPKNs41Q7otFzc+AiEAn0Nja6P1L0CS0A8/63Fp+6xzgl2b6ftx3oXdWTjefsA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":411151},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=20.0.0","pnpm":">=8.0.0"},"gitHead":"f06ac9bd4e2e2700bfad6a5f29057e5d4fff5f5a","scripts":{"dev":"ts-node","lint":"eslint . --ext .ts","test":"jest","build":"tsc","start":"node dist/index.js","format":"prettier --write \"**/*.ts\"","memo:test":"ts-node scripts/test-memo.ts","did:create":"ts-node scripts/dids/create.ts","test:watch":"jest --watch","client:test":"ts-node scripts/client/test-client.ts","did:resolve":"ts-node scripts/dids/resolve.ts","wallet:fund":"ts-node scripts/wallets/fund.ts","wallet:list":"ts-node scripts/wallets/list.ts","did:validate":"ts-node scripts/dids/validate.ts","format:check":"prettier --check \"**/*.ts\"","payment:send":"ts-node scripts/payments/send.ts","hook:test:all":"ts-node scripts/hooks/test-all-hooks.ts","payment:parse":"ts-node scripts/payments/parse-memo.ts","payment:query":"ts-node scripts/payments/query.ts","test:coverage":"jest --coverage","hook:test:proof":"ts-node scripts/hooks/test-proof-integration.ts","wallet:generate":"ts-node scripts/wallets/generate.ts","hook:test:escrow":"ts-node scripts/hooks/test-escrow-integration.ts","hook:test:payment":"ts-node scripts/hooks/test-payment-integration.ts","example:checkpoint":"ts-node examples/checkpoint-example.ts","example:validators":"ts-node examples/all-validators-example.ts","example:hook-client":"ts-node examples/hook-client-example.ts","hook:config:validate":"ts-node scripts/hooks/validate-config.ts","hook:test:checkpoint":"ts-node scripts/hooks/test-checkpoint-integration.ts","hook:test:governance":"ts-node scripts/hooks/test-governance-integration.ts","hook:test:settlement":"ts-node scripts/hooks/test-settlement-integration.ts"},"_npmUser":{"name":"signordev","email":"emmanuelomemgboji@gmail.com"},"_npmVersion":"11.5.2","description":"Foundation layer for AFRIKABAL AXK Infrastructure on XRP Ledger","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ora":"^9.0.0","bs58":"^6.0.0","chalk":"^5.6.2","dotenv":"^17.2.3","commander":"^14.0.2","@transia/xrpl":"^2.7.3-alpha.28"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.23.0+sha512.21c4e5698002ade97e4efe8b8b4a89a8de3c85a37919f957e7a0f30f38fbc5bbdd05980ffe29179b2fb6e6e691242e098d945d1601772cad0fef5fb6411e2a4b","devDependencies":{"jest":"^29.7.0","eslint":"^9.39.1","nodemon":"^3.1.11","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.6.2","typescript":"^5.9.3","@types/bs58":"^4.0.4","@types/jest":"^29.5.14","@types/node":"^24.10.1","ripple-address-codec":"^5.0.0","@typescript-eslint/parser":"^8.48.0","@typescript-eslint/eslint-plugin":"^8.48.0"},"_npmOperationalInternal":{"tmp":"tmp/axk-xrpl-core_1.0.0_1766861439362_0.44279403071694423","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@axkledger/axk-xrpl-core","version":"1.0.1","keywords":["xrpl","blockchain","did","afrikabal","axk"],"author":{"name":"Afrikabal"},"license":"PROPRIETARY","_id":"@axkledger/axk-xrpl-core@1.0.1","maintainers":[{"name":"axknetwork","email":"joe@afrikabal.org"},{"name":"signordev","email":"emmanuelomemgboji@gmail.com"}],"dist":{"shasum":"9cd22b2f5328dba061e030dc3558d7bcc7d562d2","tarball":"https://registry.npmjs.org/@axkledger/axk-xrpl-core/-/axk-xrpl-core-1.0.1.tgz","fileCount":123,"integrity":"sha512-woep/JbczrLPgaTCEZJzabyam3i/HObM3y07aJvaLY3WhgVrCmvE1MQpTjyBbKGBGm7f4o6IHFCaiklyUXK0PA==","signatures":[{"sig":"MEUCIQCBi4Wr202EowCtbEUg3AGUGo8WUCsQPFQfUgWD9VldHAIgRb7evfLQ4tNxU+JNs2UWuG7BgIA0DfcPLCAcN2ffWIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":420613},"main":"dist/src/index.js","_from":"file:axkledger-axk-xrpl-core-1.0.1.tgz","types":"dist/src/index.d.ts","engines":{"node":">=20.0.0","pnpm":">=8.0.0"},"scripts":{"dev":"ts-node","lint":"eslint . --ext .ts","test":"jest","build":"tsc","start":"node dist/index.js","format":"prettier --write \"**/*.ts\"","memo:test":"ts-node scripts/test-memo.ts","did:create":"ts-node scripts/dids/create.ts","test:watch":"jest --watch","client:test":"ts-node scripts/client/test-client.ts","did:resolve":"ts-node scripts/dids/resolve.ts","wallet:fund":"ts-node scripts/wallets/fund.ts","wallet:list":"ts-node scripts/wallets/list.ts","did:validate":"ts-node scripts/dids/validate.ts","format:check":"prettier --check \"**/*.ts\"","payment:send":"ts-node scripts/payments/send.ts","hook:test:all":"ts-node scripts/hooks/test-all-hooks.ts","payment:parse":"ts-node scripts/payments/parse-memo.ts","payment:query":"ts-node scripts/payments/query.ts","release:major":"npm version major && npm publish --access restricted && git push --tags","release:minor":"npm version minor && npm publish --access restricted && git push --tags","release:patch":"npm version patch && npm publish --access restricted && git push --tags","test:coverage":"jest --coverage","hook:test:proof":"ts-node scripts/hooks/test-proof-integration.ts","wallet:generate":"ts-node scripts/wallets/generate.ts","hook:test:escrow":"ts-node scripts/hooks/test-escrow-integration.ts","hook:test:payment":"ts-node scripts/hooks/test-payment-integration.ts","example:checkpoint":"ts-node examples/checkpoint-example.ts","example:validators":"ts-node examples/all-validators-example.ts","example:hook-client":"ts-node examples/hook-client-example.ts","hook:config:validate":"ts-node scripts/hooks/validate-config.ts","hook:test:checkpoint":"ts-node scripts/hooks/test-checkpoint-integration.ts","hook:test:governance":"ts-node scripts/hooks/test-governance-integration.ts","hook:test:settlement":"ts-node scripts/hooks/test-settlement-integration.ts"},"_npmUser":{"name":"signordev","email":"emmanuelomemgboji@gmail.com"},"_resolved":"/private/var/folders/zr/jhxk7zdn78l2gtn9kv9tcllm0000gn/T/53812163cc0324a4de3b788e8e3fdca3/axkledger-axk-xrpl-core-1.0.1.tgz","_integrity":"sha512-woep/JbczrLPgaTCEZJzabyam3i/HObM3y07aJvaLY3WhgVrCmvE1MQpTjyBbKGBGm7f4o6IHFCaiklyUXK0PA==","_npmVersion":"11.5.2","description":"Foundation layer for AXK Network on XRP Ledger","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ora":"^9.0.0","bs58":"^6.0.0","chalk":"^5.6.2","dotenv":"^17.2.3","commander":"^14.0.2","@transia/xrpl":"^2.7.3-alpha.28"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.39.1","nodemon":"^3.1.11","ts-jest":"^29.4.6","ts-node":"^10.9.2","prettier":"^3.6.2","typescript":"^5.9.3","@types/bs58":"^4.0.4","@types/jest":"^29.5.14","@types/node":"^24.10.1","ripple-address-codec":"^5.0.0","@typescript-eslint/parser":"^8.48.0","@typescript-eslint/eslint-plugin":"^8.48.0"},"_npmOperationalInternal":{"tmp":"tmp/axk-xrpl-core_1.0.1_1767439719963_0.1832580762946907","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@axkledger/axk-xrpl-core","version":"1.1.0","description":"Foundation layer for AXK Network on XRP Ledger","main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"build":"tsc","dev":"ts-node","start":"node dist/index.js","wallet:generate":"ts-node scripts/wallets/generate.ts","wallet:fund":"ts-node scripts/wallets/fund.ts","wallet:list":"ts-node scripts/wallets/list.ts","did:create":"ts-node scripts/dids/create.ts","did:resolve":"ts-node scripts/dids/resolve.ts","did:validate":"ts-node scripts/dids/validate.ts","payment:send":"ts-node scripts/payments/send.ts","payment:query":"ts-node scripts/payments/query.ts","payment:parse":"ts-node scripts/payments/parse-memo.ts","client:test":"ts-node scripts/client/test-client.ts","memo:test":"ts-node scripts/test-memo.ts","hook:test:checkpoint":"ts-node scripts/hooks/test-checkpoint-integration.ts","hook:test:escrow":"ts-node scripts/hooks/test-escrow-integration.ts","hook:test:governance":"ts-node scripts/hooks/test-governance-integration.ts","hook:test:payment":"ts-node scripts/hooks/test-payment-integration.ts","hook:test:settlement":"ts-node scripts/hooks/test-settlement-integration.ts","hook:test:proof":"ts-node scripts/hooks/test-proof-integration.ts","hook:test:all":"ts-node scripts/hooks/test-all-hooks.ts","hook:config:validate":"ts-node scripts/hooks/validate-config.ts","example:validators":"ts-node examples/all-validators-example.ts","example:checkpoint":"ts-node examples/checkpoint-example.ts","example:hook-client":"ts-node examples/hook-client-example.ts","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint . --ext .ts","format":"prettier --write \"**/*.ts\"","format:check":"prettier --check \"**/*.ts\"","prepublishOnly":"pnpm build","release:patch":"npm version patch && npm publish --access restricted && git push --tags","release:minor":"npm version minor && npm publish --access restricted && git push --tags","release:major":"npm version major && npm publish --access restricted && git push --tags"},"keywords":["xrpl","blockchain","did","afrikabal","axk"],"author":{"name":"Afrikabal"},"license":"PROPRIETARY","engines":{"node":">=20.0.0","pnpm":">=8.0.0"},"packageManager":"pnpm@10.23.0+sha512.21c4e5698002ade97e4efe8b8b4a89a8de3c85a37919f957e7a0f30f38fbc5bbdd05980ffe29179b2fb6e6e691242e098d945d1601772cad0fef5fb6411e2a4b","devDependencies":{"@types/bs58":"^4.0.4","@types/jest":"^29.5.14","@types/node":"^24.10.1","@typescript-eslint/eslint-plugin":"^8.48.0","@typescript-eslint/parser":"^8.48.0","eslint":"^9.39.1","jest":"^29.7.0","nodemon":"^3.1.11","prettier":"^3.6.2","ripple-address-codec":"^5.0.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","typescript":"^5.9.3"},"dependencies":{"@transia/xrpl":"^2.7.3-alpha.28","bs58":"^6.0.0","chalk":"^5.6.2","commander":"^14.0.2","dotenv":"^17.2.3","ora":"^9.0.0"},"_id":"@axkledger/axk-xrpl-core@1.1.0","gitHead":"42a46ca5c628b271f07ddf1949517407a4799783","_nodeVersion":"24.4.1","_npmVersion":"11.5.2","dist":{"integrity":"sha512-1fJ77kLh0sos0Hnsn8tPxBnz0DCxuYSJ5QyRNdxbNgw21T4lCG4P35sRz9J+tvQiyZ3LvaLx7m23m1bO7SGyhg==","shasum":"95bad6211eeea7a49913852fa84670fa3508c4c7","tarball":"https://registry.npmjs.org/@axkledger/axk-xrpl-core/-/axk-xrpl-core-1.1.0.tgz","fileCount":135,"unpackedSize":456508,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIER0cXlH+vAevaf1FXVG68G9NHFvlHBO+jFYqY9REmiDAiEA78xWe7lH+ffC2VfK3QRHpixb5Jk/Xs/+WtMpxcXExXc="}]},"_npmUser":{"name":"signordev","email":"emmanuelomemgboji@gmail.com"},"directories":{},"maintainers":[{"name":"axknetwork","email":"joe@afrikabal.org"},{"name":"signordev","email":"emmanuelomemgboji@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/axk-xrpl-core_1.1.0_1774650949815_0.47006973720802137"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-27T18:50:38.940Z","modified":"2026-03-27T22:35:50.191Z","1.0.0":"2025-12-27T18:50:39.506Z","1.0.1":"2026-01-03T11:28:40.127Z","1.1.0":"2026-03-27T22:35:50.023Z"},"author":{"name":"Afrikabal"},"license":"PROPRIETARY","keywords":["xrpl","blockchain","did","afrikabal","axk"],"description":"Foundation layer for AXK Network on XRP Ledger","maintainers":[{"name":"axknetwork","email":"joe@afrikabal.org"},{"name":"signordev","email":"emmanuelomemgboji@gmail.com"}],"readme":"# AXK XRPL Core\n\n> **Package:** `@axkledger/axk-xrpl-core` | **Version:** 1.1.0\n\n## Foundation Layer for AXK Network on Xahau\n\n[![License](https://img.shields.io/badge/license-Proprietary-red.svg)](LICENSE)\n[![Version](https://img.shields.io/badge/version-1.1.0-blue.svg)](package.json)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)\n[![Xahau](https://img.shields.io/badge/Xahau-Hooks-brightgreen.svg)](https://xahau.network/)\n[![Node.js](https://img.shields.io/badge/Node.js-20+-339933?logo=node.js&logoColor=white)](https://nodejs.org/)\n[![Tests](https://img.shields.io/badge/tests-133%20passing-brightgreen.svg)](tests/)\n\nTypeScript SDK for interacting with the Xahau blockchain and AXK on-chain hooks. Translates TypeScript objects into 80-byte binary memos that the C hooks understand, manages XRPL wallets, handles DIDs, and routes all transactions to the single hooks account.\n\n## What it does\n\n```\nNestJS Service (Ledger, Omni, DAO, etc.)\n    |\n    |  hookClient.submitCheckpoint({ checkpoint_id, merkle_root, ... })\n    |\n    v\naxk-xrpl-core\n    |  1. Validates data (format, ranges, prefixes)\n    |  2. Packs into 80-byte binary (the exact layout the C hook expects)\n    |  3. Wraps in XRPL Payment with binary MemoData\n    |  4. Signs, submits to Xahau, waits for confirmation\n    |  5. Parses hook execution result from metadata\n    |\n    v\nXahau Network --> Hook executes --> State stored on-chain\n```\n\n## Architecture\n\n### 9 Hooks, 3 Wallets, 1 Account\n\nAll 9 hooks are deployed to a **single Xahau account** with namespace separation. Three segregated wallets submit transactions based on purpose:\n\n| Wallet | Used by | Hooks it talks to |\n|--------|---------|-------------------|\n| **anchoring** | axk-ledger | checkpoint-anchor, proof-verifier |\n| **settlement** | axk-omni | escrow-manager, payment-splitter, settlement-validator, token-economics, vesting-manager, bridge-vault |\n| **governance** | axk-dao | governance-voter |\n\n### Hooks & Validators\n\n| Hook | Validator | Binary Prefix | Purpose |\n|------|-----------|---------------|---------|\n| checkpoint-anchor | `CheckpointValidator` | `ckpt` | Merkle root anchoring |\n| proof-verifier | `ProofValidator` | `ckpt` | On-chain proof verification |\n| escrow-manager | `EscrowValidator` | `escr` | Time-locked escrows |\n| governance-voter | `GovernanceValidator` | `prop` | Proposal voting |\n| settlement-validator | `SettlementValidator` | `setl` | Multi-sig settlements |\n| payment-splitter | `PaymentSplitterValidator` | `splt` | Payment distribution |\n| token-economics | `TokenEconomicsValidator` | `axk` | Burn tiers & network fees |\n| vesting-manager | `VestingManagerValidator` | `vest` | Token vesting grants/claims |\n| bridge-vault | `BridgeVaultValidator` | `brdg` | Cross-chain lock/release |\n\nEvery validator produces an **80-byte binary** that maps 1:1 to the C hook's memo layout.\n\n## Project Structure\n\n```\naxk-xrpl-core/\n├── src/\n│   ├── index.ts                # Main exports\n│   ├── xrpl-client.ts          # XRPL connection wrapper\n│   ├── wallet-manager.ts       # Wallet generation & storage\n│   ├── did-manager.ts          # W3C DID system\n│   ├── memo-formatter.ts       # Structured JSON memos\n│   ├── hook-client.ts          # Hook submission (binary packing)\n│   ├── hook-config.ts          # Hook account & namespace config\n│   ├── network-config.ts       # XAHAU_ENV-aware config resolver\n│   ├── types/index.ts          # TypeScript definitions\n│   └── validators/\n│       ├── base-validator.ts           # Shared validation & binary utils\n│       ├── checkpoint-validator.ts     # checkpoint-anchor\n│       ├── proof-validator.ts          # proof-verifier\n│       ├── escrow-validator.ts         # escrow-manager\n│       ├── governance-validator.ts     # governance-voter\n│       ├── settlement-validator.ts     # settlement-validator\n│       ├── payment-splitter-validator.ts # payment-splitter\n│       ├── token-economics-validator.ts # token-economics\n│       ├── vesting-manager-validator.ts # vesting-manager\n│       └── bridge-vault-validator.ts   # bridge-vault\n├── config/\n│   ├── wallets.json            # Wallet storage (gitignored)\n│   └── memo-schemas.json       # Memo format definitions (7 layers)\n├── scripts/                    # CLI tools (wallets, DIDs, payments, hooks)\n├── tests/                      # Jest test suites (133 tests)\n└── .env                        # Environment config\n```\n\n## Installation\n\n### As npm dependency\n\n```bash\npnpm add @axkledger/axk-xrpl-core\n```\n\n### For development\n\n```bash\ngit clone https://github.com/AXK-Infra/axk-xrpl-core.git\ncd axk-xrpl-core\npnpm install\ncp .env.example .env\npnpm build\n```\n\n## Environment Configuration\n\nThe SDK uses `XAHAU_ENV` to switch between testnet and mainnet. **One variable controls all network settings:**\n\n```bash\n# .env\nXAHAU_ENV=testnet              # or \"mainnet\"\n\n# Testnet settings\nTESTNET_WSS=wss://xahau-test.net\nTESTNET_EXPLORER_URL=https://xahau-testnet.xrplwin.com\nTESTNET_HOOKS_ACCOUNT=rNtzESnjfvEpYtNg3R48C7K5pm2TXwhB2T\n\n# Mainnet settings (fill when ready)\nMAINNET_WSS=wss://xahau.network\nMAINNET_EXPLORER_URL=https://xahau.xrplwin.com\nMAINNET_HOOKS_ACCOUNT=\n```\n\nThe `resolveNetworkConfig()` function picks the right prefixed values based on `XAHAU_ENV`:\n\n```typescript\nimport { resolveNetworkConfig, explorerTxUrl } from '@axkledger/axk-xrpl-core';\n\nconst config = resolveNetworkConfig();\n// config.wss         -> \"wss://xahau-test.net\"\n// config.hooksAccount -> \"rNtzESnjfvEpYtNg3R48C7K5pm2TXwhB2T\"\n// config.explorerUrl  -> \"https://xahau-testnet.xrplwin.com\"\n// config.networkId    -> 21338\n\nconst url = explorerTxUrl(\"ABC123...\");\n// \"https://xahau-testnet.xrplwin.com/tx/ABC123...\"\n```\n\n**Mainnet migration** = set `XAHAU_ENV=mainnet` and fill `MAINNET_HOOKS_ACCOUNT`.\n\n## Usage\n\n### HookClient (primary interface)\n\n```typescript\nimport { createHookClient, ProofType } from '@axkledger/axk-xrpl-core';\nimport { Wallet } from '@transia/xrpl';\n\nconst hookClient = createHookClient();\nconst wallet = Wallet.fromSeed(process.env.ANCHORING_WALLET_SEED);\n\n// Submit checkpoint (Merkle root anchoring)\nconst result = await hookClient.submitCheckpoint({\n  wallet,\n  checkpoint_id: 'ckpt_block_1703123456',\n  merkle_root: 'abc123def456...',   // 64 hex chars\n  block_height: 195000,\n});\n\n// Submit proof (on-chain verification)\nawait hookClient.submitProof({\n  wallet,\n  checkpoint_id: 'ckpt_block_1703123456',\n  claim_hash: 'def789...',          // SHA-256 of the event\n  proof_type: ProofType.MERKLE,\n});\n\n// Create escrow\nawait hookClient.createEscrow({\n  wallet,\n  escrow_id: 'escr_trade_001',\n  amount: '1000000',\n  recipient: 'rDestination...',\n  expiry: Math.floor(Date.now() / 1000) + 86400,\n});\n\n// Cast governance vote\nawait hookClient.castVote({\n  wallet,\n  proposal_id: 'prop_upgrade_001',\n  vote: VoteChoice.YES,\n  weight: 100,\n});\n\n// Token burn event\nawait hookClient.submitTokenBurn({\n  wallet,\n  event_id: 'axk_verify_001',\n  burn_tier: BurnTier.STANDARD,      // 5% burn\n  action_code: (1 << 8) | 0x01,\n  amount: 1000000n,\n  account: 'rAccount...',\n});\n\n// Vesting grant\nawait hookClient.submitVesting({\n  wallet,\n  data: {\n    vest_id: 'vest_team_001',\n    operation: VestingOperation.CREATE,\n    schedule: VestingSchedule.TEAM,\n    total_amount: 750000000n,\n    cliff_end: 1000n,\n    vest_end: 5000n,\n    beneficiary: 'rBeneficiary...',\n  },\n});\n\n// Bridge lock\nawait hookClient.submitBridgeVault({\n  wallet,\n  data: {\n    lock_id: 'brdg_lock_001',\n    operation: BridgeOperation.LOCK,\n    target_chain: TargetChain.ETHEREUM,\n    amount: 5000000n,\n    target_address: Buffer.alloc(20, 0xab),\n    approval_bitmap: 0,\n    nonce: 1n,\n  },\n});\n```\n\n### Validators (standalone)\n\nEach validator can be used independently for validation and binary packing:\n\n```typescript\nimport { CheckpointValidator, TokenEconomicsValidator, BurnTier } from '@axkledger/axk-xrpl-core';\n\n// Validate before submission\nCheckpointValidator.validate({\n  checkpoint_id: 'ckpt_test',\n  merkle_root: 'abc123...',\n  block_height: 100,\n});\n\n// Pack to 80-byte binary hex\nconst binaryHex = CheckpointValidator.pack(data); // 160 hex chars\n\n// Unpack hook state\nconst state = CheckpointValidator.unpack(stateHex);\n\n// Compute burn/fee amounts\nconst { burn, fee } = TokenEconomicsValidator.computeBurnAndFee(10000n, BurnTier.STANDARD);\n// burn = 500n (5%), fee = 1000n (10%)\n```\n\n### Wallet Management\n\n```typescript\nimport { WalletManager } from '@axkledger/axk-xrpl-core';\n\nconst wallet = await WalletManager.generateWallet('anchoring');\nconst loaded = await WalletManager.loadWallet('settlement');\nconst balance = await WalletManager.getBalance(loaded.address);\n```\n\n### DID Operations\n\n```typescript\nimport { DIDManager } from '@axkledger/axk-xrpl-core';\n\nconst did = DIDManager.createDID('rN7n7otQ...');\n// \"did:axk:xrpl:rN7n7otQ...\"\n\nconst doc = await DIDManager.createDIDDocument(walletConfig);\nconst isValid = DIDManager.validateDIDFormat(did);\n```\n\n## CLI Scripts\n\n```bash\n# Wallets\npnpm wallet:generate --type anchoring\npnpm wallet:fund --type anchoring\npnpm wallet:list\n\n# DIDs\npnpm did:create --type anchoring\npnpm did:resolve --did did:axk:xrpl:rN7n7otQ...\npnpm did:validate --did did:axk:xrpl:rN7n7otQ...\n\n# Payments\npnpm payment:send --from anchoring --to rDest... --amount 1 --layer ledger --operation checkpoint\n\n# Hook integration tests\npnpm hook:test:checkpoint\npnpm hook:test:all\n```\n\n## Testing\n\n```bash\npnpm test              # Run all 133 tests\npnpm test:watch        # Watch mode\npnpm test:coverage     # Coverage report\n```\n\nTest suites cover all 9 validators (validate, pack, unpack, reject invalid data, binary format consistency), plus wallet manager, DID manager, memo formatter, and XRPL client.\n\n## Exports\n\n```typescript\n// Core modules\nexport { XRPLClient } from './xrpl-client';\nexport { WalletManager } from './wallet-manager';\nexport { MemoFormatter } from './memo-formatter';\nexport { DIDManager } from './did-manager';\nexport { HookConfig } from './hook-config';\nexport { HookClient, createHookClient } from './hook-client';\n\n// Network config\nexport { resolveNetworkConfig, explorerAccountUrl, explorerTxUrl } from './network-config';\n\n// All 9 validators + enums + types\nexport {\n  CheckpointValidator, ProofValidator, ProofType,\n  EscrowValidator, EscrowStatus,\n  GovernanceValidator, VoteChoice,\n  SettlementValidator,\n  PaymentSplitterValidator,\n  TokenEconomicsValidator, BurnTier,\n  VestingManagerValidator, VestingOperation, VestingSchedule, VestingStatus,\n  BridgeVaultValidator, BridgeOperation, TargetChain, BridgeStatus,\n} from './validators';\n\n// TypeScript types\nexport type {\n  WalletConfig, WalletType, XRPLClientConfig,\n  DIDDocument, MemoData, MemoSchema,\n  CheckpointData, ProofData, EscrowData, GovernanceData,\n  SettlementData, PaymentSplitterData,\n  TokenEconomicsData, VestingData, VestingCreateData, VestingClaimData,\n  BridgeVaultData,\n} from './types';\n```\n\n## Security\n\n- `config/wallets.json` is gitignored — never commit wallet seeds\n- Use environment variables or a secret manager for production seeds\n- Set file permissions: `chmod 600 config/wallets.json .env`\n- Testnet and mainnet configs are separated — no accidental cross-network usage\n\n## License\n\n**Proprietary** - AFRIKABAL 2025-2026\n","readmeFilename":"README.md"}