[{"data":1,"prerenderedAt":372},["ShallowReactive",2],{"navigation_docs":3,"-blockchains-solana":72,"-blockchains-solana-surround":367},[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":71},"Blockchains","\u002Fblockchains","2.blockchains\u002F0.index",[37,39,43,47,51,55,59,63,67],{"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},"Cardano","\u002Fblockchains\u002Fcardano","2.blockchains\u002Fcardano",{"title":56,"path":57,"stem":58},"Ethereum","\u002Fblockchains\u002Fethereum","2.blockchains\u002Fethereum",{"title":60,"path":61,"stem":62},"Solana","\u002Fblockchains\u002Fsolana","2.blockchains\u002Fsolana",{"title":64,"path":65,"stem":66},"Sui","\u002Fblockchains\u002Fsui","2.blockchains\u002Fsui",{"title":68,"path":69,"stem":70},"TRON","\u002Fblockchains\u002Ftron","2.blockchains\u002Ftron","i-lucide-boxes",{"id":73,"title":60,"body":74,"description":360,"extension":361,"links":362,"meta":363,"navigation":148,"path":61,"seo":365,"stem":62,"__hash__":366},"docs\u002F2.blockchains\u002Fsolana.md",{"type":75,"value":76,"toc":353},"minimark",[77,84,89,185,189,242,250,254,281,284,288,291,328,331,335,349],[78,79],"chain-facts",{"coin":80,"curve":81,"driver":82,"formats":83},"501","ed25519","solana","base58",[85,86,88],"h2",{"id":87},"load-it","Load it",[90,91,96],"pre",{"className":92,"code":93,"language":94,"meta":95,"style":95},"language-js shiki shiki-themes github-light github-light poimandres","import { useBlockchain, blockchains } from \"@agntn\u002Fkeys\";\n\nconst solanaChain = useBlockchain(await blockchains.solana()());\n","js","",[97,98,99,143,150],"code",{"__ignoreMap":95},[100,101,104,108,112,116,119,122,125,129,133,137,140],"span",{"class":102,"line":103},"line",1,[100,105,107],{"class":106},"sP0CR","import",[100,109,111],{"class":110},"sKlNE"," {",[100,113,115],{"class":114},"snHMy"," useBlockchain",[100,117,118],{"class":110},",",[100,120,121],{"class":114}," blockchains",[100,123,124],{"class":110}," }",[100,126,128],{"class":127},"stCPd"," from",[100,130,132],{"class":131},"scVjq"," \"",[100,134,136],{"class":135},"sQ7BG","@agntn\u002Fkeys",[100,138,139],{"class":131},"\"",[100,141,142],{"class":110},";\n",[100,144,146],{"class":102,"line":145},2,[100,147,149],{"emptyLinePlaceholder":148},true,"\n",[100,151,153,157,161,164,167,170,174,177,180,182],{"class":102,"line":152},3,[100,154,156],{"class":155},"s1TYA","const",[100,158,160],{"class":159},"saoiD"," solanaChain",[100,162,163],{"class":155}," =",[100,165,115],{"class":166},"sULi6",[100,168,169],{"class":110},"(",[100,171,173],{"class":172},"sZW6a","await",[100,175,121],{"class":176},"spVlQ",[100,178,179],{"class":110},".",[100,181,82],{"class":166},[100,183,184],{"class":110},"()());\n",[85,186,188],{"id":187},"the-address","The address",[90,190,192],{"className":92,"code":191,"language":94,"meta":95,"style":95},"const publicKey = solanaChain.getKeyPublic(privateKey); \u002F\u002F 32 bytes, 64 hex chars\nsolanaChain.getAddress(publicKey); \u002F\u002F base58 of the same 32 bytes\n",[97,193,194,222],{"__ignoreMap":95},[100,195,196,198,201,203,205,207,210,212,215,218],{"class":102,"line":103},[100,197,156],{"class":155},[100,199,200],{"class":159}," publicKey",[100,202,163],{"class":155},[100,204,160],{"class":176},[100,206,179],{"class":110},[100,208,209],{"class":166},"getKeyPublic",[100,211,169],{"class":110},[100,213,214],{"class":176},"privateKey",[100,216,217],{"class":110},"); ",[100,219,221],{"class":220},"sjhu3","\u002F\u002F 32 bytes, 64 hex chars\n",[100,223,224,227,229,232,234,237,239],{"class":102,"line":145},[100,225,226],{"class":176},"solanaChain",[100,228,179],{"class":110},[100,230,231],{"class":166},"getAddress",[100,233,169],{"class":110},[100,235,236],{"class":176},"publicKey",[100,238,217],{"class":110},[100,240,241],{"class":220},"\u002F\u002F base58 of the same 32 bytes\n",[243,244,245,246,249],"p",{},"No hash, no version byte, no checksum. The address is the public key with a friendlier encoding. It makes Solana the easiest chain in the package and the one where ",[97,247,248],{},"validateAddress"," can say the least: any 32 bytes that decode from base58 pass, including a program address that no private key controls.",[85,251,253],{"id":252},"validation","Validation",[90,255,257],{"className":92,"code":256,"language":94,"meta":95,"style":95},"solanaChain.validateAddress(\"9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin\"); \u002F\u002F true\n",[97,258,259],{"__ignoreMap":95},[100,260,261,263,265,267,269,271,274,276,278],{"class":102,"line":103},[100,262,226],{"class":176},[100,264,179],{"class":110},[100,266,248],{"class":166},[100,268,169],{"class":110},[100,270,139],{"class":131},[100,272,273],{"class":135},"9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",[100,275,139],{"class":131},[100,277,217],{"class":110},[100,279,280],{"class":220},"\u002F\u002F true\n",[243,282,283],{},"Decodes as base58 and is exactly 32 bytes. That is the whole check.",[85,285,287],{"id":286},"mnemonics","Mnemonics",[243,289,290],{},"Solana derives with SLIP-10, which only has hardened children. Every segment of the path needs the tick:",[90,292,294],{"className":92,"code":293,"language":94,"meta":95,"style":95},"solanaChain.deriveHDWallet(mnemonic, \"m\u002F44'\u002F501'\u002F0'\u002F0'\").address;\n",[97,295,296],{"__ignoreMap":95},[100,297,298,300,302,305,307,310,313,315,318,320,323,326],{"class":102,"line":103},[100,299,226],{"class":176},[100,301,179],{"class":110},[100,303,304],{"class":166},"deriveHDWallet",[100,306,169],{"class":110},[100,308,309],{"class":176},"mnemonic",[100,311,312],{"class":110},", ",[100,314,139],{"class":131},[100,316,317],{"class":135},"m\u002F44'\u002F501'\u002F0'\u002F0'",[100,319,139],{"class":131},[100,321,322],{"class":110},").",[100,324,325],{"class":176},"address",[100,327,142],{"class":110},[243,329,330],{},"A path with an unhardened segment throws before derivation. Phantom and Solflare use exactly this shape, so the first account matches what those wallets show.",[85,332,334],{"id":333},"signing","Signing",[243,336,337,340,341,344,345,348],{},[97,338,339],{},"signMessage"," is a plain ed25519 signature over the message bytes, hex encoded, and ",[97,342,343],{},"verifyMessage"," checks it against the public key. That is the format ",[97,346,347],{},"nacl.sign.detached"," produces, minus the base58 wrapper some wallets add on top.",[350,351,352],"style",{},"html pre.shiki code .sP0CR, html code.shiki .sP0CR{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .snHMy, html code.shiki .snHMy{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#ADD7FF}html pre.shiki code .stCPd, html code.shiki .stCPd{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#A6ACCD}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}html pre.shiki code .s1TYA, html code.shiki .s1TYA{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#91B4D5}html pre.shiki code .saoiD, html code.shiki .saoiD{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#E4F0FB}html pre.shiki code .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .sZW6a, html code.shiki .sZW6a{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7C0}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}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 .sjhu3, html code.shiki .sjhu3{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#767C9DB0;--shiki-dark-font-style:italic}",{"title":95,"searchDepth":145,"depth":145,"links":354},[355,356,357,358,359],{"id":87,"depth":145,"text":88},{"id":187,"depth":145,"text":188},{"id":252,"depth":145,"text":253},{"id":286,"depth":145,"text":287},{"id":333,"depth":145,"text":334},"ed25519. The address is the public key itself in base58, nothing hashed.","md",null,{"icon":364},"i-simple-icons-solana",{"title":60,"description":360},"EWC17dUbQQVO-3BZgyeJVDVqlSQWbvM7s17EDDmsMfw",[368,370],{"title":56,"path":57,"stem":58,"description":369,"children":-1},"secp256k1 with EIP-55 checksummed addresses and personal_sign message signatures.",{"title":64,"path":65,"stem":66,"description":371,"children":-1},"ed25519 or secp256k1 on one chain. Blake2b over a flag byte and the public key.",1788428715659]