<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Denis Angell</title>
    <description>The latest articles on DEV Community by Denis Angell (@dangell7).</description>
    <link>https://dev.to/dangell7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F803600%2F0cc2fd72-5c9b-4762-a31c-cb2d32655bd7.jpeg</url>
      <title>DEV Community: Denis Angell</title>
      <link>https://dev.to/dangell7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dangell7"/>
    <language>en</language>
    <item>
      <title>Smart Contracts on XRPL's AlphaNet</title>
      <dc:creator>Denis Angell</dc:creator>
      <pubDate>Fri, 07 Nov 2025 17:06:33 +0000</pubDate>
      <link>https://dev.to/dangell7/smart-contracts-on-xrpls-alphanet-1loo</link>
      <guid>https://dev.to/dangell7/smart-contracts-on-xrpls-alphanet-1loo</guid>
      <description>&lt;p&gt;The XRP Ledger Smart Contracts feature is now available for developers to explore and test on &lt;strong&gt;AlphaNet&lt;/strong&gt;, a dedicated development network. This groundbreaking implementation brings native Layer 1 smart contract capabilities to the XRPL, combining the familiar design patterns of EVM-style contracts with the power of XRPL's native features and transactions.&lt;/p&gt;

&lt;p&gt;Smart Contracts on the XRPL enable developers to build sophisticated decentralized applications while leveraging the ledger's proven efficiency, human-readable transaction structure, and native building blocks like payments, DEX, NFTs, and MPTs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are XRPL Smart Contracts?
&lt;/h2&gt;

&lt;p&gt;XRPL Smart Contracts represent a new paradigm for programmability on the ledger. Unlike traditional approaches, this design provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Permissionless deployment - No UNL approval required to deploy contracts&lt;/li&gt;
&lt;li&gt;Native XRPL integration - Direct access to all XRPL features and primitives&lt;/li&gt;
&lt;li&gt;Familiar development patterns - EVM-inspired design with functions and parameters&lt;/li&gt;
&lt;li&gt;WebAssembly (WASM) runtime - Efficient execution with support for multiple programming languages
On-chain ABIs - Human-readable interface definitions stored directly on the ledger&lt;/li&gt;
&lt;li&gt;Event emission - Subscribe to contract events for real-time updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Smart contracts live on pseudo-accounts and are triggered via the new &lt;code&gt;ContractCall&lt;/code&gt; transaction type. Contracts can maintain their own state, interact with other XRPL features by submitting transactions, and emit events that applications can subscribe to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect to AlphaNet
&lt;/h2&gt;

&lt;p&gt;Developers can now connect to AlphaNet to begin testing Smart Contracts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network Details:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; AlphaNet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RPC URL:&lt;/strong&gt; &lt;a href="https://alphanet.rpc.nerdnest.xyz" rel="noopener noreferrer"&gt;https://alphanet.rpc.nerdnest.xyz&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WSS URL:&lt;/strong&gt; &lt;a&gt;wss://alphanet.nerdnest.xyz&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network identifier:&lt;/strong&gt; 21465&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digital Asset:&lt;/strong&gt; XRP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explorer URL:&lt;/strong&gt; &lt;a href="https://explorer.xrplf.org/wss:alphanet.nerdnest.xyz" rel="noopener noreferrer"&gt;https://explorer.xrplf.org/wss:alphanet.nerdnest.xyz&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faucet URL:&lt;/strong&gt; &lt;a href="https://alphanet.faucet.nerdnest.xyz/accounts" rel="noopener noreferrer"&gt;https://alphanet.faucet.nerdnest.xyz/accounts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDK:&lt;/strong&gt; &lt;code&gt;yarn add @transia/xrpl&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Replit
&lt;/h2&gt;

&lt;p&gt;An example testing the &lt;code&gt;base&lt;/code&gt; on the contract on alphanet can be seen in this replit: &lt;a href="https://replit.com/@DenisAngell/SmartContracts" rel="noopener noreferrer"&gt;https://replit.com/@DenisAngell/SmartContracts&lt;/a&gt;. Keep coming back for more updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  New Transaction Types
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ContractCreate&lt;/strong&gt; - Deploy a new smart contract with optional initialization (Transfer Funds, Transfer NFT, Authorize)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ContractCall&lt;/strong&gt; - Execute a contract function with specified parameters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ContractModify&lt;/strong&gt; - Update contract properties (if permitted)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ContractDelete&lt;/strong&gt; - Remove a contract from the ledger&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ContractUserDelete&lt;/strong&gt; - (NOT IMPLEMENTED) Allow users to reclaim reserves from contract data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ContractClawback&lt;/strong&gt; - (NOT IMPLEMENTED) Enable token issuers to claw back from contracts&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  New Ledger Entries
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ContractSource&lt;/strong&gt; - Stores contract bytecode (deduplicated across deployments)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contract&lt;/strong&gt; - Represents a deployed contract instance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ContractData&lt;/strong&gt; - Stores contract-specific state data&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sample Use Cases
&lt;/h2&gt;

&lt;p&gt;Smart Contracts on the XRPL unlock numerous possibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cross-chain bridges&lt;/strong&gt; - Integration with new bridging protocols&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DeFi protocols&lt;/strong&gt; - Derivatives, perpetuals, and advanced trading systems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token utilities&lt;/strong&gt; - Staking rewards for issued tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance systems&lt;/strong&gt; - On-chain voting and proposal mechanisms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gaming&lt;/strong&gt; - Decentralized game logic and asset management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marketplace logic&lt;/strong&gt; - Custom rules for NFT marketplaces&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contract Examples:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Transia-RnD/craft-toolkit-ts/tree/main/contracts" rel="noopener noreferrer"&gt;https://github.com/Transia-RnD/craft-toolkit-ts/tree/main/contracts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;

&lt;p&gt;Smart Contracts follow a clear architectural model:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deploy&lt;/strong&gt; - Use &lt;code&gt;ContractCreate&lt;/code&gt; to deploy WASM bytecode to a pseudo-account&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call&lt;/strong&gt; - Trigger contract functions via &lt;code&gt;ContractCall&lt;/code&gt; transactions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interact&lt;/strong&gt; - Contracts emit XRPL transactions to interact with native features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor&lt;/strong&gt; - Subscribe to events or query contract history via RPC&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The pseudo-account model ensures contracts cannot be controlled by any private key, providing security and predictability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Smart Contract Components
&lt;/h2&gt;

&lt;p&gt;Smart Contracts on the XRPL are built around four fundamental components that provide flexibility and power to developers:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Parameters: Instance &amp;amp; Function
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instance Parameters&lt;/strong&gt;&lt;br&gt;
Instance parameters act like environment variables for your contract. They allow you to configure contract behavior without modifying the source code, making contracts more reusable and flexible.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defined at the &lt;code&gt;ContractSource&lt;/code&gt; level&lt;/li&gt;
&lt;li&gt;Set during contract deployment via &lt;code&gt;ContractCreate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Analogous to environment variables or configuration settings&lt;/li&gt;
&lt;li&gt;Allow the same contract code to be deployed multiple times with different configurations&lt;/li&gt;
&lt;li&gt;Example: API endpoints, fee percentages, admin addresses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Function Parameters&lt;/strong&gt;&lt;br&gt;
Function parameters define the inputs for each callable contract function, creating a strongly-typed interface.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All parameter types must be valid XRPL serialized types (STAmount, STAccount, STUInt32, etc.)&lt;/li&gt;
&lt;li&gt;Maximum of 4 parameters per function (expandable in future versions)&lt;/li&gt;
&lt;li&gt;All parameters are required - no optional parameters or overloading&lt;/li&gt;
&lt;li&gt;Parameters (Instance &amp;amp; Function) can have special flags for moving funds:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tfSendAmount&lt;/code&gt; - Automatically transfers the specified amount from caller to contract&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tfSendNFToken&lt;/code&gt; - Transfers an NFToken to the contract&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tfAuthorizeToken&lt;/code&gt; - Provides token authorization&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;The combination of instance and function parameters creates a clean, type-safe interface that's both human-readable and programmatically verifiable.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Data: Storage and State Management
&lt;/h3&gt;

&lt;p&gt;Smart Contracts have powerful data storage capabilities with support for simple and complex data structures:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic Get/Set Operations&lt;/strong&gt;&lt;br&gt;
Store and retrieve simple key-value data for contract state management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nested Data Structures&lt;/strong&gt;&lt;br&gt;
Contracts can store and retrieve nested objects, enabling complex state management. For example, you can store user profiles with multiple nested properties, or maintain hierarchical data structures within your contract.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Array Operations&lt;/strong&gt;&lt;br&gt;
Full support for array-based storage with index-based access. Store ordered collections and access elements by their position, including support for nested arrays within your data structures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storage Types&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Contract-level data&lt;/strong&gt; - Global state accessible across all function calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-user data&lt;/strong&gt; - Isolated storage for each user interacting with the contract&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nested structures&lt;/strong&gt; - Complex objects with multiple levels of nesting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arrays&lt;/strong&gt; - Ordered collections with index-based access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All data is stored using XRPL's native serialized types, ensuring efficiency and compatibility with the broader ledger ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Emit: Transaction Emission
&lt;/h3&gt;

&lt;p&gt;One of the most powerful features of XRPL Smart Contracts is the ability to emit XRPL transactions directly from contract code. This allows contracts to interact with all native XRPL features:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How It Works&lt;/strong&gt;&lt;br&gt;
Contracts can construct and submit transactions as if they were coming from the contract's pseudo-account. These transactions are validated and processed just like any other XRPL transaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supported Transaction Types&lt;/strong&gt;&lt;br&gt;
Contracts can emit virtually any XRPL transaction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Payment&lt;/strong&gt; - Send XRP, tokens, or MPTs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TrustSet&lt;/strong&gt; - Establish trust lines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OfferCreate&lt;/strong&gt; - Create DEX orders&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NFTokenMint&lt;/strong&gt; - Create NFTs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EscrowCreate/EscrowFinish&lt;/strong&gt; - Use escrow functionality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AccountSet&lt;/strong&gt; - Modify account settings&lt;/li&gt;
&lt;li&gt;And many more...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated Payments&lt;/strong&gt; - Contract triggers payments based on conditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DEX Integration&lt;/strong&gt; - Create or cancel offers programmatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Management&lt;/strong&gt; - Mint or burn tokens in response to contract logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-step Operations&lt;/strong&gt; - Chain multiple transactions together&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-feature Integration&lt;/strong&gt; - Combine payments, escrows, and NFTs in complex workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Fee Handling&lt;/strong&gt;&lt;br&gt;
Fees for emitted transactions are included in the &lt;code&gt;ContractCall&lt;/code&gt; transaction fee, making cost calculation transparent for users.&lt;/p&gt;

&lt;p&gt;This emission model preserves the XRPL's human-readable transaction structure while giving contracts full access to the ledger's native capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Events: Event Emission and Subscriptions
&lt;/h3&gt;

&lt;p&gt;Smart Contracts can emit custom events that applications and users can subscribe to, enabling real-time notifications and monitoring:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event Emission&lt;/strong&gt;&lt;br&gt;
Contracts can emit events at any point during execution to signal important state changes or actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom event names and data payloads&lt;/li&gt;
&lt;li&gt;Multiple events per contract call&lt;/li&gt;
&lt;li&gt;Indexed for efficient querying&lt;/li&gt;
&lt;li&gt;Stored in ledger history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Event Subscriptions&lt;/strong&gt;&lt;br&gt;
The new &lt;code&gt;eventEmitted&lt;/code&gt; subscription allows applications to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Listen for events from specific contracts&lt;/li&gt;
&lt;li&gt;Filter by event type or parameters&lt;/li&gt;
&lt;li&gt;Receive real-time notifications&lt;/li&gt;
&lt;li&gt;Build reactive applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Event History&lt;/strong&gt;&lt;br&gt;
The &lt;code&gt;event_history&lt;/code&gt; RPC method provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Historical event queries&lt;/li&gt;
&lt;li&gt;Filter by contract, time range, or event type&lt;/li&gt;
&lt;li&gt;Pagination support for large result sets&lt;/li&gt;
&lt;li&gt;Complete audit trail of contract activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Common Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Price Updates&lt;/strong&gt; - Oracles emit new price data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Changes&lt;/strong&gt; - Notify when important thresholds are crossed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Actions&lt;/strong&gt; - Track deposits, withdrawals, or trades&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance&lt;/strong&gt; - Signal proposal creation or voting completion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt; - Alert systems can watch for specific conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Events make it easy to build responsive dApps that react to on-chain contract activity without constant polling, while maintaining a complete historical record.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set up your development environment&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access the Web IDE at &lt;a href="https://ide.alphanet.nerdnest.xyz" rel="noopener noreferrer"&gt;https://ide.alphanet.nerdnest.xyz&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Or set up local development with the Rust toolchain and WASM target (&lt;a href="https://github.com/Transia-RnD/xrpl-wasm-std/tree/main" rel="noopener noreferrer"&gt;https://github.com/Transia-RnD/xrpl-wasm-std/tree/main&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fund your test account&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use the AlphaNet faucet to receive test XRP&lt;/li&gt;
&lt;li&gt;Reserve requirements apply for contract deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Write your first contract&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define contract functions with typed parameters&lt;/li&gt;
&lt;li&gt;Use the XRPL API to interact with ledger state&lt;/li&gt;
&lt;li&gt;Emit transactions to modify the ledger&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deploy and test&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Submit a &lt;code&gt;ContractCreate&lt;/code&gt; transaction&lt;/li&gt;
&lt;li&gt;Call your contract functions via &lt;code&gt;ContractCall&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Monitor events and transaction results&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Example: Basic Contract Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#![cfg_attr(target_arch&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"wasm32"&lt;/span&gt;&lt;span class="nd"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;no_std)]&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;xrpl_wasm_std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;host&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;trace&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;trace&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;xrpl_wasm_std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;core&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;data&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;codec&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="n"&gt;get_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;set_data&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nd"&gt;#[unsafe(no_mangle)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;extern&lt;/span&gt; &lt;span class="s"&gt;"C"&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;my_function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;i32&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Your contract logic here&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Function called"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;// Success&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resources and Support
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;XLS Specification:&lt;/strong&gt; &lt;a href="https://github.com/mvadari/XRPL-Standards/blob/06562e3faa2b4a51e4bcbaad6e582222b517da27/XLS-0101-smart-contracts/README.md" rel="noopener noreferrer"&gt;https://github.com/mvadari/XRPL-Standards/blob/06562e3faa2b4a51e4bcbaad6e582222b517da27/XLS-0101-smart-contracts/README.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WasmSTD (Rust):&lt;/strong&gt; &lt;a href="https://github.com/ripple/xrpl-wasm-std" rel="noopener noreferrer"&gt;https://github.com/ripple/xrpl-wasm-std&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WasmSTD Building Guide:&lt;/strong&gt; &lt;a href="https://github.com/Transia-RnD/xrpl-wasm-std/blob/main/docs/comprehensive-guide.md" rel="noopener noreferrer"&gt;https://github.com/Transia-RnD/xrpl-wasm-std/blob/main/docs/comprehensive-guide.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XRPL Developer Discord:&lt;/strong&gt; &lt;a href="https://discord.gg/fFmZ3Fd8" rel="noopener noreferrer"&gt;https://discord.gg/fFmZ3Fd8&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Join the Future of XRPL Development
&lt;/h2&gt;

&lt;p&gt;Smart Contracts represent a major evolution for the XRP Ledger, enabling developers to build the next generation of decentralized applications while preserving everything that makes XRPL special: efficiency, reliability, and simplicity.&lt;/p&gt;

&lt;p&gt;Start building today on AlphaNet and help shape the future of programmability on the XRPL. Your feedback and contributions during this testing phase are invaluable to ensuring a robust, production-ready implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect. Build. Innovate.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions, feedback, or need help getting started? Join us in the XRPL Developer Discord or reach out directly. Let's build something amazing together.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>ripple</category>
    </item>
    <item>
      <title>XRPL Token Escrow: Features, Benefits, and Getting Started</title>
      <dc:creator>Denis Angell</dc:creator>
      <pubDate>Wed, 25 Jun 2025 09:02:20 +0000</pubDate>
      <link>https://dev.to/dangell7/xrpl-token-escrow-features-benefits-and-getting-started-2ogi</link>
      <guid>https://dev.to/dangell7/xrpl-token-escrow-features-benefits-and-getting-started-2ogi</guid>
      <description>&lt;p&gt;&lt;strong&gt;Token Escrow (XLS-85)&lt;/strong&gt; is a new feature that will extend XRPL’s existing escrow functionality to support both Trustline-based tokens (IOUs) and Multi-Purpose Tokens (MPTs). It will enable XRPL to hold any token in escrow, meaning they can be locked up and released only when certain conditions are met.&lt;/p&gt;

&lt;p&gt;This is important because currently, &lt;strong&gt;XRP is the only asset that can use the Escrow feature&lt;/strong&gt;. Token Escrow will increase the versatility of token operations on XRPL, allowing for more complex and secure transactions involving different types of tokens while respecting issuer controls and maintaining the integrity of the Ledger.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Feature Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Expanded Asset Support:&lt;/strong&gt; Enables escrow functionality for both Trustline-based tokens (IOUs) and Multi-Purpose Tokens (MPTs), not just XRP.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dedicated Transaction Modifications:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;EscrowCreate:&lt;/strong&gt; Allows specifying the token type and amount (IOU or MPT) to be held.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EscrowFinish:&lt;/strong&gt; Facilitates the conditional release of the escrowed tokens to the designated recipient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EscrowCancel:&lt;/strong&gt; Allows for the return of escrowed tokens to the sender if conditions for release are not met or the escrow expires.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Respect for Issuer Controls:&lt;/strong&gt; Integrates with existing token issuer settings, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authorization requirements (e.g., &lt;code&gt;lsfRequireAuth&lt;/code&gt; for IOUs, &lt;code&gt;tfMPTRequireAuth&lt;/code&gt; for MPTs).&lt;/li&gt;
&lt;li&gt;Freeze conditions for IOUs (&lt;code&gt;lsfGlobalFreeze&lt;/code&gt;, &lt;code&gt;lsfDefaultRipple&lt;/code&gt;) and Lock conditions for MPTs (&lt;code&gt;lsfMPTokenLock&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Transferability flags for MPTs (&lt;code&gt;tfMPTCanTransfer&lt;/code&gt;, &lt;code&gt;tfMPTCanEscrow&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistent Fee Handling:&lt;/strong&gt; Captures and locks the TransferRate (for IOUs) or TransferFee (for MPTs) at the moment of escrow creation, ensuring predictability in the amount transferred upon settlement.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ledger Object Update:&lt;/strong&gt; Modifies the Escrow ledger object to store token-specific information like the token Amount, TransferRate/TransferFee, and IssuerNode (if applicable).&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Benefits of Token Escrow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enhanced Security for Token Transactions:&lt;/strong&gt; Tokens are locked in an on-ledger escrow and released only upon fulfillment of predefined conditions (e.g., time-based condition).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Increased Versatility for XRPL Applications:&lt;/strong&gt; Expands the range of programmable transactions possible with diverse token types, fostering more complex decentralized applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Predictable Outcomes:&lt;/strong&gt; By locking the transfer rate or fee at the time of creation, both sender and receiver have clarity on the net amount to be transferred.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Maintained Issuer Autonomy:&lt;/strong&gt; Upholds issuer-defined rules regarding token holding, authorization, and transferability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Strengthened Ledger Integrity:&lt;/strong&gt; Ensures that token escrows adhere to the fundamental rules and state management of XRPL.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Use Cases Unlocked by Token Escrow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conditional Payments:&lt;/strong&gt; Automated release of token payments upon completion of services or milestones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Time-Locked Distributions:&lt;/strong&gt; Secure vesting schedules for team tokens, grants, or airdrops, releasing them incrementally over time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Decentralized Exchanges/Marketplaces:&lt;/strong&gt; Temporary holding of various tokens as part of trade settlements or collateralization within decentralized finance (DeFi) applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secure P2P Token Swaps:&lt;/strong&gt; Facilitating trustless peer-to-peer exchanges of different tokens with conditional execution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Digital Rights Management:&lt;/strong&gt; Release of tokenized assets (e.g., MPTs representing licenses or collectibles) upon payment or agreement.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Get Started: Testing Token Escrow on &lt;a href="https://devnet.xrpl.org/" rel="noopener noreferrer"&gt;Devnet&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I have created a replit for TokenEscrow. You can see it live on the Devnet by going &lt;a href="https://replit.com/@DenisAngell/TokenEscrow" rel="noopener noreferrer"&gt;here&lt;/a&gt; and then using the command &lt;code&gt;yarn run iou&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next and Call to Action
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Explore on devnet and provide feedback.&lt;/li&gt;
&lt;li&gt;Prepare for the amendment, update tooling, and participate in voting.&lt;/li&gt;
&lt;li&gt;Amendment process (voting)&lt;/li&gt;
&lt;li&gt;Prepare for integration&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>xrpl</category>
      <category>xrp</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>Exploring Experimental Feature Updates in Xahaud: A Performance Analysis</title>
      <dc:creator>Denis Angell</dc:creator>
      <pubDate>Mon, 21 Oct 2024 13:15:58 +0000</pubDate>
      <link>https://dev.to/dangell7/exploring-experimental-feature-updates-in-xahaud-a-performance-analysis-5df2</link>
      <guid>https://dev.to/dangell7/exploring-experimental-feature-updates-in-xahaud-a-performance-analysis-5df2</guid>
      <description>&lt;p&gt;In the ever-evolving landscape of blockchain technology, optimizing transaction throughput while maintaining system stability is a constant challenge. Xahaud is at the forefront of this endeavor, and today, we delve into two experimental feature updates aimed at enhancing transaction processing capabilities. These updates involve changes to the &lt;code&gt;max_transactions&lt;/code&gt; and &lt;code&gt;target_txn_in_ledger&lt;/code&gt; settings. Let's explore the impact of these changes on network performance and resource utilization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Experimental Feature Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;max_transactions&lt;/code&gt; Setting
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;max_transactions&lt;/code&gt; setting, which determines the maximum number of transactions allowed in each ledger, has been increased from 250 to 1000. This change is designed to accommodate a higher volume of transactions per ledger, potentially increasing the overall throughput of the network.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;target_txn_in_ledger&lt;/code&gt; Setting
&lt;/h3&gt;

&lt;p&gt;Similarly, the &lt;code&gt;target_txn_in_ledger&lt;/code&gt; setting, which specifies the target number of transactions per ledger, has been raised from 256 to 1000. This adjustment aims to align the target with the increased capacity, ensuring that the network can efficiently handle larger transaction batches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Environment
&lt;/h2&gt;

&lt;p&gt;To evaluate the impact of these changes, we conducted tests using a network configuration consisting of six validator nodes and two submission nodes. Each node operates on its own Virtual Private Server (VPS) and is provisioned through Ansible. Additionally, each node is equipped with a lightweight server and listener to monitor ledger statistics, including memory, disk, I/O, and CPU usage.&lt;/p&gt;

&lt;p&gt;The load testing involved sending XRP-XRP Payment (No Hook) transactions to both submission nodes using a script. We employed settings such as &lt;code&gt;BATCH_COUNT&lt;/code&gt; and &lt;code&gt;SEEDS_IN_GROUP&lt;/code&gt; to distribute the batch into groups. To ensure transactions were included in the ledger, we utilized the fee endpoint to adjust transaction fees based on the presence of a ledger queue.&lt;/p&gt;

&lt;h3&gt;
  
  
  Server Specifications
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz (2x)&lt;/li&gt;
&lt;li&gt;Proxmox virtualisation&lt;/li&gt;
&lt;li&gt;12 cores each, "HOST" mode (so native architecture)&lt;/li&gt;
&lt;li&gt;48GB mem each&lt;/li&gt;
&lt;li&gt;Every VM is a dedicated SAS SSD storage device in "Unsafe" mode (write back)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Performance Analysis
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TPS (avg)&lt;/td&gt;
&lt;td&gt;161&lt;/td&gt;
&lt;td&gt;260&lt;/td&gt;
&lt;td&gt;🔼 61.49%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TPL (avg)&lt;/td&gt;
&lt;td&gt;643&lt;/td&gt;
&lt;td&gt;1039&lt;/td&gt;
&lt;td&gt;🔼 61.59%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secs (avg)&lt;/td&gt;
&lt;td&gt;3.56&lt;/td&gt;
&lt;td&gt;4.11&lt;/td&gt;
&lt;td&gt;🔼 15.45%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avg CPU (%)&lt;/td&gt;
&lt;td&gt;16.20&lt;/td&gt;
&lt;td&gt;20.49&lt;/td&gt;
&lt;td&gt;🔼 26.48%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avg Memory (GB)&lt;/td&gt;
&lt;td&gt;1.49&lt;/td&gt;
&lt;td&gt;2.41&lt;/td&gt;
&lt;td&gt;🔼 61.74%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We conducted a series of performance tests to thoroughly understand the impact of the experimental feature updates. These tests were designed to measure key metrics such as transaction throughput, ledger processing efficiency, and resource utilization across the network. By comparing the network's performance with and without the experimental settings, we aimed to identify any significant changes and assess the trade-offs involved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Baseline Performance (Without Experimental Settings)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Total Transactions:&lt;/strong&gt; 31,000&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total Ledgers:&lt;/strong&gt; 49&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transactions Per Second (TPS):&lt;/strong&gt; 161&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transactions Per Ledger:&lt;/strong&gt; 643&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average Close Time:&lt;/strong&gt; 3.56 seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2eu8elga9nort6xa5zv0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2eu8elga9nort6xa5zv0.png" alt="Image description" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node Resource Utilization:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Max CPU Usage:&lt;/strong&gt; 24%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average CPU Usage:&lt;/strong&gt; 16%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Max Memory Used:&lt;/strong&gt; 1.73 GB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average Memory Used:&lt;/strong&gt; 1.49 GB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes2v1afdb70r9vsim4jh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fes2v1afdb70r9vsim4jh.png" alt="Image description" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance with Experimental Settings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Total Transactions:&lt;/strong&gt; 39,000&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total Ledgers:&lt;/strong&gt; 38&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transactions Per Second (TPS):&lt;/strong&gt; 260&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transactions Per Ledger:&lt;/strong&gt; 1039&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average Close Time:&lt;/strong&gt; 4.11 seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57ebud6t7l9e7p1cu8rn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57ebud6t7l9e7p1cu8rn.png" alt="Image description" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node Resource Utilization:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Max CPU Usage:&lt;/strong&gt; 24%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average CPU Usage:&lt;/strong&gt; 20%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Max Memory Used:&lt;/strong&gt; 2.62 GB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average Memory Used:&lt;/strong&gt; 2.41 GB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9n21key0qwvwu9twuxk1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9n21key0qwvwu9twuxk1.png" alt="Image description" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Management Summary:
&lt;/h2&gt;

&lt;p&gt;The recent settings change has resulted in significant performance improvements for our system, albeit with increased resource utilization. Here are the key findings:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transaction Processing Speed&lt;/strong&gt;: We've seen a substantial increase in both Transactions Per Second (TPS) and Transactions Per Ledger (TPL), with both metrics improving by over 61%. This translates to a much higher throughput capacity for our system.&lt;br&gt;
Processing Time: The average processing time per transaction (Secs) has increased by 15.45%. While this is a slight degradation, it's outweighed by the massive gains in overall throughput.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource Utilization&lt;/strong&gt;: The new settings require more computational resources. We observed a 26.48% increase in average CPU usage and a 61.74% increase in average memory consumption. This higher resource utilization directly contributes to the improved performance.&lt;br&gt;
Stability: The transaction submission graph in the "after" scenario shows a more consistent pattern, suggesting improved stability in transaction processing.&lt;br&gt;
Node Performance: Individual node performance graphs indicate more uniform CPU usage across nodes after the change, which could contribute to better load distribution and overall system reliability.&lt;/p&gt;

&lt;p&gt;In conclusion, the new settings have dramatically improved our system's transaction processing capabilities, with TPS and TPL both increasing by over 61%. This comes at the cost of increased resource utilization, but the trade-off appears favorable given the magnitude of performance improvement. The slight increase in per-transaction processing time is a minor concern that's overshadowed by the overall throughput gains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommendation&lt;/strong&gt;: Given the substantial performance improvements, we should consider maintaining these new settings. However, we should also closely monitor resource usage to ensure we have adequate capacity to sustain this higher performance level during peak loads. Additionally, we may want to investigate if further optimizations can reduce the slight increase in per-transaction processing time without sacrificing the throughput gains.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Batch (XLS-56) is Now Available for Testing and Development</title>
      <dc:creator>Denis Angell</dc:creator>
      <pubDate>Thu, 08 Aug 2024 20:36:39 +0000</pubDate>
      <link>https://dev.to/dangell7/batch-xls-56-is-now-available-for-testing-and-development-18bk</link>
      <guid>https://dev.to/dangell7/batch-xls-56-is-now-available-for-testing-and-development-18bk</guid>
      <description>&lt;p&gt;As of August 8, the Batch Amendment for the XRP Ledger is available on a new version of BatchNet (v1). This new version features a the ability to batch transactions using the &lt;a href="https://github.com/XRPLF/XRPL-Standards/discussions/162" rel="noopener noreferrer"&gt;XLS-56d specification&lt;/a&gt; and supports all transactions types with a limit of 8. The amendment also supports atomic swaps. Developers are encouraged to test the new functionality of Batch and report any issues to Denis Angell (&lt;a href="mailto:dangell@transia.co"&gt;dangell@transia.co&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Connect to the new version of the BatchNet here:&lt;/p&gt;

&lt;p&gt;Name: BatchNet&lt;br&gt;
RPC URL: &lt;a href="https://s.devnet.rippletest.net:51234/" rel="noopener noreferrer"&gt;https://s.devnet.rippletest.net:51234/&lt;/a&gt;&lt;br&gt;
WSS URL: wss://s.devnet.rippletest.net:51233/&lt;br&gt;
Network identifier: 3&lt;br&gt;
Digital Asset: XRP&lt;br&gt;
Explorer URL: &lt;a href="https://explorer.xrplf.org/wss:s.devnet.rippletest.net:51233/" rel="noopener noreferrer"&gt;https://explorer.xrplf.org/wss:s.devnet.rippletest.net:51233/&lt;/a&gt;&lt;br&gt;
Faucet URL: &lt;a href="https://xrpl.org/resources/dev-tools/xrp-faucets" rel="noopener noreferrer"&gt;https://xrpl.org/resources/dev-tools/xrp-faucets&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const response = await client.fundWallet(null, {
  faucetHost: 'batch.faucet.nerdnest.xyz',
  faucetPath: '/accounts',
})
console.log(response)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is a replit available &lt;a href="https://replit.com/@DenisAngell/Batch?v=1#src/atomic.ts" rel="noopener noreferrer"&gt;here&lt;/a&gt; which includes helper functions and a fully functioning test examples for both basic batch and atomic swaps.&lt;/p&gt;

&lt;p&gt;For support, updated documentation will become available at soon. Developers are also welcome to engage in the XRPL developer Discord, which has a dedicated Batch channel.&lt;/p&gt;

&lt;p&gt;The Batch Amendment has no eta for going live on mainnet. Batch is dependent on the review of the source code, the proposal of the amendment, followed by at least 80% of the XRPL validator community accepting the proposal and holding their vote for at least two weeks.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>XUMM PYTHON SDK: 5. Security &amp; finishing touch 🎉</title>
      <dc:creator>Denis Angell</dc:creator>
      <pubDate>Mon, 28 Feb 2022 17:48:28 +0000</pubDate>
      <link>https://dev.to/dangell7/xumm-python-sdk-5-security-finishing-touch-5gd2</link>
      <guid>https://dev.to/dangell7/xumm-python-sdk-5-security-finishing-touch-5gd2</guid>
      <description>&lt;p&gt;Previous: 4. &lt;a href="https://dev.to/dangell7/xumm-python-sdk-4-verify-the-results-and-push-47nd"&gt;Verify the results ⛑ and push 🚀&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have made it this far, you may want to actually build something (even if it's just a hobby project) using the XUMM SDK. If you do, please &lt;strong&gt;VERIFY THE PAYLOAD RESULT ON the XRP LEDGER.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can use the &lt;strong&gt;XRPL-PY&lt;/strong&gt; package, or use the &lt;code&gt;sdk.get_transaction(txHash)&lt;/code&gt; method to do this by relying on the XUMM platform to fetch the on ledger transaction outcome for you, or, for example, by using the &lt;code&gt;xrpl-py&lt;/code&gt; package to verify 'locally'.&lt;/p&gt;

&lt;p&gt;By using the &lt;code&gt;xrpl-py&lt;/code&gt; package, you can connect to one of the public XRP ledger nodes and verify the transaction. To do so, add the &lt;code&gt;xrpl-py&lt;/code&gt; package to your project by entering this in the terminal: &lt;code&gt;pip3 install xrpl-py&lt;/code&gt;. You can then verify a transaction as per the &lt;a href="https://pypi.org/project/xrpl-py/" rel="noopener noreferrer"&gt;package documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Pay special attention to the &lt;code&gt;balanceChanges&lt;/code&gt; response.&lt;br&gt;
❗ &lt;strong&gt;There are several reasons why you need to check. For example, a payment can yield a different result (eg. lower amount sent) than requested!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is your responsibility to check the transaction outcome returned from the XRP ledger rather than relying on XUMM telling you that a transaction has been signed. For example if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The user signed successfully in XUMM, but with a key that is no longer valid for a certain account (because multisign has been configured, an account has been rekeyed, etc.)&lt;/li&gt;
&lt;li&gt;The user sent a Partial Payment (e.g., sending EUR to deliver XRP, while the owned amount of EUR was insufficient due to exchange rate slippage)&lt;/li&gt;
&lt;li&gt;The user tried to trick you into accepting a testnet payment, by signing with a funded Testnet account
Please take a look at &lt;a href="https://gist.github.com/WietseWind/6c6a3aefc551927ca42e73745e56a062" rel="noopener noreferrer"&gt;this sample code implementing the &lt;code&gt;xrpl-py&lt;/code&gt; package&lt;/a&gt; to verify on ledger balance changes for a signed XUMM payload.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6sn0h3vu58in3anf3hku.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6sn0h3vu58in3anf3hku.gif" alt="Blog.5.1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  That's it! You made it 🎉
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this tutorial! We hope you had fun! If you have questions, suggestions, something to share: our contact details are available at &lt;a href="https://xrpl-labs.com" rel="noopener noreferrer"&gt;https://xrpl-labs.com&lt;/a&gt; :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources 📚
&lt;/h2&gt;

&lt;p&gt;If you want to learn more about the XUMM SDK PY, platform, documentation, etc., make sure to check out:&lt;/p&gt;

&lt;p&gt;The XUMM SDK (PY) &lt;a href="https://pypi.org/project/xumm-sdk-py" rel="noopener noreferrer"&gt;readme&lt;/a&gt;&lt;br&gt;
The XUMM SDK (PY) &lt;a href="https://github.com/XRPL-Labs/xumm-sdk-py" rel="noopener noreferrer"&gt;source code&lt;/a&gt;&lt;br&gt;
The XUMM API &lt;a href="https://xumm.readme.io/docs" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; &amp;amp; API &lt;a href="https://xumm.readme.io/reference/about" rel="noopener noreferrer"&gt;reference&lt;/a&gt;&lt;br&gt;
XUMM (end user) &lt;a href="https://support.xumm.app/hc/en-us" rel="noopener noreferrer"&gt;support docs&lt;/a&gt;&lt;br&gt;
In case of questions: &lt;a href="mailto:support@xumm.app"&gt;support@xumm.app&lt;/a&gt;&lt;br&gt;
Thank you XRP Community!&lt;/p&gt;

&lt;p&gt;... For checking, correcting &amp;amp; testing the SDK &amp;amp; tutorial!&lt;br&gt;
@technotip, &lt;a class="mentioned-user" href="https://dev.to/calvincs"&gt;@calvincs&lt;/a&gt;, @wenusch, @alloyxrp, @rippleitinnz, @Ubbah, @enclavia, @WormholeMech, @Chicles_, @3N0RYM, @XrpSpark, @devnullinator, @Vetjes, &lt;a class="mentioned-user" href="https://dev.to/kevinking64"&gt;@kevinking64&lt;/a&gt;, @Kujistudios, @nodehash, @4thMadHatter, @Vkumzy, @CarpeDiemXRP, @Hex539, &lt;a class="mentioned-user" href="https://dev.to/xrplosion1"&gt;@xrplosion1&lt;/a&gt;, @chemical_realm, @RossMacFirdeen&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>xrp</category>
      <category>xumm</category>
      <category>sdk</category>
    </item>
    <item>
      <title>XUMM PYTHON SDK: 4. Verify the results ⛑ and push 🚀</title>
      <dc:creator>Denis Angell</dc:creator>
      <pubDate>Mon, 28 Feb 2022 17:48:04 +0000</pubDate>
      <link>https://dev.to/dangell7/xumm-python-sdk-4-verify-the-results-and-push-47nd</link>
      <guid>https://dev.to/dangell7/xumm-python-sdk-4-verify-the-results-and-push-47nd</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/dangell7/xumm-python-sdk-3-your-first-payload-56if"&gt;Previous: 3. Your first payload 🔔&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have now sent a payload to the XUMM platform using the XUMM SDK and have now received a XUMM sign request.&lt;/p&gt;

&lt;p&gt;You opened the &lt;code&gt;next.always&lt;/code&gt; URL, scanned the QR code with your smartphone running XUMM (or from your smartphone and got redirected to the XUMM app) and you have signed your first request. Well done!&lt;/p&gt;

&lt;p&gt;Before we move on we must first verify the payload outcome. As we discussed before, once signed, you would receive a &lt;code&gt;user token&lt;/code&gt; to send your next payload using a Push notification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please note: this is where this tutorial gets more technical. Software developers will be able to follow this. If you've never coded before this will probably require some further time to learn and understand what is happening and how to achieve the desired end result.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this part of the transaction we are not just creating a sign request by sending a payload, we are also subscribing to payload events. We will use the following methods in our code. &lt;code&gt;sdk.payload.create()&lt;/code&gt; and &lt;code&gt;sdk.payload.create_and_subscribe()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;create_and_subscribe&lt;/code&gt; method accepts the payload in the first argument (just like the &lt;code&gt;create&lt;/code&gt; method), but the second argument is a function that gets invoked every time the XUMM platform asynchronously sends an update about the created payload.&lt;/p&gt;

&lt;p&gt;The subscription for payload events will stay alive until something is returned by the &lt;em&gt;function&lt;/em&gt; (second argument) that is passed to the &lt;code&gt;create_and_subscribe&lt;/code&gt; method. Here is an example:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;When you execute this code, you will immediately see the payload response containing the URL to open the payload. At the end of the code we console log the &lt;code&gt;subscription.created&lt;/code&gt; object, containing the created payload data that we previously got directly from the &lt;code&gt;create()&lt;/code&gt; method.&lt;/p&gt;

&lt;p&gt;The other code only executes immediately after this, as the first payload events are fired once the SDK connects to the XUMM platform.&lt;/p&gt;

&lt;p&gt;If the event data contains a &lt;code&gt;signed&lt;/code&gt; property, depending on whether the payload has been signed, causes the callback function to &lt;code&gt;print&lt;/code&gt; a message, and return either the event data (if signed) or a boolean &lt;code&gt;false&lt;/code&gt; (if rejected). By returning something (anything), the subscription then ends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's test this example. Open the created payload URL on your desktop, and while the SDK is waiting for status updates, try scanning the QR code with XUMM. You should now see the &lt;code&gt;opened&lt;/code&gt; event live in your terminal 😎&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When this is working successfully, we will then complete this by adding some code to wait for the &lt;code&gt;signed: true&lt;/code&gt; event (signing the transaction was successful) so we can get our long awaited &lt;code&gt;user token&lt;/code&gt; to deliver our future sign requests with a Push notification.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;When we run this code, open the payload URL on our smartphone, sign it with XUMM, your terminal should look like this. Note the User Token at the end 🎉&lt;/p&gt;

&lt;p&gt;The user token is a unique token for &lt;strong&gt;your XUMM app&lt;/strong&gt; in combination with &lt;strong&gt;the specific XUMM user&lt;/strong&gt;. To use the token to deliver a sign requst per Push notification, let's adjust our first (minimal) sample payload to include the user token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"TransactionType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Payment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rwietsevLFg8XSmG3bEZzFein1g8RBqWDZ"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"10000"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Please change the destination account to an account that you own (remember to use your destination tag if this is required), or if you wish, you can test by sending a small amount of XRP to the XRPL Labs team by using the account in the example.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This payload only contains the XRP ledger specific transaction template. Because we are now going to send XUMM platform specific information as well, we need to wrap the XRP ledger transaction template in an object called &lt;code&gt;txjson&lt;/code&gt;. We can then add &lt;a href="https://xumm.readme.io/reference/post-payload" rel="noopener noreferrer"&gt;XUMM platform specific information&lt;/a&gt; to the payload as well, like &lt;code&gt;options&lt;/code&gt;, &lt;code&gt;custom_meta&lt;/code&gt; and the &lt;code&gt;user_token&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Wrapping the XRP ledger transaction template in a &lt;code&gt;txjson&lt;/code&gt; object, and adding the &lt;code&gt;user_token&lt;/code&gt; property, our payload should now look like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"txjson"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"TransactionType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Payment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rwietsevLFg8XSmG3bEZzFein1g8RBqWDZ"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"10000"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user_token"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Please change the destination account to an account that you own (remember to use your destination tag if this is required), or if you wish, you can test by sending a small amount of XRP to the XRPL Labs team by using the account in the example.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If we use the user token we received from our previously signed payload and use that in our code, you will see your sign request popping up on your smartphone. Well done!&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Now we will run the code, keeping an eye on our smartphone:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pvtm9iuq8oaflmdl2nl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pvtm9iuq8oaflmdl2nl.gif" alt="Blog.4.2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When using this in applications, it would make sense to check the &lt;code&gt;pushed&lt;/code&gt; property of a created payload. If &lt;code&gt;False&lt;/code&gt;, the Push notification could not be sent (e.g., if permissions were revoked by the user) then your application should fall back to the QR method. If &lt;code&gt;pushed&lt;/code&gt; is &lt;code&gt;True&lt;/code&gt;, it makes sense to show the end user a button to show the QR code anyway if they didn't receive the push notification (eg. changed devices / other device).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/dangell7/xumm-python-sdk-5-security-finishing-touch-5gd2"&gt;5. Security &amp;amp; finishing touch 🎉&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources 📚
&lt;/h2&gt;

&lt;p&gt;If you want to learn more about the XUMM SDK PY, platform, documentation, etc., make sure to check out:&lt;/p&gt;

&lt;p&gt;The XUMM SDK (PY) &lt;a href="https://test.pypi.org/project/xumm-sdk-py-dangell7" rel="noopener noreferrer"&gt;readme&lt;/a&gt;&lt;br&gt;
The XUMM SDK (PY) &lt;a href="https://github.com/XRPL-Labs/xumm-sdk-py" rel="noopener noreferrer"&gt;source code&lt;/a&gt;&lt;br&gt;
The XUMM API &lt;a href="https://xumm.readme.io/docs" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; &amp;amp; API &lt;a href="https://xumm.readme.io/reference/about" rel="noopener noreferrer"&gt;reference&lt;/a&gt;&lt;br&gt;
XUMM (end user) &lt;a href="https://support.xumm.app/hc/en-us" rel="noopener noreferrer"&gt;support docs&lt;/a&gt;&lt;br&gt;
In case of questions: &lt;a href="mailto:support@xumm.app"&gt;support@xumm.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>xrp</category>
      <category>xumm</category>
      <category>sdk</category>
    </item>
    <item>
      <title>XUMM PYTHON SDK: 3. Your first payload 🔔</title>
      <dc:creator>Denis Angell</dc:creator>
      <pubDate>Mon, 28 Feb 2022 17:47:40 +0000</pubDate>
      <link>https://dev.to/dangell7/xumm-python-sdk-3-your-first-payload-56if</link>
      <guid>https://dev.to/dangell7/xumm-python-sdk-3-your-first-payload-56if</guid>
      <description>&lt;p&gt;Previous: &lt;a href="https://dev.to/dangell7/python-xumm-sdk-2-prepare-your-project-and-start-coding-1ige"&gt;2. Prepare your project and start coding 🔨&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we have established a connection to the XUMM platform using the XUMM SDK, it is time to actually send something that we can sign. We will send a "transaction template" to the XUMM platform, called a &lt;code&gt;Payload&lt;/code&gt;. The lifecycle of a payload is explained &lt;a href="https://xumm.readme.io/docs/payload-workflow"&gt;in more detail&lt;/a&gt; in the XUMM API documentation.&lt;/p&gt;

&lt;p&gt;Some things to consider:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A payload (sign request) sent to the XUMM platform should be formatted as per &lt;a href="https://xrpl.org/transaction-types.html"&gt;XRP ledger transaction specificaftions&lt;/a&gt;, but some fields may be omitted as XUMM will automatically fill them in if able to do so.&lt;/li&gt;
&lt;li&gt;Usually, a payload sent to the XUMM platform will be signed by the end user (e.g., for a sign in, subscription, payment, ...). For this tutorial, you will be the initiator and the end user, either signing or rejecting the payload.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;first sign request&lt;/strong&gt; from a specific XUMM app will &lt;strong&gt;always&lt;/strong&gt; have to be &lt;strong&gt;scanned using a QR&lt;/strong&gt; code on the desktop &lt;strong&gt;or redirected in the case of a smartphone&lt;/strong&gt;. Once an end user trusts your application, by signing your request, your application can obtain a user specific &lt;code&gt;user token&lt;/code&gt; to deliver future sign requests using push notifications.&lt;/li&gt;
&lt;li&gt;This tutorial is running on your own computer, from the terminal so we will need to copy then paste a sign request URL to our browser. In a real life application, a nicer flow for end users can be created with redirects / &lt;a href="https://xumm.readme.io/docs/payload-status#websocket"&gt;live status updates&lt;/a&gt; / &lt;a href="https://xumm.readme.io/docs/pushing-sign-requests"&gt;push and fallback QR codes&lt;/a&gt;, etc.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our first payload will be a &lt;code&gt;Payment&lt;/code&gt; transaction type. A basic &lt;code&gt;Payment&lt;/code&gt; payload you can send to the XUMM platform would be as per the following example:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;If, like in the minimal example above, no amount is entered, the end user will be able to select the currency and amount to send in XUMM after opening the sign request. You could also add more details to your payload, as per the following example:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;This sample specifies an amount in Drops (one XRP is one million Drops, the featured &lt;strong&gt;ten thousand drops&lt;/strong&gt; represents 0.01 XRP) and a Memo (&lt;a href="https://gist.github.com/WietseWind/5cbcc8d15fa2be3ae7d4c20962af0a8e"&gt;HEX encoded string&lt;/a&gt;). We will use this example in our code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Please change the destination account to an account that you own (remember to use your destination tag if this is required), or if you wish, you can test by sending a small amount of XRP to the XRPL Labs team by using the account in the example.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We are going to use the &lt;code&gt;sdk.payload.create()&lt;/code&gt; code to do this. We will provide two arguments to the &lt;code&gt;sdk.payload.create(..., ...)&lt;/code&gt; code.&lt;/p&gt;

&lt;p&gt;The first argument will be our payload (like in our previous example above) and in the second argument we will provide a flag (boolean, &lt;code&gt;True&lt;/code&gt;) telling the code to return an error, if one occurs.&lt;/p&gt;

&lt;p&gt;Our code now looks like this:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Let's run the code. In the terminal panel, type the previously issued command to run our code: &lt;code&gt;python3 playground.py&lt;/code&gt;. This should get you your very first XUMM sign request 🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fVmxDqdJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f3ccqb3fcn3hnduts3dq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fVmxDqdJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f3ccqb3fcn3hnduts3dq.gif" alt="Blog.3.1" width="848" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/dangell7/xumm-python-sdk-4-verify-the-results-and-push-47nd"&gt;4. Verify the results ⛑ and push 🚀&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/dangell7/xumm-python-sdk-5-security-finishing-touch-5gd2"&gt;5. Security &amp;amp; finishing touch 🎉&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources 📚
&lt;/h2&gt;

&lt;p&gt;If you want to learn more about the XUMM SDK PY, platform, documentation, etc., make sure to check out:&lt;/p&gt;

&lt;p&gt;The XUMM SDK (PY) &lt;a href="https://test.pypi.org/project/xumm-sdk-py-dangell7"&gt;readme&lt;/a&gt;&lt;br&gt;
The XUMM SDK (PY) &lt;a href="https://github.com/XRPL-Labs/xumm-sdk-py"&gt;source code&lt;/a&gt;&lt;br&gt;
The XUMM API &lt;a href="https://xumm.readme.io/docs"&gt;documentation&lt;/a&gt; &amp;amp; API &lt;a href="https://xumm.readme.io/reference/about"&gt;reference&lt;/a&gt;&lt;br&gt;
XUMM (end user) &lt;a href="https://support.xumm.app/hc/en-us"&gt;support docs&lt;/a&gt;&lt;br&gt;
In case of questions: &lt;a href="mailto:support@xumm.app"&gt;support@xumm.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>xrp</category>
      <category>xumm</category>
      <category>sdk</category>
    </item>
    <item>
      <title>XUMM PYTHON SDK: 1. Get your XUMM API credentials 🔑</title>
      <dc:creator>Denis Angell</dc:creator>
      <pubDate>Mon, 28 Feb 2022 17:46:32 +0000</pubDate>
      <link>https://dev.to/dangell7/xumm-python-sdk-1-get-your-xumm-api-credentials-5afo</link>
      <guid>https://dev.to/dangell7/xumm-python-sdk-1-get-your-xumm-api-credentials-5afo</guid>
      <description>&lt;p&gt;series: &lt;a href="https://dev.to/dangell7/the-xumm-sdk-in-python-xrp-ledger-payment-requests-5hk8"&gt;[The XUMM SDK in Python]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Previous: &lt;a href="https://dev.to/dangell7/the-xumm-sdk-in-python-xrp-ledger-payment-requests-5hk8"&gt;» Intro "XRP ledger payment requests"&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visit the &lt;a href="http://apps.xumm.dev"&gt;XUMM Developer Console&lt;/a&gt; by navigating to &lt;a href="https://apps.xumm.dev"&gt;https://apps.xumm.dev&lt;/a&gt;. If this is your first time using the XUMM Developer Console, you will need to register an account OR sign in with your Github account, if you have one.&lt;/p&gt;

&lt;p&gt;After logging in to the &lt;strong&gt;XUMM Developer Console&lt;/strong&gt;, &lt;a href="https://apps.xumm.dev/create-application"&gt;create a new application&lt;/a&gt; by clicking the &lt;code&gt;Create new application&lt;/code&gt; button. Enter a title and description for your app and upload an icon or picture if desired. If you are only going to be playing and testing with the API, the app title and description do not matter.&lt;/p&gt;

&lt;p&gt;For this tutorial entering a &lt;code&gt;Webhook URL&lt;/code&gt; is not required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After creating your new XUMM API application, you will be taken to a page showing your &lt;code&gt;API Key&lt;/code&gt; and &lt;code&gt;API Secret&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Example credentials and where to find them.&lt;br&gt;
&lt;a href="https://dev-to-uploads.s3.amazonaws.com/i/0ypo6flou5t29b09996t.png"&gt;New App credentials&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;❗ Keep these credentials SAFE!&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
You can always find your &lt;strong&gt;API Key&lt;/strong&gt; in the XUMM Developer Console however, your &lt;strong&gt;API Secret&lt;/strong&gt; will be displayed &lt;strong&gt;only once&lt;/strong&gt;. You can always generate a new one if required, but doing so will require updating the API Secret in all your applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;❗ NEVER share or publish your app credentials!&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Your &lt;strong&gt;API Secret&lt;/strong&gt; is for backend use only. Never use these credentials in the frontend of a client side project. If you think your &lt;strong&gt;API Secret&lt;/strong&gt; has been compromised, please regenerate a new secret in the XUMM Developer Console.&lt;/p&gt;

&lt;p&gt;Congratulations, you have now registered your first (?) XUMM App. Let's get started!&lt;/p&gt;

&lt;p&gt;Next:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/dangell7/python-xumm-sdk-2-prepare-your-project-and-start-coding-1ige"&gt;2. Prepare your project and start coding 🔨&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/dangell7/xumm-python-sdk-3-your-first-payload-56if"&gt;3. Your first payload 🔔&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/dangell7/xumm-python-sdk-4-verify-the-results-and-push-47nd"&gt;4. Verify the results ⛑ and push 🚀&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/dangell7/xumm-python-sdk-5-security-finishing-touch-5gd2"&gt;5. Security &amp;amp; finishing touch 🎉&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources 📚
&lt;/h2&gt;

&lt;p&gt;If you want to learn more about the XUMM SDK PY, platform, documentation, etc., make sure to check out:&lt;/p&gt;

&lt;p&gt;The XUMM SDK (PY) &lt;a href="https://pypi.org/project/xumm-sdk-py"&gt;readme&lt;/a&gt;&lt;br&gt;
The XUMM SDK (PY) &lt;a href="https://github.com/XRPL-Labs/xumm-sdk-py"&gt;source code&lt;/a&gt;&lt;br&gt;
The XUMM API &lt;a href="https://xumm.readme.io/docs"&gt;documentation&lt;/a&gt; &amp;amp; API &lt;a href="https://xumm.readme.io/reference/about"&gt;reference&lt;/a&gt;&lt;br&gt;
XUMM (end user) &lt;a href="https://support.xumm.app/hc/en-us"&gt;support docs&lt;/a&gt;&lt;br&gt;
In case of questions: &lt;a href="mailto:support@xumm.app"&gt;support@xumm.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>xrp</category>
      <category>xumm</category>
      <category>sdk</category>
    </item>
    <item>
      <title>The XUMM SDK in Python - XRP ledger payment requests</title>
      <dc:creator>Denis Angell</dc:creator>
      <pubDate>Mon, 28 Feb 2022 17:45:39 +0000</pubDate>
      <link>https://dev.to/dangell7/the-xumm-sdk-in-python-xrp-ledger-payment-requests-5hk8</link>
      <guid>https://dev.to/dangell7/the-xumm-sdk-in-python-xrp-ledger-payment-requests-5hk8</guid>
      <description>&lt;p&gt;The &lt;strong&gt;XUMM API&lt;/strong&gt; allows developers to deliver sign requests (payloads) to app users. A &lt;strong&gt;payload&lt;/strong&gt; is a JSON formatted transaction template for a transaction on the XRP ledger.&lt;/p&gt;

&lt;p&gt;XUMM app users can &lt;a href="https://www.youtube.com/watch?v=P6hL1FDvF4c"&gt;scan a QR code&lt;/a&gt; or receive a push notification to open the sign request for a transaction. A user views the sign request and either authorizes XUMM to sign it or rejects it. If authorized, the sign request will be signed locally via XUMM, if rejected the sign request is destroyed and the transaction does not happen.&lt;/p&gt;

&lt;p&gt;If authorized the transaction can then be sent directly to the XRP ledger. The initiating application will get realtime status updates and after signing, the end user will be returned to the initiating platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To make it simple to interact with the XUMM API, and to help build intuitive flows for end users to sign their transactions, we have released the XUMM SDK (&lt;a href="https://pypi.org/project/xumm-sdk-py/"&gt;pypi&lt;/a&gt;) for Python environments.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pre-requisite&lt;/p&gt;

&lt;p&gt;Before beginning this XUMM SDK tutorial, we assume that you are ready to code with your code environment already set up for python. This includes &lt;a href="https://code.visualstudio.com"&gt;Visual Studio Code (IDE)&lt;/a&gt;, &lt;a href="https://www.python.org/downloads/"&gt;python&lt;/a&gt;, &lt;a href="https://github.com"&gt;git&lt;/a&gt; &amp;amp; &lt;a href="https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/"&gt;virtualenv&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This tutorial consists of five chapters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/dangell7/xumm-python-sdk-1-get-your-xumm-api-credentials-5afo"&gt;1. Get your XUMM API credentials 🔑&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/dangell7/python-xumm-sdk-2-prepare-your-project-and-start-coding-1ige"&gt;2. Prepare your project and start coding 🔨&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/dangell7/xumm-python-sdk-3-your-first-payload-56if"&gt;3. Your first payload 🔔&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/dangell7/xumm-python-sdk-4-verify-the-results-and-push-47nd"&gt;4. Verify the results ⛑ and push 🚀&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/dangell7/xumm-python-sdk-5-security-finishing-touch-5gd2"&gt;5. Security &amp;amp; finishing touch 🎉&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources 📚
&lt;/h2&gt;

&lt;p&gt;If you want to learn more about the XUMM SDK PY, platform, documentation, etc., make sure to check out:&lt;/p&gt;

&lt;p&gt;The XUMM SDK (PY) &lt;a href="https://pypi.org/project/xumm-sdk-py"&gt;readme&lt;/a&gt;&lt;br&gt;
The XUMM SDK (PY) &lt;a href="https://github.com/XRPL-Labs/xumm-sdk-py"&gt;source code&lt;/a&gt;&lt;br&gt;
The XUMM API &lt;a href="https://xumm.readme.io/docs"&gt;documentation&lt;/a&gt; &amp;amp; API &lt;a href="https://xumm.readme.io/reference/about"&gt;reference&lt;/a&gt;&lt;br&gt;
XUMM (end user) &lt;a href="https://support.xumm.app/hc/en-us"&gt;support docs&lt;/a&gt;&lt;br&gt;
In case of questions: &lt;a href="mailto:support@xumm.app"&gt;support@xumm.app&lt;/a&gt;&lt;br&gt;
Thank you XRP Community!&lt;/p&gt;

&lt;p&gt;... For checking, correcting &amp;amp; testing the SDK &amp;amp; tutorial!&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/wietse"&gt;@wietse&lt;/a&gt;, @technotip, &lt;a class="mentioned-user" href="https://dev.to/calvincs"&gt;@calvincs&lt;/a&gt;, @wenusch, @alloyxrp, @rippleitinnz, @Ubbah, @enclavia, @WormholeMech, @Chicles_, @3N0RYM, @XrpSpark, @devnullinator, @Vetjes, &lt;a class="mentioned-user" href="https://dev.to/kevinking64"&gt;@kevinking64&lt;/a&gt;, @Kujistudios, @nodehash, @4thMadHatter, @Vkumzy, @CarpeDiemXRP, @Hex539, &lt;a class="mentioned-user" href="https://dev.to/xrplosion1"&gt;@xrplosion1&lt;/a&gt;, @chemical_realm, @RossMacFirdeen&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>xrp</category>
      <category>xumm</category>
      <category>sdk</category>
    </item>
    <item>
      <title>XUMM PYTHON SDK: 2. Prepare your project and start coding 🔨</title>
      <dc:creator>Denis Angell</dc:creator>
      <pubDate>Wed, 26 Jan 2022 22:33:05 +0000</pubDate>
      <link>https://dev.to/dangell7/python-xumm-sdk-2-prepare-your-project-and-start-coding-1ige</link>
      <guid>https://dev.to/dangell7/python-xumm-sdk-2-prepare-your-project-and-start-coding-1ige</guid>
      <description>&lt;p&gt;Previous: &lt;a href="https://dev.to/dangell7/xumm-python-sdk-1-get-your-xumm-api-credentials-5afo"&gt;1. Get your XUMM API credentials 🔑&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this example we will use a Python (pip) environment.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Visual Studio Code, or your prefrred code editor, and create a new file - &lt;strong&gt;File » New file&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Save your new file - &lt;strong&gt;File » Save&lt;/strong&gt; in a new folder for your project e.g., &lt;code&gt;xumm-sdk-tutorial&lt;/code&gt; and in this folder were using &lt;strong&gt;&lt;code&gt;playground.py&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Make a new virtual environment to manage your project. &lt;code&gt;mkvirtualenv xumm-sdk-tutorial&lt;/code&gt;. If you don't have &lt;code&gt;virtualenv&lt;/code&gt; installed please visit the &lt;a href="https://virtualenvwrapper.readthedocs.io/en/latest/"&gt;Get Started Tutorial&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install the XUMM SDK (PY)&lt;/strong&gt; in your project using the &lt;em&gt;'pip package manager'&lt;/em&gt;. Open the terminal - &lt;strong&gt;Terminal » New terminal&lt;/strong&gt; and at the prompt enter &lt;code&gt;pip install -i https://test.pypi.org/simple/ xumm-sdk-py-dangell7&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy then paste&lt;/strong&gt; the following boilerplate code into your &lt;code&gt;playground.py&lt;/code&gt; file:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;xumm&lt;/span&gt;

&lt;span class="n"&gt;sdk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;xumm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;XummSdk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Your-API-Id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'Your-API-Secret'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hi! This is where we'll be writing some code"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Please replace &lt;code&gt;Your-API-Id&lt;/code&gt; and &lt;code&gt;Your-API-Secret&lt;/code&gt; in the code with the credentials obtained from the XUMM Developer Console when you registered your app.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What does this code actually do?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, we 'import' the XUMM SDK that we installed using pip into our code - step 3 above. We are using the &lt;code&gt;xumm&lt;/code&gt; package, and we are calling it &lt;code&gt;XummSdk&lt;/code&gt; in our code.&lt;/li&gt;
&lt;li&gt;We then initialize a new instance of the SDK, which we call &lt;code&gt;sdk&lt;/code&gt;. We will use this one later in the project as we don't interact with the XUMM SDK just yet. While not needed yet in the project the dummy API Key and API Secret need to be inserted here.&lt;/li&gt;
&lt;li&gt;In the function we have just created, we then tell the code to output a message to the terminal, using the &lt;code&gt;print&lt;/code&gt; method.&lt;/li&gt;
&lt;li&gt;Lastly, we call our &lt;code&gt;main&lt;/code&gt; function so the code will actually run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now let's run this code. In the terminal panel, type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 playground.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will tell &lt;code&gt;python&lt;/code&gt; to run all code in your &lt;code&gt;playground.py&lt;/code&gt; file. You should receive the message &lt;code&gt;Hi! This is where we'll be writing some code&lt;/code&gt; in your terminal and be back at the prompt awaiting further instruction.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_ofxIqhQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o2vdgfe9zm6lge2q8nsv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_ofxIqhQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o2vdgfe9zm6lge2q8nsv.gif" alt="Blog.2.1" width="848" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have your API Key and API Secret in place (see placeholder values in code above) you can check if everything is working by asking the XUMM Platform to return your registered XUMM app name.&lt;/p&gt;

&lt;p&gt;Replace the line of code containing &lt;code&gt;print(...)&lt;/code&gt; with a &lt;code&gt;ping&lt;/code&gt; request to the XUMM platform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app_info = sdk.ping()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This line of code calls the &lt;code&gt;ping&lt;/code&gt; method of the XUMM SDK. We &lt;code&gt;await&lt;/code&gt; the results, as it may take a brief moment to connect to the XUMM platform and get a response. When we get a response, we are making the results accessible under the name &lt;code&gt;app_info&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now let us return the application name we retrieved from the XUMM platform to the console by using &lt;code&gt;print&lt;/code&gt; once again. When you start typing, Visual Studio Code will suggest available properties:&lt;/p&gt;

&lt;p&gt;Code autocomplete&lt;/p&gt;

&lt;p&gt;Our &lt;code&gt;main&lt;/code&gt; code should now look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def main():
  app_info = sdk.ping()
  print(app_info.application.name)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's test the code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GxGqbfYO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xerm19bq8k653ok4ex2t.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GxGqbfYO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xerm19bq8k653ok4ex2t.gif" alt="Blog.2.2" width="848" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It looks like we are able to reach the XUMM platform 🎉 😎&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/dangell7/xumm-python-sdk-3-your-first-payload-56if"&gt;3. Your first payload 🔔&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://dev.to/dangell7/xumm-python-sdk-4-verify-the-results-and-push-47nd"&gt;4. Verify the results ⛑ and push 🚀&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/dangell7/xumm-python-sdk-5-security-finishing-touch-5gd2"&gt;5. Security &amp;amp; finishing touch 🎉&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources 📚
&lt;/h2&gt;

&lt;p&gt;If you want to learn more about the XUMM SDK PY, platform, documentation, etc., make sure to check out:&lt;/p&gt;

&lt;p&gt;The XUMM SDK (PY) &lt;a href="https://test.pypi.org/project/xumm-sdk-py-dangell7"&gt;readme&lt;/a&gt;&lt;br&gt;
The XUMM SDK (PY) &lt;a href="https://github.com/XRPL-Labs/xumm-sdk-py"&gt;source code&lt;/a&gt;&lt;br&gt;
The XUMM API &lt;a href="https://xumm.readme.io/docs"&gt;documentation&lt;/a&gt; &amp;amp; API &lt;a href="https://xumm.readme.io/reference/about"&gt;reference&lt;/a&gt;&lt;br&gt;
XUMM (end user) &lt;a href="https://support.xumm.app/hc/en-us"&gt;support docs&lt;/a&gt;&lt;br&gt;
In case of questions: &lt;a href="mailto:support@xumm.app"&gt;support@xumm.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>xrp</category>
      <category>xumm</category>
      <category>sdk</category>
    </item>
  </channel>
</rss>
