From be2aa325424cae3858fc546e0cf721ed2b276aad Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 6 Apr 2023 13:03:23 -0400 Subject: [PATCH 1/3] fix: don't run ripple-binary-codec tests on install (#2260) fix rbc scripts --- packages/ripple-binary-codec/package.json | 4 ++-- packages/ripple-binary-codec/src/types/index.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ripple-binary-codec/package.json b/packages/ripple-binary-codec/package.json index daf2ad71..b03ba0c7 100644 --- a/packages/ripple-binary-codec/package.json +++ b/packages/ripple-binary-codec/package.json @@ -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": { diff --git a/packages/ripple-binary-codec/src/types/index.ts b/packages/ripple-binary-codec/src/types/index.ts index fd8b02c2..ffd72786 100644 --- a/packages/ripple-binary-codec/src/types/index.ts +++ b/packages/ripple-binary-codec/src/types/index.ts @@ -36,7 +36,7 @@ const coreTypes: Record = { // 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 { From c5433c6ac0b8c8955d689eb5bb1857de6ad93146 Mon Sep 17 00:00:00 2001 From: Jackson Mills Date: Thu, 6 Apr 2023 11:11:46 -0700 Subject: [PATCH 2/3] Update docker to use xrpllabs image (#2223) Added additional documentation and config. --- .ci-config/rippled.cfg | 151 ++++++++++++++++++ .github/workflows/nodejs.yml | 43 ++--- .gitignore | 2 - CONTRIBUTING.md | 21 ++- packages/xrpl/HISTORY.md | 1 + .../xrpl/src/models/methods/serverInfo.ts | 2 +- packages/xrpl/test/integration/README.md | 8 +- .../integration/requests/serverInfo.test.ts | 15 +- .../integration/requests/serverState.test.ts | 15 +- 9 files changed, 217 insertions(+), 41 deletions(-) create mode 100644 .ci-config/rippled.cfg diff --git a/.ci-config/rippled.cfg b/.ci-config/rippled.cfg new file mode 100644 index 00000000..066924cb --- /dev/null +++ b/.ci-config/rippled.cfg @@ -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 diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 97bbc6bc..02df714a 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -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 diff --git a/.gitignore b/.gitignore index 5aff5e58..35773891 100644 --- a/.gitignore +++ b/.gitignore @@ -39,8 +39,6 @@ db/*.db db/*.db-* # Ignore customized configs -rippled.cfg -validators.txt test/config.js # Ignore coverage files diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 451544de..95f1a8a7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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. diff --git a/packages/xrpl/HISTORY.md b/packages/xrpl/HISTORY.md index c6537557..0bd75163 100644 --- a/packages/xrpl/HISTORY.md +++ b/packages/xrpl/HISTORY.md @@ -7,6 +7,7 @@ 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 ## 2.7.0 (2023-03-08) diff --git a/packages/xrpl/src/models/methods/serverInfo.ts b/packages/xrpl/src/models/methods/serverInfo.ts index bfcfcbbd..a41f3333 100644 --- a/packages/xrpl/src/models/methods/serverInfo.ts +++ b/packages/xrpl/src/models/methods/serverInfo.ts @@ -22,7 +22,7 @@ export type ServerState = export interface StateAccounting { duration_us: string - transitions: number + transitions: string } export interface JobType { diff --git a/packages/xrpl/test/integration/README.md b/packages/xrpl/test/integration/README.md index 9b550671..8795e87a 100644 --- a/packages/xrpl/test/integration/README.md +++ b/packages/xrpl/test/integration/README.md @@ -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` diff --git a/packages/xrpl/test/integration/requests/serverInfo.test.ts b/packages/xrpl/test/integration/requests/serverInfo.test.ts index a4df0fd2..31009180 100644 --- a/packages/xrpl/test/integration/requests/serverInfo.test.ts +++ b/packages/xrpl/test/integration/requests/serverInfo.test.ts @@ -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', ) }) diff --git a/packages/xrpl/test/integration/requests/serverState.test.ts b/packages/xrpl/test/integration/requests/serverState.test.ts index e3864173..9890f6e2 100644 --- a/packages/xrpl/test/integration/requests/serverState.test.ts +++ b/packages/xrpl/test/integration/requests/serverState.test.ts @@ -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', ) }) From 70745f4c943970381ac88120ac2a38c970d779b9 Mon Sep 17 00:00:00 2001 From: Florian Date: Mon, 10 Apr 2023 18:37:19 +0200 Subject: [PATCH 3/3] Update the applications.md file (#2269) --- APPLICATIONS.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/APPLICATIONS.md b/APPLICATIONS.md index 7c7c113d..411981a0 100644 --- a/APPLICATIONS.md +++ b/APPLICATIONS.md @@ -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.