[{"data":1,"prerenderedAt":922},["ShallowReactive",2],{"navigation_docs":3,"-blockchains-monero":132,"-blockchains-monero-surround":917},[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":131},"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,123,127],{"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},"Monero","\u002Fblockchains\u002Fmonero","2.blockchains\u002Fmonero",{"title":100,"path":101,"stem":102},"NEAR","\u002Fblockchains\u002Fnear","2.blockchains\u002Fnear",{"title":104,"path":105,"stem":106},"Polkadot","\u002Fblockchains\u002Fpolkadot","2.blockchains\u002Fpolkadot",{"title":108,"path":109,"stem":110},"Solana","\u002Fblockchains\u002Fsolana","2.blockchains\u002Fsolana",{"title":112,"path":113,"stem":114},"Stellar","\u002Fblockchains\u002Fstellar","2.blockchains\u002Fstellar",{"title":116,"path":117,"stem":118},"Sui","\u002Fblockchains\u002Fsui","2.blockchains\u002Fsui",{"title":120,"path":121,"stem":122},"TRON","\u002Fblockchains\u002Ftron","2.blockchains\u002Ftron",{"title":124,"path":125,"stem":126},"XRP Ledger","\u002Fblockchains\u002Fxrpl","2.blockchains\u002Fxrpl",{"title":128,"path":129,"stem":130},"Zcash","\u002Fblockchains\u002Fzcash","2.blockchains\u002Fzcash","i-lucide-boxes",{"id":133,"title":96,"body":134,"description":909,"extension":910,"links":911,"meta":912,"navigation":187,"path":97,"seo":914,"stem":98,"__hash__":916},"docs\u002F2.blockchains\u002Fmonero.md",{"type":135,"value":136,"toc":897},"minimark",[137,144,149,248,264,268,275,340,343,346,353,356,359,362,366,369,404,410,417,421,424,460,486,490,500,554,573,576,579,593,597,600,626,632,635,639,646,700,711,714,756,773,779,786,790,804,808,864,868,893],[138,139],"chain-facts",{"coin":140,"curve":141,"driver":142,"formats":143},"128","ed25519","monero","standard, subaddress, integrated",[145,146,148],"h2",{"id":147},"load-it","Load it",[150,151,156],"pre",{"className":152,"code":153,"language":154,"meta":155,"style":155},"language-js shiki shiki-themes keys keys keys","import { useBlockchain, blockchains } from \"@agntn\u002Fkeys\";\n\nconst monero = useBlockchain(await blockchains.monero()());\nconst stagenet = useBlockchain(await blockchains.monero({ network: \"stagenet\" })());\n","js","",[157,158,159,182,189,219],"code",{"__ignoreMap":155},[160,161,164,168,172,175,179],"span",{"class":162,"line":163},"line",1,[160,165,167],{"class":166},"skH_V","import",[160,169,171],{"class":170},"s38Sx"," { useBlockchain, blockchains } ",[160,173,174],{"class":166},"from",[160,176,178],{"class":177},"shU9J"," \"@agntn\u002Fkeys\"",[160,180,181],{"class":170},";\n",[160,183,185],{"class":162,"line":184},2,[160,186,188],{"emptyLinePlaceholder":187},true,"\n",[160,190,192,195,198,201,205,208,211,214,216],{"class":162,"line":191},3,[160,193,194],{"class":166},"const",[160,196,197],{"class":170}," monero ",[160,199,200],{"class":166},"=",[160,202,204],{"class":203},"sK71F"," useBlockchain",[160,206,207],{"class":170},"(",[160,209,210],{"class":166},"await",[160,212,213],{"class":170}," blockchains.",[160,215,142],{"class":203},[160,217,218],{"class":170},"()());\n",[160,220,222,224,227,229,231,233,235,237,239,242,245],{"class":162,"line":221},4,[160,223,194],{"class":166},[160,225,226],{"class":170}," stagenet ",[160,228,200],{"class":166},[160,230,204],{"class":203},[160,232,207],{"class":170},[160,234,210],{"class":166},[160,236,213],{"class":170},[160,238,142],{"class":203},[160,240,241],{"class":170},"({ network: ",[160,243,244],{"class":177},"\"stagenet\"",[160,246,247],{"class":170}," })());\n",[249,250,251,252,255,256,259,260,263],"p",{},"Three networks, one class. ",[157,253,254],{},"mainnet",", ",[157,257,258],{},"testnet"," and ",[157,261,262],{},"stagenet",", and anything else throws. Same keys on every network. The network byte up front changes, and the checksum over it.",[145,265,267],{"id":266},"the-seed","The seed",[249,269,270,271,274],{},"Monero doesn't do BIP39. A wallet gives you 25 words from its own list of 1626. Hand them to ",[157,272,273],{},"deriveSeedWallet",":",[150,276,278],{"className":152,"code":277,"language":154,"meta":155,"style":155},"const seed =\n  \"velvet lymph giddy number token physics poetry unquoted nibs useful sabotage limits \" +\n  \"benches lifestyle eden nitrogen anvil fewest avoid batch vials washing fences goat unquoted\";\n\nconst wallet = monero.deriveSeedWallet(seed);\nwallet.address;\n\u002F\u002F 42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm\n",[157,279,280,290,298,305,309,327,333],{"__ignoreMap":155},[160,281,282,284,287],{"class":162,"line":163},[160,283,194],{"class":166},[160,285,286],{"class":170}," seed ",[160,288,289],{"class":166},"=\n",[160,291,292,295],{"class":162,"line":184},[160,293,294],{"class":177},"  \"velvet lymph giddy number token physics poetry unquoted nibs useful sabotage limits \"",[160,296,297],{"class":166}," +\n",[160,299,300,303],{"class":162,"line":191},[160,301,302],{"class":177},"  \"benches lifestyle eden nitrogen anvil fewest avoid batch vials washing fences goat unquoted\"",[160,304,181],{"class":170},[160,306,307],{"class":162,"line":221},[160,308,188],{"emptyLinePlaceholder":187},[160,310,312,314,317,319,322,324],{"class":162,"line":311},5,[160,313,194],{"class":166},[160,315,316],{"class":170}," wallet ",[160,318,200],{"class":166},[160,320,321],{"class":170}," monero.",[160,323,273],{"class":203},[160,325,326],{"class":170},"(seed);\n",[160,328,330],{"class":162,"line":329},6,[160,331,332],{"class":170},"wallet.address;\n",[160,334,336],{"class":162,"line":335},7,[160,337,339],{"class":338},"scIB-","\u002F\u002F 42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm\n",[249,341,342],{},"That seed comes from Monero's own functional tests, and so does the address. Nice when the source agrees with you.",[249,344,345],{},"Three words make four bytes, so 24 words are the 32-byte key. The 25th is a checksum. It repeats one of the other 24, picked by a CRC-32 over their first three letters.",[249,347,348,349,352],{},"Here's the fun part. Only the first three letters count. ",[157,350,351],{},"VELxyz LYMzz GIDdy..."," restores the same wallet, any case, any whitespace. That's what monero-wallet-cli does too. Got a smudged backup where only the starts are readable? That might be enough.",[249,354,355],{},"Drop the 25th word and 24 still work. But then every word has to be whole, since no checksum backs the guess.",[249,357,358],{},"What throws? A count other than 24 or 25, a word off the list, a checksum word that doesn't match. And three words that spell more than 32 bits, which the math allows and Monero refuses.",[249,360,361],{},"English only, for now. The other Monero lists and Polyseed's 16 words aren't here.",[145,363,365],{"id":364},"keys","Keys",[249,367,368],{},"The 32 bytes from the seed get reduced mod l, the ed25519 group order. That's the private spend key. The private view key is keccak256 of the spend key, reduced again. One seed, two key pairs.",[150,370,372],{"className":152,"code":371,"language":154,"meta":155,"style":155},"wallet.keys.private; \u002F\u002F 148d78d2...86640e, the spend key\nmonero.getViewKey(wallet.keys.private); \u002F\u002F 49774391...809100\nwallet.keys.public; \u002F\u002F 1b3bd040...7be2ab231c9bf834...247e99\n",[157,373,374,382,396],{"__ignoreMap":155},[160,375,376,379],{"class":162,"line":163},[160,377,378],{"class":170},"wallet.keys.private; ",[160,380,381],{"class":338},"\u002F\u002F 148d78d2...86640e, the spend key\n",[160,383,384,387,390,393],{"class":162,"line":184},[160,385,386],{"class":170},"monero.",[160,388,389],{"class":203},"getViewKey",[160,391,392],{"class":170},"(wallet.keys.private); ",[160,394,395],{"class":338},"\u002F\u002F 49774391...809100\n",[160,397,398,401],{"class":162,"line":191},[160,399,400],{"class":170},"wallet.keys.public; ",[160,402,403],{"class":338},"\u002F\u002F 1b3bd040...7be2ab231c9bf834...247e99\n",[249,405,406,409],{},[157,407,408],{},"keys.public"," is 64 bytes. The public spend key, then the public view key. Weird? Every Monero address needs both, so a wallet carries both.",[249,411,412,413,416],{},"Plain hex works too. ",[157,414,415],{},"deriveWallet"," reduces whatever 32 bytes you give it, the way Monero's wallet does, and the wallet shows the reduced key. A random key is above l most of the time, so don't be surprised when it comes back different. A key that reduces to zero throws. No spend key, no wallet.",[145,418,420],{"id":419},"whats-in-an-address","What's in an address?",[249,422,423],{},"A network byte, both public keys and four bytes of keccak256. Then base58, but Monero's version. It cuts the bytes into blocks of eight and pads every block to 11 characters. So a standard address is always 95 characters long.",[150,425,427],{"className":152,"code":426,"language":154,"meta":155,"style":155},"monero.getAddress(wallet.keys.public); \u002F\u002F 42ey1afD...TfJJQAWDm\nmonero.validateAddress(\"42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm\"); \u002F\u002F true\n",[157,428,429,442],{"__ignoreMap":155},[160,430,431,433,436,439],{"class":162,"line":163},[160,432,386],{"class":170},[160,434,435],{"class":203},"getAddress",[160,437,438],{"class":170},"(wallet.keys.public); ",[160,440,441],{"class":338},"\u002F\u002F 42ey1afD...TfJJQAWDm\n",[160,443,444,446,449,451,454,457],{"class":162,"line":184},[160,445,386],{"class":170},[160,447,448],{"class":203},"validateAddress",[160,450,207],{"class":170},[160,452,453],{"class":177},"\"42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm\"",[160,455,456],{"class":170},"); ",[160,458,459],{"class":338},"\u002F\u002F true\n",[249,461,462,463,466,467,470,471,474,475,478,479,481,482,485],{},"Mainnet starts with ",[157,464,465],{},"4",", stagenet with ",[157,468,469],{},"5",", testnet with ",[157,472,473],{},"9"," or ",[157,476,477],{},"A",". ",[157,480,448],{}," wants this instance's network, a good checksum and two real keys. Not the identity, not a torsion point, the same ",[157,483,484],{},"check_address"," monero-wallet-cli runs. It takes all three kinds below, each under its own network byte.",[145,487,489],{"id":488},"subaddresses","Subaddresses",[249,491,492,493,259,496,499],{},"Want a fresh address for every payment without a new seed? That's what subaddresses are for. monero-wallet-cli hands them out with ",[157,494,495],{},"address new",[157,497,498],{},"account new",". Here's the same list:",[150,501,503],{"className":152,"code":502,"language":154,"meta":155,"style":155},"const viewKey = monero.getViewKey(wallet.keys.private);\n\nmonero.getSubaddress(wallet.keys.public, viewKey, 0, 1);\n\u002F\u002F 84QRUYawRNrU3NN1VpFRndSukeyEb3Xpv8qZjjsoJZnTYpDYceuUTpog13D7qPxpviS7J29bSgSkR11hFFoXWk2yNdsR9WF\nmonero.getSubaddress(wallet.keys.public, viewKey, 1, 0);\n\u002F\u002F 82pP87g1Vkd3LUMssBCumk3MfyEsFqLAaGDf6oxddu61EgSFzt8gCwUD4tr3kp9TUfdPs2CnpD7xLZzyC1Ei9UsW3oyCWDf\n",[157,504,505,521,525,535,540,549],{"__ignoreMap":155},[160,506,507,509,512,514,516,518],{"class":162,"line":163},[160,508,194],{"class":166},[160,510,511],{"class":170}," viewKey ",[160,513,200],{"class":166},[160,515,321],{"class":170},[160,517,389],{"class":203},[160,519,520],{"class":170},"(wallet.keys.private);\n",[160,522,523],{"class":162,"line":184},[160,524,188],{"emptyLinePlaceholder":187},[160,526,527,529,532],{"class":162,"line":191},[160,528,386],{"class":170},[160,530,531],{"class":203},"getSubaddress",[160,533,534],{"class":170},"(wallet.keys.public, viewKey, 0, 1);\n",[160,536,537],{"class":162,"line":221},[160,538,539],{"class":338},"\u002F\u002F 84QRUYawRNrU3NN1VpFRndSukeyEb3Xpv8qZjjsoJZnTYpDYceuUTpog13D7qPxpviS7J29bSgSkR11hFFoXWk2yNdsR9WF\n",[160,541,542,544,546],{"class":162,"line":311},[160,543,386],{"class":170},[160,545,531],{"class":203},[160,547,548],{"class":170},"(wallet.keys.public, viewKey, 1, 0);\n",[160,550,551],{"class":162,"line":329},[160,552,553],{"class":338},"\u002F\u002F 82pP87g1Vkd3LUMssBCumk3MfyEsFqLAaGDf6oxddu61EgSFzt8gCwUD4tr3kp9TUfdPs2CnpD7xLZzyC1Ei9UsW3oyCWDf\n",[249,555,556,557,560,561,564,565,568,569,572],{},"Two numbers pick one. The account first, then the address inside it. Account 0, index 0 is the wallet's own ",[157,558,559],{},"4..."," address. Every other pair starts with ",[157,562,563],{},"8"," on mainnet, ",[157,566,567],{},"7"," on stagenet and ",[157,570,571],{},"B"," on testnet. Both indices go up to 2^32 - 1, since wallet2 keeps them as uint32.",[249,574,575],{},"Notice what's missing? The spend key. A subaddress hashes the private view key with both indices. That scalar times G lands on the public spend key, and the view key multiplies the sum. So a view only wallet hands out subaddresses just fine.",[249,577,578],{},"Pass a view key from another wallet and it throws. Better than an address nobody can spend.",[249,580,581,582,585,586,589,590,592],{},"Only want the keys? ",[157,583,584],{},"getSubaddressKeyPublic"," returns the 64-byte pair, and ",[157,587,588],{},"getAddress(pair, \"subaddress\")"," writes it. A whole wallet stays on its standard address, so ",[157,591,415],{}," refuses an address type.",[145,594,596],{"id":595},"integrated-addresses","Integrated addresses",[249,598,599],{},"Older trick, same goal. The standard keys plus an 8-byte payment ID, packed into one address:",[150,601,603],{"className":152,"code":602,"language":154,"meta":155,"style":155},"monero.getIntegratedAddress(wallet.keys.public, \"1234567890abcdef\");\n\u002F\u002F 4CMe2PUhs4J4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfSbyvqonpbf2Tzcs8kx\n",[157,604,605,621],{"__ignoreMap":155},[160,606,607,609,612,615,618],{"class":162,"line":163},[160,608,386],{"class":170},[160,610,611],{"class":203},"getIntegratedAddress",[160,613,614],{"class":170},"(wallet.keys.public, ",[160,616,617],{"class":177},"\"1234567890abcdef\"",[160,619,620],{"class":170},");\n",[160,622,623],{"class":162,"line":184},[160,624,625],{"class":338},"\u002F\u002F 4CMe2PUhs4J4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfSbyvqonpbf2Tzcs8kx\n",[249,627,628,629,631],{},"Same ",[157,630,465],{}," up front, 106 characters long. Wallets push subaddresses these days. But an old integrated address still has to check out, and now it does.",[249,633,634],{},"Every address on this page comes from monero-wallet-cli 0.18.5.3, restored offline from that seed. The tests hold the library to them.",[145,636,638],{"id":637},"signing-a-message","Signing a message",[249,640,641,642,645],{},"Want to show an address is yours without moving a single piconero? Monero wallets have ",[157,643,644],{},"sign"," for that, and keys writes the same SigV2:",[150,647,649],{"className":152,"code":648,"language":154,"meta":155,"style":155},"const signature = monero.signMessage(\"foo\", wallet.keys.private);\n\u002F\u002F SigV2 and 88 characters of base58, with a fresh nonce every time\n\nmonero.verifyMessage(\"foo\", signature, wallet.keys.public);\n\u002F\u002F true\n",[157,650,651,673,678,682,696],{"__ignoreMap":155},[160,652,653,655,658,660,662,665,667,670],{"class":162,"line":163},[160,654,194],{"class":166},[160,656,657],{"class":170}," signature ",[160,659,200],{"class":166},[160,661,321],{"class":170},[160,663,664],{"class":203},"signMessage",[160,666,207],{"class":170},[160,668,669],{"class":177},"\"foo\"",[160,671,672],{"class":170},", wallet.keys.private);\n",[160,674,675],{"class":162,"line":184},[160,676,677],{"class":338},"\u002F\u002F SigV2 and 88 characters of base58, with a fresh nonce every time\n",[160,679,680],{"class":162,"line":191},[160,681,188],{"emptyLinePlaceholder":187},[160,683,684,686,689,691,693],{"class":162,"line":221},[160,685,386],{"class":170},[160,687,688],{"class":203},"verifyMessage",[160,690,207],{"class":170},[160,692,669],{"class":177},[160,694,695],{"class":170},", signature, wallet.keys.public);\n",[160,697,698],{"class":162,"line":311},[160,699,459],{"class":338},[249,701,702,703,706,707,710],{},"The private key is the spend key, like everywhere on this page. Pass ",[157,704,705],{},"{ signingKey: \"view\" }"," and the view key signs instead, like ",[157,708,709],{},"sign --view",".",[249,712,713],{},"And the other way round? Here's what monero-wallet-rpc 0.18.5.3 signed for that same wallet:",[150,715,717],{"className":152,"code":716,"language":154,"meta":155,"style":155},"monero.verifyMessage(\n  \"foo\",\n  \"SigV28r6htFqF3fA4brb5tVALH661nNdrpfociHRduyn29JYpSJ2b9jUudSNbziPuGkQfiS4idjLzHHxrfKs6kC8vgEPj\",\n  wallet.keys.public,\n);\n\u002F\u002F true\n",[157,718,719,728,736,743,748,752],{"__ignoreMap":155},[160,720,721,723,725],{"class":162,"line":163},[160,722,386],{"class":170},[160,724,688],{"class":203},[160,726,727],{"class":170},"(\n",[160,729,730,733],{"class":162,"line":184},[160,731,732],{"class":177},"  \"foo\"",[160,734,735],{"class":170},",\n",[160,737,738,741],{"class":162,"line":191},[160,739,740],{"class":177},"  \"SigV28r6htFqF3fA4brb5tVALH661nNdrpfociHRduyn29JYpSJ2b9jUudSNbziPuGkQfiS4idjLzHHxrfKs6kC8vgEPj\"",[160,742,735],{"class":170},[160,744,745],{"class":162,"line":221},[160,746,747],{"class":170},"  wallet.keys.public,\n",[160,749,750],{"class":162,"line":311},[160,751,620],{"class":170},[160,753,754],{"class":162,"line":329},[160,755,459],{"class":338},[249,757,758,760,761,764,765,768,769,772],{},[157,759,688],{}," tries both keys, the way ",[157,762,763],{},"monero-wallet-cli verify"," does. The hash covers a ",[157,766,767],{},"MoneroMessageSignature"," tag, both public keys, which key signed and the message. So a view key signature can't pose as a spend key one. Old ",[157,770,771],{},"SigV1"," signatures hash the bare message, and they still check out.",[249,774,775,776,778],{},"A subaddress signature checks against the pair of that subaddress, the one ",[157,777,584],{}," gives. Signing as a subaddress isn't here yet. Checking one is.",[249,780,781,782,785],{},"Hex, base64 or a truncated signature throws instead of answering ",[157,783,784],{},"false",". A typo isn't a verdict.",[145,787,789],{"id":788},"what-it-doesnt-do","What it doesn't do",[249,791,792,793,259,796,799,800,803],{},"No BIP39 words and no BIP44 paths. ",[157,794,795],{},"deriveHDWallet",[157,797,798],{},"getDerivationPath()"," throw, and ",[157,801,802],{},"keys_hd_wallet_scan"," has nothing to walk. A Monero wallet is its seed.",[145,805,807],{"id":806},"agents","Agents",[249,809,810,811,814,815,818,819,822,823,826,827,829,830,259,833,836,837,840,841,843,844,847,848,851,852,855,856,859,860,863],{},"On ",[157,812,813],{},"chain: \"monero\""," the ",[157,816,817],{},"privateKey"," of ",[157,820,821],{},"keys_wallet_derive"," takes the seed words as well as hex, and ",[157,824,825],{},"network"," takes ",[157,828,262],{}," too. Add ",[157,831,832],{},"account",[157,834,835],{},"addressIndex"," and it prints that subaddress, the view key never leaving the call. ",[157,838,839],{},"keys_address_get"," wants the 64-byte public key, the one ",[157,842,821],{}," prints. ",[157,845,846],{},"addressType: \"subaddress\""," writes a subaddress pair, ",[157,849,850],{},"paymentId"," the integrated address. ",[157,853,854],{},"keys_message_sign"," writes SigV2, with ",[157,857,858],{},"signingKey: \"view\""," for the view key, and ",[157,861,862],{},"keys_message_verify"," takes SigV2 or SigV1 against that same 64-byte key.",[145,865,867],{"id":866},"where-it-lives","Where it lives",[249,869,870,873,874,877,878,881,882,885,886,889,890,710],{},[157,871,872],{},"src\u002Fblockchains\u002Fmonero.ts",", with the seed words in ",[157,875,876],{},"src\u002Futils\u002Fmonero-seed.ts"," and block base58 in ",[157,879,880],{},"src\u002Futils\u002Fmonero-base58.ts",". ed25519 comes from ",[157,883,884],{},"@noble\u002Fcurves",", keccak256 and CRC-32 from ",[157,887,888],{},"@agntn\u002Fhashes",", base58 from ",[157,891,892],{},"@agntn\u002Fencodings",[894,895,896],"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 .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);}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)}",{"title":155,"searchDepth":184,"depth":184,"links":898},[899,900,901,902,903,904,905,906,907,908],{"id":147,"depth":184,"text":148},{"id":266,"depth":184,"text":267},{"id":364,"depth":184,"text":365},{"id":419,"depth":184,"text":420},{"id":488,"depth":184,"text":489},{"id":595,"depth":184,"text":596},{"id":637,"depth":184,"text":638},{"id":788,"depth":184,"text":789},{"id":806,"depth":184,"text":807},{"id":866,"depth":184,"text":867},"Monero addresses from a 25-word seed or a spend key. Subaddresses and integrated addresses come out the way monero-wallet-cli writes them.","md",null,{"icon":913},"i-token-xmr",{"title":915,"description":909},"Monero addresses and keys from a 25-word seed","_0l_0CKNql34yDhw-A8XPsTWjJK45nQ7qPJaIDsWNhs",[918,920],{"title":92,"path":93,"stem":94,"description":919,"children":-1},"Bitcoin's driver with Litecoin's prefixes. Five address formats on mainnet and testnet and its own signed message preamble.",{"title":100,"path":101,"stem":102,"description":921,"children":-1},"ed25519 keys and BIP39 words to NEAR implicit accounts. The account ID is the public key in hex. Named accounts stay on chain.",1792090114726]