diff --git a/@theme/components/Navbar/Navbar.tsx b/@theme/components/Navbar/Navbar.tsx index e57f97dd88..26a1a4fc56 100644 --- a/@theme/components/Navbar/Navbar.tsx +++ b/@theme/components/Navbar/Navbar.tsx @@ -11,7 +11,7 @@ import moment from "moment-timezone"; // @ts-ignore const alertBanner = { - show: true, + show: false, message: "APEX 2025", button: "REGISTER", link: "https://www.xrpledgerapex.com/?utm_source=xrplwebsite&utm_medium=direct&utm_campaign=xrpl-event-ho-xrplapex-glb-2025-q1_xrplwebsite_ari_arp_bf_rsvp&utm_content=cta_btn_english_pencilbanner" diff --git a/_code-samples/tx-serialization/js/index.js b/_code-samples/tx-serialization/js/index.js index 859fa34be1..82443c45a0 100644 --- a/_code-samples/tx-serialization/js/index.js +++ b/_code-samples/tx-serialization/js/index.js @@ -37,7 +37,11 @@ const args = parseArgs(process.argv.slice(2), { function _pretty(message, color) { if (!args.raw) { - console.log(color, message) + if (color) { + console.log(color,message) + } else { + console.log(message) + } } } @@ -60,4 +64,4 @@ if (args.json) { } else { rawJson = fs.readFileSync(args.filename, 'utf8') main(rawJson, args.verbose) -} \ No newline at end of file +} diff --git a/_code-samples/tx-serialization/js/package.json b/_code-samples/tx-serialization/js/package.json index 91450677f9..a9d2582664 100644 --- a/_code-samples/tx-serialization/js/package.json +++ b/_code-samples/tx-serialization/js/package.json @@ -7,10 +7,9 @@ "big-integer": "^1.6.52", "buffer": "^6.0.3", "decimal.js": "^10.4.3", - "fs": "^0.0.1-security", "minimist": "^1.2.7", "ripple-address-codec": "^5.0.0", - "xrpl": "^4.0.0" + "xrpl": "^4.2.5" }, "main": "index.js", "scripts": { diff --git a/_code-samples/tx-serialization/js/test-cases/README.md b/_code-samples/tx-serialization/js/test-cases/README.md index fac686e78c..32361eecf7 100644 --- a/_code-samples/tx-serialization/js/test-cases/README.md +++ b/_code-samples/tx-serialization/js/test-cases/README.md @@ -6,7 +6,7 @@ you can use to verify the behavior of the transaction serialization code. For example (starting from the `tx-serialization/js/` dir above this one): ```bash -$ node index.js -f test-cases/tx2.json | \ +$ node index.js -rf test-cases/tx2.json | \ diff - test-cases/tx2-binary.txt ``` @@ -46,7 +46,7 @@ CDC63E1DEE7FE3744630440220143759437C04F7B61F012563AFE90D8DAFC46E86035E1D965A9CED For a friendlier display, you could pipe the output of the serializer to a file and use a visual tool like [Meld](http://meldmerge.org/) that shows intra-line differences: ```bash -$ cat test-cases/tx1.json | sed -e 's/"Fee": "10"/"Fee": "100"/' | node index.js --stdin > /tmp/tx1-modified.txt && meld /tmp/tx1-modified.txt test-cases/tx1-binary.txt +$ cat test-cases/tx1.json | sed -e 's/"Fee": "10"/"Fee": "100"/' | node index.js --raw --stdin > /tmp/tx1-modified.txt && meld /tmp/tx1-modified.txt test-cases/tx1-binary.txt ``` ![Meld screenshot showing the `0A` / `64` difference](meld-example.png) diff --git a/_code-samples/tx-serialization/js/tx-serializer.js b/_code-samples/tx-serialization/js/tx-serializer.js index 5cba755d63..2b4cbfc3da 100644 --- a/_code-samples/tx-serialization/js/tx-serializer.js +++ b/_code-samples/tx-serialization/js/tx-serializer.js @@ -92,7 +92,7 @@ class TxSerializer { _decodeAddress(address) { const decoded = codec.decodeChecked(address) if (decoded[0] === 0 && decoded.length === 21) { - return decoded.slice(1) + return Buffer.from(decoded.slice(1)) } throw new Error("Not an AccountID!") @@ -161,7 +161,7 @@ class TxSerializer { const byte2 = this.uint8ToBytes(typeCode) const byte3 = this.uint8ToBytes(fieldCode) - return "" + byte1 + byte2 + byte3 //TODO: bytes is python function + return "" + byte1 + byte2 + byte3 } } @@ -681,9 +681,8 @@ class TxSerializer { fieldsAsBytes.push(fieldBytes) } } - return fieldsAsBytes.join('') } } -module.exports = TxSerializer \ No newline at end of file +module.exports = TxSerializer diff --git a/community/events.page.tsx b/community/events.page.tsx index f4f79c05f9..b8db5808da 100644 --- a/community/events.page.tsx +++ b/community/events.page.tsx @@ -16,6 +16,7 @@ const infoSession3 = require("../static/img/events/xrpl-builder-office-hours-03. const infoSession4 = require("../static/img/events/xrpl-builder-office-hours-04.png"); const decarb = require('../static/img/events/xrpl-decarb.png') const townHall = require('../static/img/events/town-hall-meetup.png') +const devBootcamp = require('../static/img/events/dev-bootcamp.png') export const frontmatter = { seo: { title: "Events", @@ -1095,6 +1096,62 @@ const events = [ image: require("../static/img/events/commons-launch.png"), end_date: "April 8, 2025", }, + { + name: "XRPL Core Dev Bootcamp AMA", + description: + "Join us on June 16 for an exclusive information session (AMA) about the XRPL Core Dev Bootcamp, a two-week intensive program focused on low-level development on the XRP Ledger.", + type: "ama", + link: "https://lu.ma/hqvlluce", + location: "Virtual", + date: "June 16, 2025", + image: devBootcamp, + end_date: "June 16, 2025", + }, + { + name: "XRPL Townhall Meeting #4", + description: + "Join Us for a fourth XRPL Town Hall Meeting: Back from APEX!", + type: "info", + link: "https://lu.ma/90qih8kl", + location: "Virtual", + date: "June 19, 2025", + image: require("../static/img/events/commons-orange.png"), + end_date: "June 19, 2025", + }, + { + name: "XRPL Meetup in Brussels", + description: + `Calling all blockchain and XRP Ledger enthusiasts in Brussels! Join XRPL Meetups to share knowledge, build real-life connections, and foster communities centered around blockchain and XRP Ledger. We're establishing local "XRPL Hubs" across Europe, and we want you to be a part of it!`, + type: "meetup", + link: "https://lu.ma/q32897pc", + location: "Bruxelles, Belgium", + date: "June 24, 2025", + image: require("../static/img/events/commons-orange.png"), + end_date: "June 24, 2025", + }, + { + name: "XRPL Core Dev Bootcamp", + description: + "Are you an intermediate/advanced C++ dev ready to dive deep into blockchain? Join a 2-week, in-person bootcamp with hands-on training, expert-led sessions, and cohort-based learning focused on XRPL core development.", + type: "hackathon", + link: "https://www.xrpl-commons.org/build/core-dev-bootcamp", + location: "Paris, France", + date: "July 11, 2025", + image: devBootcamp, + end_date: "July 25, 2025", + }, + { + name: "XRP Ledger Meetup Cannes", + description: + "Join us in Cannes for a special evening from 6:00 PM, focused on Bridging the XRPL and EVM Ecosystems. ​Hosted in collaboration by XRPL Commons, Ripple, and Peersyst, this XRPL meetup brings the community together for insightful conversations and meaningful connections.", + type: "meetup", + link: "https://lu.ma/q6dar9io", + location: "Cannes, France", + date: "June 30, 2025", + image: require("../static/img/events/commons-cannes.png"), + end_date: "June 30, 2025", + }, + ]; diff --git a/community/index.page.tsx b/community/index.page.tsx index 7c07da2315..0589c5a6e5 100644 --- a/community/index.page.tsx +++ b/community/index.page.tsx @@ -333,6 +333,19 @@ const events = [ start_date: "November 22, 2024", end_date: "November 22, 2024", }, + { + name: "XRP Ledger Meetup Cannes", + description: + "Join us in Cannes for a special evening from 6:00 PM, focused on Bridging the XRPL and EVM Ecosystems. ​Hosted in collaboration by XRPL Commons, Ripple, and Peersyst, this XRPL meetup brings the community together for insightful conversations and meaningful connections.", + type: "meetup", + link: "https://lu.ma/q6dar9io", + location: "Cannes, France", + image: require("../static/img/events/commons-cannes.png"), + date: "June 30, 2025", + start_date: "June 30, 2025", + end_date: "June 30, 2025", + }, + ]; const findNearestUpcomingEvent = (events) => { diff --git a/docs/references/protocol/transactions/transaction-results/tem-codes.md b/docs/references/protocol/transactions/transaction-results/tem-codes.md index 017d4e7405..9e61b7815f 100644 --- a/docs/references/protocol/transactions/transaction-results/tem-codes.md +++ b/docs/references/protocol/transactions/transaction-results/tem-codes.md @@ -45,6 +45,7 @@ These codes indicate that the transaction was malformed, and cannot succeed acco | `temREDUNDANT` | The transaction would do nothing; for example, it is sending a payment directly to the sending account, or creating an offer to buy and sell the same currency from the same issuer. | | `temREDUNDANT_SEND_MAX` | {% badge href="https://github.com/XRPLF/rippled/releases/tag/0.28.0" %}Removed in: rippled 0.28.0{% /badge %} | | `temRIPPLE_EMPTY` | The [Payment transaction][] includes an empty `Paths` field, but paths are necessary to complete this payment. | +| `temSEQ_AND_TICKET` | The transaction contains both a `TicketSequence` field and a non-zero `Sequence` value. A transaction cannot include both. _(Added by the [TicketBatch amendment][].)_ | | `temBAD_WEIGHT` | The [SignerListSet transaction][] includes a `SignerWeight` that is invalid, for example a zero or negative value. | | `temBAD_SIGNER` | The [SignerListSet transaction][] includes a signer who is invalid. For example, there may be duplicate entries, or the owner of the SignerList may also be a member. | | `temBAD_QUORUM` | The [SignerListSet transaction][] has an invalid `SignerQuorum` value. Either the value is not greater than zero, or it is more than the sum of all signers in the list. | diff --git a/docs/tutorials/javascript/amm/create-an-amm.md b/docs/tutorials/javascript/amm/create-an-amm.md index 3088aca186..6542e34b5c 100644 --- a/docs/tutorials/javascript/amm/create-an-amm.md +++ b/docs/tutorials/javascript/amm/create-an-amm.md @@ -61,7 +61,10 @@ Create a trustline from the operational account to the standby account. In the s Send issued tokens from the operational account to the standby account. In the operational account fields: -1. Select **Allow Rippling** and click **Configure Account**. +1. Select **Allow Rippling** and click **Configure Account**. + {% admonition type="info" name="Note" %} + This enables the `defaultRipple` flag on the issuing account, which is set to `false` by default. You need to enable this in order to trade tokens issued by the account. See [Configure Issuer Settings](../../how-tos/use-tokens/issue-a-fungible-token#3.-configure-issuer-settings) to learn more. + {% /admonition %} 2. Enter a value in the **Amount** field, up to the maximum transfer amount you set in the trustline. 3. Enter the standby account address in the **Destination** field. 4. Enter the currency code from the trustline in the **Currency** field. @@ -109,7 +112,6 @@ Create a second AMM pool with two issued tokens. You can open `ripplex11-create-amm.js` from the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-portal/tree/master/_code-samples/quickstart/js/) to view the source code. - ### Create AMM This sends the `AMMCreate` transaction and creates a new AMM, using the initial assets provided. The code checks the token currency fields and formats the `AMMCreate` transaction based on the combination of `XRP` and custom tokens. diff --git a/static/img/events/commons-cannes.png b/static/img/events/commons-cannes.png new file mode 100644 index 0000000000..b8972bc2fb Binary files /dev/null and b/static/img/events/commons-cannes.png differ diff --git a/static/img/events/commons-orange.png b/static/img/events/commons-orange.png new file mode 100644 index 0000000000..e8c1c30f54 Binary files /dev/null and b/static/img/events/commons-orange.png differ diff --git a/static/img/events/dev-bootcamp.png b/static/img/events/dev-bootcamp.png new file mode 100644 index 0000000000..d350d244f2 Binary files /dev/null and b/static/img/events/dev-bootcamp.png differ