[{"data":1,"prerenderedAt":828},["ShallowReactive",2],{"navigation_docs":3,"-blockchains-ton":136,"-blockchains-ton-surround":823},[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":135},"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,131],{"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},"TON","\u002Fblockchains\u002Fton","2.blockchains\u002Fton",{"title":124,"path":125,"stem":126},"TRON","\u002Fblockchains\u002Ftron","2.blockchains\u002Ftron",{"title":128,"path":129,"stem":130},"XRP Ledger","\u002Fblockchains\u002Fxrpl","2.blockchains\u002Fxrpl",{"title":132,"path":133,"stem":134},"Zcash","\u002Fblockchains\u002Fzcash","2.blockchains\u002Fzcash","i-lucide-boxes",{"id":137,"title":120,"body":138,"description":815,"extension":816,"links":817,"meta":818,"navigation":191,"path":121,"seo":820,"stem":122,"__hash__":822},"docs\u002F2.blockchains\u002Fton.md",{"type":139,"value":140,"toc":804},"minimark",[141,148,153,252,256,260,263,266,269,342,349,352,356,359,396,407,427,445,449,452,462,531,542,545,548,552,555,629,642,651,655,658,702,719,723,737,741,771,775,800],[142,143],"chain-facts",{"coin":144,"curve":145,"driver":146,"formats":147},"607","ed25519","ton","v3r2, v4r2, v5r1 wallets, bounceable or not",[149,150,152],"h2",{"id":151},"load-it","Load it",[154,155,160],"pre",{"className":156,"code":157,"language":158,"meta":159,"style":159},"language-js shiki shiki-themes keys keys keys","import { useBlockchain, blockchains } from \"@agntn\u002Fkeys\";\n\nconst ton = useBlockchain(await blockchains.ton()());\nconst testnet = useBlockchain(await blockchains.ton({ network: \"testnet\" })());\n","js","",[161,162,163,186,193,223],"code",{"__ignoreMap":159},[164,165,168,172,176,179,183],"span",{"class":166,"line":167},"line",1,[164,169,171],{"class":170},"skH_V","import",[164,173,175],{"class":174},"s38Sx"," { useBlockchain, blockchains } ",[164,177,178],{"class":170},"from",[164,180,182],{"class":181},"shU9J"," \"@agntn\u002Fkeys\"",[164,184,185],{"class":174},";\n",[164,187,189],{"class":166,"line":188},2,[164,190,192],{"emptyLinePlaceholder":191},true,"\n",[164,194,196,199,202,205,209,212,215,218,220],{"class":166,"line":195},3,[164,197,198],{"class":170},"const",[164,200,201],{"class":174}," ton ",[164,203,204],{"class":170},"=",[164,206,208],{"class":207},"sK71F"," useBlockchain",[164,210,211],{"class":174},"(",[164,213,214],{"class":170},"await",[164,216,217],{"class":174}," blockchains.",[164,219,146],{"class":207},[164,221,222],{"class":174},"()());\n",[164,224,226,228,231,233,235,237,239,241,243,246,249],{"class":166,"line":225},4,[164,227,198],{"class":170},[164,229,230],{"class":174}," testnet ",[164,232,204],{"class":170},[164,234,208],{"class":207},[164,236,211],{"class":174},[164,238,214],{"class":170},[164,240,217],{"class":174},[164,242,146],{"class":207},[164,244,245],{"class":174},"({ network: ",[164,247,248],{"class":181},"\"testnet\"",[164,250,251],{"class":174}," })());\n",[253,254,255],"p",{},"Same keys on both networks. Testnet flips one flag bit, and v5r1 folds the network into its wallet ID too.",[149,257,259],{"id":258},"wheres-the-key-in-the-address","Where's the key in the address?",[253,261,262],{},"Nowhere, really. Most chains hash the public key and call it a day. TON doesn't.",[253,264,265],{},"An account on TON is a smart contract, and the wallet is one too. Its address is the hash of the contract's starting state: the code, plus a data cell with the key inside. Change the code and the address moves.",[253,267,268],{},"So one key has three addresses here, one per wallet contract:",[154,270,272],{"className":156,"code":271,"language":158,"meta":159,"style":159},"const publicKey = \"fa86305ed66920ddc1b041db6ba756147b7e627d5bcffbe5cd2bfd0039fa9152\";\n\nton.getAddress(publicKey); \u002F\u002F UQDxrCm53vVUKOIgj1f3IiyjLDYLvaBR9-D5ZxVdH5nXVMEH, v4r2\nton.getAddress(publicKey, \"v5r1\"); \u002F\u002F UQAa7ATvJFkxQN73j8_PiZeEb5-yFPvs7JDHzQfsHGAhO3kg\nton.getAddress(publicKey, \"v3r2\"); \u002F\u002F UQAcPB8EuQQwVzKX2UynNmE1nPbAziMowreDYObVdeyiCtug\n",[161,273,274,288,292,307,325],{"__ignoreMap":159},[164,275,276,278,281,283,286],{"class":166,"line":167},[164,277,198],{"class":170},[164,279,280],{"class":174}," publicKey ",[164,282,204],{"class":170},[164,284,285],{"class":181}," \"fa86305ed66920ddc1b041db6ba756147b7e627d5bcffbe5cd2bfd0039fa9152\"",[164,287,185],{"class":174},[164,289,290],{"class":166,"line":188},[164,291,192],{"emptyLinePlaceholder":191},[164,293,294,297,300,303],{"class":166,"line":195},[164,295,296],{"class":174},"ton.",[164,298,299],{"class":207},"getAddress",[164,301,302],{"class":174},"(publicKey); ",[164,304,306],{"class":305},"scIB-","\u002F\u002F UQDxrCm53vVUKOIgj1f3IiyjLDYLvaBR9-D5ZxVdH5nXVMEH, v4r2\n",[164,308,309,311,313,316,319,322],{"class":166,"line":225},[164,310,296],{"class":174},[164,312,299],{"class":207},[164,314,315],{"class":174},"(publicKey, ",[164,317,318],{"class":181},"\"v5r1\"",[164,320,321],{"class":174},"); ",[164,323,324],{"class":305},"\u002F\u002F UQAa7ATvJFkxQN73j8_PiZeEb5-yFPvs7JDHzQfsHGAhO3kg\n",[164,326,328,330,332,334,337,339],{"class":166,"line":327},5,[164,329,296],{"class":174},[164,331,299],{"class":207},[164,333,315],{"class":174},[164,335,336],{"class":181},"\"v3r2\"",[164,338,321],{"class":174},[164,340,341],{"class":305},"\u002F\u002F UQAcPB8EuQQwVzKX2UynNmE1nPbAziMowreDYObVdeyiCtug\n",[253,343,344,345,348],{},"Why v4r2 by default? Ledger and Trust Wallet deploy it, and most wallets on chain still run it. Tonkeeper's newer W5 is ",[161,346,347],{},"v5r1",".",[253,350,351],{},"Found a puzzle address that matches none of them? Try the other two contracts first. Then start doubting the key.",[149,353,355],{"id":354},"bounceable-or-not","Bounceable or not",[253,357,358],{},"Same account, two spellings. That's TON's user-friendly form.",[154,360,362],{"className":156,"code":361,"language":158,"meta":159,"style":159},"ton.getAddress(publicKey, \"v4r2\"); \u002F\u002F UQDxrCm53vVUKOIgj1f3IiyjLDYLvaBR9-D5ZxVdH5nXVMEH\nton.getAddress(publicKey, \"v4r2-bounceable\"); \u002F\u002F EQDxrCm53vVUKOIgj1f3IiyjLDYLvaBR9-D5ZxVdH5nXVJzC\n",[161,363,364,380],{"__ignoreMap":159},[164,365,366,368,370,372,375,377],{"class":166,"line":167},[164,367,296],{"class":174},[164,369,299],{"class":207},[164,371,315],{"class":174},[164,373,374],{"class":181},"\"v4r2\"",[164,376,321],{"class":174},[164,378,379],{"class":305},"\u002F\u002F UQDxrCm53vVUKOIgj1f3IiyjLDYLvaBR9-D5ZxVdH5nXVMEH\n",[164,381,382,384,386,388,391,393],{"class":166,"line":188},[164,383,296],{"class":174},[164,385,299],{"class":207},[164,387,315],{"class":174},[164,389,390],{"class":181},"\"v4r2-bounceable\"",[164,392,321],{"class":174},[164,394,395],{"class":305},"\u002F\u002F EQDxrCm53vVUKOIgj1f3IiyjLDYLvaBR9-D5ZxVdH5nXVJzC\n",[253,397,398,399,402,403,406],{},"One flag byte up front, then the workchain, the 32-byte hash and a CRC16. Base64url on top, 48 characters. The flag tells a sender what to do when the wallet isn't deployed yet. ",[161,400,401],{},"EQ"," bounces the coins back, ",[161,404,405],{},"UQ"," lets them land.",[253,408,409,410,412,413,416,417,419,420,423,424,348],{},"Wallet apps show ",[161,411,405],{}," these days, so that's what keys writes. Add ",[161,414,415],{},"-bounceable"," for the ",[161,418,401],{}," one. Testnet sets one more bit, and the prefixes turn into ",[161,421,422],{},"0Q"," and ",[161,425,426],{},"kQ",[253,428,429,432,433,436,437,440,441,444],{},[161,430,431],{},"validateAddress"," takes all of it. Raw ",[161,434,435],{},"0:"," and hex, both flags, either base64 alphabet, masterchain ",[161,438,439],{},"-1:"," too. The checksum has to hold. A testnet address on a mainnet instance comes back ",[161,442,443],{},"false",", and the other way round as well.",[149,446,448],{"id":447},"tonkeepers-24-words","Tonkeeper's 24 words",[253,450,451],{},"They look like BIP39. Same English list, 24 words. They're not, and that's the fun part.",[253,453,454,455,458,459,348],{},"There's no checksum word. TON hashes the whole phrase with HMAC-SHA512, stretches it under ",[161,456,457],{},"TON seed version",", and wants the first byte to be zero. One phrase in 256 passes. The key comes from another PBKDF2, 100,000 rounds under ",[161,460,461],{},"TON default seed",[154,463,465],{"className":156,"code":464,"language":158,"meta":159,"style":159},"const phrase =\n  \"open you repeat drift approve view between cover myth feed rice cloud \" +\n  \"library index chase crime minute roast vault error kid abandon velvet vacuum\";\n\nconst wallet = ton.deriveSeedWallet(phrase);\nwallet.keys.public; \u002F\u002F fa86305ed66920ddc1b041db6ba756147b7e627d5bcffbe5cd2bfd0039fa9152\nwallet.address; \u002F\u002F UQDxrCm53vVUKOIgj1f3IiyjLDYLvaBR9-D5ZxVdH5nXVMEH\n",[161,466,467,477,485,492,496,514,523],{"__ignoreMap":159},[164,468,469,471,474],{"class":166,"line":167},[164,470,198],{"class":170},[164,472,473],{"class":174}," phrase ",[164,475,476],{"class":170},"=\n",[164,478,479,482],{"class":166,"line":188},[164,480,481],{"class":181},"  \"open you repeat drift approve view between cover myth feed rice cloud \"",[164,483,484],{"class":170}," +\n",[164,486,487,490],{"class":166,"line":195},[164,488,489],{"class":181},"  \"library index chase crime minute roast vault error kid abandon velvet vacuum\"",[164,491,185],{"class":174},[164,493,494],{"class":166,"line":225},[164,495,192],{"emptyLinePlaceholder":191},[164,497,498,500,503,505,508,511],{"class":166,"line":327},[164,499,198],{"class":170},[164,501,502],{"class":174}," wallet ",[164,504,204],{"class":170},[164,506,507],{"class":174}," ton.",[164,509,510],{"class":207},"deriveSeedWallet",[164,512,513],{"class":174},"(phrase);\n",[164,515,517,520],{"class":166,"line":516},6,[164,518,519],{"class":174},"wallet.keys.public; ",[164,521,522],{"class":305},"\u002F\u002F fa86305ed66920ddc1b041db6ba756147b7e627d5bcffbe5cd2bfd0039fa9152\n",[164,524,526,529],{"class":166,"line":525},7,[164,527,528],{"class":174},"wallet.address; ",[164,530,379],{"class":305},[253,532,533,534,537,538,541],{},"Case and whitespace don't matter, the way ",[161,535,536],{},"@ton\u002Fcrypto"," reads it. The wallet takes ",[161,539,540],{},"addressType"," like everywhere else.",[253,543,544],{},"Shuffled words fail the check on that first byte. So do BIP39 phrases, almost always. A word off the list throws with its position, never the word. A phrase locked with a password throws too, and says so. keys doesn't take TON passwords yet.",[253,546,547],{},"And those 100,000 rounds? About half a second. TON wanted brute force to hurt, and it does.",[149,549,551],{"id":550},"bip39-words","BIP39 words",[253,553,554],{},"Some wallets import a plain BIP39 phrase for TON. They walk SLIP-10 on ed25519 under coin type 607, every level hardened. Which levels? Depends who you ask.",[154,556,558],{"className":156,"code":557,"language":158,"meta":159,"style":159},"ton.getDerivationPath(); \u002F\u002F m\u002F44'\u002F607'\u002F0'\nton.getDerivationPath({ account: 1 }); \u002F\u002F m\u002F44'\u002F607'\u002F1'\n\nton.deriveHDWallet(\n  \"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about\",\n  { path: \"m\u002F44'\u002F607'\u002F0'\" },\n).address;\n\u002F\u002F UQAzWZa6nM5mJev91wGc7VCSfBoIsYRqKJpV78N8Add9-RKY\n",[161,559,560,573,585,589,599,607,618,623],{"__ignoreMap":159},[164,561,562,564,567,570],{"class":166,"line":167},[164,563,296],{"class":174},[164,565,566],{"class":207},"getDerivationPath",[164,568,569],{"class":174},"(); ",[164,571,572],{"class":305},"\u002F\u002F m\u002F44'\u002F607'\u002F0'\n",[164,574,575,577,579,582],{"class":166,"line":188},[164,576,296],{"class":174},[164,578,566],{"class":207},[164,580,581],{"class":174},"({ account: 1 }); ",[164,583,584],{"class":305},"\u002F\u002F m\u002F44'\u002F607'\u002F1'\n",[164,586,587],{"class":166,"line":195},[164,588,192],{"emptyLinePlaceholder":191},[164,590,591,593,596],{"class":166,"line":225},[164,592,296],{"class":174},[164,594,595],{"class":207},"deriveHDWallet",[164,597,598],{"class":174},"(\n",[164,600,601,604],{"class":166,"line":327},[164,602,603],{"class":181},"  \"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about\"",[164,605,606],{"class":174},",\n",[164,608,609,612,615],{"class":166,"line":516},[164,610,611],{"class":174},"  { path: ",[164,613,614],{"class":181},"\"m\u002F44'\u002F607'\u002F0'\"",[164,616,617],{"class":174}," },\n",[164,619,620],{"class":166,"line":525},[164,621,622],{"class":174},").address;\n",[164,624,626],{"class":166,"line":625},8,[164,627,628],{"class":305},"\u002F\u002F UQAzWZa6nM5mJev91wGc7VCSfBoIsYRqKJpV78N8Add9-RKY\n",[253,630,631,632,634,635,638,639,348],{},"Trust Wallet and Coin Wallet stop at the account, so that's what ",[161,633,566],{}," writes. Ledger goes three levels deeper, ",[161,636,637],{},"m\u002F44'\u002F607'\u002F0'\u002F0'\u002F{account}'\u002F0'",". Pass that one as ",[161,640,641],{},"path",[253,643,644,645,647,648,650],{},"Tonkeeper's 24 words in ",[161,646,595],{}," fail BIP39's checksum. The error then points you at ",[161,649,510],{},", instead of just shrugging.",[149,652,654],{"id":653},"signing-a-message","Signing a message",[253,656,657],{},"Raw ed25519 over the message bytes, like Solana and NEAR.",[154,659,661],{"className":156,"code":660,"language":158,"meta":159,"style":159},"const signature = ton.signMessage(\"ton me\", { privateKey: wallet.keys.private });\nton.verifyMessage(\"ton me\", { signature, publicKey: wallet.keys.public }); \u002F\u002F true\n",[161,662,663,685],{"__ignoreMap":159},[164,664,665,667,670,672,674,677,679,682],{"class":166,"line":167},[164,666,198],{"class":170},[164,668,669],{"class":174}," signature ",[164,671,204],{"class":170},[164,673,507],{"class":174},[164,675,676],{"class":207},"signMessage",[164,678,211],{"class":174},[164,680,681],{"class":181},"\"ton me\"",[164,683,684],{"class":174},", { privateKey: wallet.keys.private });\n",[164,686,687,689,692,694,696,699],{"class":166,"line":188},[164,688,296],{"class":174},[164,690,691],{"class":207},"verifyMessage",[164,693,211],{"class":174},[164,695,681],{"class":181},[164,697,698],{"class":174},", { signature, publicKey: wallet.keys.public }); ",[164,700,701],{"class":305},"\u002F\u002F true\n",[253,703,704,705,708,709,711,712,715,716,718],{},"That's what ",[161,706,707],{},"sign"," in ",[161,710,536],{}," writes too. TON Connect's ",[161,713,714],{},"signData"," wraps the message in its own envelope first, so a wallet's ",[161,717,714],{}," signature won't check out here.",[149,720,722],{"id":721},"where-these-vectors-come-from","Where these vectors come from",[253,724,725,726,728,729,732,733,736],{},"The phrase and every address above come from ",[161,727,536],{}," 3.3.0 and ",[161,730,731],{},"@ton\u002Fton"," 16.3.0, frozen in the tests. Three deployed mainnet wallets back them up. Their keys came from ",[161,734,735],{},"get_public_key"," on chain, and keys lands on each account.",[149,738,740],{"id":739},"agents","Agents",[253,742,743,744,747,748,751,752,755,756,758,759,762,763,766,767,770],{},"On ",[161,745,746],{},"chain: \"ton\""," the ",[161,749,750],{},"privateKey"," of ",[161,753,754],{},"keys_wallet_derive"," takes the 24 words as well as hex. ",[161,757,540],{}," picks the contract and the spelling. ",[161,760,761],{},"keys_hd_wallet_derive"," takes BIP39 words, and refuses Tonkeeper's with a pointer back. ",[161,764,765],{},"keys_hd_wallet_scan"," walks ",[161,768,769],{},"m\u002F44'\u002F607'\u002F{index}'"," and Ledger's path, both on v4r2. Any spelling of the target matches, raw included.",[149,772,774],{"id":773},"where-it-lives","Where it lives",[253,776,777,780,781,784,785,788,789,792,793,796,797,348],{},[161,778,779],{},"src\u002Fblockchains\u002Fton.ts",", with the address in ",[161,782,783],{},"src\u002Futils\u002Fton-address.ts"," and the 24 words in ",[161,786,787],{},"src\u002Futils\u002Fton-mnemonic.ts",". No BOC parser in here. The address only needs the depth and hash of each contract's code cell, so those two numbers are all keys keeps. SHA-256, HMAC, PBKDF2 and CRC16 come from ",[161,790,791],{},"@agntn\u002Fhashes",", base64 from ",[161,794,795],{},"@agntn\u002Fencodings",", ed25519 from ",[161,798,799],{},"@noble\u002Fcurves",[801,802,803],"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":159,"searchDepth":188,"depth":188,"links":805},[806,807,808,809,810,811,812,813,814],{"id":151,"depth":188,"text":152},{"id":258,"depth":188,"text":259},{"id":354,"depth":188,"text":355},{"id":447,"depth":188,"text":448},{"id":550,"depth":188,"text":551},{"id":653,"depth":188,"text":654},{"id":721,"depth":188,"text":722},{"id":739,"depth":188,"text":740},{"id":773,"depth":188,"text":774},"TON wallets from Tonkeeper's 24 words or from BIP39. Addresses for three wallet contracts in both spellings.","md",null,{"icon":819},"i-token-ton",{"title":821,"description":815},"TON wallet addresses from 24 words and BIP39","juTd8mkBqFotWS1OP91Ze5RpiDD3pGNqlvlI_w7yf70",[824,826],{"title":116,"path":117,"stem":118,"description":825,"children":-1},"ed25519 or secp256k1 on one chain. Blake2b over a flag byte and the public key.",{"title":124,"path":125,"stem":126,"description":827,"children":-1},"secp256k1 with Ethereum's 20 byte hash wrapped in base58check so every address starts with T.",1792504328150]