Home
Softono
x

xrplf

Professional software vendor delivering innovative solutions on the Softono platform. Specialized in both open-source and proprietary software development.

Total Products
3

Software by xrplf

xrpl.js
Open Source

xrpl.js

# xrpl.js A JavaScript/TypeScript library for interacting with the XRP Ledger [![NPM](https://nodei.co/npm/xrpl.png)](https://www.npmjs.org/package/xrpl) ![npm bundle size](https://img.shields.io/bundlephobia/min/xrpl) This is the recommended library for integrating a JavaScript/TypeScript app with the XRP Ledger, especially if you intend to use advanced functionality such as IOUs, payment paths, the decentralized exchange, account settings, payment channels, escrows, multi-signing, and more. ## [➡️ Reference Documentation](http://js.xrpl.org) See the full reference documentation for all classes, methods, and utilities. ## Features 1. Managing keys & creating test credentials ([`Wallet`](https://js.xrpl.org/classes/Wallet.html) && [`Client.fundWallet()`](https://js.xrpl.org/classes/Client.html#fundWallet)) 2. Submitting transactions to the XRP Ledger ([`Client.submit(...)`](https://js.xrpl.org/classes/Client.html#submit) & [transaction types](https://xrpl.org/transaction-types.html)) 3. Sending requests to observe the ledger ([`Client.request(...)`](https://js.xrpl.org/classes/Client.html#request) using [public API methods](https://xrpl.org/public-api-methods.html)) 4. Subscribing to changes in the ledger ([Ex. ledger, transactions, & more...](https://xrpl.org/subscribe.html)) 5. Parsing ledger data into more convenient formats ([`xrpToDrops`](https://js.xrpl.org/functions/xrpToDrops.html) and [`rippleTimeToISOTime`](https://js.xrpl.org/functions/rippleTimeToISOTime.html)) All of which works in Node.js (tested for v20+) & web browsers (tested for Chrome). # Quickstart ### Requirements + **[Node.js v22](https://nodejs.org/)** is recommended. We also support v20. Other versions may work but are not frequently tested. ### Installing xrpl.js In an existing project (with package.json), install xrpl.js with: ``` $ npm install --save xrpl ``` Or with `yarn`: ``` $ yarn add xrpl ``` Example usage: ```js const xrpl = require("xrpl"); async function main() { const client = new xrpl.Client("wss://s.altnet.rippletest.net:51233"); await client.connect(); const response = await client.request({ command: "account_info", account: "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe", ledger_index: "validated", }); console.log(response); await client.disconnect(); } main(); ``` For a more in-depth example, you can copy/forking this Code Sandbox template! <br>https://codesandbox.io/s/xrpl-intro-pxgdjr?file=/src/App.js It goes through: 1. Creating a new test account 2. Sending a payment transaction 3. And sending requests to see your account balance! ### Case by Case Setup Steps 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](https://github.com/XRPLF/xrpl.js/blob/main/UNIQUE_SETUPS.md#using-xrpljs-from-a-cdn) - [Using xrpl.js with `create-react-app`](https://github.com/XRPLF/xrpl.js/blob/main/UNIQUE_SETUPS.md#using-xrpljs-with-create-react-app) - [Using xrpl.js with `React Native`](https://github.com/XRPLF/xrpl.js/blob/main/UNIQUE_SETUPS.md#using-xrpljs-with-react-native) - [Using xrpl.js with `Vite React`](https://github.com/XRPLF/xrpl.js/blob/main/UNIQUE_SETUPS.md#using-xrpljs-with-vite-react) ## Documentation As you develop with xrpl.js, there's two sites you'll use extensively: 1. [xrpl.org](https://xrpl.org/references.html) is the primary source for: - How the ledger works ([See Concepts](https://xrpl.org/concepts.html#main-page-header)) - What kinds of transactions there are ([Transaction Types](https://xrpl.org/transaction-types.html#transaction-types)) - Requests you can send ([Public API Methods](https://xrpl.org/public-api-methods.html)) - Tutorials for interacting with various features of the ledger ([Tutorials](https://xrpl.org/tutorials.html#main-page-header)) 2. [js.xrpl.org](https://js.xrpl.org/) has the reference docs for this library ### Mailing Lists If you want to hear when we release new versions of xrpl.js, you can join our low-traffic mailing list (About 1 email per week): - [Subscribe to xrpl-announce](https://groups.google.com/g/xrpl-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. - [Subscribe to ripple-server](https://groups.google.com/g/ripple-server) ## Asking for help One of the best spots to ask for help is in the [XRPL Developer Discord](https://xrpldevs.org) - There's a channel for xrpl.js where other community members can help you figure out how to accomplish your goals. You are also welcome to create an [issue](https://github.com/XRPLF/xrpl.js/issues) here and we'll do our best to respond within 3 days. ## Key Links - [xrpl.js Reference Docs](https://js.xrpl.org/) - [xrpl.org (Detailed docs on how the XRPL works)](https://xrpl.org/references.html) - [XRPL Code Samples](https://github.com/XRPLF/xrpl-dev-portal/tree/master/_code-samples) - [#javascript in the XRPL Developer Discord for questions & support](https://xrpldevs.org) - [xrpl-announce (The mailing list for new xrpl.js versions)](https://groups.google.com/g/xrpl-announce) - [Applications that use xrpl.js](https://github.com/XRPLF/xrpl.js/blob/main/APPLICATIONS.md) (You can open a PR to add your project!)

Crypto & Blockchain API Tools
1.3K Github Stars
xrpl-py
Open Source

xrpl-py

[![Documentation Status](https://readthedocs.org/projects/xrpl-py/badge)](https://xrpl-py.readthedocs.io/) # xrpl-py A pure Python implementation for interacting with the [XRP Ledger](https://xrpl.org/). The `xrpl-py` library simplifies the hardest parts of XRP Ledger interaction, like serialization and transaction signing. It also provides native Python methods and models for [XRP Ledger transactions](https://xrpl.org/transaction-formats.html) and core server [API](https://xrpl.org/api-conventions.html) ([`rippled`](https://github.com/ripple/rippled)) objects. As an example, this is how you would use this library to send a payment on testnet: ```py from xrpl.account import get_balance from xrpl.clients import JsonRpcClient from xrpl.models import Payment, Tx from xrpl.transaction import submit_and_wait from xrpl.wallet import generate_faucet_wallet # Create a client to connect to the test network client = JsonRpcClient("https://s.altnet.rippletest.net:51234") # Create two wallets to send money between on the test network wallet1 = generate_faucet_wallet(client, debug=True) wallet2 = generate_faucet_wallet(client, debug=True) # Both balances should be zero since nothing has been sent yet print("Balances of wallets before Payment tx") print(get_balance(wallet1.address, client)) print(get_balance(wallet2.address, client)) # Create a Payment transaction from wallet1 to wallet2 payment_tx = Payment( account=wallet1.address, amount="1000", destination=wallet2.address, ) # Submit the payment to the network and wait to see a response # Behind the scenes, this fills in fields which can be looked up automatically like the fee. # It also signs the transaction with wallet1 to prove you own the account you're paying from. payment_response = submit_and_wait(payment_tx, client, wallet1) print("Transaction was submitted") # Create a "Tx" request to look up the transaction on the ledger tx_response = client.request(Tx(transaction=payment_response.result["hash"])) # Check whether the transaction was actually validated on ledger print("Validated:", tx_response.result["validated"]) # Check balances after 1000 drops (.001 XRP) was sent from wallet1 to wallet2 print("Balances of wallets after Payment tx:") print(get_balance(wallet1.address, client)) print(get_balance(wallet2.address, client)) ``` [![Downloads](https://pepy.tech/badge/xrpl-py/month)](https://pepy.tech/project/xrpl-py/month) [![Contributors](https://img.shields.io/github/contributors/xpring-eng/xrpl-py.svg)](https://github.com/xpring-eng/xrpl-py/graphs/contributors) ## Installation and supported versions The `xrpl-py` library is available on [PyPI](https://pypi.org/). Install with `pip`: ``` pip3 install xrpl-py ``` The library supports [Python 3.10](https://www.python.org/downloads/) and later. [![Supported Versions](https://img.shields.io/pypi/pyversions/xrpl-py.svg)](https://pypi.org/project/xrpl-py) ## Features Use `xrpl-py` to build Python applications that leverage the [XRP Ledger](https://xrpl.org/). The library helps with all aspects of interacting with the XRP Ledger, including: - Key and wallet management - Serialization - Transaction Signing `xrpl-py` also provides: - A network client — See [`xrpl.clients`](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.clients.html) for more information. - Methods for inspecting accounts — See [XRPL Account Methods](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.account.html) for more information. - Codecs for encoding and decoding addresses and other objects — See [Core Codecs](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.core.html) for more information. ## [➡️ Reference Documentation](https://xrpl-py.readthedocs.io/en/stable/) See the complete [`xrpl-py` reference documentation on Read the Docs](https://xrpl-py.readthedocs.io/en/stable/index.html). ## Usage The following sections describe some of the most commonly used modules in the `xrpl-py` library and provide sample code. ### Network client Use the `xrpl.clients` library to create a network client for connecting to the XRP Ledger. ```py from xrpl.clients import JsonRpcClient JSON_RPC_URL = "https://s.altnet.rippletest.net:51234" client = JsonRpcClient(JSON_RPC_URL) ``` ### Manage keys and wallets #### `xrpl.wallet` Use the [`xrpl.wallet`](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.wallet.html) module to create a wallet from a given seed or or via a [Testnet faucet](https://xrpl.org/xrp-testnet-faucet.html). To create a wallet from a seed (in this case, the value generated using [`xrpl.keypairs`](#xrpl-keypairs)): ```py wallet_from_seed = xrpl.wallet.Wallet.from_seed(seed) print(wallet_from_seed) # pub_key: ED46949E414A3D6D758D347BAEC9340DC78F7397FEE893132AAF5D56E4D7DE77B0 # priv_key: -HIDDEN- # address: rG5ZvYsK5BPi9f1Nb8mhFGDTNMJhEhufn6 ``` To create a wallet from a Testnet faucet: ```py test_wallet = generate_faucet_wallet(client) test_account = test_wallet.address print("Classic address:", test_account) # Classic address: rEQB2hhp3rg7sHj6L8YyR4GG47Cb7pfcuw ``` #### `xrpl.core.keypairs` Use the [`xrpl.core.keypairs`](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.core.keypairs.html#module-xrpl.core.keypairs) module to generate seeds and derive keypairs and addresses from those seed values. Here's an example of how to generate a `seed` value and derive an [XRP Ledger "classic" address](https://xrpl.org/cryptographic-keys.html#account-id-and-address) from that seed. ```py from xrpl.core import keypairs seed = keypairs.generate_seed() public, private = keypairs.derive_keypair(seed) test_account = keypairs.derive_classic_address(public) print("Here's the public key:") print(public) print("Here's the private key:") print(private) print("Store this in a secure place!") # Here's the public key: # ED3CC1BBD0952A60088E89FA502921895FC81FBD79CAE9109A8FE2D23659AD5D56 # Here's the private key: # EDE65EE7882847EF5345A43BFB8E6F5EEC60F45461696C384639B99B26AAA7A5CD # Store this in a secure place! ``` **Note:** You can use `xrpl.core.keypairs.sign` to sign transactions but `xrpl-py` also provides explicit methods for safely signing and submitting transactions. See [Transaction Signing](#transaction-signing) and [XRPL Transaction Methods](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.transaction.html#module-xrpl.transaction) for more information. ### Serialize and sign transactions To securely submit transactions to the XRP Ledger, you need to first serialize data from JSON and other formats into the [XRP Ledger's canonical format](https://xrpl.org/serialization.html), then to [authorize the transaction](https://xrpl.org/transaction-basics.html#authorizing-transactions) by digitally [signing it](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.core.keypairs.html?highlight=sign#xrpl.core.keypairs.sign) with the account's private key. The `xrpl-py` library provides several methods to simplify this process. Use the [`xrpl.transaction`](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.transaction.html) module to sign and submit transactions. The module offers three ways to do this: - [`sign_and_submit`](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.transaction.html#xrpl.transaction.sign_and_submit) — Signs a transaction locally, then submits it to the XRP Ledger. This method does not implement [reliable transaction submission](https://xrpl.org/reliable-transaction-submission.html#reliable-transaction-submission) best practices, so only use it for development or testing purposes. - [`sign`](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.transaction.html#xrpl.transaction.sign) — Signs a transaction locally. This method **does not** submit the transaction to the XRP Ledger. - [`submit_and_wait`](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.transaction.html#xrpl.transaction.submit_and_wait) — An implementation of the [reliable transaction submission guidelines](https://xrpl.org/reliable-transaction-submission.html#reliable-transaction-submission), this method submits a signed transaction to the XRP Ledger and then verifies that it has been included in a validated ledger (or has failed to do so). Use this method to submit transactions for production purposes. ```py from xrpl.models.transactions import Payment from xrpl.transaction import sign, submit_and_wait from xrpl.ledger import get_latest_validated_ledger_sequence from xrpl.account import get_next_valid_seq_number current_validated_ledger = get_latest_validated_ledger_sequence(client) # prepare the transaction # the amount is expressed in drops, not XRP # see https://xrpl.org/basic-data-types.html#specifying-currency-amounts my_tx_payment = Payment( account=test_wallet.address, amount="2200000", destination="rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe", last_ledger_sequence=current_validated_ledger + 20, sequence=get_next_valid_seq_number(test_wallet.address, client), fee="10", ) # sign the transaction my_tx_payment_signed = sign(my_tx_payment,test_wallet) # submit the transaction tx_response = submit_and_wait(my_tx_payment_signed, client) ``` #### Get fee from the XRP Ledger In most cases, you can specify the minimum [transaction cost](https://xrpl.org/transaction-cost.html#current-transaction-cost) of `"10"` for the `fee` field unless you have a strong reason not to. But if you want to get the [current load-balanced transaction cost](https://xrpl.org/transaction-cost.html#current-transaction-cost) from the network, you can use the `get_fee` function: ```py from xrpl.ledger import get_fee fee = get_fee(client) print(fee) # 10 ``` #### Auto-filled fields The `xrpl-py` library automatically populates the `fee`, `sequence` and `last_ledger_sequence` fields when you create transactions. In the example above, you could omit those fields and let the library fill them in for you. ```py from xrpl.models.transactions import Payment from xrpl.transaction import submit_and_wait, autofill_and_sign # prepare the transaction # the amount is expressed in drops, not XRP # see https://xrpl.org/basic-data-types.html#specifying-currency-amounts my_tx_payment = Payment( account=test_wallet.address, amount="2200000", destination="rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe" ) # sign the transaction with the autofill method # (this will auto-populate the fee, sequence, and last_ledger_sequence) my_tx_payment_signed = autofill_and_sign(my_tx_payment, client, test_wallet) print(my_tx_payment_signed) # Payment( # account='rMPUKmzmDWEX1tQhzQ8oGFNfAEhnWNFwz', # transaction_type=<TransactionType.PAYMENT: 'Payment'>, # fee='10', # sequence=16034065, # account_txn_id=None, # flags=0, # last_ledger_sequence=10268600, # memos=None, # signers=None, # source_tag=None, # signing_pub_key='EDD9540FA398915F0BCBD6E65579C03BE5424836CB68B7EB1D6573F2382156B444', # txn_signature='938FB22AE7FE76CF26FD11F8F97668E175DFAABD2977BCA397233117E7E1C4A1E39681091CC4D6DF21403682803AB54CC21DC4FA2F6848811DEE10FFEF74D809', # amount='2200000', # destination='rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe', # destination_tag=None, # invoice_id=None, # paths=None, # send_max=None, # deliver_min=None # ) # submit the transaction tx_response = submit_and_wait(my_tx_payment_signed, client) ``` ### Subscribe to ledger updates You can send `subscribe` and `unsubscribe` requests only using the WebSocket network client. These request methods allow you to be alerted of certain situations as they occur, such as when a new ledger is declared. ```py from xrpl.clients import WebsocketClient url = "wss://s.altnet.rippletest.net/" from xrpl.models import Subscribe, StreamParameter req = Subscribe(streams=[StreamParameter.LEDGER]) # NOTE: this code will run forever without a timeout, until the process is killed with WebsocketClient(url) as client: client.send(req) for message in client: print(message) # {'result': {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': '7CD50477F23FF158B430772D8E82A961376A7B40E13C695AA849811EDF66C5C0', 'ledger_index': 18183504, 'ledger_time': 676412962, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'validated_ledgers': '17469391-18183504'}, 'status': 'success', 'type': 'response'} # {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'BAA743DABD168BD434804416C8087B7BDEF7E6D7EAD412B9102281DD83B10D00', 'ledger_index': 18183505, 'ledger_time': 676412970, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183505'} # {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'D8227DAF8F745AE3F907B251D40B4081E019D013ABC23B68C0B1431DBADA1A46', 'ledger_index': 18183506, 'ledger_time': 676412971, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183506'} # {'fee_base': 10, 'fee_ref': 10, 'ledger_hash': 'CFC412B6DDB9A402662832A781C23F0F2E842EAE6CFC539FEEB287318092C0DE', 'ledger_index': 18183507, 'ledger_time': 676412972, 'reserve_base': 20000000, 'reserve_inc': 5000000, 'txn_count': 0, 'type': 'ledgerClosed', 'validated_ledgers': '17469391-18183507'} ``` ### Asynchronous Code This library supports Python's [`asyncio`](https://docs.python.org/3/library/asyncio.html) package, which is used to run asynchronous code. All the async code is in [`xrpl.asyncio`](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.asyncio.html) If you are writing asynchronous code, please note that you will not be able to use any synchronous sugar functions, due to how event loops are handled. However, every synchronous method has a corresponding asynchronous method that you can use. This sample code is the asynchronous equivalent of the above section on submitting a transaction. ```py import asyncio from xrpl.models.transactions import Payment from xrpl.asyncio.transaction import sign, submit_and_wait from xrpl.asyncio.ledger import get_latest_validated_ledger_sequence from xrpl.asyncio.account import get_next_valid_seq_number from xrpl.asyncio.clients import AsyncJsonRpcClient async_client = AsyncJsonRpcClient(JSON_RPC_URL) async def submit_sample_transaction(): current_validated_ledger = await get_latest_validated_ledger_sequence(async_client) # prepare the transaction # the amount is expressed in drops, not XRP # see https://xrpl.org/basic-data-types.html#specifying-currency-amounts my_tx_payment = Payment( account=test_wallet.address, amount="2200000", destination="rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe", last_ledger_sequence=current_validated_ledger + 20, sequence=await get_next_valid_seq_number(test_wallet.address, async_client), fee="10", ) # sign and submit the transaction tx_response = await submit_and_wait(my_tx_payment, async_client, test_wallet) asyncio.run(submit_sample_transaction()) ``` ### Encode addresses Use [`xrpl.core.addresscodec`](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.core.addresscodec.html) to encode and decode addresses into and from the ["classic" and X-address formats](https://xrpl.org/accounts.html#addresses). ```py # convert classic address to x-address from xrpl.core import addresscodec testnet_xaddress = ( addresscodec.classic_address_to_xaddress( "rMPUKmzmDWEX1tQhzQ8oGFNfAEhnWNFwz", tag=0, is_test_network=True, ) ) print(testnet_xaddress) # T7QDemmxnuN7a52A62nx2fxGPWcRahLCf3qaswfrsNW9Lps ``` ## Migrating If you're currently using `xrpl-py` version 1, you can use [this guide to migrate to v2](https://xrpl.org/blog/2023/xrpl-py-2.0-release.html). ## Contributing If you want to contribute to this project, see [CONTRIBUTING.md]. ### Mailing Lists We have a low-traffic mailing list for announcements of new `xrpl-py` releases. (About 1 email per week) - [Subscribe to xrpl-announce](https://groups.google.com/g/xrpl-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. - [Subscribe to ripple-server](https://groups.google.com/g/ripple-server) ### Code Samples - For samples of common use cases, see the [XRPL.org Code Samples](https://xrpl.org/code-samples.html) page. - You can also browse those samples [directly on GitHub](https://github.com/XRPLF/xrpl-dev-portal/tree/master/_code-samples). ### Report an issue Experienced an issue? Report it [here](https://github.com/XRPLF/xrpl-py/issues/new). ## License The `xrpl-py` library is licensed under the ISC License. See [LICENSE] for more information. [CONTRIBUTING.md]: CONTRIBUTING.md [LICENSE]: LICENSE

Database Crypto & Blockchain
237 Github Stars
rippled
Open Source

rippled

[![codecov](https://codecov.io/gh/XRPLF/rippled/graph/badge.svg?token=WyFr5ajq3O)](https://codecov.io/gh/XRPLF/rippled) # The XRP Ledger The [XRP Ledger](https://xrpl.org/) is a decentralized cryptographic ledger powered by a network of peer-to-peer nodes. The XRP Ledger uses a novel Byzantine Fault Tolerant consensus algorithm to settle and record transactions in a secure distributed database without a central operator. ## XRP [XRP](https://xrpl.org/xrp.html) is a public, counterparty-free crypto-asset native to the XRP Ledger, and is designed as a gas token for network services and to bridge different currencies. XRP is traded on the open-market and is available for anyone to access. The XRP Ledger was created in 2012 with a finite supply of 100 billion units of XRP. ## xrpld The server software that powers the XRP Ledger is called `xrpld` and is available in this repository under the permissive [ISC open-source license](LICENSE.md). The `xrpld` server software is written primarily in C++ and runs on a variety of platforms. The `xrpld` server software can run in several modes depending on its [configuration](https://xrpl.org/rippled-server-modes.html). If you are interested in running an **API Server** (including a **Full History Server**), take a look at [Clio](https://github.com/XRPLF/clio). (xrpld Reporting Mode has been replaced by Clio.) ### Build from Source - [Read the build instructions in `BUILD.md`](BUILD.md) - If you encounter any issues, please [open an issue](https://github.com/XRPLF/rippled/issues) ## Key Features of the XRP Ledger - **[Censorship-Resistant Transaction Processing][]:** No single party decides which transactions succeed or fail, and no one can "roll back" a transaction after it completes. As long as those who choose to participate in the network keep it healthy, they can settle transactions in seconds. - **[Fast, Efficient Consensus Algorithm][]:** The XRP Ledger's consensus algorithm settles transactions in 4 to 5 seconds, processing at a throughput of up to 1500 transactions per second. These properties put XRP at least an order of magnitude ahead of other top digital assets. - **[Finite XRP Supply][]:** When the XRP Ledger began, 100 billion XRP were created, and no more XRP will ever be created. The available supply of XRP decreases slowly over time as small amounts are destroyed to pay transaction fees. - **[Responsible Software Governance][]:** A team of full-time developers at Ripple & other organizations maintain and continually improve the XRP Ledger's underlying software with contributions from the open-source community. Ripple acts as a steward for the technology and an advocate for its interests. - **[Secure, Adaptable Cryptography][]:** The XRP Ledger relies on industry standard digital signature systems like ECDSA (the same scheme used by Bitcoin) but also supports modern, efficient algorithms like Ed25519. The extensible nature of the XRP Ledger's software makes it possible to add and disable algorithms as the state of the art in cryptography advances. - **[Modern Features][]:** Features like Escrow, Checks, and Payment Channels support financial applications atop of the XRP Ledger. This toolbox of advanced features comes with safety features like a process for amending the network and separate checks against invariant constraints. - **[On-Ledger Decentralized Exchange][]:** In addition to all the features that make XRP useful on its own, the XRP Ledger also has a fully-functional accounting system for tracking and trading obligations denominated in any way users want, and an exchange built into the protocol. The XRP Ledger can settle long, cross-currency payment paths and exchanges of multiple currencies in atomic transactions, bridging gaps of trust with XRP. [Censorship-Resistant Transaction Processing]: https://xrpl.org/transaction-censorship-detection.html#transaction-censorship-detection [Fast, Efficient Consensus Algorithm]: https://xrpl.org/consensus-research.html#consensus-research [Finite XRP Supply]: https://xrpl.org/what-is-xrp.html [Responsible Software Governance]: https://xrpl.org/contribute-code.html#contribute-code-to-the-xrp-ledger [Secure, Adaptable Cryptography]: https://xrpl.org/cryptographic-keys.html#cryptographic-keys [Modern Features]: https://xrpl.org/use-specialized-payment-types.html [On-Ledger Decentralized Exchange]: https://xrpl.org/decentralized-exchange.html#decentralized-exchange ## Source Code Here are some good places to start learning the source code: - Read the markdown files in the source tree: `src/xrpld/**/*.md`. - Read [the levelization document](.github/scripts/levelization) to get an idea of the internal dependency graph. - In the big picture, the `main` function constructs an `ApplicationImp` object, which implements the `Application` virtual interface. Almost every component in the application takes an `Application&` parameter in its constructor, typically named `app` and stored as a member variable `app_`. This allows most components to depend on any other component. ### Repository Contents | Folder | Contents | | :--------- | :--------------------------------------------- | | `./bin` | Scripts and data files for XRPL developers. | | `./Builds` | Platform-specific guides for building `xrpld`. | | `./docs` | Source documentation files and doxygen config. | | `./cfg` | Example configuration files. | | `./src` | Source code. | Some of the directories under `src` are external repositories included using git-subtree. See those directories' README files for more details. ## Additional Documentation - [XRP Ledger Dev Portal](https://xrpl.org/) - [Setup and Installation](https://xrpl.org/install-rippled.html) - [Source Documentation (Doxygen)](https://xrplf.github.io/rippled/) ## See Also - [Clio API Server for the XRP Ledger](https://github.com/XRPLF/clio) - [Mailing List for Release Announcements](https://groups.google.com/g/ripple-server) - [Learn more about the XRP Ledger (YouTube)](https://www.youtube.com/playlist?list=PLJQ55Tj1hIVZtJ_JdTvSum2qMTsedWkNi)

Crypto & Blockchain
5.2K Github Stars