mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-06 13:55:49 +00:00
Compare commits
10 Commits
@transia/r
...
denis-chec
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
09533116ce | ||
|
|
b86f736cab | ||
|
|
7a89f8c63e | ||
|
|
4ffc51ad54 | ||
|
|
d2224e9cfb | ||
|
|
70745f4c94 | ||
|
|
c5433c6ac0 | ||
|
|
be2aa32542 | ||
|
|
18e777b093 | ||
|
|
62a39c69ce |
151
.ci-config/rippled.cfg
Normal file
151
.ci-config/rippled.cfg
Normal file
@@ -0,0 +1,151 @@
|
||||
[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 get the list of amendments on a network:
|
||||
# 1. Run this ledger_entry command against the network to get a list of enabled amendment ids. (Command is in the websocket link as an easy way to run it)
|
||||
# https://xrpl.org/websocket-api-tool.html?server=wss%3A%2F%2Fs1.ripple.com%2F&req=%7B%22command%22%3A%22ledger_entry%22%2C%22index%22%3A%227DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4%22%2C%22ledger_index%22%3A%22validated%22%7D
|
||||
# 2. Strip away the quotes and commas
|
||||
# 3. Add the amendment name to the same line as each amendment id (You can look them up via hash on https://xrpl.org/known-amendments.html)
|
||||
# Ex. 4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373 Multisign
|
||||
# The amendment name can be any string (including just a number)
|
||||
#
|
||||
# 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.
|
||||
|
||||
[amendments]
|
||||
# Devnet amendments as of March 28th, 2023
|
||||
B4E4F5D2D6FB84DF7399960A732309C9FD530EAE5941838160042833625A6076 NegativeUNL
|
||||
DF8B4536989BDACE3F934F29423848B9F1D76D09BE6A1FCFE7E7F06AA26ABEAD fixRemoveNFTokenAutoTrustLine
|
||||
3C43D9A973AA4443EF3FC38E42DD306160FBFFDAB901CD8BAA15D09F2597EB87 NonFungibleTokensV1
|
||||
98DECF327BF79997AEC178323AD51A830E457BFC6D454DAF3E46E5EC42DC619F CheckCashMakesTrustLine
|
||||
B6B3EEDC0267AB50491FDC450A398AF30DBCD977CECED8BEF2499CAB5DAC19E2 fixRmSmallIncreasedQOffers
|
||||
452F5906C46D46F407883344BFDD90E672B672C5E9943DB4891E3A34FEEEB9DB fixSTAmountCanonicalize
|
||||
AF8DF7465C338AE64B1E937D6C8DA138C0D63AD5134A68792BBBE1F63356C422 FlowSortStrands
|
||||
955DF3FA5891195A9DAEFA1DDC6BB244B545DDE1BAA84CBB25D5F12A8DA68A0C TicketBatch
|
||||
B4D44CC3111ADD964E846FC57760C8B50FFCD5A82C86A72756F6B058DDDF96AD fix1201
|
||||
89308AF3B8B10B7192C4E613E1D2E4D9BA64B2EE2D5232402AE82A6A7220D953 fixQualityUpperBound
|
||||
3012E8230864E95A58C60FD61430D7E1B4D3353195F2981DC12B0C7C0950FFAC FlowCross
|
||||
DC9CA96AEA1DCF83E527D1AFC916EFAF5D27388ECA4060A88817C1238CAEE0BF EnforceInvariants
|
||||
B9E739B8296B4A1BB29BE990B17D66E21B62A300A909F25AC55C22D6C72E1F9D fix1523
|
||||
1F4AFA8FA1BC8827AD4C0F682C03A8B671DCDF6B5C4DE36D44243A684103EF88 HardenedValidations
|
||||
3CBC5C4E630A1B82380295CDA84B32B49DD066602E74E39B85EF64137FA65194 DepositPreauth
|
||||
586480873651E106F1D6339B0C4A8945BA705A777F3F4524626FF1FC07EFE41D MultiSignReserve
|
||||
58BE9B5968C4DA7C59BA900961828B113E5490699B21877DEF9A31E9D0FE5D5F fix1623
|
||||
42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE FeeEscalation
|
||||
08DE7D96082187F6E6578530258C77FAABABE4C20474BDB82F04B021F1A68647 PayChan
|
||||
67A34F2CF55BFC0F93AACD5B281413176FEE195269FA6D95219A2DF738671172 fix1513
|
||||
00C1FC4A53E60AB02C864641002B3172F38677E29C26C5406685179B37E1EDAC RequireFullyCanonicalSig
|
||||
CA7C02118BA27599528543DFE77BA6838D1B0F43B447D4D7F53523CE6A0E9AC2 fix1543
|
||||
532651B4FD58DF8922A49BA101AB3E996E5BFBF95A913B3E392504863E63B164 TickSize
|
||||
25BA44241B3BD880770BFA4DA21C7180576831855368CBEC6A3154FDE4A7676E fix1781
|
||||
8F81B066ED20DAECA20DF57187767685EEF3980B228E0667A650BAF24426D3B4 fixCheckThreading
|
||||
5D08145F0A4983F23AFFFF514E83FAD355C5ABFBB6CAB76FB5BC8519FF5F33BE fix1515
|
||||
1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C4805C902B514399146 CryptoConditions
|
||||
1D3463A5891F9E589C5AE839FFAC4A917CE96197098A1EF22304E1BC5B98A454 fix1528
|
||||
621A0B264970359869E3C0363A899909AAB7A887C8B73519E4ECF952D33258A8 fixPayChanRecipientOwnerDir
|
||||
CC5ABAE4F3EC92E94A59B1908C2BE82D2228B6485C00AFF8F22DF930D89C194E SortedDirectories
|
||||
FBD513F1B893AC765B78F250E6FFA6A11B573209D1842ADC787C850696741288 fix1578
|
||||
7117E2EC2DBF119CA55181D69819F1999ECEE1A0225A7FD2B9ED47940968479C fix1571
|
||||
4F46DF03559967AC60F2EB272FEFE3928A7594A45FF774B87A7E540DB0F8F068 fixAmendmentMajorityCalc
|
||||
2CD5286D8D687E98B41102BDD797198E81EA41DF7BD104E6561FEB104EFF2561 fixTakerDryOfferRemoval
|
||||
C4483A1896170C66C098DEA5B0E024309C60DC960DE5F01CD7AF986AA3D9AD37 fixMasterKeyAsRegularKey
|
||||
740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11 Flow
|
||||
07D43DCE529B15A10827E5E04943B496762F9A88E3268269D69C44BE49E21104 Escrow
|
||||
6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC TrustSetAuth
|
||||
30CD365592B8EE40489BA01AE2F7555CAC9C983145871DC82A42A31CF5BAE7D9 DeletableAccounts
|
||||
F64E1EABBE79D55B3BB82020516CEC2C582A98A6BFE20FBE9BB6A0D233418064 DepositAuth
|
||||
E2E6F2866106419B88C50045ACE96368558C345566AC8F2BDF5A5B5587F0E6FA fix1368
|
||||
6C92211186613F9647A89DFFBAB8F94C99D4C7E956D495270789128569177DA1 fix1512
|
||||
42EEA5E28A97824821D4EF97081FE36A54E9593C6E4F20CBAE098C69D2E072DC fix1373
|
||||
4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373 MultiSign
|
||||
157D2D480E006395B76F948E3E07A45A05FE10230D88A7993C71F97AE4B1F2D1 Checks
|
||||
6
.github/workflows/codeql-analysis.yml
vendored
6
.github/workflows/codeql-analysis.yml
vendored
@@ -39,7 +39,7 @@ jobs:
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -64,4 +64,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
uses: github/codeql-action/analyze@v2
|
||||
|
||||
43
.github/workflows/nodejs.yml
vendored
43
.github/workflows/nodejs.yml
vendored
@@ -100,15 +100,13 @@ jobs:
|
||||
matrix:
|
||||
node-version: [14.x, 16.x, 18.x]
|
||||
|
||||
services:
|
||||
rippled:
|
||||
image: natenichols/rippled-standalone:latest
|
||||
ports:
|
||||
- 6006:6006
|
||||
options: --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Run docker in background
|
||||
run: |
|
||||
docker run --detach --rm --name rippled-service -p 6006:6006 --volume "${{ github.workspace }}/.ci-config/":"/config/" --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s --env "ENV_ARGS=-a --start" --env GITHUB_ACTIONS=true --env CI=true xrpllabsofficial/xrpld:latest
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
@@ -138,10 +136,13 @@ jobs:
|
||||
run: npm ci
|
||||
|
||||
- run: npm run build
|
||||
- run: npm run test:integration
|
||||
env:
|
||||
HOST: localhost
|
||||
PORT: ${{ job.services.rippled.ports['6006'] }}
|
||||
|
||||
- name: Run integration test
|
||||
run: npm run test:integration
|
||||
|
||||
- name: Stop docker container
|
||||
if: always()
|
||||
run: docker stop rippled-service
|
||||
|
||||
browser:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -151,20 +152,18 @@ jobs:
|
||||
matrix:
|
||||
node-version: [14.x] # This just needs to be compatible w/ puppeteer
|
||||
|
||||
services:
|
||||
rippled:
|
||||
image: natenichols/rippled-standalone:latest
|
||||
ports:
|
||||
- 6006:6006
|
||||
options: --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Run docker in background
|
||||
run: |
|
||||
docker run --detach --rm --name rippled-service -p 6006:6006 --volume "${{ github.workspace }}/.ci-config/":"/config/" --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s --env "ENV_ARGS=-a --start" --env GITHUB_ACTIONS=true --env CI=true xrpllabsofficial/xrpld:latest
|
||||
|
||||
- name: Setup npm version 7
|
||||
run: |
|
||||
npm i -g npm@7 --registry=https://registry.npmjs.org
|
||||
@@ -189,4 +188,10 @@ jobs:
|
||||
run: npm ci
|
||||
|
||||
- run: npm run build
|
||||
- run: npm run test:browser
|
||||
|
||||
- name: Run integration test
|
||||
run: npm run test:browser
|
||||
|
||||
- name: Stop docker container
|
||||
if: always()
|
||||
run: docker stop rippled-service
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -39,8 +39,6 @@ db/*.db
|
||||
db/*.db-*
|
||||
|
||||
# Ignore customized configs
|
||||
rippled.cfg
|
||||
validators.txt
|
||||
test/config.js
|
||||
|
||||
# Ignore coverage files
|
||||
|
||||
@@ -74,6 +74,10 @@ Warning: Use at your own risk.
|
||||
|
||||
## 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.
|
||||
@@ -109,7 +113,7 @@ Warning: Use at your own risk.
|
||||
- **[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.
|
||||
|
||||
@@ -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 run `rippled` locally, or set up the Docker container `natenichols/rippled-standalone:latest` for this purpose. The latter will require you to [install Docker](https://docs.docker.com/get-docker/).
|
||||
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 `xrpllabsofficial/xrpld:latest` by [following these instructions](#integration-tests). The latter will require you to [install Docker](https://docs.docker.com/get-docker/).
|
||||
|
||||
### Unit Tests
|
||||
|
||||
@@ -59,14 +59,25 @@ npm test
|
||||
|
||||
### Integration Tests
|
||||
|
||||
From the top-level xrpl.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 -it natenichols/rippled-standalone:latest
|
||||
docker run -p 6006:6006 --interactive -t --volume $PWD/.ci-config:/config/ xrpllabsofficial/xrpld:latest -a --start
|
||||
npm run build
|
||||
npm run test:integration
|
||||
```
|
||||
|
||||
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 `./`.
|
||||
* `xrpllabsofficial/xrpld:latest` is an image that is regularly updated with the latest `rippled` releases and can be found here: https://github.com/WietseWind/docker-rippled
|
||||
* `-a` starts `rippled` in standalone mode
|
||||
* `--start` signals to start `rippled` with the specified amendments in `rippled.cfg` enabled immediately instead of voting for 2 weeks on them.
|
||||
|
||||
### Browser Tests
|
||||
|
||||
There are two ways to run browser tests.
|
||||
@@ -75,10 +86,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).
|
||||
|
||||
```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 -it natenichols/rippled-standalone:latest
|
||||
docker run -p 6006:6006 -it -v $PWD/.ci-config:/config/ xrpllabsofficial/xrpld:latest -a --start
|
||||
npm run test:browser
|
||||
```
|
||||
|
||||
@@ -203,7 +216,7 @@ npm uninstall abbrev -w xrpl
|
||||
1. Actually publish the packages with one of the following:
|
||||
|
||||
- Stable release: Run `npx lerna publish from-package --yes`
|
||||
- Beta release: Run `npx lerna publish from-package --dist-tag beta --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`
|
||||
|
||||
1. If requested, enter your [npmjs.com](https://npmjs.com) OTP (one-time password) to complete publication.
|
||||
|
||||
@@ -74,6 +74,7 @@ It goes through:
|
||||
|
||||
If you're using xrpl.js with React or Deno, you'll need to do a couple extra steps to set it up:
|
||||
|
||||
- [Using xrpl.js with a CDN](./UNIQUE_SETUPS.md#using-xrpljs-from-a-cdn)
|
||||
- [Using xrpl.js with `create-react-app`](./UNIQUE_SETUPS.md#using-xrpljs-with-create-react-app)
|
||||
- [Using xrpl.js with `React Native`](./UNIQUE_SETUPS.md#using-xrpljs-with-react-native)
|
||||
- [Using xrpl.js with `Vite React`](./UNIQUE_SETUPS.md#using-xrpljs-with-vite-react)
|
||||
|
||||
@@ -2,6 +2,15 @@
|
||||
|
||||
For when you need to do more than just install `xrpl.js` for it to work (especially for React projects in the browser).
|
||||
|
||||
### Using xrpl.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.
|
||||
|
||||
- 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>`
|
||||
|
||||
Ensure that the full path is provided so the browser can find the sourcemaps.
|
||||
|
||||
### Using xrpl.js with `create-react-app`
|
||||
|
||||
To use `xrpl.js` with React, you need to install shims for core NodeJS modules. Starting with version 5, Webpack stopped including shims by default, so you must modify your Webpack configuration to add the shims you need. Either you can eject your config and modify it, or you can use a library such as `react-app-rewired`. The example below uses `react-app-rewired`.
|
||||
|
||||
187
package-lock.json
generated
187
package-lock.json
generated
@@ -1074,9 +1074,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/expect-utils": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz",
|
||||
"integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
|
||||
"integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"jest-get-type": "^29.4.3"
|
||||
@@ -1243,9 +1243,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/types": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz",
|
||||
"integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
|
||||
"integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jest/schemas": "^29.4.3",
|
||||
@@ -4502,7 +4502,6 @@
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
||||
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -7121,16 +7120,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/expect": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz",
|
||||
"integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
|
||||
"integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jest/expect-utils": "^29.4.3",
|
||||
"@jest/expect-utils": "^29.5.0",
|
||||
"jest-get-type": "^29.4.3",
|
||||
"jest-matcher-utils": "^29.4.3",
|
||||
"jest-message-util": "^29.4.3",
|
||||
"jest-util": "^29.4.3"
|
||||
"jest-matcher-utils": "^29.5.0",
|
||||
"jest-message-util": "^29.5.0",
|
||||
"jest-util": "^29.5.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||
@@ -9650,15 +9649,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-diff": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz",
|
||||
"integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
|
||||
"integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"chalk": "^4.0.0",
|
||||
"diff-sequences": "^29.4.3",
|
||||
"jest-get-type": "^29.4.3",
|
||||
"pretty-format": "^29.4.3"
|
||||
"pretty-format": "^29.5.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||
@@ -9757,33 +9756,33 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-matcher-utils": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz",
|
||||
"integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
|
||||
"integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"chalk": "^4.0.0",
|
||||
"jest-diff": "^29.4.3",
|
||||
"jest-diff": "^29.5.0",
|
||||
"jest-get-type": "^29.4.3",
|
||||
"pretty-format": "^29.4.3"
|
||||
"pretty-format": "^29.5.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/jest-message-util": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz",
|
||||
"integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
|
||||
"integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.12.13",
|
||||
"@jest/types": "^29.4.3",
|
||||
"@jest/types": "^29.5.0",
|
||||
"@types/stack-utils": "^2.0.0",
|
||||
"chalk": "^4.0.0",
|
||||
"graceful-fs": "^4.2.9",
|
||||
"micromatch": "^4.0.4",
|
||||
"pretty-format": "^29.4.3",
|
||||
"pretty-format": "^29.5.0",
|
||||
"slash": "^3.0.0",
|
||||
"stack-utils": "^2.0.3"
|
||||
},
|
||||
@@ -9792,14 +9791,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-mock": {
|
||||
"version": "29.4.2",
|
||||
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.2.tgz",
|
||||
"integrity": "sha512-x1FSd4Gvx2yIahdaIKoBjwji6XpboDunSJ95RpntGrYulI1ByuYQCKN/P7hvk09JB74IonU3IPLdkutEWYt++g==",
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz",
|
||||
"integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jest/types": "^29.4.2",
|
||||
"@jest/types": "^29.4.3",
|
||||
"@types/node": "*",
|
||||
"jest-util": "^29.4.2"
|
||||
"jest-util": "^29.4.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||
@@ -9976,12 +9975,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-util": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz",
|
||||
"integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz",
|
||||
"integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jest/types": "^29.4.3",
|
||||
"@jest/types": "^29.5.0",
|
||||
"@types/node": "*",
|
||||
"chalk": "^4.0.0",
|
||||
"ci-info": "^3.2.0",
|
||||
@@ -11975,7 +11974,7 @@
|
||||
"dependencies": {
|
||||
"assert": "^2.0.0",
|
||||
"browserify-zlib": "^0.2.0",
|
||||
"buffer": "^6.0.3",
|
||||
"buffer": "^6.0.2",
|
||||
"console-browserify": "^1.2.0",
|
||||
"constants-browserify": "^1.0.0",
|
||||
"crypto-browserify": "^3.12.0",
|
||||
@@ -12022,7 +12021,7 @@
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"abort-controller": "^3.0.0",
|
||||
"buffer": "^6.0.3",
|
||||
"buffer": "^6.0.2",
|
||||
"events": "^3.3.0",
|
||||
"process": "^0.11.10"
|
||||
},
|
||||
@@ -13474,9 +13473,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/pretty-format": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
|
||||
"integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
|
||||
"integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jest/schemas": "^29.4.3",
|
||||
@@ -17140,7 +17139,7 @@
|
||||
"dependencies": {
|
||||
"assert": "^2.0.0",
|
||||
"big-integer": "^1.6.48",
|
||||
"buffer": "5.6.0",
|
||||
"buffer": "6.0.3",
|
||||
"create-hash": "^1.2.0",
|
||||
"decimal.js": "^10.2.0",
|
||||
"ripple-address-codec": "^4.2.5"
|
||||
@@ -17149,14 +17148,6 @@
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"packages/ripple-binary-codec/node_modules/buffer": {
|
||||
"version": "5.6.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"base64-js": "^1.0.2",
|
||||
"ieee754": "^1.1.4"
|
||||
}
|
||||
},
|
||||
"packages/ripple-keypairs": {
|
||||
"version": "1.1.5",
|
||||
"license": "ISC",
|
||||
@@ -17971,9 +17962,9 @@
|
||||
}
|
||||
},
|
||||
"@jest/expect-utils": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz",
|
||||
"integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
|
||||
"integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"jest-get-type": "^29.4.3"
|
||||
@@ -18105,9 +18096,9 @@
|
||||
}
|
||||
},
|
||||
"@jest/types": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz",
|
||||
"integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
|
||||
"integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jest/schemas": "^29.4.3",
|
||||
@@ -20809,7 +20800,6 @@
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
||||
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.2.1"
|
||||
@@ -22859,16 +22849,16 @@
|
||||
"dev": true
|
||||
},
|
||||
"expect": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz",
|
||||
"integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
|
||||
"integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jest/expect-utils": "^29.4.3",
|
||||
"@jest/expect-utils": "^29.5.0",
|
||||
"jest-get-type": "^29.4.3",
|
||||
"jest-matcher-utils": "^29.4.3",
|
||||
"jest-message-util": "^29.4.3",
|
||||
"jest-util": "^29.4.3"
|
||||
"jest-matcher-utils": "^29.5.0",
|
||||
"jest-message-util": "^29.5.0",
|
||||
"jest-util": "^29.5.0"
|
||||
}
|
||||
},
|
||||
"extend": {
|
||||
@@ -24757,15 +24747,15 @@
|
||||
}
|
||||
},
|
||||
"jest-diff": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz",
|
||||
"integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
|
||||
"integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "^4.0.0",
|
||||
"diff-sequences": "^29.4.3",
|
||||
"jest-get-type": "^29.4.3",
|
||||
"pretty-format": "^29.4.3"
|
||||
"pretty-format": "^29.5.0"
|
||||
}
|
||||
},
|
||||
"jest-docblock": {
|
||||
@@ -24841,43 +24831,43 @@
|
||||
}
|
||||
},
|
||||
"jest-matcher-utils": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz",
|
||||
"integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
|
||||
"integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "^4.0.0",
|
||||
"jest-diff": "^29.4.3",
|
||||
"jest-diff": "^29.5.0",
|
||||
"jest-get-type": "^29.4.3",
|
||||
"pretty-format": "^29.4.3"
|
||||
"pretty-format": "^29.5.0"
|
||||
}
|
||||
},
|
||||
"jest-message-util": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz",
|
||||
"integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
|
||||
"integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.12.13",
|
||||
"@jest/types": "^29.4.3",
|
||||
"@jest/types": "^29.5.0",
|
||||
"@types/stack-utils": "^2.0.0",
|
||||
"chalk": "^4.0.0",
|
||||
"graceful-fs": "^4.2.9",
|
||||
"micromatch": "^4.0.4",
|
||||
"pretty-format": "^29.4.3",
|
||||
"pretty-format": "^29.5.0",
|
||||
"slash": "^3.0.0",
|
||||
"stack-utils": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"jest-mock": {
|
||||
"version": "29.4.2",
|
||||
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.2.tgz",
|
||||
"integrity": "sha512-x1FSd4Gvx2yIahdaIKoBjwji6XpboDunSJ95RpntGrYulI1ByuYQCKN/P7hvk09JB74IonU3IPLdkutEWYt++g==",
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz",
|
||||
"integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jest/types": "^29.4.2",
|
||||
"@jest/types": "^29.4.3",
|
||||
"@types/node": "*",
|
||||
"jest-util": "^29.4.2"
|
||||
"jest-util": "^29.4.3"
|
||||
}
|
||||
},
|
||||
"jest-pnp-resolver": {
|
||||
@@ -25025,12 +25015,12 @@
|
||||
}
|
||||
},
|
||||
"jest-util": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz",
|
||||
"integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz",
|
||||
"integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jest/types": "^29.4.3",
|
||||
"@jest/types": "^29.5.0",
|
||||
"@types/node": "*",
|
||||
"chalk": "^4.0.0",
|
||||
"ci-info": "^3.2.0",
|
||||
@@ -26695,7 +26685,7 @@
|
||||
"requires": {
|
||||
"assert": "^2.0.0",
|
||||
"browserify-zlib": "^0.2.0",
|
||||
"buffer": "^6.0.3",
|
||||
"buffer": "^6.0.2",
|
||||
"console-browserify": "^1.2.0",
|
||||
"constants-browserify": "^1.0.0",
|
||||
"crypto-browserify": "^3.12.0",
|
||||
@@ -26733,7 +26723,7 @@
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"abort-controller": "^3.0.0",
|
||||
"buffer": "^6.0.3",
|
||||
"buffer": "^6.0.2",
|
||||
"events": "^3.3.0",
|
||||
"process": "^0.11.10"
|
||||
}
|
||||
@@ -27856,9 +27846,9 @@
|
||||
}
|
||||
},
|
||||
"pretty-format": {
|
||||
"version": "29.4.3",
|
||||
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
|
||||
"integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
|
||||
"version": "29.5.0",
|
||||
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
|
||||
"integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jest/schemas": "^29.4.3",
|
||||
@@ -28669,19 +28659,10 @@
|
||||
"requires": {
|
||||
"assert": "^2.0.0",
|
||||
"big-integer": "^1.6.48",
|
||||
"buffer": "5.6.0",
|
||||
"buffer": "6.0.3",
|
||||
"create-hash": "^1.2.0",
|
||||
"decimal.js": "^10.2.0",
|
||||
"ripple-address-codec": "^4.2.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"buffer": {
|
||||
"version": "5.6.0",
|
||||
"requires": {
|
||||
"base64-js": "^1.0.2",
|
||||
"ieee754": "^1.1.4"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ripple-keypairs": {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"dependencies": {
|
||||
"assert": "^2.0.0",
|
||||
"big-integer": "^1.6.48",
|
||||
"buffer": "5.6.0",
|
||||
"buffer": "6.0.3",
|
||||
"create-hash": "^1.2.0",
|
||||
"decimal.js": "^10.2.0",
|
||||
"ripple-address-codec": "^4.2.5"
|
||||
@@ -22,8 +22,8 @@
|
||||
"scripts": {
|
||||
"build": "tsc -b && copyfiles ./src/enums/definitions.json ./dist/enums/",
|
||||
"clean": "rm -rf ./dist && rm -rf tsconfig.tsbuildinfo",
|
||||
"prepare": "npm run build && npm test",
|
||||
"test": "jest --verbose false --silent=false ./test/*.test.js",
|
||||
"prepublishOnly": "npm test",
|
||||
"test": "npm run build && jest --verbose false --silent=false ./test/*.test.js",
|
||||
"lint": "eslint . --ext .ts --ext .test.js"
|
||||
},
|
||||
"repository": {
|
||||
|
||||
@@ -36,7 +36,7 @@ const coreTypes: Record<string, typeof SerializedType> = {
|
||||
|
||||
// Ensures that the DEFAULT_DEFINITIONS object connects these types to fields for serializing/deserializing
|
||||
// This is done here instead of in enums/index.ts to avoid a circular dependency
|
||||
// because some of the above types depend on BinarySerailizer which depends on enums/index.ts.
|
||||
// because some of the above types depend on BinarySerializer which depends on enums/index.ts.
|
||||
DEFAULT_DEFINITIONS.associateTypes(coreTypes)
|
||||
|
||||
export {
|
||||
|
||||
@@ -7,8 +7,12 @@ Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xr
|
||||
* Null and undefined values in transactions are now treated as though the field was not passed in.
|
||||
|
||||
### Fixed
|
||||
* Fixed `ServerState.transitions` typing, it is now a string instead of a number. (Only used in return from `server_state` request)
|
||||
* Added `destination_amount` to `PathOption` which is returned as part of a `path_find` request
|
||||
|
||||
### Removed
|
||||
* RPCs and utils related to the old sidechain design
|
||||
|
||||
## 2.7.0 (2023-03-08)
|
||||
|
||||
### Fixed
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
import { BaseRequest, BaseResponse } from './baseMethod'
|
||||
|
||||
/**
|
||||
* The `federator_info` command asks the federator for information
|
||||
* about the door account and other bridge-related information. This
|
||||
* method only exists on sidechain federators. Expects a response in
|
||||
* the form of a {@link FederatorInfoResponse}.
|
||||
*
|
||||
* @category Requests
|
||||
*/
|
||||
export interface FederatorInfoRequest extends BaseRequest {
|
||||
command: 'federator_info'
|
||||
}
|
||||
|
||||
/**
|
||||
* Response expected from a {@link FederatorInfoRequest}.
|
||||
*
|
||||
* @category Responses
|
||||
*/
|
||||
export interface FederatorInfoResponse extends BaseResponse {
|
||||
result: {
|
||||
info: {
|
||||
mainchain: {
|
||||
door_status: {
|
||||
initialized: boolean
|
||||
status: 'open' | 'opening' | 'closed' | 'closing'
|
||||
}
|
||||
last_transaction_sent_seq: number
|
||||
listener_info: {
|
||||
state: 'syncing' | 'normal'
|
||||
}
|
||||
pending_transactions: Array<{
|
||||
amount: string
|
||||
destination_account: string
|
||||
signatures: Array<{
|
||||
public_key: string
|
||||
seq: number
|
||||
}>
|
||||
}>
|
||||
sequence: number
|
||||
tickets: {
|
||||
initialized: boolean
|
||||
tickets: Array<{
|
||||
status: 'taken' | 'available'
|
||||
ticket_seq: number
|
||||
}>
|
||||
}
|
||||
}
|
||||
public_key: string
|
||||
sidechain: {
|
||||
door_status: {
|
||||
initialized: boolean
|
||||
status: 'open' | 'opening' | 'closed' | 'closing'
|
||||
}
|
||||
last_transaction_sent_seq: number
|
||||
listener_info: {
|
||||
state: 'syncing' | 'normal'
|
||||
}
|
||||
pending_transactions: Array<{
|
||||
amount: string
|
||||
destination_account: string
|
||||
signatures: Array<{
|
||||
public_key: string
|
||||
seq: number
|
||||
}>
|
||||
}>
|
||||
sequence: number
|
||||
tickets: {
|
||||
initialized: boolean
|
||||
tickets: Array<{
|
||||
status: 'taken' | 'available'
|
||||
ticket_seq: number
|
||||
}>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,6 @@ import {
|
||||
DepositAuthorizedRequest,
|
||||
DepositAuthorizedResponse,
|
||||
} from './depositAuthorized'
|
||||
import { FederatorInfoRequest, FederatorInfoResponse } from './federatorInfo'
|
||||
import { FeeRequest, FeeResponse } from './fee'
|
||||
import {
|
||||
GatewayBalancesRequest,
|
||||
@@ -121,8 +120,6 @@ type Request =
|
||||
// NFT methods
|
||||
| NFTBuyOffersRequest
|
||||
| NFTSellOffersRequest
|
||||
// sidechain methods
|
||||
| FederatorInfoRequest
|
||||
|
||||
/**
|
||||
* @category Responses
|
||||
@@ -171,8 +168,6 @@ type Response =
|
||||
// NFT methods
|
||||
| NFTBuyOffersResponse
|
||||
| NFTSellOffersResponse
|
||||
// sidechain methods
|
||||
| FederatorInfoResponse
|
||||
|
||||
export {
|
||||
Request,
|
||||
@@ -268,7 +263,4 @@ export {
|
||||
NFTBuyOffersResponse,
|
||||
NFTSellOffersRequest,
|
||||
NFTSellOffersResponse,
|
||||
// sidechain methods
|
||||
FederatorInfoRequest,
|
||||
FederatorInfoResponse,
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ export type ServerState =
|
||||
|
||||
export interface StateAccounting {
|
||||
duration_us: string
|
||||
transitions: number
|
||||
transitions: string
|
||||
}
|
||||
|
||||
export interface JobType {
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
import { XrplError } from '../errors'
|
||||
import { Payment } from '../models'
|
||||
import { Memo } from '../models/common'
|
||||
|
||||
import { convertStringToHex } from './stringConversion'
|
||||
|
||||
/**
|
||||
* Creates a cross-chain payment transaction.
|
||||
*
|
||||
* @param payment - The initial payment transaction. If the transaction is
|
||||
* signed, then it will need to be re-signed. There must be no more than 2
|
||||
* memos, since one memo is used for the sidechain destination account. The
|
||||
* destination must be the sidechain's door account.
|
||||
* @param destAccount - the destination account on the sidechain.
|
||||
* @returns A cross-chain payment transaction, where the mainchain door account
|
||||
* is the `Destination` and the destination account on the sidechain is encoded
|
||||
* in the memos.
|
||||
* @throws XrplError - if there are more than 2 memos.
|
||||
* @category Utilities
|
||||
*/
|
||||
export default function createCrossChainPayment(
|
||||
payment: Payment,
|
||||
destAccount: string,
|
||||
): Payment {
|
||||
const destAccountHex = convertStringToHex(destAccount)
|
||||
const destAccountMemo: Memo = { Memo: { MemoData: destAccountHex } }
|
||||
|
||||
const memos = payment.Memos ?? []
|
||||
if (memos.length > 2) {
|
||||
throw new XrplError(
|
||||
'Cannot have more than 2 memos in a cross-chain transaction.',
|
||||
)
|
||||
}
|
||||
const newMemos = [destAccountMemo, ...memos]
|
||||
|
||||
const newPayment = { ...payment, Memos: newMemos }
|
||||
delete newPayment.TxnSignature
|
||||
|
||||
return newPayment
|
||||
}
|
||||
@@ -184,4 +184,22 @@ export function hashPaymentChannel(
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the Hash of an Check LedgerEntry.
|
||||
*
|
||||
* @param address - Address of the Check.
|
||||
* @param sequence - Sequence of the CreateCheck tx.
|
||||
* @returns The hash of the Check LedgerEntry.
|
||||
* @category Utilities
|
||||
*/
|
||||
export function hashCheckId(address: string, sequence: number): string {
|
||||
const hexPrefix = ledgerSpaces.check
|
||||
.charCodeAt(0)
|
||||
.toString(HEX)
|
||||
.padStart(2, '0')
|
||||
const hexSequence = sequence.toString(HEX).padStart(8, '0')
|
||||
const prefix = `00${hexPrefix}`
|
||||
return sha512Half(prefix + addressToHex(address) + hexSequence)
|
||||
}
|
||||
|
||||
export { hashLedgerHeader, hashSignedTx, hashLedger, hashStateTree, hashTxTree }
|
||||
|
||||
@@ -22,7 +22,6 @@ import { Response } from '../models/methods'
|
||||
import { PaymentChannelClaim } from '../models/transactions/paymentChannelClaim'
|
||||
import { Transaction } from '../models/transactions/transaction'
|
||||
|
||||
import createCrossChainPayment from './createCrossChainPayment'
|
||||
import { deriveKeypair, deriveAddress, deriveXAddress } from './derive'
|
||||
import getBalanceChanges from './getBalanceChanges'
|
||||
import getNFTokenID from './getNFTokenID'
|
||||
@@ -220,6 +219,5 @@ export {
|
||||
encodeForSigning,
|
||||
encodeForSigningClaim,
|
||||
getNFTokenID,
|
||||
createCrossChainPayment,
|
||||
parseNFTokenID,
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
To run integration tests:
|
||||
1. Run rippled-standalone node, either in a docker container (preferred) or by installing rippled.
|
||||
* With docker, run `docker run -p 6006:6006 -it natenichols/rippled-standalone:latest`
|
||||
* Or [download and build rippled](https://xrpl.org/install-rippled.html) and run `./rippled -a`
|
||||
1. Run rippled in standalone node, either in a docker container (preferred) or by installing rippled.
|
||||
* Go to the top-level of the `xrpl.js` repo, just above the `packages` folder.
|
||||
* With docker, run `docker run -p 6006:6006 --interactive -t --volume $PWD/.ci-config:/config/ xrpllabsofficial/xrpld:latest -a --start`
|
||||
* Or [download and build rippled](https://xrpl.org/install-rippled.html) and run `./rippled -a --start`
|
||||
* If you'd like to use the latest rippled amendments, you should modify your `rippled.cfg` file to enable amendments in the `[amendments]` section. You can view `.ci-config/rippled.cfg` in the top level folder as an example of this.
|
||||
2. Run `npm test:integration` or `npm test:browser`
|
||||
|
||||
@@ -61,11 +61,11 @@ describe('server_info (rippled)', function () {
|
||||
server_state: 'full',
|
||||
server_state_duration_us: '8752395105',
|
||||
state_accounting: {
|
||||
connected: { duration_us: '0', transitions: 0 },
|
||||
disconnected: { duration_us: '41860', transitions: 1 },
|
||||
full: { duration_us: '20723121268', transitions: 1 },
|
||||
syncing: { duration_us: '0', transitions: 0 },
|
||||
tracking: { duration_us: '0', transitions: 0 },
|
||||
connected: { duration_us: '0', transitions: '0' },
|
||||
disconnected: { duration_us: '41860', transitions: '1' },
|
||||
full: { duration_us: '20723121268', transitions: '1' },
|
||||
syncing: { duration_us: '0', transitions: '0' },
|
||||
tracking: { duration_us: '0', transitions: '0' },
|
||||
},
|
||||
time: '2021-Sep-23 22:56:55.320858 UTC',
|
||||
uptime: 8752,
|
||||
@@ -108,6 +108,9 @@ describe('server_info (rippled)', function () {
|
||||
'pubkey_node',
|
||||
'server_state_duration_us',
|
||||
'validated_ledger',
|
||||
'build_version',
|
||||
'node_size',
|
||||
'initial_sync_duration_us',
|
||||
]
|
||||
assert.deepEqual(
|
||||
omit(response.result.info, removeKeys),
|
||||
@@ -129,7 +132,7 @@ describe('server_info (rippled)', function () {
|
||||
)
|
||||
assert.equal(
|
||||
typeof response.result.info.state_accounting[key].transitions,
|
||||
'number',
|
||||
'string',
|
||||
)
|
||||
})
|
||||
|
||||
|
||||
@@ -68,11 +68,11 @@ describe('server_state', function () {
|
||||
server_state: 'full',
|
||||
server_state_duration_us: '8752487389',
|
||||
state_accounting: {
|
||||
connected: { duration_us: '0', transitions: 0 },
|
||||
disconnected: { duration_us: '41860', transitions: 1 },
|
||||
full: { duration_us: '20723121268', transitions: 1 },
|
||||
syncing: { duration_us: '0', transitions: 0 },
|
||||
tracking: { duration_us: '0', transitions: 0 },
|
||||
connected: { duration_us: '0', transitions: '0' },
|
||||
disconnected: { duration_us: '41860', transitions: '1' },
|
||||
full: { duration_us: '20723121268', transitions: '1' },
|
||||
syncing: { duration_us: '0', transitions: '0' },
|
||||
tracking: { duration_us: '0', transitions: '0' },
|
||||
},
|
||||
time: '2021-Sep-23 22:56:55.413151 UTC',
|
||||
uptime: 8752,
|
||||
@@ -112,6 +112,9 @@ describe('server_state', function () {
|
||||
'server_state_duration_us',
|
||||
'validated_ledger',
|
||||
'io_latency_ms',
|
||||
'build_version',
|
||||
'node_size',
|
||||
'initial_sync_duration_us',
|
||||
]
|
||||
assert.deepEqual(
|
||||
omit(response.result.state, removeKeys),
|
||||
@@ -133,7 +136,7 @@ describe('server_state', function () {
|
||||
)
|
||||
assert.equal(
|
||||
typeof response.result.state.state_accounting[key].transitions,
|
||||
'number',
|
||||
'string',
|
||||
)
|
||||
})
|
||||
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
import { assert } from 'chai'
|
||||
|
||||
import { createCrossChainPayment, convertStringToHex, Payment } from '../../src'
|
||||
|
||||
describe('createCrossChainPayment', function () {
|
||||
it('successful xchain payment creation', function () {
|
||||
const payment: Payment = {
|
||||
TransactionType: 'Payment',
|
||||
Account: 'rRandom',
|
||||
Destination: 'rRandom2',
|
||||
Amount: '3489303',
|
||||
}
|
||||
const sidechainAccount = 'rSidechain'
|
||||
|
||||
const expectedPayment = {
|
||||
...payment,
|
||||
Memos: [
|
||||
{
|
||||
Memo: {
|
||||
MemoData: convertStringToHex(sidechainAccount),
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
const resultPayment = createCrossChainPayment(payment, sidechainAccount)
|
||||
assert.deepEqual(resultPayment, expectedPayment)
|
||||
|
||||
// ensure that the original object wasn't modified
|
||||
assert.notDeepEqual(resultPayment, payment)
|
||||
})
|
||||
|
||||
it('successful xchain payment creation with memo', function () {
|
||||
const memo = {
|
||||
Memo: {
|
||||
MemoData: 'deadbeef',
|
||||
},
|
||||
}
|
||||
const payment: Payment = {
|
||||
TransactionType: 'Payment',
|
||||
Account: 'rRandom',
|
||||
Destination: 'rRandom2',
|
||||
Amount: '3489303',
|
||||
Memos: [memo],
|
||||
}
|
||||
const sidechainAccount = 'rSidechain'
|
||||
|
||||
const expectedPayment = {
|
||||
...payment,
|
||||
Memos: [
|
||||
{
|
||||
Memo: {
|
||||
MemoData: convertStringToHex(sidechainAccount),
|
||||
},
|
||||
},
|
||||
memo,
|
||||
],
|
||||
}
|
||||
|
||||
const resultPayment = createCrossChainPayment(payment, sidechainAccount)
|
||||
assert.deepEqual(resultPayment, expectedPayment)
|
||||
|
||||
// ensure that the original object wasn't modified
|
||||
assert.notDeepEqual(resultPayment, payment)
|
||||
})
|
||||
|
||||
it('removes TxnSignature', function () {
|
||||
const payment: Payment = {
|
||||
TransactionType: 'Payment',
|
||||
Account: 'rRandom',
|
||||
Destination: 'rRandom2',
|
||||
Amount: '3489303',
|
||||
TxnSignature: 'asodfiuaosdfuaosd',
|
||||
}
|
||||
const sidechainAccount = 'rSidechain'
|
||||
|
||||
const expectedPayment = {
|
||||
...payment,
|
||||
Memos: [
|
||||
{
|
||||
Memo: {
|
||||
MemoData: convertStringToHex(sidechainAccount),
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
delete expectedPayment.TxnSignature
|
||||
|
||||
const resultPayment = createCrossChainPayment(payment, sidechainAccount)
|
||||
assert.deepEqual(resultPayment, expectedPayment)
|
||||
|
||||
// ensure that the original object wasn't modified
|
||||
assert.notDeepEqual(resultPayment, payment)
|
||||
})
|
||||
|
||||
it('fails with 3 memos', function () {
|
||||
const payment: Payment = {
|
||||
TransactionType: 'Payment',
|
||||
Account: 'rRandom',
|
||||
Destination: 'rRandom2',
|
||||
Amount: '3489303',
|
||||
Memos: [
|
||||
{
|
||||
Memo: {
|
||||
MemoData: '2934723843ace',
|
||||
},
|
||||
},
|
||||
{
|
||||
Memo: {
|
||||
MemoData: '2934723843ace',
|
||||
},
|
||||
},
|
||||
{
|
||||
Memo: {
|
||||
MemoData: '2934723843ace',
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
assert.throws(() => {
|
||||
createCrossChainPayment(payment, 'rSidechain')
|
||||
}, /Cannot have more than 2 memos/u)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user