mirror of
				https://github.com/Xahau/xahau.js.git
				synced 2025-11-04 04:55:48 +00:00 
			
		
		
		
	refactor
This commit is contained in:
		@@ -1,180 +0,0 @@
 | 
			
		||||
[server]
 | 
			
		||||
port_rpc_admin_local
 | 
			
		||||
port_ws_public
 | 
			
		||||
port_ws_admin_local
 | 
			
		||||
 | 
			
		||||
# port_peer
 | 
			
		||||
# port_ws_admin_local
 | 
			
		||||
# ssl_key = /etc/ssl/private/server.key
 | 
			
		||||
# ssl_cert = /etc/ssl/certs/server.crt
 | 
			
		||||
 | 
			
		||||
# IPs must be 0.0.0.0 instead of 127.0.0.1 to be accessed outside the docker container
 | 
			
		||||
 | 
			
		||||
[port_rpc_admin_local]
 | 
			
		||||
port = 5005
 | 
			
		||||
ip = 0.0.0.0
 | 
			
		||||
admin = 0.0.0.0
 | 
			
		||||
protocol = http
 | 
			
		||||
 | 
			
		||||
[port_ws_public]
 | 
			
		||||
port = 80
 | 
			
		||||
ip = 0.0.0.0
 | 
			
		||||
protocol = ws
 | 
			
		||||
 | 
			
		||||
# [port_peer]
 | 
			
		||||
# port = 51235
 | 
			
		||||
# ip = 0.0.0.0
 | 
			
		||||
# protocol = peer
 | 
			
		||||
 | 
			
		||||
[port_ws_admin_local]
 | 
			
		||||
port = 6006
 | 
			
		||||
ip = 0.0.0.0
 | 
			
		||||
admin = 0.0.0.0
 | 
			
		||||
protocol = ws
 | 
			
		||||
 | 
			
		||||
[node_size]
 | 
			
		||||
small
 | 
			
		||||
 | 
			
		||||
# tiny
 | 
			
		||||
# small
 | 
			
		||||
# medium
 | 
			
		||||
# large
 | 
			
		||||
# huge
 | 
			
		||||
 | 
			
		||||
[node_db]
 | 
			
		||||
type=NuDB
 | 
			
		||||
path=/var/lib/rippled/db/nudb
 | 
			
		||||
advisory_delete=0
 | 
			
		||||
 | 
			
		||||
# How many ledgers do we want to keep (history)?
 | 
			
		||||
# Integer value that defines the number of ledgers
 | 
			
		||||
# between online deletion events
 | 
			
		||||
online_delete=256
 | 
			
		||||
 | 
			
		||||
[ledger_history]
 | 
			
		||||
# How many ledgers do we want to keep (history)?
 | 
			
		||||
# Integer value (ledger count)
 | 
			
		||||
# or (if you have lots of TB SSD storage): 'full'
 | 
			
		||||
256
 | 
			
		||||
 | 
			
		||||
[database_path]
 | 
			
		||||
/var/lib/rippled/db
 | 
			
		||||
 | 
			
		||||
[debug_logfile]
 | 
			
		||||
/var/log/rippled/debug.log
 | 
			
		||||
 | 
			
		||||
[sntp_servers]
 | 
			
		||||
time.windows.com
 | 
			
		||||
time.apple.com
 | 
			
		||||
time.nist.gov
 | 
			
		||||
pool.ntp.org
 | 
			
		||||
 | 
			
		||||
[ips]
 | 
			
		||||
r.ripple.com 51235
 | 
			
		||||
 | 
			
		||||
[validators_file]
 | 
			
		||||
validators.txt
 | 
			
		||||
 | 
			
		||||
[rpc_startup]
 | 
			
		||||
{ "command": "log_level", "severity": "info" }
 | 
			
		||||
 | 
			
		||||
# severity (order: lots of information .. only errors)
 | 
			
		||||
# debug
 | 
			
		||||
# info
 | 
			
		||||
# warn
 | 
			
		||||
# error
 | 
			
		||||
# fatal
 | 
			
		||||
 | 
			
		||||
[ssl_verify]
 | 
			
		||||
1
 | 
			
		||||
 | 
			
		||||
# The [features] stanza does not currently work for standalone mode: https://github.com/XRPLF/xrpl-dev-portal/issues/1762#issuecomment-1441252450
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# In order to enable an amendment which by default would vote "No", you must include its amendment id and name here.
 | 
			
		||||
# To add amendments specifically from the latest releases of rippled:
 | 
			
		||||
# 1. Go to https://xrpl.org/known-amendments.html
 | 
			
		||||
# 2. Find the first amendment in the latest releases of rippled which are not already in the list below
 | 
			
		||||
# 3. Click on each amendment to get their Amendment ID and name to add to this list manually.
 | 
			
		||||
#    You will likely update the list with all amendments from a new release of rippled all at once.
 | 
			
		||||
 | 
			
		||||
# To get the list of amendments on a network (e.g. devnet) follow the steps in xrpl.js's CONTRIBUTING.md for "Updating the Docker container".
 | 
			
		||||
# https://github.com/XRPLF/xrpl.js/blob/main/CONTRIBUTING.md
 | 
			
		||||
# (Running the script `getNewAmendments.js` should help you identify any new amendments that should be added.)
 | 
			
		||||
#
 | 
			
		||||
# Note: The version of rippled you use this config with must have an implementation for the amendments you attempt to enable or it will crash.
 | 
			
		||||
# If you need the version of rippled to be more up to date, you may need to make a comment on this repo: https://github.com/WietseWind/docker-rippled
 | 
			
		||||
 | 
			
		||||
[features]
 | 
			
		||||
# Devnet amendments as of June 28th, 2023
 | 
			
		||||
NegativeUNL
 | 
			
		||||
fixRemoveNFTokenAutoTrustLine
 | 
			
		||||
NonFungibleTokensV1
 | 
			
		||||
CheckCashMakesTrustLine
 | 
			
		||||
fixRmSmallIncreasedQOffers
 | 
			
		||||
fixSTAmountCanonicalize
 | 
			
		||||
FlowSortStrands
 | 
			
		||||
TicketBatch
 | 
			
		||||
fix1201
 | 
			
		||||
fixQualityUpperBound
 | 
			
		||||
FlowCross
 | 
			
		||||
EnforceInvariants
 | 
			
		||||
fix1523
 | 
			
		||||
HardenedValidations
 | 
			
		||||
DepositPreauth
 | 
			
		||||
MultiSignReserve
 | 
			
		||||
fix1623
 | 
			
		||||
FeeEscalation
 | 
			
		||||
PayChan
 | 
			
		||||
fix1513
 | 
			
		||||
RequireFullyCanonicalSig
 | 
			
		||||
fix1543
 | 
			
		||||
TickSize
 | 
			
		||||
fix1781
 | 
			
		||||
fixCheckThreading
 | 
			
		||||
fix1515
 | 
			
		||||
CryptoConditions
 | 
			
		||||
fix1528
 | 
			
		||||
fixPayChanRecipientOwnerDir
 | 
			
		||||
SortedDirectories
 | 
			
		||||
fix1578
 | 
			
		||||
fix1571
 | 
			
		||||
fixAmendmentMajorityCalc
 | 
			
		||||
fixTakerDryOfferRemoval
 | 
			
		||||
fixMasterKeyAsRegularKey
 | 
			
		||||
Flow
 | 
			
		||||
Escrow
 | 
			
		||||
TrustSetAuth
 | 
			
		||||
DeletableAccounts
 | 
			
		||||
DepositAuth
 | 
			
		||||
fix1368
 | 
			
		||||
fix1512
 | 
			
		||||
fix1373
 | 
			
		||||
MultiSign
 | 
			
		||||
Checks
 | 
			
		||||
NonFungibleTokensV1_1
 | 
			
		||||
# 1.10.0 Amendments
 | 
			
		||||
DisallowIncoming
 | 
			
		||||
fixNonFungibleTokensV1_2
 | 
			
		||||
fixTrustLinesToSelf
 | 
			
		||||
fixUniversalNumber
 | 
			
		||||
ImmediateOfferKilled
 | 
			
		||||
XRPFees
 | 
			
		||||
# 1.11.0 Amendments
 | 
			
		||||
ExpandedSignerList
 | 
			
		||||
# 1.12.0 Amendments
 | 
			
		||||
AMM
 | 
			
		||||
Clawback
 | 
			
		||||
fixReducedOffersV1
 | 
			
		||||
fixNFTokenRemint
 | 
			
		||||
# 2.0.0 Amendments
 | 
			
		||||
XChainBridge
 | 
			
		||||
DID
 | 
			
		||||
# 2.2.0-b3 Amendments
 | 
			
		||||
fixNFTokenReserve
 | 
			
		||||
fixInnerObjTemplate
 | 
			
		||||
fixAMMOverflowOffer
 | 
			
		||||
PriceOracle
 | 
			
		||||
fixEmptyDID
 | 
			
		||||
fixXChainRewardRounding
 | 
			
		||||
fixPreviousTxnID
 | 
			
		||||
							
								
								
									
										109
									
								
								.ci-config/xahaud.cfg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								.ci-config/xahaud.cfg
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,109 @@
 | 
			
		||||
[server]
 | 
			
		||||
port_rpc_admin_local
 | 
			
		||||
port_ws_public
 | 
			
		||||
port_ws_admin_local
 | 
			
		||||
 | 
			
		||||
# port_peer
 | 
			
		||||
# port_ws_admin_local
 | 
			
		||||
# ssl_key = /etc/ssl/private/server.key
 | 
			
		||||
# ssl_cert = /etc/ssl/certs/server.crt
 | 
			
		||||
 | 
			
		||||
# IPs must be 0.0.0.0 instead of 127.0.0.1 to be accessed outside the docker container
 | 
			
		||||
 | 
			
		||||
[port_rpc_admin_local]
 | 
			
		||||
port = 5005
 | 
			
		||||
ip = 0.0.0.0
 | 
			
		||||
admin = 0.0.0.0
 | 
			
		||||
protocol = http
 | 
			
		||||
 | 
			
		||||
[port_ws_public]
 | 
			
		||||
port = 80
 | 
			
		||||
ip = 0.0.0.0
 | 
			
		||||
protocol = ws
 | 
			
		||||
 | 
			
		||||
# [port_peer]
 | 
			
		||||
# port = 51235
 | 
			
		||||
# ip = 0.0.0.0
 | 
			
		||||
# protocol = peer
 | 
			
		||||
 | 
			
		||||
[port_ws_admin_local]
 | 
			
		||||
port = 6006
 | 
			
		||||
ip = 0.0.0.0
 | 
			
		||||
admin = 0.0.0.0
 | 
			
		||||
protocol = ws
 | 
			
		||||
 | 
			
		||||
[node_size]
 | 
			
		||||
small
 | 
			
		||||
 | 
			
		||||
# tiny
 | 
			
		||||
# small
 | 
			
		||||
# medium
 | 
			
		||||
# large
 | 
			
		||||
# huge
 | 
			
		||||
 | 
			
		||||
[node_db]
 | 
			
		||||
type=NuDB
 | 
			
		||||
path=/var/lib/xahaud/db/nudb
 | 
			
		||||
advisory_delete=0
 | 
			
		||||
 | 
			
		||||
# How many ledgers do we want to keep (history)?
 | 
			
		||||
# Integer value that defines the number of ledgers
 | 
			
		||||
# between online deletion events
 | 
			
		||||
online_delete=256
 | 
			
		||||
 | 
			
		||||
[ledger_history]
 | 
			
		||||
# How many ledgers do we want to keep (history)?
 | 
			
		||||
# Integer value (ledger count)
 | 
			
		||||
# or (if you have lots of TB SSD storage): 'full'
 | 
			
		||||
256
 | 
			
		||||
 | 
			
		||||
[database_path]
 | 
			
		||||
/var/lib/xahaud/db
 | 
			
		||||
 | 
			
		||||
[debug_logfile]
 | 
			
		||||
/var/log/xahaud/debug.log
 | 
			
		||||
 | 
			
		||||
[sntp_servers]
 | 
			
		||||
time.windows.com
 | 
			
		||||
time.apple.com
 | 
			
		||||
time.nist.gov
 | 
			
		||||
pool.ntp.org
 | 
			
		||||
 | 
			
		||||
[ips]
 | 
			
		||||
r.xahau.com 51235
 | 
			
		||||
 | 
			
		||||
# # # # # [validators_file]
 | 
			
		||||
# # # # # validators.txt
 | 
			
		||||
 | 
			
		||||
[rpc_startup]
 | 
			
		||||
{ "command": "log_level", "severity": "info" }
 | 
			
		||||
 | 
			
		||||
# severity (order: lots of information .. only errors)
 | 
			
		||||
# debug
 | 
			
		||||
# info
 | 
			
		||||
# warn
 | 
			
		||||
# error
 | 
			
		||||
# fatal
 | 
			
		||||
 | 
			
		||||
[ssl_verify]
 | 
			
		||||
1
 | 
			
		||||
 | 
			
		||||
# The [features] stanza does not currently work for standalone mode: https://github.com/XRPLF/xrpl-dev-portal/issues/1762#issuecomment-1441252450
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# In order to enable an amendment which by default would vote "No", you must include its amendment id and name here.
 | 
			
		||||
# To add amendments specifically from the latest releases of xahaud:
 | 
			
		||||
# 1. Go to https://xrpl.org/known-amendments.html
 | 
			
		||||
# 2. Find the first amendment in the latest releases of xahaud which are not already in the list below
 | 
			
		||||
# 3. Click on each amendment to get their Amendment ID and name to add to this list manually.
 | 
			
		||||
#    You will likely update the list with all amendments from a new release of xahaud all at once.
 | 
			
		||||
 | 
			
		||||
# To get the list of amendments on a network (e.g. devnet) follow the steps in xahau.js's CONTRIBUTING.md for "Updating the Docker container".
 | 
			
		||||
# https://github.com/XRPLF/xahau.js/blob/main/CONTRIBUTING.md
 | 
			
		||||
# (Running the script `getNewAmendments.js` should help you identify any new amendments that should be added.)
 | 
			
		||||
#
 | 
			
		||||
# Note: The version of xahaud you use this config with must have an implementation for the amendments you attempt to enable or it will crash.
 | 
			
		||||
# If you need the version of xahaud to be more up to date, you may need to make a comment on this repo: https://github.com/WietseWind/docker-xahaud
 | 
			
		||||
 | 
			
		||||
[network_id]
 | 
			
		||||
63456
 | 
			
		||||
							
								
								
									
										12
									
								
								.github/workflows/nodejs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/nodejs.yml
									
									
									
									
										vendored
									
									
								
							@@ -4,11 +4,11 @@
 | 
			
		||||
name: Node.js CI
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  RIPPLED_DOCKER_IMAGE: rippleci/rippled:2.2.0-b3
 | 
			
		||||
  XAHAUD_DOCKER_IMAGE: xahauci/xahaud:2025.2.6
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches: [main, 1.x]
 | 
			
		||||
    branches: [main-xahau, 1.x]
 | 
			
		||||
  pull_request:
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
@@ -108,7 +108,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Run docker in background
 | 
			
		||||
        run: |
 | 
			
		||||
          docker run --detach --rm --name rippled-service -p 6006:6006 --volume "${{ github.workspace }}/.ci-config/":"/opt/ripple/etc/" --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s --env GITHUB_ACTIONS=true --env CI=true ${{ env.RIPPLED_DOCKER_IMAGE }} /opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg
 | 
			
		||||
          docker run --detach --rm --name xahaud-service -p 6006:6006 --volume "${{ github.workspace }}/.ci-config/":"/opt/xahau/etc/" --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s --env GITHUB_ACTIONS=true --env CI=true ${{ env.XAHAUD_DOCKER_IMAGE }} /opt/xahau/bin/xahaud -a --conf /opt/xahau/etc/xahaud.cfg
 | 
			
		||||
 | 
			
		||||
      - name: Use Node.js ${{ matrix.node-version }}
 | 
			
		||||
        uses: actions/setup-node@v3
 | 
			
		||||
@@ -145,7 +145,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Stop docker container
 | 
			
		||||
        if: always()
 | 
			
		||||
        run: docker stop rippled-service
 | 
			
		||||
        run: docker stop xahaud-service
 | 
			
		||||
 | 
			
		||||
  browser:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
@@ -165,7 +165,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Run docker in background
 | 
			
		||||
        run: |
 | 
			
		||||
          docker run --detach --rm --name rippled-service -p 6006:6006 --volume "${{ github.workspace }}/.ci-config/":"/opt/ripple/etc/" --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s --env GITHUB_ACTIONS=true --env CI=true ${{ env.RIPPLED_DOCKER_IMAGE }} /opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg
 | 
			
		||||
          docker run --detach --rm --name xahaud-service -p 6006:6006 --volume "${{ github.workspace }}/.ci-config/":"/opt/ripple/etc/" --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s --env GITHUB_ACTIONS=true --env CI=true ${{ env.XAHAUD_DOCKER_IMAGE }} /opt/ripple/bin/xahaud -a --conf /opt/ripple/etc/xahaud.cfg
 | 
			
		||||
 | 
			
		||||
      - name: Setup npm version 9
 | 
			
		||||
        run: |
 | 
			
		||||
@@ -197,7 +197,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Stop docker container
 | 
			
		||||
        if: always()
 | 
			
		||||
        run: docker stop rippled-service
 | 
			
		||||
        run: docker stop xahaud-service
 | 
			
		||||
 | 
			
		||||
  snippets:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										175
									
								
								APPLICATIONS.md
									
									
									
									
									
								
							
							
						
						
									
										175
									
								
								APPLICATIONS.md
									
									
									
									
									
								
							@@ -1,175 +0,0 @@
 | 
			
		||||
# Applications using xrpl.js
 | 
			
		||||
 | 
			
		||||
A curated list of some of the projects and apps that leverage `xrpl.js` in some way.
 | 
			
		||||
 | 
			
		||||
**Have one to add?** Please edit this file and open a PR!
 | 
			
		||||
 | 
			
		||||
## Notice (disclaimer)
 | 
			
		||||
 | 
			
		||||
These sites are independent of Ripple and have not been authorized, endorsed, sponsored or otherwise approved by Ripple or its affiliates.
 | 
			
		||||
 | 
			
		||||
Warning: Use at your own risk.
 | 
			
		||||
 | 
			
		||||
## Exchanges
 | 
			
		||||
 | 
			
		||||
- **[The World Exchange](https://www.theworldexchange.net/)**
 | 
			
		||||
 | 
			
		||||
  Trade, issue, and send directly on the XRP Ledger. A user interface for the XRPL's decentralized exchange. Includes an implementation of an autobridged order book for token-to-token trading pairs in the [source code](https://github.com/pftq/TheWorldExchange).
 | 
			
		||||
 | 
			
		||||
- **[Bitso](https://bitso.com/)**
 | 
			
		||||
 | 
			
		||||
  Exchange allowing clients to buy and sell XRP, based in Mexico.
 | 
			
		||||
 | 
			
		||||
## Explorers
 | 
			
		||||
 | 
			
		||||
- **[xrpintel - XRP Intelligence](https://xrpintel.com/)**
 | 
			
		||||
 | 
			
		||||
  Monitor the XRP Network in real time and explore historical statistics.
 | 
			
		||||
 | 
			
		||||
- **[XRP Charts](https://xrpcharts.ripple.com/)** (xrpcharts.ripple.com)
 | 
			
		||||
 | 
			
		||||
  XRP Charts provides information based on public data, including trade volume, top markets, metrics, transactions, and more.
 | 
			
		||||
 | 
			
		||||
- **[Ripple Live](https://gatehub.net/live)** (gatehub.net/live)
 | 
			
		||||
 | 
			
		||||
  Visualize XRP network transactions.
 | 
			
		||||
 | 
			
		||||
- **[XRPL Dev. Dashboard](https://xrp.fans/)** (xrp.fans)
 | 
			
		||||
 | 
			
		||||
  Debugging dashboard for `rippled-ws-client-pool`, transaction and query explorer, and transaction signing and submission tool.
 | 
			
		||||
 | 
			
		||||
- **[XRP Value](http://xrpvalue.com/)**
 | 
			
		||||
 | 
			
		||||
  Real-time XRP price, trades, and orderbook data from the XRP Ledger.
 | 
			
		||||
 | 
			
		||||
- **[Bithomp - XRP Explorer](https://bithomp.com/explorer/)**
 | 
			
		||||
 | 
			
		||||
  Look up information by entering an address, transaction hash, username, or PayID.
 | 
			
		||||
 | 
			
		||||
- **[Bithomp - XRPL validators](https://bithomp.com/validators)**
 | 
			
		||||
 | 
			
		||||
  List of XRPL validators, nodes, and testnet validators.
 | 
			
		||||
 | 
			
		||||
- **[XRP Scan - XRP Ledger explorer](https://xrpscan.com)**
 | 
			
		||||
 | 
			
		||||
  XRP Ledger explorer, metrics and analytics.
 | 
			
		||||
 | 
			
		||||
- **[xrplorer](https://xrplorer.com)**
 | 
			
		||||
 | 
			
		||||
  XRP Ledger explorer, API, metrics, and analytics using a graph database that is synchronized live with the XRPL.
 | 
			
		||||
 | 
			
		||||
- **[XRPLWin](https://xrplwin.com)**
 | 
			
		||||
 | 
			
		||||
  XRP Ledger and Xahau explorer, Hooks explorer, metrics, and analytics using a XWA backend that is synchronized live with the XRPL and Xahau.
 | 
			
		||||
 | 
			
		||||
## Data monitoring
 | 
			
		||||
 | 
			
		||||
- **[zerptracker](https://zerptracker.com)**
 | 
			
		||||
 | 
			
		||||
  Monitor the XRPL using powerful JSONPath expressions, and receive notifications via email, SMS, webhooks, and more.
 | 
			
		||||
 | 
			
		||||
- **[Utility-Scan](https://utility-scan.com)**
 | 
			
		||||
 | 
			
		||||
  Attempts to detect RippleNet on-demand liquidity (ODL) transactions through known fiat corridors and report these transactions in real time.
 | 
			
		||||
 | 
			
		||||
- **[XRPL Rosetta](https://threexrp.dev/)**
 | 
			
		||||
 | 
			
		||||
  3D Globe written in three.js connected to a Node.js websocket server that is listening to exchanges and the XRPL. The visualization aims to show trading, ODL, and liquidity at exchanges, intra-exchange volume, and flows.
 | 
			
		||||
 | 
			
		||||
## Wallets and wallet tools
 | 
			
		||||
 | 
			
		||||
- **[GemWallet](https://gemwallet.app/)**
 | 
			
		||||
 | 
			
		||||
  Users can use the GemWallet (non-custodial) web extension to interact with the XRPL from their browser. The documentation is available at [https://gemwallet.app/](https://gemwallet.app/docs/user-guide/introduction).
 | 
			
		||||
 | 
			
		||||
- **[XUMM](https://xumm.app/)**
 | 
			
		||||
 | 
			
		||||
  Users can use the xumm application to track their accounts, balances and transactions. The true power of xumm is the platform available for developers.
 | 
			
		||||
 | 
			
		||||
- **[Xpring Wallet](https://xpring.io)** (uses `ripple-keypairs`)
 | 
			
		||||
 | 
			
		||||
  Non-custodial XRP wallet.
 | 
			
		||||
 | 
			
		||||
- **[XRP Toolkit](https://www.xrptoolkit.com)**
 | 
			
		||||
 | 
			
		||||
  A web interface to the XRP Ledger, supporting both hardware and software wallets.
 | 
			
		||||
 | 
			
		||||
- **[Toast Wallet](https://toastwallet.com/)**
 | 
			
		||||
 | 
			
		||||
  A free, open source XRP Wallet for iOS, Android, Windows, Mac and Linux.
 | 
			
		||||
 | 
			
		||||
- **[Toastify Ledger](https://github.com/WietseWind/toastify-ledger)** (uses `ripple-keypairs`)
 | 
			
		||||
 | 
			
		||||
  Add a Regular Key to a mnemonic XRP Wallet (e.g. Ledger Nano S) to use the account with a Family Seed (secret).
 | 
			
		||||
 | 
			
		||||
- **[Bithomp-submit](https://github.com/Bithomp/bithomp-submit)** (GitHub)
 | 
			
		||||
 | 
			
		||||
  A tool to submit an offline-signed XRPL transaction.
 | 
			
		||||
 | 
			
		||||
- **[Kyte](https://kyteapp.co/)** (kyteapp.co) ([Source](https://github.com/WietseWind/Zerp-Wallet)) (Deprecated)
 | 
			
		||||
 | 
			
		||||
  Web-based XRP wallet.
 | 
			
		||||
 | 
			
		||||
- **[XRP Vanity Address Generator](https://github.com/WietseWind/xrp-vanity-generator)** (Node.js)
 | 
			
		||||
 | 
			
		||||
  A vanity address is a wallet address containing a few characters you like at the beginning or the end of the wallet address.
 | 
			
		||||
 | 
			
		||||
- **[XRP Account Mnemonic Recovery](https://github.com/WietseWind/xrp-mnemonic-recovery)** (uses `ripple-keypairs`)
 | 
			
		||||
 | 
			
		||||
  Recover a 24 word mnemonic if one word is wrong or one word is missing.
 | 
			
		||||
 | 
			
		||||
- **[Trustline](https://trustline.co)**
 | 
			
		||||
 | 
			
		||||
  A decentralized stablecoin wallet that runs on the XRP Ledger.
 | 
			
		||||
 | 
			
		||||
## Send and request payments
 | 
			
		||||
 | 
			
		||||
- **[XRP Tip Bot](https://www.xrptipbot.com/)**
 | 
			
		||||
 | 
			
		||||
  A bot that enables users on reddit, Twitter and Discord to send XRP to each other through reddit comments and Twitter tweets.
 | 
			
		||||
 | 
			
		||||
- **[XRP Text](https://xrptext.com/)**
 | 
			
		||||
 | 
			
		||||
  Send XRP using SMS text messages.
 | 
			
		||||
 | 
			
		||||
- **[XRParrot](https://xrparrot.com/)** (uses `ripple-address-codec`)
 | 
			
		||||
 | 
			
		||||
  Easy EUR (SEPA) to XRP transfer (currency conversion).
 | 
			
		||||
 | 
			
		||||
- **[XRP Payment](https://xrpayments.co/)** (xrpayments.co)
 | 
			
		||||
 | 
			
		||||
  Tool for generating a XRP payment request URI in a QR code, with currency converter.
 | 
			
		||||
 | 
			
		||||
## Development tools
 | 
			
		||||
 | 
			
		||||
- **[XRP Faucets for Testnet and Devnet](https://xrpl.org/xrp-testnet-faucet.html)**
 | 
			
		||||
 | 
			
		||||
  Get some test funds for development on the test network. The faucet uses `xrpl.js`.
 | 
			
		||||
 | 
			
		||||
## Code samples and libraries
 | 
			
		||||
 | 
			
		||||
- **[ilp-plugin-xrp-paychan](https://github.com/interledgerjs/ilp-plugin-xrp-paychan)**
 | 
			
		||||
 | 
			
		||||
  Send ILP payments using XRP and payment channels (PayChan).
 | 
			
		||||
 | 
			
		||||
- **[RunKit: WietseWind](https://runkit.com/wietsewind/)**
 | 
			
		||||
 | 
			
		||||
  XRP Ledger code samples for Node.js.
 | 
			
		||||
 | 
			
		||||
- **[GitHub Gist: WietseWind](https://gist.github.com/WietseWind)**
 | 
			
		||||
 | 
			
		||||
  XRP Ledger code samples for Node.js and the web (mostly).
 | 
			
		||||
 | 
			
		||||
- **[rippled-ws-client-sign](https://github.com/WietseWind/rippled-ws-client-sign)**
 | 
			
		||||
 | 
			
		||||
  Sign transactions, with support for MultiSign.
 | 
			
		||||
 | 
			
		||||
- **[ILP-enabled power switch](https://xrpcommunity.blog/raspberry-pi-interledger-xp-powerswitch-howto/)** ([video](https://www.youtube.com/watch?v=c-eS0HQUuJg)) (uses [`moneyd-uplink-xrp`](https://github.com/interledgerjs/moneyd-uplink-xrp))
 | 
			
		||||
 | 
			
		||||
  For about $30 in parts (Raspberry Pi, 3.3V Relay board and a few wires) you can build your own power switch that will switch on if a streaming ILP payment comes in. When the payment stream stops, the power turns off.
 | 
			
		||||
 | 
			
		||||
## Related apps that do not appear to use xrpl.js
 | 
			
		||||
 | 
			
		||||
- **[XRP Stats](https://ledger.exposed/)** (ledger.exposed)
 | 
			
		||||
 | 
			
		||||
  Rich list, live ledger stats and XRP distribution. Visualize escrows and flow of funds.
 | 
			
		||||
@@ -47,7 +47,7 @@ npm run lint
 | 
			
		||||
 | 
			
		||||
## Running Tests
 | 
			
		||||
 | 
			
		||||
For integration and browser tests, we use a `rippled` node in standalone mode to test xrpl.js code against. To set this up, you can either configure and run `rippled` locally, or set up the Docker container `rippleci/rippled` by [following these instructions](#integration-tests). The latter will require you to [install Docker](https://docs.docker.com/get-docker/).
 | 
			
		||||
For integration and browser tests, we use a `xahaud` node in standalone mode to test xahau.js code against. To set this up, you can either configure and run `xahaud` locally, or set up the Docker container `xahauci/xahaud` by [following these instructions](#integration-tests). The latter will require you to [install Docker](https://docs.docker.com/get-docker/).
 | 
			
		||||
 | 
			
		||||
### Unit Tests
 | 
			
		||||
 | 
			
		||||
@@ -59,12 +59,12 @@ npm test
 | 
			
		||||
 | 
			
		||||
### Integration Tests
 | 
			
		||||
 | 
			
		||||
From the top-level xrpl.js folder (one level above `packages`), run the following commands:
 | 
			
		||||
From the top-level xahau.js folder (one level above `packages`), run the following commands:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm install
 | 
			
		||||
# sets up the rippled standalone Docker container - you can skip this step if you already have it set up
 | 
			
		||||
docker run -p 6006:6006 --interactive -t --volume $PWD/.ci-config:/opt/ripple/etc/ --platform linux/amd64 rippleci/rippled:2.0.0-b4 /opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg
 | 
			
		||||
# sets up the xahaud standalone Docker container - you can skip this step if you already have it set up
 | 
			
		||||
docker run -p 6006:6006 --interactive -t --volume $PWD/.ci-config:/opt/xahau/etc/ --platform linux/amd64 xahauci/xahaud:2025.2.6 /opt/xahau/bin/xahaud -a --conf /opt/xahau/etc/xahaud.cfg
 | 
			
		||||
npm run build
 | 
			
		||||
npm run test:integration
 | 
			
		||||
```
 | 
			
		||||
@@ -73,9 +73,9 @@ Breaking down the command:
 | 
			
		||||
* `docker run -p 6006:6006` starts a Docker container with an open port for admin WebSocket requests.
 | 
			
		||||
* `--interactive` allows you to interact with the container.
 | 
			
		||||
* `-t` starts a terminal in the container for you to send commands to.
 | 
			
		||||
* `--volume $PWD/.ci-config:/config/` identifies the `rippled.cfg` and `validators.txt` to import. It must be an absolute path, so we use `$PWD` instead of `./`.
 | 
			
		||||
* `rippleci/rippled` is an image that is regularly updated with the latest `rippled` releases
 | 
			
		||||
* `/opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg` starts `rippled` in standalone mode
 | 
			
		||||
* `--volume $PWD/.ci-config:/config/` identifies the `xahaud.cfg` and `validators.txt` to import. It must be an absolute path, so we use `$PWD` instead of `./`.
 | 
			
		||||
* `xahauci/xahaud` is an image that is regularly updated with the latest `xahaud` releases
 | 
			
		||||
* `/opt/xahau/bin/xahaud -a --conf /opt/xahau/etc/xahaud.cfg` starts `xahaud` in standalone mode
 | 
			
		||||
 | 
			
		||||
### Browser Tests
 | 
			
		||||
 | 
			
		||||
@@ -85,12 +85,12 @@ One is in the browser - run `npm run build:browserTests` and open `test/localInt
 | 
			
		||||
 | 
			
		||||
The other is in the command line (this is what we use for CI) -
 | 
			
		||||
 | 
			
		||||
This should be run from the `xrpl.js` top level folder (one above the `packages` folder).
 | 
			
		||||
This should be run from the `xahau.js` top level folder (one above the `packages` folder).
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm run build
 | 
			
		||||
# sets up the rippled standalone Docker container - you can skip this step if you already have it set up
 | 
			
		||||
docker run -p 6006:6006 --interactive -t --volume $PWD/.ci-config:/opt/ripple/etc/ --platform linux/amd64 rippleci/rippled:2.2.0-b3 /opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg
 | 
			
		||||
# sets up the xahaud standalone Docker container - you can skip this step if you already have it set up
 | 
			
		||||
docker run -p 6006:6006 --interactive -t --volume $PWD/.ci-config:/opt/xahau/etc/ --platform linux/amd64 xahauci/xahaud:2025.2.6 /opt/xahau/bin/xahaud -a --conf /opt/xahau/etc/xahaud.cfg
 | 
			
		||||
npm run test:browser
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@@ -100,47 +100,47 @@ This is a monorepo, which means that there are multiple packages in a single Git
 | 
			
		||||
 | 
			
		||||
The 4 packages currently here are:
 | 
			
		||||
 | 
			
		||||
1. xrpl.js - The client library for interacting with the ledger.
 | 
			
		||||
2. ripple-binary-codec - A library for serializing and deserializing transactions for the ledger.
 | 
			
		||||
3. ripple-keypairs - A library for generating and using cryptographic keypairs.
 | 
			
		||||
4. ripple-address-codec - A library for encoding and decoding XRP Ledger addresses and seeds.
 | 
			
		||||
1. xahau.js - The client library for interacting with the ledger.
 | 
			
		||||
2. xahau-binary-codec - A library for serializing and deserializing transactions for the ledger.
 | 
			
		||||
3. xahau-keypairs - A library for generating and using cryptographic keypairs.
 | 
			
		||||
4. xahau-address-codec - A library for encoding and decoding Xahau Ledger addresses and seeds.
 | 
			
		||||
5. isomorphic - A collection of isomorphic implementations of crypto and utility functions.
 | 
			
		||||
6. secret-numbers - Generate XRPL Accounts with a number-based secret: 8 chunks of 6 digits.
 | 
			
		||||
 | 
			
		||||
Each package has it's own README which dives deeper into what it's main purpose is, and the core functionality it offers.
 | 
			
		||||
They also run tests independently as they were originally in separate repositories.
 | 
			
		||||
 | 
			
		||||
These are managed in a monorepo because often a change in a lower-level library will also require a change in xrpl.js, and so it makes sense to be able to allow for modifications of all packages at once without coordinating versions across multiple repositories.
 | 
			
		||||
These are managed in a monorepo because often a change in a lower-level library will also require a change in xahau.js, and so it makes sense to be able to allow for modifications of all packages at once without coordinating versions across multiple repositories.
 | 
			
		||||
 | 
			
		||||
Let's dive a bit into how xrpl.js is structured!
 | 
			
		||||
Let's dive a bit into how xahau.js is structured!
 | 
			
		||||
 | 
			
		||||
### The File Structure
 | 
			
		||||
 | 
			
		||||
Within the xrpl package, each folder has a specific purpose:
 | 
			
		||||
 | 
			
		||||
**Client** - This contains logic for handling the websocket connection to rippled servers.
 | 
			
		||||
**Client** - This contains logic for handling the websocket connection to xahaud servers.
 | 
			
		||||
**Models** - These types model LedgerObjects, Requests/Methods, and Transactions in order to give type hints and nice errors for users.
 | 
			
		||||
**Sugar** - This is where handy helper functions end up, like `submit`, `autofill`, and `getXRPBalance` amongst others.
 | 
			
		||||
**Sugar** - This is where handy helper functions end up, like `submit`, `autofill`, and `getXAHBalance` amongst others.
 | 
			
		||||
**Utils** - These are shared functions which are useful for conversions, or internal implementation details within the library.
 | 
			
		||||
**Wallet** - This logic handles managing keys, addresses, and signing within xrpl.js
 | 
			
		||||
**Wallet** - This logic handles managing keys, addresses, and signing within xahau.js
 | 
			
		||||
 | 
			
		||||
### Writing Tests for xrpl.js
 | 
			
		||||
### Writing Tests for xahau.js
 | 
			
		||||
 | 
			
		||||
For every file in `src`, we try to have a corresponding file in `test` with unit tests.
 | 
			
		||||
 | 
			
		||||
The goal is to maintain above 80% code coverage, and generally any new feature or bug fix should be accompanied by unit tests, and integration tests if applicable.
 | 
			
		||||
 | 
			
		||||
For an example of a unit test, check out the [autofill tests here](./packages/xrpl/test/client/autofill.ts).
 | 
			
		||||
For an example of a unit test, check out the [autofill tests here](./packages/xahau/test/client/autofill.ts).
 | 
			
		||||
 | 
			
		||||
If your code connects to the ledger (ex. Adding a new transaction type) it's handy to write integration tests to ensure that you can successfully interact with the ledger. Integration tests are generally run against a docker instance of rippled which contains the latest updates. Since standalone mode allows us to manually close ledgers, this allows us to run integration tests at a much faster rate than if we had to wait 4-5 seconds per transaction for the ledger to validate the transaction. [See above](#running-tests) for how to start up the docker container to run integration tests.
 | 
			
		||||
If your code connects to the ledger (ex. Adding a new transaction type) it's handy to write integration tests to ensure that you can successfully interact with the ledger. Integration tests are generally run against a docker instance of xahaud which contains the latest updates. Since standalone mode allows us to manually close ledgers, this allows us to run integration tests at a much faster rate than if we had to wait 4-5 seconds per transaction for the ledger to validate the transaction. [See above](#running-tests) for how to start up the docker container to run integration tests.
 | 
			
		||||
 | 
			
		||||
All integration tests should be written in the `test/integration` folder, with new `Requests` and `Transactions` tests being in their respective folders.
 | 
			
		||||
 | 
			
		||||
For an example of how to write an integration test for `xrpl.js`, you can look at the [Payment integration test](./packages/xrpl/test/integration/transactions/payment.ts).
 | 
			
		||||
For an example of how to write an integration test for `xahau.js`, you can look at the [Payment integration test](./packages/xahau/test/integration/transactions/payment.ts).
 | 
			
		||||
 | 
			
		||||
## Generate reference docs
 | 
			
		||||
 | 
			
		||||
You can see the complete reference documentation at [`xrpl.js` docs](https://js.xrpl.org). You can also generate them locally using `typedoc`:
 | 
			
		||||
You can see the complete reference documentation at [`xahau.js` docs](https://js.xrpl.org). You can also generate them locally using `typedoc`:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm run docgen
 | 
			
		||||
@@ -150,17 +150,17 @@ This updates `docs/` at the top level, where GitHub Pages looks for the docs.
 | 
			
		||||
 | 
			
		||||
## Update `definitions.json`
 | 
			
		||||
 | 
			
		||||
Use [this repo](https://github.com/RichardAH/xrpl-codec-gen) to generate a new `definitions.json` file from the rippled source code. Instructions are available in that README.
 | 
			
		||||
Use [this repo](https://github.com/RichardAH/xrpl-codec-gen) to generate a new `definitions.json` file from the xahaud source code. Instructions are available in that README.
 | 
			
		||||
 | 
			
		||||
## Adding and removing packages
 | 
			
		||||
 | 
			
		||||
`xrpl.js` uses `lerna` and `npm`'s workspaces features to manage a monorepo.
 | 
			
		||||
`xahau.js` uses `lerna` and `npm`'s workspaces features to manage a monorepo.
 | 
			
		||||
Adding and removing packages requires a slightly different process than normal
 | 
			
		||||
as a result.
 | 
			
		||||
 | 
			
		||||
### Adding or removing development dependencies
 | 
			
		||||
 | 
			
		||||
`xrpl.js` strives to use the same development dependencies in all packages.
 | 
			
		||||
`xahau.js` strives to use the same development dependencies in all packages.
 | 
			
		||||
You may add and remove dev dependencies like normal:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
@@ -175,38 +175,38 @@ npm uninstall --save-dev abbrev
 | 
			
		||||
You need to specify which package is changing using the `-w` flag:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
### adding a new dependency to `xrpl`
 | 
			
		||||
npm install abbrev -w xrpl
 | 
			
		||||
### adding a new dependency to `ripple-keypairs`
 | 
			
		||||
npm install abbrev -w ripple-keypairs
 | 
			
		||||
### adding a new dependency to `xahau`
 | 
			
		||||
npm install abbrev -w xahau
 | 
			
		||||
### adding a new dependency to `xahau-keypairs`
 | 
			
		||||
npm install abbrev -w xahau-keypairs
 | 
			
		||||
### removing a dependency
 | 
			
		||||
npm uninstall abbrev -w xrpl
 | 
			
		||||
npm uninstall abbrev -w xahau
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Updating the Docker container for CI
 | 
			
		||||
 | 
			
		||||
In order to test the library, we need to enable the latest amendments in the docker container.
 | 
			
		||||
This requires updating the `/.ci-config/rippled.cfg` file with the hashes and names of new amendments.
 | 
			
		||||
This requires updating the `/.ci-config/xahaud.cfg` file with the hashes and names of new amendments.
 | 
			
		||||
 | 
			
		||||
In order to update the list, follow these steps from the top level of the library:
 | 
			
		||||
1. Run `node ./.ci-config/getNewAmendments.js`
 | 
			
		||||
2. If there are any new amendment hashes, add a comment to the end of `/.ci-config/rippled.cfg` with the date
 | 
			
		||||
2. If there are any new amendment hashes, add a comment to the end of `/.ci-config/xahaud.cfg` with the date
 | 
			
		||||
   - `Ex. "# Added August 9th, 2023"`
 | 
			
		||||
3. For each hash printed out by the script, add the hash and name to the config file.
 | 
			
		||||
   - Ex. `B2A4DB846F0891BF2C76AB2F2ACC8F5B4EC64437135C6E56F3F859DE5FFD5856 ExpandedSignerList`
 | 
			
		||||
   - You can look up the name by searching for the hash on https://xrpl.org/known-amendments.html
 | 
			
		||||
4. Push your changes
 | 
			
		||||
 | 
			
		||||
Note: The same updated config can be used to update xrpl-py's CI as well.
 | 
			
		||||
Note: The same updated config can be used to update xahau-py's CI as well.
 | 
			
		||||
 | 
			
		||||
## Updating `definitions.json`
 | 
			
		||||
 | 
			
		||||
This should almost always be done using the [`xrpl-codec-gen`](https://github.com/RichardAH/xrpl-codec-gen) script - if the output needs manual intervention afterwards, consider updating the script instead.
 | 
			
		||||
 | 
			
		||||
1. Clone / pull the latest changes from [rippled](https://github.com/XRPLF/rippled) - Specifically the `develop` branch is usually the right one.
 | 
			
		||||
1. Clone / pull the latest changes from [xahaud](https://github.com/XRPLF/xahaud) - Specifically the `develop` branch is usually the right one.
 | 
			
		||||
2. Clone / pull the latest changes from [`xrpl-codec-gen`](https://github.com/RichardAH/xrpl-codec-gen)
 | 
			
		||||
3. From the `xrpl-codec-gen` tool, follow the steps in the `README.md` to generate a new `definitions.json` file.
 | 
			
		||||
4. Replace the `definitions.json` file in the `ripple-binary-codec` with the newly generated file.
 | 
			
		||||
4. Replace the `definitions.json` file in the `xahau-binary-codec` with the newly generated file.
 | 
			
		||||
5. Verify that the changes make sense by inspection before submitting, as there may be updates required for the `xrpl-codec-gen` tool depending on the latest amendments we're updating to match.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -246,13 +246,13 @@ This should almost always be done using the [`xrpl-codec-gen`](https://github.co
 | 
			
		||||
 | 
			
		||||
   - Stable release: Run `npx lerna publish from-package --yes`
 | 
			
		||||
   - Beta release: Run `npx lerna publish from-package --dist-tag beta --yes`
 | 
			
		||||
     Notice this allows developers to install the package with `npm add xrpl@beta`
 | 
			
		||||
     Notice this allows developers to install the package with `npm add xahau@beta`
 | 
			
		||||
 | 
			
		||||
1. If requested, enter your [npmjs.com](https://npmjs.com) OTP (one-time password) to complete publication.
 | 
			
		||||
 | 
			
		||||
   NOW YOU HAVE PUBLISHED! But you're not done; we have to notify people!
 | 
			
		||||
 | 
			
		||||
1. Run `git tag <tagname> -m <tagname>`, where `<tagname>` is the new package and version (e.g. `xrpl@2.1.1`), for each version released.
 | 
			
		||||
1. Run `git tag <tagname> -m <tagname>`, where `<tagname>` is the new package and version (e.g. `xahau@2.1.1`), for each version released.
 | 
			
		||||
1. Run `git push --follow-tags`, to push the tags to Github.
 | 
			
		||||
1. On GitHub, click the "Releases" link on the right-hand side of the page.
 | 
			
		||||
 | 
			
		||||
@@ -262,19 +262,19 @@ This should almost always be done using the [`xrpl-codec-gen`](https://github.co
 | 
			
		||||
   1. Click "Choose a tag", and choose a tag that you just created.
 | 
			
		||||
   1. Edit the name of the release to match the tag (IE \<package\>@\<version\>) and edit the description as you see fit.
 | 
			
		||||
 | 
			
		||||
1. Send an email to [xrpl-announce](https://groups.google.com/g/xrpl-announce).
 | 
			
		||||
1. Lastly, send a similar message to the XRPL Discord in the [`javascript` channel](https://discord.com/channels/886050993802985492/886053111179915295). The message should include:
 | 
			
		||||
   1. The version changes for xrpl libraries
 | 
			
		||||
1. Send an email to [xahau-announce](https://groups.google.com/g/xahau-announce).
 | 
			
		||||
1. Lastly, send a similar message to the Xahau Discord in the [`javascript` channel](https://discord.com/channels/1085202760548499486/1085203623111295068). The message should include:
 | 
			
		||||
   1. The version changes for xahau libraries
 | 
			
		||||
   1. A link to the more detailed changes
 | 
			
		||||
   1. Highlights of important changes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Mailing Lists
 | 
			
		||||
 | 
			
		||||
We have a low-traffic mailing list for announcements of new `xrpl.js` releases. (About 1 email every couple of weeks)
 | 
			
		||||
We have a low-traffic mailing list for announcements of new `xahau.js` releases. (About 1 email every couple of weeks)
 | 
			
		||||
 | 
			
		||||
- [Subscribe to xrpl-announce](https://groups.google.com/g/xrpl-announce)
 | 
			
		||||
- [Subscribe to xahau-announce](https://groups.google.com/g/xahau-announce)
 | 
			
		||||
 | 
			
		||||
If you're using the XRP Ledger in production, you should run a [rippled server](https://github.com/ripple/rippled) and subscribe to the ripple-server mailing list as well.
 | 
			
		||||
If you're using the Xahau Ledger in production, you should run a [xahaud server](https://github.com/xahau/xahaud) and subscribe to the xahau-server mailing list as well.
 | 
			
		||||
 | 
			
		||||
- [Subscribe to ripple-server](https://groups.google.com/g/ripple-server)
 | 
			
		||||
- [Subscribe to xahau-server](https://groups.google.com/g/xahau-server)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,31 +1,31 @@
 | 
			
		||||
# Unique Setup Steps for Xrpl.js
 | 
			
		||||
# Unique Setup Steps for Xahau.js
 | 
			
		||||
 | 
			
		||||
Starting in 3.0 xrpl and all the packages in this repo no longer require custom configurations (ex. polyfills) to run.
 | 
			
		||||
Starting in 3.0 xahau and all the packages in this repo no longer require custom configurations (ex. polyfills) to run.
 | 
			
		||||
 | 
			
		||||
### Using xrpl.js from a CDN
 | 
			
		||||
### Using xahau.js from a CDN
 | 
			
		||||
 | 
			
		||||
You can avoid setting up your build system to handle `xrpl.js` by using a cdn version that is prebuilt for the browser.
 | 
			
		||||
You can avoid setting up your build system to handle `xahau.js` by using a cdn version that is prebuilt for the browser.
 | 
			
		||||
 | 
			
		||||
- unpkg `<script src="https://unpkg.com/xrpl@2.3.0/build/xrpl-latest-min.js"></script>`
 | 
			
		||||
- jsdelivr `<script src="https://cdn.jsdelivr.net/npm/xrpl@2.3.0/build/xrpl-latest-min.js"></script>`
 | 
			
		||||
- unpkg `<script src="https://unpkg.com/xahau@2.3.0/build/xahau-latest-min.js"></script>`
 | 
			
		||||
- jsdelivr `<script src="https://cdn.jsdelivr.net/npm/xahau@2.3.0/build/xahau-latest-min.js"></script>`
 | 
			
		||||
 | 
			
		||||
Ensure that the full path is provided so the browser can find the sourcemaps.
 | 
			
		||||
 | 
			
		||||
### Using xrpl.js with `create-react-app`
 | 
			
		||||
### Using xahau.js with `create-react-app`
 | 
			
		||||
 | 
			
		||||
Starting in 3.0 xrpl and its related packages no longer require custom configurations (ex. polyfills) to run.
 | 
			
		||||
Starting in 3.0 xahau and its related packages no longer require custom configurations (ex. polyfills) to run.
 | 
			
		||||
 | 
			
		||||
This online template uses these steps to run xrpl.js with React in the browser:
 | 
			
		||||
https://codesandbox.io/s/xrpl-intro-pxgdjr?file=/src/App.js
 | 
			
		||||
This online template uses these steps to run xahau.js with React in the browser:
 | 
			
		||||
https://codesandbox.io/s/xahau-intro-pxgdjr?file=/src/App.js
 | 
			
		||||
 | 
			
		||||
### Using xrpl.js with React Native
 | 
			
		||||
### Using xahau.js with React Native
 | 
			
		||||
 | 
			
		||||
If you want to use `xrpl.js` with React Native you will need to install polyfills for core NodeJS modules.
 | 
			
		||||
If you want to use `xahau.js` with React Native you will need to install polyfills for core NodeJS modules.
 | 
			
		||||
 | 
			
		||||
1. Install dependencies (you can use `yarn` as well):
 | 
			
		||||
 | 
			
		||||
   ```shell
 | 
			
		||||
   npm install xrpl \
 | 
			
		||||
   npm install xahau \
 | 
			
		||||
       fast-text-encoding \
 | 
			
		||||
       react-native-get-random-values
 | 
			
		||||
   ```
 | 
			
		||||
@@ -36,7 +36,7 @@ If you want to use `xrpl.js` with React Native you will need to install polyfill
 | 
			
		||||
   # compile `react-native-get-random-values` pods see https://www.npmjs.com/package/react-native-get-random-values#installation
 | 
			
		||||
   npx pod-install
 | 
			
		||||
   ```
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
3. Create `polyfills.js` and add
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
@@ -53,23 +53,23 @@ import './polyfills'
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Using xrpl.js with Vite React
 | 
			
		||||
### Using xahau.js with Vite React
 | 
			
		||||
 | 
			
		||||
Starting in 3.0 xrpl and all the packages in this repo no longer require custom configurations (ex. polyfills) to run.
 | 
			
		||||
Starting in 3.0 xahau and all the packages in this repo no longer require custom configurations (ex. polyfills) to run.
 | 
			
		||||
 | 
			
		||||
### Using xrpl.js with Deno
 | 
			
		||||
### Using xahau.js with Deno
 | 
			
		||||
 | 
			
		||||
Until official support for [Deno](https://deno.land) is added, you can use the following work-around to use `xrpl.js` with Deno:
 | 
			
		||||
Until official support for [Deno](https://deno.land) is added, you can use the following work-around to use `xahau.js` with Deno:
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> The following is currently broken due to https://github.com/denoland/deno/issues/20516.
 | 
			
		||||
> Once that is fixed there could be other issues as well.
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
import xrpl from 'https://dev.jspm.io/npm:xrpl';
 | 
			
		||||
import xahau from 'https://dev.jspm.io/npm:xahau';
 | 
			
		||||
 | 
			
		||||
(async () => {
 | 
			
		||||
  const api = new (xrpl as any).Client('wss://s.altnet.rippletest.net:51233');
 | 
			
		||||
  const api = new (xahau as any).Client('wss://xahau-test.net');
 | 
			
		||||
  const address = 'rH8NxV12EuV...khfJ5uw9kT';
 | 
			
		||||
 | 
			
		||||
  api.connect().then(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
{
 | 
			
		||||
  "version": "independent",
 | 
			
		||||
  "useWorkspaces": true,
 | 
			
		||||
  "npmClient": "npm"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										440
									
								
								migrate.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										440
									
								
								migrate.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,440 @@
 | 
			
		||||
// replaceScript.ts
 | 
			
		||||
 | 
			
		||||
// @ts-ignore -- No types available for fs/promises
 | 
			
		||||
import * as fs from "fs/promises";
 | 
			
		||||
// @ts-ignore -- No types available for fs/promises
 | 
			
		||||
import * as path from "path";
 | 
			
		||||
 | 
			
		||||
// Constants
 | 
			
		||||
const rippleDocker: string = "rippleci/rippled:2.2.0-b3";
 | 
			
		||||
const xahauDocker: string = "xahauci/xahaud:2025.2.6";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replace text in a file with the given replacements.
 | 
			
		||||
 * @param filePath - Path to the file.
 | 
			
		||||
 * @param replacements - Object with key-value pairs for replacement.
 | 
			
		||||
 */
 | 
			
		||||
async function replaceTextInFile(
 | 
			
		||||
  filePath: string,
 | 
			
		||||
  replacements: { [key: string]: string }
 | 
			
		||||
): Promise<void> {
 | 
			
		||||
  try {
 | 
			
		||||
    let content = await fs.readFile(filePath, "utf-8");
 | 
			
		||||
    for (const [key, value] of Object.entries(replacements)) {
 | 
			
		||||
      const regex = new RegExp(escapeRegExp(key), "g");
 | 
			
		||||
      content = content.replace(regex, value);
 | 
			
		||||
    }
 | 
			
		||||
    await fs.writeFile(filePath, content, "utf-8");
 | 
			
		||||
    console.log(`Updated: ${filePath}`);
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    console.error(
 | 
			
		||||
      `Error processing file ${filePath}: ${(error as Error).message}`
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Escape special characters for use in RegExp.
 | 
			
		||||
 * @param string - The string to escape.
 | 
			
		||||
 * @returns The escaped string.
 | 
			
		||||
 */
 | 
			
		||||
function escapeRegExp(string: string): string {
 | 
			
		||||
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replace occurrences in pyproject.toml, specifically in the [tool.poetry] authors section.
 | 
			
		||||
 * @param filePath - Path to pyproject.toml.
 | 
			
		||||
 * @param newAuthors - Array of new authors to add.
 | 
			
		||||
 */
 | 
			
		||||
// async function replaceInPoetry(filePath: string, newAuthors: string[]): Promise<void> {
 | 
			
		||||
//     try {
 | 
			
		||||
//         let content = await fs.readFile(filePath, 'utf-8');
 | 
			
		||||
 | 
			
		||||
//         // Replace specific texts
 | 
			
		||||
//         const replacements: { [key: string]: string } = {
 | 
			
		||||
//             "https://github.com/XRPLF/xrpl-py": "https://github.com/Xahau/xahau-py",
 | 
			
		||||
//             "xrpl": "xahau",
 | 
			
		||||
//             "xrp": "xah",
 | 
			
		||||
//             "XRP ledger": "Xahau Ledger",
 | 
			
		||||
//         };
 | 
			
		||||
 | 
			
		||||
//         await replaceTextInFile(filePath, replacements);
 | 
			
		||||
 | 
			
		||||
//         // Handle authors separately
 | 
			
		||||
//         content = await fs.readFile(filePath, 'utf-8');
 | 
			
		||||
//         const authorsRegex = /^authors\s*=\s*\[(.*?)\]/ms;
 | 
			
		||||
//         const match = authorsRegex.exec(content);
 | 
			
		||||
//         if (match) {
 | 
			
		||||
//             const existingAuthors = match[1]
 | 
			
		||||
//                 .split(',')
 | 
			
		||||
//                 .map(author => author.trim().replace(/"/g, ''))
 | 
			
		||||
//                 .filter(author => author);
 | 
			
		||||
//             const combinedAuthors = [...existingAuthors, ...newAuthors.map(author => author.trim())];
 | 
			
		||||
//             const newAuthorsList = combinedAuthors.map(author => `  "${author}"`).join(',\n  ');
 | 
			
		||||
//             const newAuthorsSection = `authors = [\n${newAuthorsList}\n]`;
 | 
			
		||||
//             content = content.replace(authorsRegex, newAuthorsSection);
 | 
			
		||||
//             await fs.writeFile(filePath, content, 'utf-8');
 | 
			
		||||
//             console.log(`Updated authors in: ${filePath}`);
 | 
			
		||||
//         } else {
 | 
			
		||||
//             console.warn(`Authors section not found in: ${filePath}`);
 | 
			
		||||
//         }
 | 
			
		||||
//     } catch (error) {
 | 
			
		||||
//         console.error(`Error processing file ${filePath}: ${(error as Error).message}`);
 | 
			
		||||
//     }
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replace text in README.md.
 | 
			
		||||
 * @param filePath - Path to README.md.
 | 
			
		||||
 */
 | 
			
		||||
async function replaceInReadme(filePath: string): Promise<void> {
 | 
			
		||||
  const replacements: { [key: string]: string } = {
 | 
			
		||||
    "from xrpl": "from xahau",
 | 
			
		||||
    "xrpl-py": "xahau-py",
 | 
			
		||||
    "xrpl.": "xahau.",
 | 
			
		||||
    "xrpl-announce": "xahau-announce",
 | 
			
		||||
    "xrpl-keypairs": "xahau-keypairs",
 | 
			
		||||
    "XRP Ledger": "Xahau Ledger",
 | 
			
		||||
    "https://s.altnet.rippletest.net:51234": "https://xahau-test.net",
 | 
			
		||||
  };
 | 
			
		||||
  await replaceTextInFile(filePath, replacements);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function replaceInUnique(filePath: string): Promise<void> {
 | 
			
		||||
  const replacements: { [key: string]: string } = {
 | 
			
		||||
    "Xrpl.js": "Xahau.js",
 | 
			
		||||
    xrpl: "xahau",
 | 
			
		||||
    "wss://s.altnet.rippletest.net:51233": "wss://xahau-test.net",
 | 
			
		||||
  };
 | 
			
		||||
  await replaceTextInFile(filePath, replacements);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replace text in CONTRIBUTING.md or other contributing files.
 | 
			
		||||
 * @param filePath - Path to the contributing file.
 | 
			
		||||
 */
 | 
			
		||||
async function replaceInContrib(filePath: string): Promise<void> {
 | 
			
		||||
  const replacements: { [key: string]: string } = {
 | 
			
		||||
    "xrpl.js": "xahau.js",
 | 
			
		||||
    "xrpl-announce": "xahau-announce",
 | 
			
		||||
    [rippleDocker]: xahauDocker,
 | 
			
		||||
    "/opt/ripple/bin/rippled": "/opt/xahau/bin/xahaud",
 | 
			
		||||
    "/opt/ripple/etc/rippled.cfg": "/opt/xahau/etc/xahaud.cfg",
 | 
			
		||||
    ripple: "xahau",
 | 
			
		||||
    rippled: "xahaud",
 | 
			
		||||
    RIPPLED: "XAHAUD",
 | 
			
		||||
    getXRPBalance: "getXAHBalance",
 | 
			
		||||
    "/packages/xrpl": "/packages/xahau",
 | 
			
		||||
    "`xrpl`": "`xahau`",
 | 
			
		||||
    "-w xrpl": "-w xahau",
 | 
			
		||||
    "xrpl-py": "xahau-py",
 | 
			
		||||
    "xrpl@beta": "xahau@beta",
 | 
			
		||||
    "`xrpl@2.1.1`": "`xahau@2.1.1`",
 | 
			
		||||
    "xrpl libraries": "xahau libraries",
 | 
			
		||||
    "XRP Ledger": "Xahau Ledger",
 | 
			
		||||
    "XRPL Discord": "Xahau Discord",
 | 
			
		||||
    "https://discord.com/channels/886050993802985492/886053111179915295":
 | 
			
		||||
      "https://discord.com/channels/1085202760548499486/1085203623111295068",
 | 
			
		||||
  };
 | 
			
		||||
  await replaceTextInFile(filePath, replacements);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replace text in CONTRIBUTING.md or other contributing files.
 | 
			
		||||
 * @param filePath - Path to the contributing file.
 | 
			
		||||
 */
 | 
			
		||||
async function replaceInConfig(filePath: string): Promise<void> {
 | 
			
		||||
  const replacements: { [key: string]: string } = {
 | 
			
		||||
    "[validators_file]": "# [validators_file]",
 | 
			
		||||
    "validators.txt": "# validators.txt",
 | 
			
		||||
  };
 | 
			
		||||
  await replaceTextInFile(filePath, replacements);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replace text in GitHub workflow and config files.
 | 
			
		||||
 * @param filePath - Path to the GitHub-related file.
 | 
			
		||||
 */
 | 
			
		||||
async function replaceInGitHub(filePath: string): Promise<void> {
 | 
			
		||||
  const replacements: { [key: string]: string } = {
 | 
			
		||||
    "[xahau]": "[main, xahau]",
 | 
			
		||||
    "flake8 xrpl": "flake8 xahau",
 | 
			
		||||
    "reexport xrpl": "reexport xahau",
 | 
			
		||||
    "xrpl/": "xahau/",
 | 
			
		||||
    "source xrpl": "source xahau",
 | 
			
		||||
  };
 | 
			
		||||
  await replaceTextInFile(filePath, replacements);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replace text in generic Python or JSON files.
 | 
			
		||||
 * @param filePath - Path to the file.
 | 
			
		||||
 */
 | 
			
		||||
async function replaceInPackage(filePath: string): Promise<void> {
 | 
			
		||||
  const replacements: { [key: string]: string } = {
 | 
			
		||||
    '"xrpl.js"': '"xahau.js"',
 | 
			
		||||
    '"xrpl"': '"xahau"',
 | 
			
		||||
    '"ripple-address-codec"': '"xahau-address-codec"',
 | 
			
		||||
    '"ripple-binary-codec"': '"xahau-binary-codec"',
 | 
			
		||||
    '"ripple-keypairs"': '"xahau-keypairs"',
 | 
			
		||||
    '"file:packages/ripple-address-codec"':
 | 
			
		||||
      '"file:packages/xahau-address-codec"',
 | 
			
		||||
    '"file:packages/ripple-binary-codec"': '"file:packages/xahau-binary-codec"',
 | 
			
		||||
    '"file:packages/ripple-keypairs"': '"file:packages/xahau-keypairs"',
 | 
			
		||||
    '"file:packages/xrpl"': '"file:packages/xahau"',
 | 
			
		||||
  };
 | 
			
		||||
  await replaceTextInFile(filePath, replacements);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replace text in generic Python or JSON files.
 | 
			
		||||
 * @param filePath - Path to the file.
 | 
			
		||||
 */
 | 
			
		||||
async function replaceInIsomorphic(filePath: string): Promise<void> {
 | 
			
		||||
  const replacements: { [key: string]: string } = {
 | 
			
		||||
    '"git@github.com:XRPLF/xrpl.js.git"':
 | 
			
		||||
      '"git@github.com:Xahaud/xahau.js.git"',
 | 
			
		||||
    '"xrpl.js"': '"xahau.js"',
 | 
			
		||||
  };
 | 
			
		||||
  await replaceTextInFile(filePath, replacements);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replace text in generic Python or JSON files.
 | 
			
		||||
 * @param filePath - Path to the file.
 | 
			
		||||
 */
 | 
			
		||||
async function replaceInFile(filePath: string): Promise<void> {
 | 
			
		||||
  const replacements: { [key: string]: string } = {
 | 
			
		||||
    "from 'xrpl'": "from 'xahau'",
 | 
			
		||||
    '"xrpl"': '"xahau"',
 | 
			
		||||
    '"ripple-address-codec"': '"xahau-address-codec"',
 | 
			
		||||
    '"ripple-binary-codec"': '"xahau-binary-codec"',
 | 
			
		||||
    '"ripple-keypairs"': '"xahau-keypairs"',
 | 
			
		||||
    "from xrpl": "from xahau",
 | 
			
		||||
    "from './xrp-codec'": "from './xah-codec'",
 | 
			
		||||
    "from './enums/xrpl-definitions'": "from './enums/xahau-definitions'",
 | 
			
		||||
    "from '../src/enums/xrpl-definitions'":
 | 
			
		||||
      "from '../src/enums/xahau-definitions'",
 | 
			
		||||
    "from './xrpl-definitions-base'": "from './xahau-definitions-base'",
 | 
			
		||||
    "from './fixtures/rippled'": "from './fixtures/xahaud'",
 | 
			
		||||
    "`fixtures/rippled/": "`fixtures/xahaud/",
 | 
			
		||||
    "from 'ripple-address-codec'": "from 'xahau-address-codec'",
 | 
			
		||||
    "from 'ripple-binary-codec'": "from 'xahau-binary-codec'",
 | 
			
		||||
    "from 'ripple-binary-codec/dist/types'":
 | 
			
		||||
      "from 'xahau-binary-codec/dist/types'",
 | 
			
		||||
    "from 'ripple-keypairs'": "from 'xahau-keypairs'",
 | 
			
		||||
    "from '../fixtures/rippled'": "from '../fixtures/xahaud'",
 | 
			
		||||
    "from '../fixtures/rippled/accountLines'":
 | 
			
		||||
      "from '../fixtures/xahaud/accountLines'",
 | 
			
		||||
    '"rootDir": "../../xrpl"': '"rootDir": "../../xahau"',
 | 
			
		||||
    "../ripple-address-codec/tsconfig.json":
 | 
			
		||||
      "../xahau-address-codec/tsconfig.json",
 | 
			
		||||
    "../ripple-binary-codec/tsconfig.json":
 | 
			
		||||
      "../xahau-binary-codec/tsconfig.json",
 | 
			
		||||
    "../ripple-keypairs/tsconfig.json": "../xahau-keypairs/tsconfig.json",
 | 
			
		||||
    "../ripple-address-codec/tsconfig.build.json":
 | 
			
		||||
      "../xahau-address-codec/tsconfig.build.json",
 | 
			
		||||
    "../ripple-binary-codec/tsconfig.build.json":
 | 
			
		||||
      "../xahau-binary-codec/tsconfig.build.json",
 | 
			
		||||
    "../ripple-keypairs/tsconfig.build.json":
 | 
			
		||||
      "../xahau-keypairs/tsconfig.build.json",
 | 
			
		||||
    "./getFeeXrp": "./getFeeXah",
 | 
			
		||||
    "../../src/sugar/getFeeXrp": "../../src/sugar/getFeeXah",
 | 
			
		||||
    "xrpl-announce": "xahau-announce",
 | 
			
		||||
    "wss://s.altnet.rippletest.net:51233": "wss://xahau-test.net",
 | 
			
		||||
    "wss://s.devnet.rippletest.net": "wss://jshooks.xahau-test.net",
 | 
			
		||||
    "wss://testnet.xrpl-labs.com": "wss://xahau-test.net",
 | 
			
		||||
    // "XRP": "XAH",
 | 
			
		||||
    xrpToDrops: "xahToDrops",
 | 
			
		||||
    dropsToXrp: "dropsToXah",
 | 
			
		||||
    xrpConversion: "xahConversion",
 | 
			
		||||
    XrplError: "XahlError",
 | 
			
		||||
    RippledError: "XahaudError",
 | 
			
		||||
    RippledNotInitializedError: "XahaudNotInitializedError",
 | 
			
		||||
    XRPLFaucetError: "XAHLFaucetError",
 | 
			
		||||
    '"xrp"': '"xah"',
 | 
			
		||||
    '"xrpl-ledger"': '"xahau-ledger"',
 | 
			
		||||
    '"xrp ledger"': '"xahau ledger"',
 | 
			
		||||
    '"ripple",': '"xahau",',
 | 
			
		||||
    "faucet.altnet.rippletest.net": "xahau-test.net/accounts",
 | 
			
		||||
    "faucet.devnet.rippletest.net": "jshooks.xahau-test.net/accounts",
 | 
			
		||||
    "0000000000000000000000005852500000000000":
 | 
			
		||||
      "0000000000000000000000005841480000000000",
 | 
			
		||||
    RIPPLED_API_V2: "XAHAUD_API_V2",
 | 
			
		||||
    RIPPLED_API_V1: "XAHAUD_API_V1",
 | 
			
		||||
    "export const DEFAULT_API_VERSION = XAHAUD_API_V2":
 | 
			
		||||
      "export const DEFAULT_API_VERSION = XAHAUD_API_V1",
 | 
			
		||||
    "api_version: 2,": "api_version: 1,",
 | 
			
		||||
    "'XRP'": "'XAH'",
 | 
			
		||||
  };
 | 
			
		||||
  // const replacements: { [key: string]: string } = {
 | 
			
		||||
  //     "from xrpl": "from xahau",
 | 
			
		||||
  //     "import xrpl": "import xahau",
 | 
			
		||||
  //     "xrpl.utils": "xahau.utils",
 | 
			
		||||
  //     "xrpl.models.": "xahau.models.",
 | 
			
		||||
  //     "xrpl.core.": "xahau.core.",
 | 
			
		||||
  //     "flake8 xrpl": "flake8 xahau",
 | 
			
		||||
  //     "xrpl-announce": "xahau-announce",
 | 
			
		||||
  //     "../xrpl": "../xahau",
 | 
			
		||||
  //     "xrpllabsofficial/xrpld:1.12.0": "xahaulabsofficial/xahaud:1.12.0",
 | 
			
		||||
  //     "xrpl-py": "xahau-py",
 | 
			
		||||
  //     "https://s.altnet.rippletest.net:51234": "https://xahau-test.net",
 | 
			
		||||
  //     "https://xrplcluster.com/": "https://xahau.network",
 | 
			
		||||
  //     '_TEST_FAUCET_URL: Final[str] = "https://faucet.altnet.rippletest.net/accounts"':
 | 
			
		||||
  //         '_TEST_FAUCET_URL: Final[str] = "https://xahau-test.net/accounts"',
 | 
			
		||||
  //     '_DEV_FAUCET_URL: Final[str] = "https://faucet.devnet.rippletest.net/accounts"':
 | 
			
		||||
  //         '_DEV_FAUCET_URL: Final[str] = "https://xahau-test.net/accounts"',
 | 
			
		||||
  //     'if "altnet" in url or "testnet" in url:':
 | 
			
		||||
  //         'if "xahau-test" in url or "testnet" in url:',
 | 
			
		||||
  //     "https://s.devnet.rippletest.net:51234": "https://xahau-test.net",
 | 
			
		||||
  //     "wss://s.altnet.rippletest.net:51233": "wss://xahau-test.net",
 | 
			
		||||
  //     "wss://s.devnet.rippletest.net": "wss://xahau-test.net",
 | 
			
		||||
  //     "https://testnet.xrpl-labs.com": "https://xahau-test.net",
 | 
			
		||||
  //     "wss://testnet.xrpl-labs.com": "wss://xahau-test.net",
 | 
			
		||||
  //     "faucet.devnet.rippletest.net": "xahau-test.net",
 | 
			
		||||
  //     "wss://xahau-test.net:51233": "wss://xahau-test.net",
 | 
			
		||||
  //     '_DEFAULT_API_VERSION: Final[int] = 2': '_DEFAULT_API_VERSION: Final[int] = 1',
 | 
			
		||||
  //     '"xrpl.': '"xahau.',
 | 
			
		||||
  //     "XRP": "XAH",
 | 
			
		||||
  //     "xrp_to_drops": "xah_to_drops",
 | 
			
		||||
  //     "drops_to_xrp": "drops_to_xah",
 | 
			
		||||
  //     "xrp_conversions": "xah_conversions",
 | 
			
		||||
  //     // "XAHLModelException": "XRPLModelException", // Commented out as in Python
 | 
			
		||||
  //     "XRPLModelException": "XAHLModelException",
 | 
			
		||||
  //     "xahau.models.currencies.xrp": "xahau.models.currencies.xah",
 | 
			
		||||
  //     '"xrp"': '"xah"',
 | 
			
		||||
  //     "0000000000000000000000005852500000000000": "0000000000000000000000005841480000000000",
 | 
			
		||||
  //     "def test_does_account_exist_throws_for_invalid_account":
 | 
			
		||||
  //         "def _test_does_account_exist_throws_for_invalid_account",
 | 
			
		||||
  //     "def test_run_faucet_tests": "def _test_run_faucet_tests",
 | 
			
		||||
  //     // Additional replacements commented out as in Python
 | 
			
		||||
  //     // "TestAccountDelete": "NoTestAccountDelete",
 | 
			
		||||
  //     // "TestAMM": "NoTestAMM",
 | 
			
		||||
  //     // "TestClawback": "NoTestClawback",
 | 
			
		||||
  //     // "TestDeleteOracle": "NoTestDeleteOracle",
 | 
			
		||||
  //     // "TestDID": "NoTestDID",
 | 
			
		||||
  //     // "TestSetOracle": "NoTestSetOracle",
 | 
			
		||||
  //     // "TestXChain": "NoTestXChain",
 | 
			
		||||
  //     // "TestFeature": "NoTestFeature",
 | 
			
		||||
  // };
 | 
			
		||||
  await replaceTextInFile(filePath, replacements);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Search for Python and JSON files in the given folders and perform replacements.
 | 
			
		||||
 * @param folderPaths - Array of folder paths to search.
 | 
			
		||||
 */
 | 
			
		||||
async function searchAndReplaceInFolders(folderPaths: string[]): Promise<void> {
 | 
			
		||||
  for (const folderPath of folderPaths) {
 | 
			
		||||
    try {
 | 
			
		||||
      const entries = await fs.readdir(folderPath, { withFileTypes: true });
 | 
			
		||||
      for (const entry of entries) {
 | 
			
		||||
        const fullPath = path.join(folderPath, entry.name);
 | 
			
		||||
        if (entry.isDirectory()) {
 | 
			
		||||
          await searchAndReplaceInFolders([fullPath]);
 | 
			
		||||
        } else if (
 | 
			
		||||
          entry.isFile() &&
 | 
			
		||||
          (fullPath.endsWith(".ts") ||
 | 
			
		||||
            fullPath.endsWith(".js") ||
 | 
			
		||||
            fullPath.endsWith(".json"))
 | 
			
		||||
        ) {
 | 
			
		||||
          await replaceInFile(fullPath);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
      console.error(
 | 
			
		||||
        `Error reading folder ${folderPath}: ${(error as Error).message}`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Rename a folder or file.
 | 
			
		||||
 * @param oldName - Current name/path.
 | 
			
		||||
 * @param newName - New name/path.
 | 
			
		||||
 */
 | 
			
		||||
async function renameItem(oldName: string, newName: string): Promise<void> {
 | 
			
		||||
  try {
 | 
			
		||||
    await fs.rename(oldName, newName);
 | 
			
		||||
    console.log(`Renamed ${oldName} to ${newName}`);
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    console.error(
 | 
			
		||||
      `Error renaming ${oldName} to ${newName}: ${(error as Error).message}`
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Delete a file.
 | 
			
		||||
 * @param fileName - Path to the file to delete.
 | 
			
		||||
 */
 | 
			
		||||
async function deleteFile(fileName: string): Promise<void> {
 | 
			
		||||
  try {
 | 
			
		||||
    await fs.unlink(fileName);
 | 
			
		||||
    console.log(`Deleted file: ${fileName}`);
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    console.error(
 | 
			
		||||
      `Error deleting file ${fileName}: ${(error as Error).message}`
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Main function to execute all operations.
 | 
			
		||||
 */
 | 
			
		||||
async function main() {
 | 
			
		||||
  // Delete Files
 | 
			
		||||
  // await deleteFile("APPLICATIONS.md")
 | 
			
		||||
  // Renaming folders/files
 | 
			
		||||
  // await renameItem("packages/xrpl", "packages/xahau");
 | 
			
		||||
  // await renameItem("packages/ripple-address-codec", "packages/xahau-address-codec");
 | 
			
		||||
  // await renameItem("packages/ripple-binary-codec", "packages/xahau-binary-codec");
 | 
			
		||||
  // await renameItem("packages/ripple-keypairs", "packages/xahau-keypairs");
 | 
			
		||||
  // await renameItem(".ci-config/rippled.cfg", ".ci-config/xahaud.cfg");
 | 
			
		||||
  // await renameItem("packages/xahau/src/utils/xrpConversion.ts", "packages/xahau/src/utils/xahConversion.ts");
 | 
			
		||||
  // await renameItem("packages/xahau/test/utils/xrpToDrops.ts", "packages/xahau/test/utils/xahToDrops.ts");
 | 
			
		||||
  // await renameItem("packages/xrpl/test/client/getFeeXrp.test.ts", "packages/xrpl/test/client/getFeeXah.test.ts");
 | 
			
		||||
  // await renameItem("packages/xrpl/test/client/getXahBalance.test.ts", "packages/xrpl/test/client/getXahBalance.test.ts")
 | 
			
		||||
  // await renameItem("packages/xahau/src/sugar/getFeeXrp.ts", "packages/xahau/src/sugar/getFeeXah.ts")
 | 
			
		||||
  // await renameItem("packages/xahau/test/fixtures/rippled", "packages/xahau/test/fixtures/xahaud")
 | 
			
		||||
  // // Address Codec
 | 
			
		||||
  // await renameItem("packages/xahau-address-codec/src/xrp-codec.ts", "packages/xahau-address-codec/src/xah-codec.ts");
 | 
			
		||||
  // await renameItem("packages/xahau-address-codec/test/xrp-codec.test.ts", "packages/xahau-address-codec/test/xah-codec.test.ts");
 | 
			
		||||
 | 
			
		||||
  // // Binary Codec
 | 
			
		||||
  // await renameItem("packages/xahau-binary-codec/src/enums/xrpl-definitions-base.ts", "packages/xahau-binary-codec/src/enums/xahau-definitions-base.ts");
 | 
			
		||||
  // await renameItem("packages/xahau-binary-codec/src/enums/xrpl-definitions.ts", "packages/xahau-binary-codec/src/enums/xahau-definitions.ts");
 | 
			
		||||
 | 
			
		||||
  await replaceInIsomorphic("package.json");
 | 
			
		||||
  await replaceInPackage("package.json");
 | 
			
		||||
  // // Search and replace in specified folders
 | 
			
		||||
  const folderList: string[] = ["packages"];
 | 
			
		||||
  await searchAndReplaceInFolders(folderList);
 | 
			
		||||
 | 
			
		||||
  // await replaceInUnique("UNIQUE_SETUPS.md");
 | 
			
		||||
 | 
			
		||||
  // // Perform replacements in specific files
 | 
			
		||||
  await replaceInConfig(".ci-config/xahaud.cfg");
 | 
			
		||||
  await replaceInContrib("CONTRIBUTING.md");
 | 
			
		||||
  // await replaceInGitHub(".github/workflows/integration_test.yml");
 | 
			
		||||
  // await replaceInGitHub(".github/workflows/unit_test.yml");
 | 
			
		||||
  // await replaceInGitHub(".pre-commit-config.yaml");
 | 
			
		||||
 | 
			
		||||
  // // Uncomment and use if needed
 | 
			
		||||
  // // await replaceInPoetry(
 | 
			
		||||
  // //     "pyproject.toml",
 | 
			
		||||
  // //     ["Denis Angell <denis@xrpl-labs.com>", "Tequ <tequ@xrplf.com>"],
 | 
			
		||||
  // // );
 | 
			
		||||
 | 
			
		||||
  // await replaceInReadme("README.md");
 | 
			
		||||
 | 
			
		||||
  // // Delete a specific file
 | 
			
		||||
  // await deleteFile(".github/workflows/snippet_test.yml");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Execute the main function
 | 
			
		||||
main().catch((error) => {
 | 
			
		||||
  console.error(`Unexpected error: ${(error as Error).message}`);
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										10151
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										10151
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "xrpl.js",
 | 
			
		||||
  "name": "xahau.js",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "analyze": "lerna run analyze --stream",
 | 
			
		||||
@@ -16,10 +16,10 @@
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@xrplf/isomorphic": "file:packages/isomorphic",
 | 
			
		||||
    "@xrplf/secret-numbers": "file:packages/secret-numbers",
 | 
			
		||||
    "ripple-address-codec": "file:packages/ripple-address-codec",
 | 
			
		||||
    "ripple-binary-codec": "file:packages/ripple-binary-codec",
 | 
			
		||||
    "ripple-keypairs": "file:packages/ripple-keypairs",
 | 
			
		||||
    "xrpl": "file:packages/xrpl"
 | 
			
		||||
    "xahau-address-codec": "file:packages/xahau-address-codec",
 | 
			
		||||
    "xahau-binary-codec": "file:packages/xahau-binary-codec",
 | 
			
		||||
    "xahau-keypairs": "file:packages/xahau-keypairs",
 | 
			
		||||
    "xahau": "file:packages/xahau"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/chai": "^4.2.21",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "crypto",
 | 
			
		||||
    "isomorphic",
 | 
			
		||||
    "xrpl"
 | 
			
		||||
    "xahau"
 | 
			
		||||
  ],
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "build": "tsc --build ./tsconfig.build.json",
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@xrplf/isomorphic": "^1.0.0",
 | 
			
		||||
    "ripple-keypairs": "^2.0.0"
 | 
			
		||||
    "xahau-keypairs": "^2.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "prettier": "@xrplf/prettier-config",
 | 
			
		||||
  "repository": {
 | 
			
		||||
@@ -40,8 +40,8 @@
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "readmeFilename": "README.md",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "xrp",
 | 
			
		||||
    "xrpl-ledger",
 | 
			
		||||
    "xah",
 | 
			
		||||
    "xahau-ledger",
 | 
			
		||||
    "multi sign",
 | 
			
		||||
    "sign"
 | 
			
		||||
  ]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { deriveAddress, deriveKeypair, generateSeed } from 'ripple-keypairs'
 | 
			
		||||
import { deriveAddress, deriveKeypair, generateSeed } from 'xahau-keypairs'
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
  entropyToSecret,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { hexToBytes } from '@xrplf/isomorphic/utils'
 | 
			
		||||
import { deriveAddress, deriveKeypair, generateSeed } from 'ripple-keypairs'
 | 
			
		||||
import { deriveAddress, deriveKeypair, generateSeed } from 'xahau-keypairs'
 | 
			
		||||
 | 
			
		||||
import { Account, secretToEntropy } from '../src'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  "include": ["./src/**/*.ts", "./src/**/*.json"],
 | 
			
		||||
  "references": [
 | 
			
		||||
    {
 | 
			
		||||
      "path": "../ripple-keypairs/tsconfig.json"
 | 
			
		||||
      "path": "../xahau-keypairs/tsconfig.json"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "ripple-address-codec",
 | 
			
		||||
  "name": "xahau-address-codec",
 | 
			
		||||
  "version": "5.0.0",
 | 
			
		||||
  "description": "encodes/decodes base58 encoded XRP Ledger identifiers",
 | 
			
		||||
  "files": [
 | 
			
		||||
@@ -14,10 +14,10 @@
 | 
			
		||||
    "@xrplf/isomorphic": "^1.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "ripple",
 | 
			
		||||
    "xrp",
 | 
			
		||||
    "xrp ledger",
 | 
			
		||||
    "xrpl"
 | 
			
		||||
    "xahau",
 | 
			
		||||
    "xah",
 | 
			
		||||
    "xahau ledger",
 | 
			
		||||
    "xahau"
 | 
			
		||||
  ],
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
@@ -11,7 +11,7 @@ import {
 | 
			
		||||
  encodeAccountPublic,
 | 
			
		||||
  decodeAccountPublic,
 | 
			
		||||
  isValidClassicAddress,
 | 
			
		||||
} from './xrp-codec'
 | 
			
		||||
} from './xah-codec'
 | 
			
		||||
 | 
			
		||||
const PREFIX_BYTES = {
 | 
			
		||||
  // 5, 68
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "ripple-binary-codec",
 | 
			
		||||
  "name": "xahau-binary-codec",
 | 
			
		||||
  "version": "2.1.0",
 | 
			
		||||
  "description": "XRP Ledger binary codec",
 | 
			
		||||
  "files": [
 | 
			
		||||
@@ -13,7 +13,7 @@
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@xrplf/isomorphic": "^1.0.1",
 | 
			
		||||
    "bignumber.js": "^9.0.0",
 | 
			
		||||
    "ripple-address-codec": "^5.0.0"
 | 
			
		||||
    "xahau-address-codec": "^5.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "build": "tsc --build tsconfig.build.json && copyfiles ./src/enums/definitions.json ./dist/enums/",
 | 
			
		||||
@@ -24,10 +24,10 @@
 | 
			
		||||
    "lint": "eslint . --ext .ts --ext .test.js"
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "ripple",
 | 
			
		||||
    "xrp",
 | 
			
		||||
    "xrp ledger",
 | 
			
		||||
    "xrpl"
 | 
			
		||||
    "xahau",
 | 
			
		||||
    "xah",
 | 
			
		||||
    "xahau ledger",
 | 
			
		||||
    "xahau"
 | 
			
		||||
  ],
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
@@ -3,7 +3,7 @@ import {
 | 
			
		||||
  XrplDefinitionsBase,
 | 
			
		||||
  FieldInstance,
 | 
			
		||||
  Bytes,
 | 
			
		||||
} from './xrpl-definitions-base'
 | 
			
		||||
} from './xahau-definitions-base'
 | 
			
		||||
/**
 | 
			
		||||
 * By default, coreTypes from the `types` folder is where known type definitions are initialized to avoid import cycles.
 | 
			
		||||
 */
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import {
 | 
			
		||||
  type DefinitionsData,
 | 
			
		||||
  XrplDefinitionsBase,
 | 
			
		||||
} from './xrpl-definitions-base'
 | 
			
		||||
} from './xahau-definitions-base'
 | 
			
		||||
import { coreTypes } from '../types'
 | 
			
		||||
import { SerializedType } from '../types/serialized-type'
 | 
			
		||||
 | 
			
		||||
@@ -7,7 +7,7 @@ import {
 | 
			
		||||
  TRANSACTION_TYPES,
 | 
			
		||||
  DEFAULT_DEFINITIONS,
 | 
			
		||||
} from './enums'
 | 
			
		||||
import { XrplDefinitions } from './enums/xrpl-definitions'
 | 
			
		||||
import { XrplDefinitions } from './enums/xahau-definitions'
 | 
			
		||||
import { coreTypes } from './types'
 | 
			
		||||
import { bytesToHex } from '@xrplf/isomorphic/utils'
 | 
			
		||||
 | 
			
		||||
@@ -3,7 +3,7 @@ import {
 | 
			
		||||
  encodeAccountID,
 | 
			
		||||
  isValidXAddress,
 | 
			
		||||
  xAddressToClassicAddress,
 | 
			
		||||
} from 'ripple-address-codec'
 | 
			
		||||
} from 'xahau-address-codec'
 | 
			
		||||
import { Hash160 } from './hash-160'
 | 
			
		||||
import { hexToBytes } from '@xrplf/isomorphic/utils'
 | 
			
		||||
 | 
			
		||||
@@ -12,7 +12,7 @@ const STANDARD_FORMAT_HEX_REGEX = /^0{24}[\x00-\x7F]{6}0{10}$/
 | 
			
		||||
 */
 | 
			
		||||
function isoToBytes(iso: string): Uint8Array {
 | 
			
		||||
  const bytes = new Uint8Array(20)
 | 
			
		||||
  if (iso !== 'XRP') {
 | 
			
		||||
  if (iso !== 'XAH') {
 | 
			
		||||
    const isoBytes = iso.split('').map((c) => c.charCodeAt(0))
 | 
			
		||||
    bytes.set(isoBytes, 12)
 | 
			
		||||
  }
 | 
			
		||||
@@ -28,7 +28,7 @@ function isIsoCode(iso: string): boolean {
 | 
			
		||||
 | 
			
		||||
function isoCodeFromHex(code: Uint8Array): string | null {
 | 
			
		||||
  const iso = hexToString(bytesToHex(code))
 | 
			
		||||
  if (iso === 'XRP') {
 | 
			
		||||
  if (iso === 'XAH') {
 | 
			
		||||
    return null
 | 
			
		||||
  }
 | 
			
		||||
  if (isIsoCode(iso)) {
 | 
			
		||||
@@ -89,7 +89,7 @@ class Currency extends Hash160 {
 | 
			
		||||
    const hex = bytesToHex(this.bytes)
 | 
			
		||||
 | 
			
		||||
    if (XRP_HEX_REGEX.test(hex)) {
 | 
			
		||||
      this._iso = 'XRP'
 | 
			
		||||
      this._iso = 'XAH'
 | 
			
		||||
    } else if (STANDARD_FORMAT_HEX_REGEX.test(hex)) {
 | 
			
		||||
      this._iso = isoCodeFromHex(this.bytes.slice(12, 15))
 | 
			
		||||
    } else {
 | 
			
		||||
@@ -66,7 +66,7 @@ class Issue extends SerializedType {
 | 
			
		||||
   */
 | 
			
		||||
  static fromParser(parser: BinaryParser): Issue {
 | 
			
		||||
    const currency = parser.read(20)
 | 
			
		||||
    if (new Currency(currency).toJSON() === 'XRP') {
 | 
			
		||||
    if (new Currency(currency).toJSON() === 'XAH') {
 | 
			
		||||
      return new Issue(currency)
 | 
			
		||||
    }
 | 
			
		||||
    const currencyAndIssuer = [currency, parser.read(20)]
 | 
			
		||||
@@ -81,7 +81,7 @@ class Issue extends SerializedType {
 | 
			
		||||
  toJSON(): IssueObject {
 | 
			
		||||
    const parser = new BinaryParser(this.toString())
 | 
			
		||||
    const currency = Currency.fromParser(parser) as Currency
 | 
			
		||||
    if (currency.toJSON() === 'XRP') {
 | 
			
		||||
    if (currency.toJSON() === 'XAH') {
 | 
			
		||||
      return { currency: currency.toJSON() }
 | 
			
		||||
    }
 | 
			
		||||
    const issuer = AccountID.fromParser(parser) as AccountID
 | 
			
		||||
@@ -5,7 +5,7 @@ import {
 | 
			
		||||
  XrplDefinitionsBase,
 | 
			
		||||
} from '../enums'
 | 
			
		||||
import { SerializedType, JsonObject } from './serialized-type'
 | 
			
		||||
import { xAddressToClassicAddress, isValidXAddress } from 'ripple-address-codec'
 | 
			
		||||
import { xAddressToClassicAddress, isValidXAddress } from 'xahau-address-codec'
 | 
			
		||||
import { BinaryParser } from '../serdes/binary-parser'
 | 
			
		||||
import { BinarySerializer, BytesList } from '../serdes/binary-serializer'
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
import fixtures from './fixtures/codec-fixtures.json'
 | 
			
		||||
import { decode, encode, decodeLedgerData } from '../src'
 | 
			
		||||
// import { decode, encode, decodeLedgerData } from '../src'
 | 
			
		||||
import { decode, encode } from '../src'
 | 
			
		||||
 | 
			
		||||
function json(object) {
 | 
			
		||||
  return JSON.stringify(object)
 | 
			
		||||
@@ -30,16 +31,17 @@ describe('ripple-binary-codec', function () {
 | 
			
		||||
  makeSuite('transactions', fixtures.transactions)
 | 
			
		||||
  makeSuite('accountState', fixtures.accountState)
 | 
			
		||||
 | 
			
		||||
  describe('ledgerData', function () {
 | 
			
		||||
    if (fixtures.ledgerData) {
 | 
			
		||||
      fixtures.ledgerData.forEach((t, testN) => {
 | 
			
		||||
        it(`ledgerData[${testN}] can decode ${t.binary} to ${json(
 | 
			
		||||
          t.json,
 | 
			
		||||
        )}`, () => {
 | 
			
		||||
          const decoded = decodeLedgerData(t.binary)
 | 
			
		||||
          expect(t.json).toEqual(decoded)
 | 
			
		||||
        })
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
  // describe('ledgerData', function () {
 | 
			
		||||
  //   console.log(fixtures)
 | 
			
		||||
  //   if (fixtures.ledgerData) {
 | 
			
		||||
  //     fixtures.ledgerData.forEach((t, testN) => {
 | 
			
		||||
  //       it(`ledgerData[${testN}] can decode ${t.binary} to ${json(
 | 
			
		||||
  //         t.json,
 | 
			
		||||
  //       )}`, () => {
 | 
			
		||||
  //         const decoded = decodeLedgerData(t.binary)
 | 
			
		||||
  //         expect(t.json).toEqual(decoded)
 | 
			
		||||
  //       })
 | 
			
		||||
  //     })
 | 
			
		||||
  //   }
 | 
			
		||||
  // })
 | 
			
		||||
})
 | 
			
		||||
@@ -2,7 +2,7 @@ import { hexOnly } from './utils'
 | 
			
		||||
import { coreTypes, Amount, Hash160 } from '../src/types'
 | 
			
		||||
import BigNumber from 'bignumber.js'
 | 
			
		||||
 | 
			
		||||
import { encodeAccountID } from 'ripple-address-codec'
 | 
			
		||||
import { encodeAccountID } from 'xahau-address-codec'
 | 
			
		||||
import { Field, TransactionType } from '../src/enums'
 | 
			
		||||
import { makeParser, readJSON } from '../src/binary'
 | 
			
		||||
import { BytesList } from '../src/serdes/binary-serializer'
 | 
			
		||||
@@ -387,7 +387,7 @@ function pathSetBinaryTests() {
 | 
			
		||||
        currency: 'BTC',
 | 
			
		||||
        issuer: 'r3AWbdp2jQLXLywJypdoNwVSvr81xs3uhn',
 | 
			
		||||
      },
 | 
			
		||||
      { currency: 'XRP' },
 | 
			
		||||
      { currency: 'XAH' },
 | 
			
		||||
      {
 | 
			
		||||
        currency: 'USD',
 | 
			
		||||
        issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',
 | 
			
		||||
@@ -4449,469 +4449,6 @@
 | 
			
		||||
        "Flags": 0,
 | 
			
		||||
        "Sequence": 62
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200302200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A270918114B5F762798A53D543A014CAF8B297CFF8F2F937E8011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
 | 
			
		||||
        "XChainBridge": {
 | 
			
		||||
          "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL",
 | 
			
		||||
          "LockingChainIssue": {"currency": "XRP"},
 | 
			
		||||
          "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
 | 
			
		||||
          "IssuingChainIssue": {"currency": "XRP"}
 | 
			
		||||
        },
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 0,
 | 
			
		||||
        "MinAccountCreateAmount": "10000",
 | 
			
		||||
        "Sequence": 1,
 | 
			
		||||
        "SignatureReward": "1000",
 | 
			
		||||
        "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
 | 
			
		||||
        "TransactionType": "XChainCreateBridge",
 | 
			
		||||
        "TxnSignature": "30440220101BCA4B5B5A37C6F44480F9A34752C9AA8B2CDF5AD47E3CB424DEDC21C06DB702206EEB257E82A89B1F46A0A2C7F070B0BD181D980FF86FE4269E369F6FC7A27091"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "12002F2200000000240000000168400000000000000A601D40000000000003E8601E400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E58114B5F762798A53D543A014CAF8B297CFF8F2F937E8011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
 | 
			
		||||
        "XChainBridge": {
 | 
			
		||||
          "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL",
 | 
			
		||||
          "LockingChainIssue": {"currency": "XRP"},
 | 
			
		||||
          "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
 | 
			
		||||
          "IssuingChainIssue": {"currency": "XRP"}
 | 
			
		||||
        },
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 0,
 | 
			
		||||
        "MinAccountCreateAmount": "10000",
 | 
			
		||||
        "Sequence": 1,
 | 
			
		||||
        "SignatureReward": "1000",
 | 
			
		||||
        "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
 | 
			
		||||
        "TransactionType": "XChainModifyBridge",
 | 
			
		||||
        "TxnSignature": "3045022100D2CABC1B0E0635A8EE2E6554F6D474C49BC292C995C5C9F83179F4A60634B04C02205D1DB569D9593136F2FBEA7140010C8F46794D653AFDBEA8D30B8750BA4805E5"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200292280000000240000000168400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD8114B5F762798A53D543A014CAF8B297CFF8F2F937E8801214AF80285F637EE4AF3C20378F9DFB12511ACB8D27011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
 | 
			
		||||
        "XChainBridge": {
 | 
			
		||||
          "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL",
 | 
			
		||||
          "LockingChainIssue": {"currency": "XRP"},
 | 
			
		||||
          "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
 | 
			
		||||
          "IssuingChainIssue": {"currency": "XRP"}
 | 
			
		||||
        },
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 2147483648,
 | 
			
		||||
        "OtherChainSource": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL",
 | 
			
		||||
        "Sequence": 1,
 | 
			
		||||
        "SignatureReward": "10000",
 | 
			
		||||
        "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
 | 
			
		||||
        "TransactionType": "XChainCreateClaimID",
 | 
			
		||||
        "TxnSignature": "30440220247B20A1B9C48E21A374CB9B3E1FE2A7C528151868DF8D307E9FBE15237E531A02207C20C092DDCC525E583EF4AB7CB91E862A6DED19426997D3F0A2C84E2BE8C5DD"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "12002A228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074453043021F177323F0D93612C82A4393A99B23905A7E675753FD80C52997AFAB13F5F9D002203BFFAF457E90BDA65AABE8F8762BD96162FAD98A0C030CCD69B06EE9B12BBFFE8114B5F762798A53D543A014CAF8B297CFF8F2F937E8011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
 | 
			
		||||
        "Amount": "10000",
 | 
			
		||||
        "XChainBridge": {
 | 
			
		||||
          "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL",
 | 
			
		||||
          "LockingChainIssue": {"currency": "XRP"},
 | 
			
		||||
          "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
 | 
			
		||||
          "IssuingChainIssue": {"currency": "XRP"}
 | 
			
		||||
        },
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 2147483648,
 | 
			
		||||
        "Sequence": 1,
 | 
			
		||||
        "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
 | 
			
		||||
        "TransactionType": "XChainCommit",
 | 
			
		||||
        "TxnSignature": "3043021F177323F0D93612C82A4393A99B23905A7E675753FD80C52997AFAB13F5F9D002203BFFAF457E90BDA65AABE8F8762BD96162FAD98A0C030CCD69B06EE9B12BBFFE",
 | 
			
		||||
        "XChainClaimID": "0000000000000001"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "12002B228000000024000000013014000000000000000161400000000000271068400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020744630440220445F7469FDA401787D9EE8A9B6E24DFF81E94F4C09FD311D2C0A58FCC02C684A022029E2EF34A5EA35F50D5BB57AC6320AD3AE12C13C8D1379B255A486D72CED142E8114B5F762798A53D543A014CAF8B297CFF8F2F937E88314550FC62003E785DC231A1058A05E56E3F09CF4E6011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
 | 
			
		||||
        "Amount": "10000",
 | 
			
		||||
        "XChainBridge": {
 | 
			
		||||
          "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL",
 | 
			
		||||
          "LockingChainIssue": {"currency": "XRP"},
 | 
			
		||||
          "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
 | 
			
		||||
          "IssuingChainIssue": {"currency": "XRP"}
 | 
			
		||||
        },
 | 
			
		||||
        "Destination": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 2147483648,
 | 
			
		||||
        "Sequence": 1,
 | 
			
		||||
        "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
 | 
			
		||||
        "TransactionType": "XChainClaim",
 | 
			
		||||
        "TxnSignature": "30440220445F7469FDA401787D9EE8A9B6E24DFF81E94F4C09FD311D2C0A58FCC02C684A022029E2EF34A5EA35F50D5BB57AC6320AD3AE12C13C8D1379B255A486D72CED142E",
 | 
			
		||||
        "XChainClaimID": "0000000000000001"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "12002C228000000024000000016140000000000F424068400000000000000A601D400000000000271073210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD0207446304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF188114B5F762798A53D543A014CAF8B297CFF8F2F937E88314AF80285F637EE4AF3C20378F9DFB12511ACB8D27011914AF80285F637EE4AF3C20378F9DFB12511ACB8D27000000000000000000000000000000000000000014550FC62003E785DC231A1058A05E56E3F09CF4E60000000000000000000000000000000000000000",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
 | 
			
		||||
        "XChainBridge": {
 | 
			
		||||
          "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL",
 | 
			
		||||
          "LockingChainIssue": {"currency": "XRP"},
 | 
			
		||||
          "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
 | 
			
		||||
          "IssuingChainIssue": {"currency": "XRP"}
 | 
			
		||||
        },
 | 
			
		||||
        "Amount": "1000000",
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 2147483648,
 | 
			
		||||
        "Destination": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL",
 | 
			
		||||
        "Sequence": 1,
 | 
			
		||||
        "SignatureReward": "10000",
 | 
			
		||||
        "SigningPubKey": "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
 | 
			
		||||
        "TransactionType": "XChainAccountCreateCommit",
 | 
			
		||||
        "TxnSignature": "304402202984DDE7F0B566F081F7953D7212BF031ACBF8860FE114102E9512C4C8768C77022070113F4630B1DC3045E4A98DDD648CEBC31B12774F7B44A1B8123CD2C9F5CF18"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "12002E2400000005201B0000000D30150000000000000006614000000000989680684000000000000014601D40000000000000647121ED1F4A024ACFEBDB6C7AA88DEDE3364E060487EA31B14CC9E0D610D152B31AADC27321EDF54108BA2E0A0D3DC2AE3897F8BE0EFE776AE8D0F9FB0D0B9D64233084A8DDD1744003E74AEF1F585F156786429D2FC87A89E5C6B5A56D68BFC9A6A329F3AC67CBF2B6958283C663A4522278CA162C69B23CF75149AF022B410EA0508C16F42058007640EEFCFA3DC2AB4AB7C4D2EBBC168CB621A11B82BABD86534DFC8EFA72439A49662D744073CD848E7A587A95B35162CDF9A69BB237E72C9537A987F5B8C394F30D81145E7A3E3D7200A794FA801C66CE3775B6416EE4128314C15F113E49BCC4B9FFF43CD0366C23ACD82F75638012143FD9ED9A79DEA67CB5D585111FEF0A29203FA0408014145E7A3E3D7200A794FA801C66CE3775B6416EE4128015145E7A3E3D7200A794FA801C66CE3775B6416EE4120010130101191486F0B1126CE1205E59FDFDD2661A9FB7505CA70F000000000000000000000000000000000000000014B5F762798A53D543A014CAF8B297CFF8F2F937E80000000000000000000000000000000000000000",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "r9cYxdjQsoXAEz3qQJc961SNLaXRkWXCvT",
 | 
			
		||||
        "Amount": "10000000",
 | 
			
		||||
        "AttestationRewardAccount": "r9cYxdjQsoXAEz3qQJc961SNLaXRkWXCvT",
 | 
			
		||||
        "AttestationSignerAccount": "r9cYxdjQsoXAEz3qQJc961SNLaXRkWXCvT",
 | 
			
		||||
        "Destination": "rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi",
 | 
			
		||||
        "Fee": "20",
 | 
			
		||||
        "LastLedgerSequence": 13,
 | 
			
		||||
        "OtherChainSource": "raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym",
 | 
			
		||||
        "PublicKey": "ED1F4A024ACFEBDB6C7AA88DEDE3364E060487EA31B14CC9E0D610D152B31AADC2",
 | 
			
		||||
        "Sequence": 5,
 | 
			
		||||
        "Signature": "EEFCFA3DC2AB4AB7C4D2EBBC168CB621A11B82BABD86534DFC8EFA72439A49662D744073CD848E7A587A95B35162CDF9A69BB237E72C9537A987F5B8C394F30D",
 | 
			
		||||
        "SignatureReward": "100",
 | 
			
		||||
        "SigningPubKey": "EDF54108BA2E0A0D3DC2AE3897F8BE0EFE776AE8D0F9FB0D0B9D64233084A8DDD1",
 | 
			
		||||
        "TransactionType": "XChainAddAccountCreateAttestation",
 | 
			
		||||
        "TxnSignature": "03E74AEF1F585F156786429D2FC87A89E5C6B5A56D68BFC9A6A329F3AC67CBF2B6958283C663A4522278CA162C69B23CF75149AF022B410EA0508C16F4205800",
 | 
			
		||||
        "WasLockingChainSend": 1,
 | 
			
		||||
        "XChainAccountCreateCount": "0000000000000006",
 | 
			
		||||
        "XChainBridge": {
 | 
			
		||||
          "IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
 | 
			
		||||
          "IssuingChainIssue": {
 | 
			
		||||
            "currency": "XRP"
 | 
			
		||||
          },
 | 
			
		||||
          "LockingChainDoor": "rDJVtEuDKr4rj1B3qtW7R5TVWdXV2DY7Qg",
 | 
			
		||||
          "LockingChainIssue": {
 | 
			
		||||
            "currency": "XRP"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "12002D2400000009201B00000013301400000000000000016140000000009896806840000000000000147121ED7541DEC700470F54276C90C333A13CDBB5D341FD43C60CEA12170F6D6D4E11367321ED0406B134786FE0751717226657F7BF8AFE96442C05D28ACEC66FB64852BA604C7440D0423649E48A44F181262CF5FC08A68E7FA5CD9E55843E4F09014B76E602574741E8553383A4B43CABD194BB96713647FC0B885BE248E4FFA068FA3E6994CF0476407C175050B08000AD35EEB2D87E16CD3F95A0AEEBF2A049474275153D9D4DD44528FE99AA50E71660A15B0B768E1B90E609BBD5DC7AFAFD45D9705D72D40EA10C81141F30A4D728AB98B0950EC3B9815E6C8D43A7D5598314C15F113E49BCC4B9FFF43CD0366C23ACD82F75638012143FD9ED9A79DEA67CB5D585111FEF0A29203FA0408014141F30A4D728AB98B0950EC3B9815E6C8D43A7D5598015141F30A4D728AB98B0950EC3B9815E6C8D43A7D5590010130101191486F0B1126CE1205E59FDFDD2661A9FB7505CA70F000000000000000000000000000000000000000014B5F762798A53D543A014CAF8B297CFF8F2F937E80000000000000000000000000000000000000000",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rsqvD8WFFEBBv4nztpoW9YYXJ7eRzLrtc3",
 | 
			
		||||
        "Amount": "10000000",
 | 
			
		||||
        "AttestationRewardAccount": "rsqvD8WFFEBBv4nztpoW9YYXJ7eRzLrtc3",
 | 
			
		||||
        "AttestationSignerAccount": "rsqvD8WFFEBBv4nztpoW9YYXJ7eRzLrtc3",
 | 
			
		||||
        "Destination": "rJdTJRJZ6GXCCRaamHJgEqVzB7Zy4557Pi",
 | 
			
		||||
        "Fee": "20",
 | 
			
		||||
        "LastLedgerSequence": 19,
 | 
			
		||||
        "OtherChainSource": "raFcdz1g8LWJDJWJE2ZKLRGdmUmsTyxaym",
 | 
			
		||||
        "PublicKey": "ED7541DEC700470F54276C90C333A13CDBB5D341FD43C60CEA12170F6D6D4E1136",
 | 
			
		||||
        "Sequence": 9,
 | 
			
		||||
        "Signature": "7C175050B08000AD35EEB2D87E16CD3F95A0AEEBF2A049474275153D9D4DD44528FE99AA50E71660A15B0B768E1B90E609BBD5DC7AFAFD45D9705D72D40EA10C",
 | 
			
		||||
        "SigningPubKey": "ED0406B134786FE0751717226657F7BF8AFE96442C05D28ACEC66FB64852BA604C",
 | 
			
		||||
        "TransactionType": "XChainAddClaimAttestation",
 | 
			
		||||
        "TxnSignature": "D0423649E48A44F181262CF5FC08A68E7FA5CD9E55843E4F09014B76E602574741E8553383A4B43CABD194BB96713647FC0B885BE248E4FFA068FA3E6994CF04",
 | 
			
		||||
        "WasLockingChainSend": 1,
 | 
			
		||||
        "XChainBridge": {
 | 
			
		||||
          "IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
 | 
			
		||||
          "IssuingChainIssue": {
 | 
			
		||||
            "currency": "XRP"
 | 
			
		||||
          },
 | 
			
		||||
          "LockingChainDoor": "rDJVtEuDKr4rj1B3qtW7R5TVWdXV2DY7Qg",
 | 
			
		||||
          "LockingChainIssue": {
 | 
			
		||||
            "currency": "XRP"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "XChainClaimID": "0000000000000001"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "12002315000A2200000000240015DAE161400000000000271068400000000000000A6BD5838D7EA4C680000000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C7321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B87440B3154D968314FCEB58001E1B0C3A4CFB33DF9FF6C73207E5EAEB9BD07E2747672168E1A2786D950495C38BD8DEE3391BF45F3008DD36F4B12E7C07D82CA5250E8114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMCreate",
 | 
			
		||||
        "TxnSignature": "B3154D968314FCEB58001E1B0C3A4CFB33DF9FF6C73207E5EAEB9BD07E2747672168E1A2786D950495C38BD8DEE3391BF45F3008DD36F4B12E7C07D82CA5250E",
 | 
			
		||||
        "Amount": "10000",
 | 
			
		||||
        "Amount2": {
 | 
			
		||||
          "currency": "ETH",
 | 
			
		||||
          "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9",
 | 
			
		||||
          "value": "10000"
 | 
			
		||||
        },
 | 
			
		||||
        "TradingFee": 10,
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 0,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200242200010000240015DAE168400000000000000A6019D5438D7EA4C68000B3813FCAB4EE68B3D0D735D6849465A9113EE048B3813FCAB4EE68B3D0D735D6849465A9113EE0487321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B874408073C588E7EF672DD171E414638D9AF8DBE9A1359E030DE3E1C9AA6A38A2CE9E138CB56482BB844F7228D48B1E4AD7D09BB7E9F639C115958EEEA374749CA00B8114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMDeposit",
 | 
			
		||||
        "TxnSignature": "8073C588E7EF672DD171E414638D9AF8DBE9A1359E030DE3E1C9AA6A38A2CE9E138CB56482BB844F7228D48B1E4AD7D09BB7E9F639C115958EEEA374749CA00B",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "LPTokenOut": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "1000"},
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 65536,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200242200080000240015DAE16140000000000003E868400000000000000A7321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8744096CA066F42871C55088D2758D64148921B1ACAA5C6C648D0F7D675BBF47F87DF711F17C5BD172666D5AEC257520C587A849A6E063345609D91E121A78816EB048114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMDeposit",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "Amount": "1000",
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 524288,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "96CA066F42871C55088D2758D64148921B1ACAA5C6C648D0F7D675BBF47F87DF711F17C5BD172666D5AEC257520C587A849A6E063345609D91E121A78816EB04"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200242200100000240015DAE16140000000000003E868400000000000000A6BD511C37937E080000000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C7321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B87440FC22B16A098C236ED7EDB3EBC983026DFD218A03C8BAA848F3E1D5389D5B8B00473C1178C5BA257BFA2DCD433C414690A430A5CFD71C1C0A7F7BF725EC1759018114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMDeposit",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "Amount": "1000",
 | 
			
		||||
        "Amount2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9", "value": "500"},
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 1048576,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "FC22B16A098C236ED7EDB3EBC983026DFD218A03C8BAA848F3E1D5389D5B8B00473C1178C5BA257BFA2DCD433C414690A430A5CFD71C1C0A7F7BF725EC175901"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200242200200000240015DAE16140000000000003E868400000000000000A6019D5438D7EA4C68000B3813FCAB4EE68B3D0D735D6849465A9113EE048B3813FCAB4EE68B3D0D735D6849465A9113EE0487321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B87440117CF90F9B113AD3BD638B6DB63562B37C287D5180F278B3CCF58FC14A5BAEE98307EA0F6DFE19E2FBA887C92955BA5D1A04F92ADAAEB309DE89C3610D074C098114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMDeposit",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "Amount": "1000",
 | 
			
		||||
        "LPTokenOut": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "1000"},
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 2097152,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "117CF90F9B113AD3BD638B6DB63562B37C287D5180F278B3CCF58FC14A5BAEE98307EA0F6DFE19E2FBA887C92955BA5D1A04F92ADAAEB309DE89C3610D074C09"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200242200400000240015DAE16140000000000003E868400000000000000A601B40000000000000197321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B874405E51EBC6B52A7C3BA5D0AE2FC8F62E779B80182009B3108A87AB6D770D68F56053C193DB0640128E4765565970625B1E2878E116AC854E6DED412202CCDE0B0D8114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMDeposit",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "Amount": "1000",
 | 
			
		||||
        "EPrice": "25",
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 4194304,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "5E51EBC6B52A7C3BA5D0AE2FC8F62E779B80182009B3108A87AB6D770D68F56053C193DB0640128E4765565970625B1E2878E116AC854E6DED412202CCDE0B0D"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200252200010000240015DAE168400000000000000A601AD5438D7EA4C68000B3813FCAB4EE68B3D0D735D6849465A9113EE048B3813FCAB4EE68B3D0D735D6849465A9113EE0487321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B874409D4F41FC452526C0AD17191959D9B6D04A3C73B3A6C29E0F34C8459675A83A7A7D6E3021390EC8C9BE6C93E11C167E12016465E523F64F9EB3194B0A52E418028114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMWithdraw",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "LPTokenIn": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "1000"},
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 65536,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "9D4F41FC452526C0AD17191959D9B6D04A3C73B3A6C29E0F34C8459675A83A7A7D6E3021390EC8C9BE6C93E11C167E12016465E523F64F9EB3194B0A52E41802"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200252200080000240015DAE16140000000000003E868400000000000000A7321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B87440E2C60D56C337D6D73E4B7D53579C93C666605494E82A89DD58CFDE79E2A4866BCF52370A2146877A2EF748E98168373710001133A51B645D89491849079035018114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMWithdraw",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "Amount": "1000",
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 524288,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "E2C60D56C337D6D73E4B7D53579C93C666605494E82A89DD58CFDE79E2A4866BCF52370A2146877A2EF748E98168373710001133A51B645D8949184907903501"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200252200100000240015DAE16140000000000003E868400000000000000A6BD511C37937E080000000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C7321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B87440D2FCD7D03E53358BC6188BA88A7BA4FF2519B639C3B5C0EBCBDCB704426CA2837111430E92A6003D1CD0D81C63682C74839320539EC4F89B82AA5607714952028114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMWithdraw",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "Amount": "1000",
 | 
			
		||||
        "Amount2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9", "value": "500"},
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 1048576,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "D2FCD7D03E53358BC6188BA88A7BA4FF2519B639C3B5C0EBCBDCB704426CA2837111430E92A6003D1CD0D81C63682C74839320539EC4F89B82AA560771495202"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200252200200000240015DAE16140000000000003E868400000000000000A601AD5438D7EA4C68000B3813FCAB4EE68B3D0D735D6849465A9113EE048B3813FCAB4EE68B3D0D735D6849465A9113EE0487321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8744042DA5620E924E2D2059BBB4E0C4F03244140ACED93B543136FEEDF802165F814D09F45C7E2A4618468442516F4712A23B1D3332D5DBDBAE830337F39F259C90F8114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMWithdraw",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "Amount": "1000",
 | 
			
		||||
        "LPTokenIn": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "1000"},
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 2097152,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "42DA5620E924E2D2059BBB4E0C4F03244140ACED93B543136FEEDF802165F814D09F45C7E2A4618468442516F4712A23B1D3332D5DBDBAE830337F39F259C90F"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200252200400000240015DAE16140000000000003E868400000000000000A601B40000000000000197321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8744045BCEE5A12E5F5F1FB085A24F2F7FD962BBCB0D89A44A5319E3F7E3799E1870341880B6F684132971DDDF2E6B15356B3F407962D6D4E8DE10989F3B16E3CB90D8114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMWithdraw",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "Amount": "1000",
 | 
			
		||||
        "EPrice": "25",
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 4194304,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "45BCEE5A12E5F5F1FB085A24F2F7FD962BBCB0D89A44A5319E3F7E3799E1870341880B6F684132971DDDF2E6B15356B3F407962D6D4E8DE10989F3B16E3CB90D"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200272200000000240015DAE168400000000000000A6CD4C8E1BC9BF04000B3813FCAB4EE68B3D0D735D6849465A9113EE048B3813FCAB4EE68B3D0D735D6849465A9113EE0486DD4CC6F3B40B6C000B3813FCAB4EE68B3D0D735D6849465A9113EE048B3813FCAB4EE68B3D0D735D6849465A9113EE0487321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B87440F8EAAFB5EC1A69275167589969F0B9764BACE6BC8CC81482C2FC5ACCE691EDBD0D88D141137B1253BB1B9AC90A8A52CB37F5B6F7E1028B06DD06F91BE06F5A0F8114F92F27CC5EE2F2760278FE096D0CBE32BDD3653AF019E01B81149A91957F8F16BC57F3F200CD8C98375BF1791586E1F10318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMBid",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "AuthAccounts": [{"AuthAccount": {"Account": "rEaHTti4HZsMBpxTAF4ncWxkcdqDh1h6P7"}}],
 | 
			
		||||
        "BidMax": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "35"},
 | 
			
		||||
        "BidMin": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "25"},
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 0,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "F8EAAFB5EC1A69275167589969F0B9764BACE6BC8CC81482C2FC5ACCE691EDBD0D88D141137B1253BB1B9AC90A8A52CB37F5B6F7E1028B06DD06F91BE06F5A0F"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200261500EA2200000000240015DAE168400000000000000A7321ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B87440BC2F6E76969E3747E9BDE183C97573B086212F09D5387460E6EE2F32953E85EAEB9618FBBEF077276E30E59D619FCF7C7BDCDDDD9EB94D7CE1DD5CE9246B21078114F92F27CC5EE2F2760278FE096D0CBE32BDD3653A0318000000000000000000000000000000000000000004180000000000000000000000004554480000000000FBEF9A3A2B814E807745FA3D9C32FFD155FA2E8C",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw",
 | 
			
		||||
        "TransactionType": "AMMVote",
 | 
			
		||||
        "Asset": {"currency": "XRP"},
 | 
			
		||||
        "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"},
 | 
			
		||||
        "TradingFee": 234,
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 0,
 | 
			
		||||
        "Sequence": 1432289,
 | 
			
		||||
        "SigningPubKey": "ED7453D2572A2104E7B266A45888C53F503CEB1F11DC4BB3710EB2995238EC65B8",
 | 
			
		||||
        "TxnSignature": "BC2F6E76969E3747E9BDE183C97573B086212F09D5387460E6EE2F32953E85EAEB9618FBBEF077276E30E59D619FCF7C7BDCDDDD9EB94D7CE1DD5CE9246B2107"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200322280000000240000000468400000000000000A7321ED9861C4CB029C0DA737B823D7D3459A70F227958D5C0C111CC7CF947FC5A93347744071E28B12465A1B47162C22E121DF61089DCD9AAF5773704B76179E771666886C8AAD5A33A87E34CC381A7D924E3FE3645F0BF98D565DE42C81E1A7A7E7981802811401476926B590BA3245F63C829116A0A3AF7F382D",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8",
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 2147483648,
 | 
			
		||||
        "Sequence": 4,
 | 
			
		||||
        "SigningPubKey": "ED9861C4CB029C0DA737B823D7D3459A70F227958D5C0C111CC7CF947FC5A93347",
 | 
			
		||||
        "TransactionType": "DIDDelete",
 | 
			
		||||
        "TxnSignature": "71E28B12465A1B47162C22E121DF61089DCD9AAF5773704B76179E771666886C8AAD5A33A87E34CC381A7D924E3FE3645F0BF98D565DE42C81E1A7A7E7981802"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200312280000000240000000368400000000000000A7321ED9861C4CB029C0DA737B823D7D3459A70F227958D5C0C111CC7CF947FC5A933477440AACD31A04CAE14670FC483A1382F393AA96B49C84479B58067F049FBD772999325667A6AA2520A63756EE84F3657298815019DD56A1AECE796B08535C4009C08750B6469645F6578616D706C65701A03646F63701B06617474657374811401476926B590BA3245F63C829116A0A3AF7F382D",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "Account": "rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8",
 | 
			
		||||
        "Data": "617474657374",
 | 
			
		||||
        "DIDDocument": "646F63",
 | 
			
		||||
        "Fee": "10",
 | 
			
		||||
        "Flags": 2147483648,
 | 
			
		||||
        "Sequence": 3,
 | 
			
		||||
        "SigningPubKey": "ED9861C4CB029C0DA737B823D7D3459A70F227958D5C0C111CC7CF947FC5A93347",
 | 
			
		||||
        "TransactionType": "DIDSet",
 | 
			
		||||
        "TxnSignature": "AACD31A04CAE14670FC483A1382F393AA96B49C84479B58067F049FBD772999325667A6AA2520A63756EE84F3657298815019DD56A1AECE796B08535C4009C08",
 | 
			
		||||
        "URI": "6469645F6578616D706C65"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200332FFFFFFFFF2033000004D2750B6469645F6578616D706C65701C0863757272656E6379701D0870726F7669646572811401476926B590BA3245F63C829116A0A3AF7F382DF018E020301700000000000001E2041003011A0000000000000000000000000000000000000000021A0000000000000000000000005553440000000000E1F1",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "TransactionType": "OracleSet",
 | 
			
		||||
        "Account": "rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8",
 | 
			
		||||
        "OracleDocumentID": 1234,
 | 
			
		||||
        "LastUpdateTime": 4294967295,
 | 
			
		||||
        "PriceDataSeries": [
 | 
			
		||||
          {
 | 
			
		||||
            "PriceData": {
 | 
			
		||||
              "BaseAsset": "XRP",
 | 
			
		||||
              "QuoteAsset": "USD",
 | 
			
		||||
              "AssetPrice": "00000000000001E2",
 | 
			
		||||
              "Scale": 3
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "Provider": "70726F7669646572",
 | 
			
		||||
        "URI": "6469645F6578616D706C65",
 | 
			
		||||
        "AssetClass": "63757272656E6379"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "binary": "1200342033000004D2811401476926B590BA3245F63C829116A0A3AF7F382D",
 | 
			
		||||
      "json": {
 | 
			
		||||
        "TransactionType": "OracleDelete",
 | 
			
		||||
        "Account": "rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8",
 | 
			
		||||
        "OracleDocumentID": 1234
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "ledgerData": [{
 | 
			
		||||
    "binary": "01E91435016340767BF1C4A3EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F873B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D521276CDE21276CE60A00",
 | 
			
		||||
    "json": {
 | 
			
		||||
      "account_hash": "3B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D5",
 | 
			
		||||
      "close_flags": 0,
 | 
			
		||||
      "close_time": 556231910,
 | 
			
		||||
      "close_time_resolution": 10,
 | 
			
		||||
      "ledger_index": 32052277,
 | 
			
		||||
      "parent_close_time": 556231902,
 | 
			
		||||
      "parent_hash": "EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6",
 | 
			
		||||
      "total_coins": "99994494362043555",
 | 
			
		||||
      "transaction_hash": "DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F87"
 | 
			
		||||
    }
 | 
			
		||||
  }]
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user