import * as React from "react"; import { useThemeHooks } from '@redocly/theme/core/hooks'; import { Link } from '@redocly/theme/components/Link/Link'; export const frontmatter = { seo: { title: 'XRPL Overview', description: "An introduction to the key benefits and features of the XRP Ledger, a public blockchain driven by the XRPL developer community.", } }; const faqs = [ { question: "Is XRPL a private blockchain, owned by Ripple?", answer: "No, the XRP Ledger is a decentralized, public blockchain. Any changes that would impact transaction processing or consensus need to be approved by at least 80%% of the network. Ripple is a contributor to the network, but its rights are the same as those of other contributors. In terms of validation, there are 150+ validators on the network with 35+ on the Unique Node List (see “What are Unique Node Lists (UNLs)?” in the Full FAQ) — Ripple runs 1 of these nodes.", }, { question: "Isn’t Proof of Work the best validation mechanism?", answer: "Proof of Work (PoW) was the first mechanism to solve the double spend problem without requiring a trusted 3rd party. However the XRP Ledger’s consensus mechanism solves the same problem in a far faster, cheaper and more energy efficient way.", }, { question: "How can a blockchain be sustainable?", answer: "It’s been widely reported that Bitcoin’s energy consumption, as of 2021, is equivalent to that used by Argentina, with much of the electricity Bitcoin miners use coming from polluting sources. The XRP Ledger confirms transactions through a “consensus” mechanism - which does not waste energy like proof of work does - and leverages carbon offsets to be one of the first truly carbon neutral blockchains.", }, ]; export default function XrplOverview() { const { useTranslate } = useThemeHooks(); const { translate } = useTranslate(); const [videoOne, setVideoOne] = React.useState(false); const [currentVideoUrl, setCurrentVideoUrl] = React.useState(""); const modalRef = React.useRef(null); // Close modal on outside click const handleOutsideClick = (event) => { if (modalRef.current && !modalRef.current.contains(event.target)) { setCurrentVideoUrl(""); } }; // Close modal on escape key press const handleEscapeKeyPress = (event) => { if (event.key === "Escape") { setCurrentVideoUrl(""); } }; React.useEffect(() => { // Add event listeners document.addEventListener("mousedown", handleOutsideClick); document.addEventListener("keydown", handleEscapeKeyPress); // Remove event listeners on cleanup return () => { document.removeEventListener("mousedown", handleOutsideClick); document.removeEventListener("keydown", handleEscapeKeyPress); }; }, []); // Empty dependency array means this useEffect runs once when the component mounts return (