[{"data":1,"prerenderedAt":424},["ShallowReactive",2],{"navigation_docs":3,"-blockchains-tron":72,"-blockchains-tron-surround":421},[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":68,"body":74,"description":414,"extension":415,"links":416,"meta":417,"navigation":148,"path":69,"seo":419,"stem":70,"__hash__":420},"docs\u002F2.blockchains\u002Ftron.md",{"type":75,"value":76,"toc":407},"minimark",[77,84,89,185,189,200,251,261,265,309,318,322,372,378,382,403],[78,79],"chain-facts",{"coin":80,"curve":81,"driver":82,"formats":83},"195","secp256k1","tron","base58check",[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 tronChain = useBlockchain(await blockchains.tron()());\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"," tronChain",[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",[190,191,192,193,196,197,179],"p",{},"Keccak-256 of the public key, last 20 bytes, exactly like Ethereum. Then a version byte ",[97,194,195],{},"0x41"," in front and base58check around it, which is why every TRON address starts with ",[97,198,199],{},"T",[90,201,203],{"className":92,"code":202,"language":94,"meta":95,"style":95},"const publicKey = tronChain.getKeyPublic(privateKey);\ntronChain.getAddress(publicKey); \u002F\u002F TJCnKsPa7y5okkXvQAidZBzqx3QyQ6sxMW\n",[97,204,205,229],{"__ignoreMap":95},[100,206,207,209,212,214,216,218,221,223,226],{"class":102,"line":103},[100,208,156],{"class":155},[100,210,211],{"class":159}," publicKey",[100,213,163],{"class":155},[100,215,160],{"class":176},[100,217,179],{"class":110},[100,219,220],{"class":166},"getKeyPublic",[100,222,169],{"class":110},[100,224,225],{"class":176},"privateKey",[100,227,228],{"class":110},");\n",[100,230,231,234,236,239,241,244,247],{"class":102,"line":145},[100,232,233],{"class":176},"tronChain",[100,235,179],{"class":110},[100,237,238],{"class":166},"getAddress",[100,240,169],{"class":110},[100,242,243],{"class":176},"publicKey",[100,245,246],{"class":110},"); ",[100,248,250],{"class":249},"sjhu3","\u002F\u002F TJCnKsPa7y5okkXvQAidZBzqx3QyQ6sxMW\n",[190,252,253,254,256,257,260],{},"Strip the base58check and swap ",[97,255,195],{}," for ",[97,258,259],{},"0x",", and you have the Ethereum address of the same key. That is a nice trick for debugging and a bad idea for anything else.",[85,262,264],{"id":263},"testnet","Testnet",[90,266,268],{"className":92,"code":267,"language":94,"meta":95,"style":95},"const shasta = useBlockchain(await blockchains.tron({ network: \"testnet\" })());\n",[97,269,270],{"__ignoreMap":95},[100,271,272,274,277,279,281,283,285,287,289,291,294,297,300,302,304,306],{"class":102,"line":103},[100,273,156],{"class":155},[100,275,276],{"class":159}," shasta",[100,278,163],{"class":155},[100,280,115],{"class":166},[100,282,169],{"class":110},[100,284,173],{"class":172},[100,286,121],{"class":176},[100,288,179],{"class":110},[100,290,82],{"class":166},[100,292,293],{"class":110},"({",[100,295,296],{"class":114}," network",[100,298,299],{"class":110},":",[100,301,132],{"class":131},[100,303,263],{"class":135},[100,305,139],{"class":131},[100,307,308],{"class":110}," })());\n",[190,310,311,312,314,315,317],{},"TRON testnets use the same ",[97,313,195],{}," prefix as mainnet, so testnet addresses also start with ",[97,316,199],{},". The driver accepts the option for symmetry with the other chains, but there is no way to tell a Shasta address from a mainnet one by looking at it. Do not rely on the string.",[85,319,321],{"id":320},"validation","Validation",[90,323,325],{"className":92,"code":324,"language":94,"meta":95,"style":95},"tronChain.validateAddress(\"TJCnKsPa7y5okkXvQAidZBzqx3QyQ6sxMW\"); \u002F\u002F true\ntronChain.validateAddress(\"1JCnKsPa7y5okkXvQAidZBzqx3QyQ6sxMW\"); \u002F\u002F false, wrong prefix\n",[97,326,327,350],{"__ignoreMap":95},[100,328,329,331,333,336,338,340,343,345,347],{"class":102,"line":103},[100,330,233],{"class":176},[100,332,179],{"class":110},[100,334,335],{"class":166},"validateAddress",[100,337,169],{"class":110},[100,339,139],{"class":131},[100,341,342],{"class":135},"TJCnKsPa7y5okkXvQAidZBzqx3QyQ6sxMW",[100,344,139],{"class":131},[100,346,246],{"class":110},[100,348,349],{"class":249},"\u002F\u002F true\n",[100,351,352,354,356,358,360,362,365,367,369],{"class":102,"line":145},[100,353,233],{"class":176},[100,355,179],{"class":110},[100,357,335],{"class":166},[100,359,169],{"class":110},[100,361,139],{"class":131},[100,363,364],{"class":135},"1JCnKsPa7y5okkXvQAidZBzqx3QyQ6sxMW",[100,366,139],{"class":131},[100,368,246],{"class":110},[100,370,371],{"class":249},"\u002F\u002F false, wrong prefix\n",[190,373,374,375,377],{},"Base58check decode, version byte ",[97,376,195],{},", 21 bytes total. The checksum catches typos, the prefix catches pasted Bitcoin addresses.",[85,379,381],{"id":380},"signing","Signing",[190,383,384,387,388,391,392,395,396,399,400,402],{},[97,385,386],{},"signMessage"," reuses the EVM signing code, so the message gets the ",[97,389,390],{},"\"\\x19Ethereum Signed Message:\\n\""," preamble before Keccak-256 and secp256k1. That is not the ",[97,393,394],{},"\"\\x19TRON Signed Message:\\n\""," preamble TronLink uses for its own signing, so a signature from here will not verify in a TRON wallet and the other way round. ",[97,397,398],{},"verifyMessage"," in this package checks what ",[97,401,386],{}," here produces.",[404,405,406],"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":408},[409,410,411,412,413],{"id":87,"depth":145,"text":88},{"id":187,"depth":145,"text":188},{"id":263,"depth":145,"text":264},{"id":320,"depth":145,"text":321},{"id":380,"depth":145,"text":381},"secp256k1 with Ethereum's 20 byte hash wrapped in base58check, so every address starts with T.","md",null,{"icon":418},"i-lucide-zap",{"title":68,"description":414},"KlwploliYaZDLTlhii8fNfOi8cwK0OTflYnc6ODtU7U",[422,416],{"title":64,"path":65,"stem":66,"description":423,"children":-1},"ed25519 or secp256k1 on one chain. Blake2b over a flag byte and the public key.",1788428715659]