{"id":47857853,"url":"https://github.com/xrplf/xrpl-rust","last_synced_at":"2026-04-03T23:01:48.871Z","repository":{"id":41552910,"uuid":"412235347","full_name":"XRPLF/xrpl-rust","owner":"XRPLF","description":"A 100% Rust library to interact with the XRPL. XRPL Grant Winner","archived":false,"fork":false,"pushed_at":"2026-04-03T04:33:59.000Z","size":2341,"stargazers_count":39,"open_issues_count":33,"forks_count":22,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-04-03T08:52:55.546Z","etag":null,"topics":["blockchain","cryptocurrency","ledger","rust-lang","xrp","xrp-ledger","xrpl"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/xrpl-rust","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/XRPLF.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-09-30T21:35:30.000Z","updated_at":"2026-04-01T15:45:03.000Z","dependencies_parsed_at":"2026-02-21T02:16:42.516Z","dependency_job_id":null,"html_url":"https://github.com/XRPLF/xrpl-rust","commit_stats":null,"previous_names":["589labs/xrpl-rust","xrplf/xrpl-rust"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/XRPLF/xrpl-rust","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XRPLF%2Fxrpl-rust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XRPLF%2Fxrpl-rust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XRPLF%2Fxrpl-rust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XRPLF%2Fxrpl-rust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/XRPLF","download_url":"https://codeload.github.com/XRPLF/xrpl-rust/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XRPLF%2Fxrpl-rust/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31381007,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T21:40:47.592Z","status":"ssl_error","status_checked_at":"2026-04-03T21:40:05.436Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","cryptocurrency","ledger","rust-lang","xrp","xrp-ledger","xrpl"],"created_at":"2026-04-03T23:01:48.073Z","updated_at":"2026-04-03T23:01:48.845Z","avatar_url":"https://github.com/XRPLF.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# xrpl-rust ![Downloads](https://img.shields.io/crates/d/xrpl-rust)\n\n[![latest]][crates.io] [![deps_status]][deps] [![audit_status]][audit] [![unit_status]][unit]\n\n[latest]: https://img.shields.io/crates/v/xrpl-rust.svg\n[crates.io]: https://crates.io/crates/xrpl-rust\n[docs_status]: https://docs.rs/xrpl-rust/badge.svg\n[docs]: https://docs.rs/xrpl-rust/latest/xrpl/\n[deps_status]: https://deps.rs/repo/github/589labs/xrpl-rust/status.svg\n[deps]: https://deps.rs/repo/github/589labs/xrpl-rust\n[audit_status]: https://github.com/589labs/xrpl-rust/actions/workflows/audit_test.yml/badge.svg\n[audit]: https://github.com/589labs/xrpl-rust/actions/workflows/audit_test.yml\n[rustc]: https://img.shields.io/badge/rust-1.51.0%2B-orange.svg\n[rust]: https://blog.rust-lang.org/2021/03/25/Rust-1.51.0.html\n[unit_status]: https://github.com/589labs/xrpl-rust/actions/workflows/unit_test.yml/badge.svg\n[unit]: https://github.com/589labs/xrpl-rust/actions/workflows/unit_test.yml\n[contributors]: https://github.com/589labs/xrpl-rust/graphs/contributors\n[contributors_status]: https://img.shields.io/github/contributors/589labs/xrpl-rust.svg\n[license]: https://opensource.org/licenses/ISC\n[license_status]: https://img.shields.io/badge/License-ISC-blue.svg\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"/assets/xrpl-rust_white.png\"\u003e\n  \u003cimg alt=\"\" src=\"/assets/xrpl-rust_black.png\"\u003e\n\u003c/picture\u003e\n\n\u003e [!WARNING]\n\u003e This repository is under active development.\n\nA Rust library to interact with the XRPL.\nBased off of the [xrpl-py](https://github.com/XRPLF/xrpl-py) library.\n\nA pure Rust implementation for interacting with the XRP Ledger. The xrpl-rust\ncrate simplifies the hardest parts of XRP Ledger interaction including\nserialization and transaction signing while providing idiomatic Rust\nfunctionality for XRP Ledger transactions and core server API (rippled)\nobjects.\n\nInteractions with this crate occur using data structures from this crate or\ncore [alloc](https://doc.rust-lang.org/alloc) types with the exception of\nserde for JSON handling and indexmap for dictionaries. The goal is to ensure\nthis library can be used on devices without the ability to use a\n[std](https://doc.rust-lang.org/std) environment.\n\n# Table of Contents\n\n- [Installation](#installation)\n- [Documentation](#documentation)\n- [Quickstart](#quickstart)\n- [Feature Flags](#feature-flags)\n- [no_std Support](#no_std)\n- [Command Line Interface](#command-line-interface)\n  - [Installation](#installation-1)\n  - [Basic Usage](#basic-usage)\n  - [Wallet Commands](#wallet-commands)\n  - [Account Commands](#account-commands)\n  - [Transaction Commands](#transaction-commands)\n  - [Server and Ledger Commands](#server-and-ledger-commands)\n- [Examples](#examples)\n- [Contributing](#contributing)\n- [License](#license)\n\n# 🛠 Installation [![rustc]][rust]\n\nTo install, add the following to your project's `Cargo.toml`:\n\n```toml\n[dependencies.xrpl]\nversion = \"1.0.0\"\n```\n\n# Documentation [![docs_status]][docs]\n\nDocumentation is available [here](https://docs.rs/xrpl-rust).\n\n# Quickstart\n\n## Basic Wallet Operations\n\n```rust\nuse xrpl::wallet::Wallet;\n\n// Generate a new wallet\nlet wallet = Wallet::create(None)?;\nprintln!(\"Address: {}\", wallet.classic_address);\n\n// Create wallet from seed\nlet wallet = Wallet::from_seed(\"sEdV19BLfeQeKdEXyYA4NhjPJe6XBfG\", None, false)?;\n```\n\n## Making Requests\n\n```rust\nuse xrpl::clients::XRPLSyncClient;\nuse xrpl::models::requests::account_info::AccountInfo;\n\nlet client = XRPLSyncClient::new(\"https://xrplcluster.com/\")?;\nlet req = AccountInfo::new(\"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\".into(), None, None, None);\nlet response = client.request(req.into())?;\n```\n\n# Feature Flags\n\n## Default Features\n\n- `std` - Standard library support\n- `core` - Core XRPL functionality\n- `models` - XRPL data models\n- `wallet` - Wallet operations\n- `utils` - Utility functions\n- `websocket` - WebSocket client\n- `json-rpc` - JSON-RPC client\n- `helpers` - Helper functions (requires runtime)\n- `tokio-rt` - Tokio async runtime\n\n## Optional Features\n\n- `cli` - Command line interface\n- `embassy-rt` - Embassy async runtime (for no_std)\n- `serde` - Serialization support\n\n## Runtime Requirements\n\nWhen using `helpers`, you must specify a runtime:\n\n- `tokio-rt` - For std environments\n- `embassy-rt` - For no_std environments\n\n## #![no_std]\n\nThis library aims to be `#![no_std]` compliant.\n\n## `no_std` Usage\n\n```toml\n[dependencies.xrpl]\nversion = \"*\"\ndefault-features = false\nfeatures = [\"core\", \"models\", \"wallet\", \"utils\", \"websocket\", \"json-rpc\", \"helpers\", \"embassy-rt\"]\n```\n\n# Command Line Interface\n\nThe XRPL Rust library provides a powerful CLI tool for interacting with the XRP Ledger directly from your terminal. This makes it easy to perform common XRPL operations without writing code.\n\n## Installation\n\nTo install the CLI tool, you can add the `cli` feature to your dependencies:\n\n```toml\n[dependencies.xrpl]\nversion = \"0.5.0\"\nfeatures = [\"cli\"]\n```\n\nOr install it directly using Cargo:\n\n```bash\ncargo install xrpl-rust --features=cli\n```\n\n## Basic Usage\n\nAfter installation, you can use the CLI with the `xrpl` command:\n\n```bash\nxrpl [COMMAND] [OPTIONS]\n```\n\nFor help with available commands:\n\n```bash\nxrpl --help\n```\n\nFor help with a specific command:\n\n```bash\nxrpl [COMMAND] --help\n```\n\n## Available Commands\n\nThe CLI offers commands in several categories:\n\n### Wallet Commands\n\n| Command  | Subcommand  | Description                                     |\n| -------- | ----------- | ----------------------------------------------- |\n| `wallet` | `generate`  | Generate a new XRPL wallet                      |\n| `wallet` | `from-seed` | Create a wallet from an existing seed           |\n| `wallet` | `faucet`    | Generate a wallet funded by the testnet faucet  |\n| `wallet` | `validate`  | Validate an XRPL address (classic or X-address) |\n\n### Account Commands\n\n| Command   | Subcommand   | Description                                     |\n| --------- | ------------ | ----------------------------------------------- |\n| `account` | `info`       | Get basic account information                   |\n| `account` | `tx`         | Get account transactions                        |\n| `account` | `objects`    | Get account objects (trust lines, offers, etc.) |\n| `account` | `channels`   | Get account payment channels                    |\n| `account` | `currencies` | Get currencies an account can send/receive      |\n| `account` | `lines`      | Get account trust lines                         |\n\n### Transaction Commands\n\n| Command       | Subcommand | Description                                |\n| ------------- | ---------- | ------------------------------------------ |\n| `transaction` | `sign`     | Sign a transaction using your seed         |\n| `transaction` | `submit`   | Submit a signed transaction to the network |\n| `transaction` | `get`      | Get transaction details by hash            |\n| `transaction` | `nft-mint` | Create and sign an NFT mint transaction    |\n| `transaction` | `nft-burn` | Create and sign an NFT burn transaction    |\n| `transaction` | `payment`  | Create and sign a payment transaction      |\n\n### Server and Ledger Commands\n\n| Command  | Subcommand  | Description                              |\n| -------- | ----------- | ---------------------------------------- |\n| `server` | `fee`       | Get the current network fee              |\n| `server` | `info`      | Get information about a rippled server   |\n| `ledger` | `data`      | Get data about a specific ledger         |\n| `server` | `subscribe` | Subscribe to ledger events via WebSocket |\n\n### 2. **Advanced Query Commands**\n\n| Command       | Subcommand | Description                          |\n| ------------- | ---------- | ------------------------------------ |\n| `ledger`      | `entry`    | Get a specific ledger entry by index |\n| `transaction` | `get`      | Get transaction details by hash      |\n\n#### ledger entry\n\nGet a specific ledger entry by its index.\n\n```bash\nxrpl ledger entry --index 1A2B3C... --url https://xrplcluster.com/\n```\n\n### 3. **Account NFTs Command**\n\n#### account nfts\n\nGet NFTs owned by an account.\n\n```bash\nxrpl account nfts --address rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh --url https://xrplcluster.com/\n```\n\n## Command Details\n\n### Wallet Operations\n\n#### wallet generate\n\nGenerate a new XRPL wallet (keypair).\n\n```bash\n# Generate a new wallet\nxrpl wallet generate\n\n# Generate and save wallet (functionality not yet implemented)\nxrpl wallet generate --save\n```\n\n#### wallet from-seed\n\nDerive a wallet from an existing seed.\n\n```bash\nxrpl wallet from-seed --seed s123... [--sequence 0]\n```\n\nParameters:\n\n- `--seed`: The seed to use (required)\n- `--sequence`: The key sequence number (default: 0)\n\n#### wallet faucet\n\nGenerate a new wallet and fund it using the testnet faucet.\n\n```bash\nxrpl wallet faucet [--url https://s.altnet.rippletest.net:51234]\n```\n\nParameters:\n\n- `--url`: The testnet URL (default: https://s.altnet.rippletest.net:51234)\n\n#### wallet validate\n\nValidate an XRPL address (works with both classic and X-addresses).\n\n```bash\nxrpl wallet validate --address rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\n```\n\nParameters:\n\n- `--address`: The address to validate (required)\n\n#### wallet generate --mnemonic\n\nGenerate a new wallet with a BIP39 mnemonic phrase.\n\n```bash\n# Generate with 12 words (default)\nxrpl wallet generate --mnemonic\n\n# Generate with 24 words\nxrpl wallet generate --mnemonic --words 24\n```\n\n### Account Information\n\n#### account info\n\nGet basic account information.\n\n```bash\nxrpl account info --address rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh [--url https://xrplcluster.com/]\n```\n\nParameters:\n\n- `--address`: The account address (required)\n- `--url`: The XRPL node URL (default: https://xrplcluster.com/)\n\n#### account tx\n\nGet account transactions.\n\n```bash\nxrpl account tx --address rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh [--limit 10] [--url https://xrplcluster.com/]\n```\n\nParameters:\n\n- `--address`: The account address (required)\n- `--limit`: Maximum number of transactions to return (default: 10)\n- `--url`: The XRPL node URL (default: https://xrplcluster.com/)\n\n#### account objects\n\nGet account objects (trust lines, offers, etc.)\n\n```bash\nxrpl account objects --address rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh [--type-filter offer] [--limit 10] [--url https://xrplcluster.com/]\n```\n\nParameters:\n\n- `--address`: The account address (required)\n- `--type-filter`: Type of objects to return (e.g., \"offer\", \"state\")\n- `--limit`: Maximum number of objects to return (default: 10)\n- `--url`: The XRPL node URL (default: https://xrplcluster.com/)\n\n#### account channels\n\nGet information about an account's payment channels.\n\n```bash\nxrpl account channels --address rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh [--destination-account rDestination...] [--limit 10] [--url https://xrplcluster.com/]\n```\n\nParameters:\n\n- `--address`: The account address (required)\n- `--destination-account`: Filter channels by destination account\n- `--limit`: Maximum number of channels to return (default: 10)\n- `--url`: The XRPL node URL (default: https://xrplcluster.com/)\n\n#### account currencies\n\nGet a list of currencies that an account can send or receive.\n\n```bash\nxrpl account currencies --address rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh [--url https://xrplcluster.com/]\n```\n\nParameters:\n\n- `--address`: The account address (required)\n- `--url`: The XRPL node URL (default: https://xrplcluster.com/)\n\n#### account lines\n\nGet information about an account's trust lines.\n\n```bash\nxrpl account lines --address rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh [--peer rPeer...] [--limit 10] [--url https://xrplcluster.com/]\n```\n\nParameters:\n\n- `--address`: The account address (required)\n- `--peer`: Filter trust lines by peer account\n- `--limit`: Maximum number of trust lines to return (default: 10)\n- `--url`: The XRPL node URL (default: https://xrplcluster.com/)\n\n#### account set-flag\n\nSet an account flag.\n\n```bash\nxrpl account set-flag --seed s... --flag asfRequireAuth [--url https://xrplcluster.com/]\n```\n\nParameters:\n\n- `--seed`, `-s` (required): The seed to use for signing\n- `--flag`, `-f` (required): The flag to set (e.g., asfRequireAuth, asfDisableMaster, etc.)\n- `--url`, `-u` (optional, default: https://xrplcluster.com/): The XRPL node URL\n\n**Example Output:**\n\n```text\nSigned transaction blob: ...\nTo submit, use: xrpl transaction submit --tx-blob ... --url ...\n```\n\n#### account clear-flag\n\nClear an account flag.\n\n```bash\nxrpl account clear-flag --seed s... --flag asfRequireAuth [--url https://xrplcluster.com/]\n```\n\nParameters:\n\n- `--seed`, `-s` (required): The seed to use for signing\n- `--flag`, `-f` (required): The flag to clear (e.g., asfRequireAuth, asfDisableMaster, etc.)\n- `--url`, `-u` (optional, default: https://xrplcluster.com/): The XRPL node URL\n\n**Example Output:**\n\n```text\nSigned transaction blob: ...\nTo submit, use: xrpl transaction submit --tx-blob ... --url ...\n```\n\n# Library Usage\n\n## Basic Wallet Operations\n\n```rust\nuse xrpl::wallet::Wallet;\n\n// Generate a new wallet\nlet wallet = Wallet::create(None)?;\nprintln!(\"Address: {}\", wallet.classic_address);\nprintln!(\"Seed: {}\", wallet.seed);\n\n// Create wallet from seed\nlet seed = \"sEdV19BLfeQeKdEXyYA4NhjPJe6XBfG\";\nlet wallet = Wallet::from_seed(seed, None, false)?;\nprintln!(\"Classic Address: {}\", wallet.classic_address);\n```\n\n### Making API Requests\n\n```rust\nuse xrpl::clients::XRPLSyncClient;\nuse xrpl::models::requests::{\n    account_info::AccountInfo,\n    account_lines::AccountLines,\n    book_offers::BookOffers,\n    ledger::Ledger,\n};\nuse xrpl::models::{LedgerIndex, Currency};\n\nlet client = XRPLSyncClient::new(\"https://xrplcluster.com/\")?;\n\n// Get account information\nlet account_info_req = AccountInfo::new(\n    \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\".into(),\n    None, None, None\n);\nlet response = client.request(account_info_req.into())?;\n\n// Get account trust lines\nlet account_lines_req = AccountLines::new(\n    None,\n    \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\".into(),\n    None, None, Some(10), None\n);\nlet lines_response = client.request(account_lines_req.into())?;\n\n// Get order book offers\nlet taker_gets = Currency::xrp();\nlet taker_pays = Currency::issued(\"USD\", \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B\");\nlet book_offers_req = BookOffers::new(\n    None, taker_gets, taker_pays, None, None, Some(5), None\n);\nlet offers_response = client.request(book_offers_req.into())?;\n```\n\n### Working with Transactions (New Builder Pattern)\n\n```rust\nuse xrpl::models::transactions::{Payment, AccountSet, AccountDelete, CommonFields};\nuse xrpl::models::{Amount, TransactionType};\nuse xrpl::wallet::Wallet;\nuse xrpl::clients::XRPLSyncClient;\n\n// Create a simple XRP payment using the new builder pattern\nlet payment = Payment {\n    common_fields: CommonFields {\n        account: \"rSenderAddress123\".into(),\n        transaction_type: TransactionType::Payment,\n        ..Default::default()\n    },\n    amount: Amount::xrp_amount(\"1000000\"), // 1 XRP in drops\n    destination: \"rDestinationAddress456\".into(),\n    ..Default::default()\n}\n.with_fee(\"12\".into())\n.with_sequence(100)\n.with_destination_tag(12345)\n.with_memo(Memo {\n    memo_data: Some(\"payment memo\".into()),\n    memo_format: None,\n    memo_type: Some(\"text\".into()),\n});\n\n// Create a cross-currency payment with path finding\nlet cross_currency_payment = Payment {\n    common_fields: CommonFields {\n        account: \"rSenderAddress123\".into(),\n        transaction_type: TransactionType::Payment,\n        ..Default::default()\n    },\n    amount: Amount::IssuedCurrencyAmount(IssuedCurrencyAmount::new(\n        \"USD\".into(),\n        \"rUSDIssuer789\".into(),\n        \"100\".into(),\n    )),\n    destination: \"rDestinationAddress456\".into(),\n    ..Default::default()\n}\n.with_send_max(Amount::xrp_amount(\"110000000\")) // Max 110 XRP\n.with_flag(PaymentFlag::TfPartialPayment)\n.with_fee(\"12\".into())\n.with_sequence(101);\n\n// Set up an account with deposit authorization\nlet account_setup = AccountSet {\n    common_fields: CommonFields {\n        account: \"rAccountToSetup123\".into(),\n        transaction_type: TransactionType::AccountSet,\n        ..Default::default()\n    },\n    ..Default::default()\n}\n.with_set_flag(AccountSetFlag::AsfDepositAuth)\n.with_transfer_rate(1020000000) // 2% transfer fee\n.with_fee(\"12\".into())\n.with_sequence(50);\n\n// Delete an account\nlet account_deletion = AccountDelete {\n    common_fields: CommonFields {\n        account: \"rAccountToDelete456\".into(),\n        transaction_type: TransactionType::AccountDelete,\n        ..Default::default()\n    },\n    destination: \"rDestinationAccount789\".into(),\n    ..Default::default()\n}\n.with_destination_tag(98765)\n.with_fee(\"2000000\".into()) // 2 XRP minimum fee for account deletion\n.with_sequence(200)\n.with_memo(Memo {\n    memo_data: Some(\"closing account\".into()),\n    memo_format: None,\n    memo_type: Some(\"text\".into()),\n});\n\n// Sign and submit transactions\nlet wallet = Wallet::from_seed(\"sEdV19BLfeQeKdEXyYA4NhjPJe6XBfG\", None, false)?;\nlet client = XRPLSyncClient::new(\"https://s.altnet.rippletest.net:51234\")?;\n\nlet signed_payment = wallet.sign(\u0026payment.into(), Some(true))?;\nlet submit_response = client.submit(signed_payment)?;\n```\n\n### Working with AMM Transactions\n\n```rust\nuse xrpl::models::transactions::{AMMCreate, AMMBid, AMMDelete};\nuse xrpl::models::{Amount, Currency, IssuedCurrencyAmount};\nuse xrpl::models::currency::XRP;\n\n// Create an AMM pool\nlet amm_create = AMMCreate {\n    common_fields: CommonFields {\n        account: \"rAMMCreator123\".into(),\n        transaction_type: TransactionType::AMMCreate,\n        ..Default::default()\n    },\n    amount: Amount::XRPAmount(XRPAmount::from(\"50000000\")), // 50 XRP\n    amount2: Amount::IssuedCurrencyAmount(IssuedCurrencyAmount::new(\n        \"USD\".into(),\n        \"rUSDIssuer456\".into(),\n        \"50\".into(), // 50 USD\n    )),\n    trading_fee: 100, // 0.1% trading fee\n}\n.with_fee(\"12\".into())\n.with_sequence(100)\n.with_memo(Memo {\n    memo_data: Some(\"creating XRP-USD AMM\".into()),\n    memo_format: None,\n    memo_type: Some(\"text\".into()),\n});\n\n// Bid on AMM auction slot\nlet amm_bid = AMMBid {\n    common_fields: CommonFields {\n        account: \"rBidder789\".into(),\n        transaction_type: TransactionType::AMMBid,\n        ..Default::default()\n    },\n    asset: Currency::XRP(XRP::new()),\n    asset2: Currency::IssuedCurrency(IssuedCurrency::new(\n        \"USD\".into(),\n        \"rUSDIssuer456\".into(),\n    )),\n    ..Default::default()\n}\n.with_bid_min(IssuedCurrencyAmount::new(\n    \"039C99CD9AB0B70B32ECDA51EAAE471625608EA2\".into(),\n    \"rLPTokenIssuer\".into(),\n    \"100\".into(),\n))\n.with_bid_max(IssuedCurrencyAmount::new(\n    \"039C99CD9AB0B70B32ECDA51EAAE471625608EA2\".into(),\n    \"rLPTokenIssuer\".into(),\n    \"200\".into(),\n))\n.with_fee(\"15\".into())\n.with_sequence(200);\n\n// Delete empty AMM\nlet amm_delete = AMMDelete {\n    common_fields: CommonFields {\n        account: \"rAMMDeleter111\".into(),\n        transaction_type: TransactionType::AMMDelete,\n        ..Default::default()\n    },\n    asset: Currency::XRP(XRP::new()),\n    asset2: Currency::IssuedCurrency(IssuedCurrency::new(\n        \"USD\".into(),\n        \"rUSDIssuer456\".into(),\n    )),\n    ..Default::default()\n}\n.with_fee(\"12\".into())\n.with_sequence(300);\n```\n\n### Address Conversion\n\n```rust\nuse xrpl::core::addresscodec::{\n    classic_address_to_xaddress,\n    xaddress_to_classic_address,\n    is_valid_classic_address,\n};\n\n// Convert classic address to X-address\nlet classic_address = \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\";\nlet xaddress = classic_address_to_xaddress(classic_address, None, false)?;\nprintln!(\"X-Address: {}\", xaddress);\n\n// Convert X-address back to classic address\nlet (address, tag, is_test) = xaddress_to_classic_address(\u0026xaddress)?;\nprintln!(\"Classic Address: {}, Tag: {:?}, Test Network: {}\", address, tag, is_test);\n\n// Validate addresses\nlet is_valid = is_valid_classic_address(classic_address, None);\nprintln!(\"Address is valid: {}\", is_valid);\n```\n\n### Working with NFTs\n\n```rust\nuse xrpl::models::transactions::{NFTokenMint, NFTokenCreateOffer, NFTokenAcceptOffer};\nuse xrpl::models::Amount;\n\n// Mint an NFT\nlet nft_mint = NFTokenMint {\n    common_fields: CommonFields {\n        account: \"rNFTMinter123\".into(),\n        transaction_type: TransactionType::NFTokenMint,\n        ..Default::default()\n    },\n    nftoken_taxon: 0,\n    ..Default::default()\n}\n.with_fee(\"12\".into())\n.with_sequence(100)\n.with_memo(Memo {\n    memo_data: Some(\"minting unique NFT\".into()),\n    memo_format: None,\n    memo_type: Some(\"text\".into()),\n});\n\n// Create an NFT sell offer\nlet nft_sell_offer = NFTokenCreateOffer {\n    common_fields: CommonFields {\n        account: \"rNFTSeller456\".into(),\n        transaction_type: TransactionType::NFTokenCreateOffer,\n        ..Default::default()\n    },\n    nftoken_id: \"000B013A95F14B0E44F78A264E41713C64B5F89242540EE208C3098E00000D65\".into(),\n    ..Default::default()\n}\n.with_amount(Amount::xrp_amount(\"1000000\")) // 1 XRP\n.with_fee(\"12\".into())\n.with_sequence(200);\n```\n\n### Binary Codec Usage\n\n```rust\nuse xrpl::core::binarycodec::{encode, decode};\nuse serde_json::json;\n\n// Encode transaction to binary\nlet tx_json = json!({\n    \"TransactionType\": \"Payment\",\n    \"Account\": \"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\",\n    \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n    \"Amount\": \"1000000\",\n    \"Fee\": \"12\",\n    \"Sequence\": 1\n});\n\nlet encoded = encode(\u0026tx_json, Some(true))?; // true for signing\nprintln!(\"Encoded transaction: {}\", encoded);\n\n// Decode binary back to JSON\nlet decoded = decode(\u0026encoded)?;\nprintln!(\"Decoded transaction: {}\", serde_json::to_string_pretty(\u0026decoded)?);\n```\n\n### Utility Functions\n\n```rust\nuse xrpl::utils::{\n    xrp_to_drops, drops_to_xrp,\n    posix_to_ripple_time, ripple_time_to_posix,\n};\n\n// XRP conversion\nlet xrp_amount = \"1.5\";\nlet drops = xrp_to_drops(xrp_amount)?;\nprintln!(\"1.5 XRP = {} drops\", drops);\n\nlet xrp_back = drops_to_xrp(\u0026drops)?;\nprintln!(\"{} drops = {} XRP\", drops, xrp_back);\n\n// Time conversion\nlet posix_time = 1660187459;\nlet ripple_time = posix_to_ripple_time(posix_time)?;\nprintln!(\"POSIX {} = Ripple time {}\", posix_time, ripple_time);\n\nlet posix_back = ripple_time_to_posix(ripple_time)?;\nprintln!(\"Ripple time {} = POSIX {}\", ripple_time, posix_back);\n```\n\n### Error Handling\n\n```rust\nuse xrpl::models::exceptions::XRPLModelException;\nuse xrpl::core::exceptions::XRPLCoreException;\nuse xrpl::wallet::exceptions::XRPLWalletException;\n\n// Proper error handling example\nmatch Wallet::from_seed(\"invalid_seed\", None, false) {\n    Ok(wallet) =\u003e println!(\"Wallet created: {}\", wallet.classic_address),\n    Err(XRPLWalletException::InvalidSeed(msg)) =\u003e {\n        eprintln!(\"Invalid seed provided: {}\", msg);\n    },\n    Err(e) =\u003e eprintln!(\"Other wallet error: {:?}\", e),\n}\n\n// Transaction validation\nlet payment = Payment {\n    common_fields: CommonFields {\n        account: \"rSender123\".into(),\n        transaction_type: TransactionType::Payment,\n        ..Default::default()\n    },\n    amount: Amount::xrp_amount(\"1000000\"),\n    destination: \"rReceiver456\".into(),\n    ..Default::default()\n}\n.with_fee(\"12\".into())\n.with_sequence(100);\n\nmatch payment.validate() {\n    Ok(_) =\u003e println!(\"Transaction is valid\"),\n    Err(e) =\u003e eprintln!(\"Transaction validation failed: {}\", e),\n}\n```\n\n# Contributing [![contributors_status]][contributors]\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## Development Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/sephynox/xrpl-rust.git\ncd xrpl-rust\n\n# Run tests\ncargo test\n\n# Run CLI tests\ncargo test --features cli,std\n\n# Build with all features\ncargo build --all-features\n```\n\n# License [![license_status]][license]\n\nThis project is licensed under the [ISC License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxrplf%2Fxrpl-rust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxrplf%2Fxrpl-rust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxrplf%2Fxrpl-rust/lists"}