[{"data":1,"prerenderedAt":853},["ShallowReactive",2],{"navigation_docs":3,"-blockchains-xrpl":124,"-blockchains-xrpl-surround":848},[4,32],{"title":5,"path":6,"stem":7,"children":8,"icon":31},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,15,19,23,27],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Working with Keys","\u002Fguide\u002Fkeys","1.guide\u002F2.keys",{"title":16,"path":17,"stem":18},"Working with Addresses","\u002Fguide\u002Faddresses","1.guide\u002F3.addresses",{"title":20,"path":21,"stem":22},"Generating Wallets","\u002Fguide\u002Fwallets","1.guide\u002F4.wallets",{"title":24,"path":25,"stem":26},"Working with EVM Chains","\u002Fguide\u002Fevm","1.guide\u002F5.evm",{"title":28,"path":29,"stem":30},"Creating Custom Blockchains","\u002Fguide\u002Fcustom","1.guide\u002F6.custom","i-lucide-book-open",{"title":33,"path":34,"stem":35,"children":36,"icon":123},"Blockchains","\u002Fblockchains","2.blockchains\u002F0.index",[37,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119],{"title":38,"path":34,"stem":35},"Overview",{"title":40,"path":41,"stem":42},"Aptos","\u002Fblockchains\u002Faptos","2.blockchains\u002Faptos",{"title":44,"path":45,"stem":46},"Base","\u002Fblockchains\u002Fbase","2.blockchains\u002Fbase",{"title":48,"path":49,"stem":50},"Bitcoin","\u002Fblockchains\u002Fbitcoin","2.blockchains\u002Fbitcoin",{"title":52,"path":53,"stem":54},"Bitcoin Cash","\u002Fblockchains\u002Fbitcoincash","2.blockchains\u002Fbitcoincash",{"title":56,"path":57,"stem":58},"Bitcoin Gold","\u002Fblockchains\u002Fbitcoingold","2.blockchains\u002Fbitcoingold",{"title":60,"path":61,"stem":62},"Bitcoin SV","\u002Fblockchains\u002Fbitcoinsv","2.blockchains\u002Fbitcoinsv",{"title":64,"path":65,"stem":66},"Cardano","\u002Fblockchains\u002Fcardano","2.blockchains\u002Fcardano",{"title":68,"path":69,"stem":70},"Cosmos","\u002Fblockchains\u002Fcosmos","2.blockchains\u002Fcosmos",{"title":72,"path":73,"stem":74},"Dash","\u002Fblockchains\u002Fdash","2.blockchains\u002Fdash",{"title":76,"path":77,"stem":78},"Decred","\u002Fblockchains\u002Fdecred","2.blockchains\u002Fdecred",{"title":80,"path":81,"stem":82},"Dogecoin","\u002Fblockchains\u002Fdogecoin","2.blockchains\u002Fdogecoin",{"title":84,"path":85,"stem":86},"eCash","\u002Fblockchains\u002Fecash","2.blockchains\u002Fecash",{"title":88,"path":89,"stem":90},"Ethereum","\u002Fblockchains\u002Fethereum","2.blockchains\u002Fethereum",{"title":92,"path":93,"stem":94},"Litecoin","\u002Fblockchains\u002Flitecoin","2.blockchains\u002Flitecoin",{"title":96,"path":97,"stem":98},"NEAR","\u002Fblockchains\u002Fnear","2.blockchains\u002Fnear",{"title":100,"path":101,"stem":102},"Solana","\u002Fblockchains\u002Fsolana","2.blockchains\u002Fsolana",{"title":104,"path":105,"stem":106},"Stellar","\u002Fblockchains\u002Fstellar","2.blockchains\u002Fstellar",{"title":108,"path":109,"stem":110},"Sui","\u002Fblockchains\u002Fsui","2.blockchains\u002Fsui",{"title":112,"path":113,"stem":114},"TRON","\u002Fblockchains\u002Ftron","2.blockchains\u002Ftron",{"title":116,"path":117,"stem":118},"XRP Ledger","\u002Fblockchains\u002Fxrpl","2.blockchains\u002Fxrpl",{"title":120,"path":121,"stem":122},"Zcash","\u002Fblockchains\u002Fzcash","2.blockchains\u002Fzcash","i-lucide-boxes",{"id":125,"title":116,"body":126,"description":840,"extension":841,"links":842,"meta":843,"navigation":179,"path":117,"seo":845,"stem":118,"__hash__":847},"docs\u002F2.blockchains\u002Fxrpl.md",{"type":127,"value":128,"toc":829},"minimark",[129,136,141,221,229,237,258,313,320,324,331,388,398,453,467,471,486,533,540,543,550,578,581,585,624,637,641,656,702,708,719,723,733,780,800,804,825],[130,131],"chain-facts",{"coin":132,"curve":133,"driver":134,"formats":135},"144","secp256k1, ed25519","xrpl","classic r address (base58)",[137,138,140],"h2",{"id":139},"load-it","Load it",[142,143,148],"pre",{"className":144,"code":145,"language":146,"meta":147,"style":147},"language-js shiki shiki-themes keys keys keys","import { useBlockchain, blockchains } from \"@agntn\u002Fkeys\";\n\nconst xrpChain = useBlockchain(await blockchains.xrpl()());\nxrpChain.curve; \u002F\u002F ['secp256k1', 'ed25519']\n","js","",[149,150,151,174,181,211],"code",{"__ignoreMap":147},[152,153,156,160,164,167,171],"span",{"class":154,"line":155},"line",1,[152,157,159],{"class":158},"skH_V","import",[152,161,163],{"class":162},"s38Sx"," { useBlockchain, blockchains } ",[152,165,166],{"class":158},"from",[152,168,170],{"class":169},"shU9J"," \"@agntn\u002Fkeys\"",[152,172,173],{"class":162},";\n",[152,175,177],{"class":154,"line":176},2,[152,178,180],{"emptyLinePlaceholder":179},true,"\n",[152,182,184,187,190,193,197,200,203,206,208],{"class":154,"line":183},3,[152,185,186],{"class":158},"const",[152,188,189],{"class":162}," xrpChain ",[152,191,192],{"class":158},"=",[152,194,196],{"class":195},"sK71F"," useBlockchain",[152,198,199],{"class":162},"(",[152,201,202],{"class":158},"await",[152,204,205],{"class":162}," blockchains.",[152,207,134],{"class":195},[152,209,210],{"class":162},"()());\n",[152,212,214,217],{"class":154,"line":213},4,[152,215,216],{"class":162},"xrpChain.curve; ",[152,218,220],{"class":219},"scIB-","\u002F\u002F ['secp256k1', 'ed25519']\n",[222,223,224,225,228],"p",{},"Mainnet, testnet and devnet write the same addresses. The ",[149,226,227],{},"network"," option changes nothing here.",[137,230,232,233,236],{"id":231},"where-does-an-r-address-come-from","Where does an ",[149,234,235],{},"r"," address come from?",[222,238,239,240,243,244,247,248,251,252,254,255,257],{},"From Bitcoin, mostly. The account ID is ",[149,241,242],{},"RIPEMD160(SHA256(publicKey))",", the hash160 every Bitcoin ",[149,245,246],{},"1"," address starts from. Then it goes through Base58Check under version byte ",[149,249,250],{},"0",", but in XRPL's own alphabet. Same 58 characters, different order, and that order puts ",[149,253,235],{}," where Bitcoin has ",[149,256,246],{},".",[142,259,261],{"className":144,"code":260,"language":146,"meta":147,"style":147},"const privateKey = \"0000000000000000000000000000000000000000000000000000000000000001\";\nconst publicKey = xrpChain.getKeyPublic(privateKey);\n\nxrpChain.getAddress(publicKey); \u002F\u002F rBgGZ9tc4him9KBzD8fKFiQz3fSZpaSwMH\n",[149,262,263,277,295,299],{"__ignoreMap":147},[152,264,265,267,270,272,275],{"class":154,"line":155},[152,266,186],{"class":158},[152,268,269],{"class":162}," privateKey ",[152,271,192],{"class":158},[152,273,274],{"class":169}," \"0000000000000000000000000000000000000000000000000000000000000001\"",[152,276,173],{"class":162},[152,278,279,281,284,286,289,292],{"class":154,"line":176},[152,280,186],{"class":158},[152,282,283],{"class":162}," publicKey ",[152,285,192],{"class":158},[152,287,288],{"class":162}," xrpChain.",[152,290,291],{"class":195},"getKeyPublic",[152,293,294],{"class":162},"(privateKey);\n",[152,296,297],{"class":154,"line":183},[152,298,180],{"emptyLinePlaceholder":179},[152,300,301,304,307,310],{"class":154,"line":213},[152,302,303],{"class":162},"xrpChain.",[152,305,306],{"class":195},"getAddress",[152,308,309],{"class":162},"(publicKey); ",[152,311,312],{"class":219},"\u002F\u002F rBgGZ9tc4him9KBzD8fKFiQz3fSZpaSwMH\n",[222,314,315,316,319],{},"Bitcoin writes the same key as ",[149,317,318],{},"1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH",". Squint. 21 of the 34 characters line up. 35 of the 58 letters sit exactly where Bitcoin keeps them.",[137,321,323],{"id":322},"two-curves-one-argument","Two curves, one argument",[222,325,326,327,330],{},"Like ",[328,329,108],"a",{"href":109},", the address type is the signature scheme. Unlike Sui, secp256k1 is the default. rippled proposes it when nobody asks, and it's the only curve BIP39 words reach.",[332,333,334,350],"table",{},[335,336,337],"thead",{},[338,339,340,344,347],"tr",{},[341,342,343],"th",{},"Scheme",[341,345,346],{},"Public key",[341,348,349],{},"Address hashes",[351,352,353,368],"tbody",{},[338,354,355,362,365],{},[356,357,358,361],"td",{},[149,359,360],{},"secp256k1"," (default)",[356,363,364],{},"33 bytes, compressed",[356,366,367],{},"the key as is",[338,369,370,375,382],{},[356,371,372],{},[149,373,374],{},"ed25519",[356,376,377,378,381],{},"33 bytes, ",[149,379,380],{},"ED"," then the 32 the curve gives",[356,383,384,385,387],{},"the key with its ",[149,386,380],{}," byte",[222,389,390,391,393,394,397],{},"That ",[149,392,380],{}," byte is XRPL's, not ours. xrpl.js prints it as ",[149,395,396],{},"publicKey"," too. Same wallet, same hex on both sides.",[142,399,401],{"className":144,"code":400,"language":146,"meta":147,"style":147},"const wallet = xrpChain.generateWallet(); \u002F\u002F secp256k1\nconst walletEd = xrpChain.generateWallet({}, \"ed25519\");\nwalletEd.keys.public; \u002F\u002F 'ed...'\n",[149,402,403,423,445],{"__ignoreMap":147},[152,404,405,407,410,412,414,417,420],{"class":154,"line":155},[152,406,186],{"class":158},[152,408,409],{"class":162}," wallet ",[152,411,192],{"class":158},[152,413,288],{"class":162},[152,415,416],{"class":195},"generateWallet",[152,418,419],{"class":162},"(); ",[152,421,422],{"class":219},"\u002F\u002F secp256k1\n",[152,424,425,427,430,432,434,436,439,442],{"class":154,"line":176},[152,426,186],{"class":158},[152,428,429],{"class":162}," walletEd ",[152,431,192],{"class":158},[152,433,288],{"class":162},[152,435,416],{"class":195},[152,437,438],{"class":162},"({}, ",[152,440,441],{"class":169},"\"ed25519\"",[152,443,444],{"class":162},");\n",[152,446,447,450],{"class":154,"line":183},[152,448,449],{"class":162},"walletEd.keys.public; ",[152,451,452],{"class":219},"\u002F\u002F 'ed...'\n",[222,454,455,457,458,460,461,463,464,466],{},[149,456,306],{}," reads the curve from the key when you leave the type out. Pass an ",[149,459,380],{}," key as ",[149,462,360],{}," and it throws and tells you to ask for ",[149,465,374],{},". Writing an address for a key that can't sign for it would be worse.",[137,468,470],{"id":469},"family-seeds","Family seeds",[222,472,473,474,477,478,481,482,485],{},"This is the secret XRPL wallets actually hand out. ",[149,475,476],{},"s"," plus 28 characters means secp256k1, ",[149,479,480],{},"sEd"," plus 28 means ed25519. Inside sit 16 bytes of entropy. ",[149,483,484],{},"deriveSeedWallet"," turns them into account 0 the way rippled does.",[142,487,489],{"className":144,"code":488,"language":146,"meta":147,"style":147},"xrpChain.deriveSeedWallet(\"snoPBrXtMeMyMHUVTgbuqAfg1SUTb\").address;\n\u002F\u002F rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\n\nxrpChain.deriveSeedWallet(\"sEdSJHdnVumf99WfaHTnU8DaQkx5Q4n\").address;\n\u002F\u002F rGMTQpyhaDwWTqmw4dcYHj5NPJhtWNhtRW\n",[149,490,491,505,510,514,527],{"__ignoreMap":147},[152,492,493,495,497,499,502],{"class":154,"line":155},[152,494,303],{"class":162},[152,496,484],{"class":195},[152,498,199],{"class":162},[152,500,501],{"class":169},"\"snoPBrXtMeMyMHUVTgbuqAfg1SUTb\"",[152,503,504],{"class":162},").address;\n",[152,506,507],{"class":154,"line":176},[152,508,509],{"class":219},"\u002F\u002F rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\n",[152,511,512],{"class":154,"line":183},[152,513,180],{"emptyLinePlaceholder":179},[152,515,516,518,520,522,525],{"class":154,"line":213},[152,517,303],{"class":162},[152,519,484],{"class":195},[152,521,199],{"class":162},[152,523,524],{"class":169},"\"sEdSJHdnVumf99WfaHTnU8DaQkx5Q4n\"",[152,526,504],{"class":162},[152,528,530],{"class":154,"line":529},5,[152,531,532],{"class":219},"\u002F\u002F rGMTQpyhaDwWTqmw4dcYHj5NPJhtWNhtRW\n",[222,534,535,536,539],{},"The first one is the genesis account. Its seed is the first 16 bytes of SHA-512 over the word ",[149,537,538],{},"masterpassphrase",". Probably the most public secret on the whole ledger. Fine for a docs page.",[222,541,542],{},"secp256k1 takes two steps. A root key comes out of SHA-512Half over the seed and a counter. A second scalar comes from the root's public key, and the two add up mod n. ed25519? One SHA-512Half and done. Both match xrpl.js byte for byte.",[222,544,545,546,549],{},"The seed's version picks the curve, and an address type overrides it, as ",[149,547,548],{},"deriveKeypair"," allows:",[142,551,553],{"className":144,"code":552,"language":146,"meta":147,"style":147},"xrpChain.deriveSeedWallet(\"sp6JdwovBCsiwnMhXuvZGZtPUoGVj\", {}, \"ed25519\").address;\n\u002F\u002F rGMTQpyhaDwWTqmw4dcYHj5NPJhtWNhtRW, the sEd seed above has the same 16 bytes\n",[149,554,555,573],{"__ignoreMap":147},[152,556,557,559,561,563,566,569,571],{"class":154,"line":155},[152,558,303],{"class":162},[152,560,484],{"class":195},[152,562,199],{"class":162},[152,564,565],{"class":169},"\"sp6JdwovBCsiwnMhXuvZGZtPUoGVj\"",[152,567,568],{"class":162},", {}, ",[152,570,441],{"class":169},[152,572,504],{"class":162},[152,574,575],{"class":154,"line":176},[152,576,577],{"class":219},"\u002F\u002F rGMTQpyhaDwWTqmw4dcYHj5NPJhtWNhtRW, the sEd seed above has the same 16 bytes\n",[222,579,580],{},"A mistyped character fails the checksum and throws. It won't hand you some other wallet that happens to decode.",[137,582,584],{"id":583},"validation","Validation",[142,586,588],{"className":144,"code":587,"language":146,"meta":147,"style":147},"xrpChain.validateAddress(\"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\"); \u002F\u002F true\nxrpChain.validateAddress(\"XVjUbnJUzL9Vb5zXMPdoFURPqGtaRzBkr5DuJfResXEzcKh\"); \u002F\u002F false\n",[149,589,590,608],{"__ignoreMap":147},[152,591,592,594,597,599,602,605],{"class":154,"line":155},[152,593,303],{"class":162},[152,595,596],{"class":195},"validateAddress",[152,598,199],{"class":162},[152,600,601],{"class":169},"\"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh\"",[152,603,604],{"class":162},"); ",[152,606,607],{"class":219},"\u002F\u002F true\n",[152,609,610,612,614,616,619,621],{"class":154,"line":176},[152,611,303],{"class":162},[152,613,596],{"class":195},[152,615,199],{"class":162},[152,617,618],{"class":169},"\"XVjUbnJUzL9Vb5zXMPdoFURPqGtaRzBkr5DuJfResXEzcKh\"",[152,620,604],{"class":162},[152,622,623],{"class":219},"\u002F\u002F false\n",[222,625,626,627,629,630,632,633,636],{},"Classic addresses only: ",[149,628,235],{},", XRPL base58, version ",[149,631,250],{},", 20 bytes and a checksum that holds. X-addresses pack a destination tag in with the account, so they come back ",[149,634,635],{},"false"," here.",[137,638,640],{"id":639},"mnemonics","Mnemonics",[222,642,643,644,647,648,651,652,655],{},"BIP32 on secp256k1 at ",[149,645,646],{},"m\u002F44'\u002F144'\u002Faccount'\u002Fchange\u002Findex",". ",[149,649,650],{},"Wallet.fromMnemonic"," in xrpl.js takes ",[149,653,654],{},"m\u002F44'\u002F144'\u002F0'\u002F0\u002F0"," when you don't pass a path.",[142,657,659],{"className":144,"code":658,"language":146,"meta":147,"style":147},"const mnemonic =\n  \"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about\";\n\nxrpChain.deriveHDWallet(mnemonic, \"m\u002F44'\u002F144'\u002F0'\u002F0\u002F0\").address;\n\u002F\u002F rHsMGQEkVNJmpGWs8XUBoTBiAAbwxZN5v3\n",[149,660,661,671,678,682,697],{"__ignoreMap":147},[152,662,663,665,668],{"class":154,"line":155},[152,664,186],{"class":158},[152,666,667],{"class":162}," mnemonic ",[152,669,670],{"class":158},"=\n",[152,672,673,676],{"class":154,"line":176},[152,674,675],{"class":169},"  \"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about\"",[152,677,173],{"class":162},[152,679,680],{"class":154,"line":183},[152,681,180],{"emptyLinePlaceholder":179},[152,683,684,686,689,692,695],{"class":154,"line":213},[152,685,303],{"class":162},[152,687,688],{"class":195},"deriveHDWallet",[152,690,691],{"class":162},"(mnemonic, ",[152,693,694],{"class":169},"\"m\u002F44'\u002F144'\u002F0'\u002F0\u002F0\"",[152,696,504],{"class":162},[152,698,699],{"class":154,"line":529},[152,700,701],{"class":219},"\u002F\u002F rHsMGQEkVNJmpGWs8XUBoTBiAAbwxZN5v3\n",[222,703,704,705,707],{},"ed25519 throws. xrpl.js never derives an ed25519 key from BIP39 words, so there's no wallet to match. Want ed25519? Use an ",[149,706,480],{}," seed.",[222,709,710,711,714,715,718],{},"Phrase should reach an address, but you don't know where? ",[149,712,713],{},"keys_hd_wallet_scan"," walks ",[149,716,717],{},"bip44"," over accounts and indices.",[137,720,722],{"id":721},"signing","Signing",[222,724,725,728,729,732],{},[149,726,727],{},"signMessage"," signs like ",[149,730,731],{},"sign"," in ripple-keypairs. secp256k1 signs the SHA-512Half of the message and writes DER, ed25519 signs the message itself.",[142,734,736],{"className":144,"code":735,"language":146,"meta":147,"style":147},"const signature = xrpChain.signMessage(\"Hello, XRPL!\", privateKey);\n\u002F\u002F '3044...', DER, the bytes ripple-keypairs gives for this key\nxrpChain.verifyMessage(\"Hello, XRPL!\", signature, publicKey); \u002F\u002F true\n",[149,737,738,759,764],{"__ignoreMap":147},[152,739,740,742,745,747,749,751,753,756],{"class":154,"line":155},[152,741,186],{"class":158},[152,743,744],{"class":162}," signature ",[152,746,192],{"class":158},[152,748,288],{"class":162},[152,750,727],{"class":195},[152,752,199],{"class":162},[152,754,755],{"class":169},"\"Hello, XRPL!\"",[152,757,758],{"class":162},", privateKey);\n",[152,760,761],{"class":154,"line":176},[152,762,763],{"class":219},"\u002F\u002F '3044...', DER, the bytes ripple-keypairs gives for this key\n",[152,765,766,768,771,773,775,778],{"class":154,"line":183},[152,767,303],{"class":162},[152,769,770],{"class":195},"verifyMessage",[152,772,199],{"class":162},[152,774,755],{"class":169},[152,776,777],{"class":162},", signature, publicKey); ",[152,779,607],{"class":219},[222,781,782,783,786,787,789,790,792,793,796,797,257],{},"Yes, DER. Every other secp256k1 driver here hands back 64 bytes of ",[149,784,785],{},"r||s",". But ripple-keypairs only reads DER, and a signature it can't read isn't much of a signature. ",[149,788,770],{}," reads the curve from the key, ",[149,791,380],{}," or 32 bytes means ed25519. ",[149,794,795],{},"{ recovered: true }"," throws, XRPL never recovers a key from a ",[149,798,799],{},"v",[137,801,803],{"id":802},"where-it-lives","Where it lives",[222,805,806,809,810,813,814,817,818,821,822,257],{},[149,807,808],{},"src\u002Fblockchains\u002Fxrpl.ts"," has the seed decoding, the rippled key steps and the signing. The scheme handling is ",[149,811,812],{},"AbstractDualCurveBlockchain"," in ",[149,815,816],{},"src\u002Futils\u002Fdual-curve.ts",", which it shares with Sui. Base58 comes from ",[149,819,820],{},"@agntn\u002Fencodings",", SHA-512 and hash160 from ",[149,823,824],{},"@agntn\u002Fhashes",[826,827,828],"style",{},"html pre.shiki code .skH_V, html code.shiki .skH_V{--shiki-light:var(--shiki-token-keyword);--shiki-default:var(--shiki-token-keyword);--shiki-dark:var(--shiki-token-keyword)}html pre.shiki code .s38Sx, html code.shiki .s38Sx{--shiki-light:var(--ui-text-highlighted);--shiki-default:var(--ui-text-highlighted);--shiki-dark:var(--ui-text-highlighted)}html pre.shiki code .shU9J, html code.shiki .shU9J{--shiki-light:var(--shiki-token-string);--shiki-default:var(--shiki-token-string);--shiki-dark:var(--shiki-token-string)}html pre.shiki code .sK71F, html code.shiki .sK71F{--shiki-light:var(--shiki-token-function);--shiki-default:var(--shiki-token-function);--shiki-dark:var(--shiki-token-function)}html pre.shiki code .scIB-, html code.shiki .scIB-{--shiki-light:var(--shiki-token-comment);--shiki-default:var(--shiki-token-comment);--shiki-dark:var(--shiki-token-comment)}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":147,"searchDepth":176,"depth":176,"links":830},[831,832,834,835,836,837,838,839],{"id":139,"depth":176,"text":140},{"id":231,"depth":176,"text":833},"Where does an r address come from?",{"id":322,"depth":176,"text":323},{"id":469,"depth":176,"text":470},{"id":583,"depth":176,"text":584},{"id":639,"depth":176,"text":640},{"id":721,"depth":176,"text":722},{"id":802,"depth":176,"text":803},"Family seeds and BIP39 words to classic r addresses. secp256k1 by default and ed25519 when the seed says so.","md",null,{"icon":844},"i-token-xrp",{"title":846,"description":840},"XRP Ledger addresses from family seeds and BIP39 words","ApYT-gZRpgIJrWSOSWU-ZjrC-kyKDneETPtvYtQlisI",[849,851],{"title":112,"path":113,"stem":114,"description":850,"children":-1},"secp256k1 with Ethereum's 20 byte hash wrapped in base58check so every address starts with T.",{"title":120,"path":121,"stem":122,"description":852,"children":-1},"Transparent Zcash only. Bitcoin's P2PKH behind two version bytes, a t1 address, and nothing shielded.",1791332321661]