[{"data":1,"prerenderedAt":637},["ShallowReactive",2],{"navigation_docs":3,"-blockchains-decred":80,"-blockchains-decred-surround":632},[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":79},"Blockchains","\u002Fblockchains","2.blockchains\u002F0.index",[37,39,43,47,51,55,59,63,67,71,75],{"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},"Decred","\u002Fblockchains\u002Fdecred","2.blockchains\u002Fdecred",{"title":60,"path":61,"stem":62},"Ethereum","\u002Fblockchains\u002Fethereum","2.blockchains\u002Fethereum",{"title":64,"path":65,"stem":66},"Litecoin","\u002Fblockchains\u002Flitecoin","2.blockchains\u002Flitecoin",{"title":68,"path":69,"stem":70},"Solana","\u002Fblockchains\u002Fsolana","2.blockchains\u002Fsolana",{"title":72,"path":73,"stem":74},"Sui","\u002Fblockchains\u002Fsui","2.blockchains\u002Fsui",{"title":76,"path":77,"stem":78},"TRON","\u002Fblockchains\u002Ftron","2.blockchains\u002Ftron","i-lucide-boxes",{"id":81,"title":56,"body":82,"description":625,"extension":626,"links":627,"meta":628,"navigation":156,"path":57,"seo":630,"stem":58,"__hash__":631},"docs\u002F2.blockchains\u002Fdecred.md",{"type":83,"value":84,"toc":617},"minimark",[85,92,97,234,238,242,249,301,392,406,410,460,463,467,477,570,581,585,599,603,613],[86,87],"chain-facts",{"coin":88,"curve":89,"driver":90,"formats":91},"42","secp256k1","decred","legacy ECDSA P2PKH",[93,94,96],"h2",{"id":95},"load-it","Load it",[98,99,104],"pre",{"className":100,"code":101,"language":102,"meta":103,"style":103},"language-js shiki shiki-themes github-light github-light poimandres","import { useBlockchain, blockchains } from \"@agntn\u002Fkeys\";\n\nconst decredChain = useBlockchain(await blockchains.decred()());\nconst testnet = useBlockchain(await blockchains.decred({ network: \"testnet\" })());\n","js","",[105,106,107,151,158,193],"code",{"__ignoreMap":103},[108,109,112,116,120,124,127,130,133,137,141,145,148],"span",{"class":110,"line":111},"line",1,[108,113,115],{"class":114},"sP0CR","import",[108,117,119],{"class":118},"sKlNE"," {",[108,121,123],{"class":122},"snHMy"," useBlockchain",[108,125,126],{"class":118},",",[108,128,129],{"class":122}," blockchains",[108,131,132],{"class":118}," }",[108,134,136],{"class":135},"stCPd"," from",[108,138,140],{"class":139},"scVjq"," \"",[108,142,144],{"class":143},"sQ7BG","@agntn\u002Fkeys",[108,146,147],{"class":139},"\"",[108,149,150],{"class":118},";\n",[108,152,154],{"class":110,"line":153},2,[108,155,157],{"emptyLinePlaceholder":156},true,"\n",[108,159,161,165,169,172,175,178,182,185,188,190],{"class":110,"line":160},3,[108,162,164],{"class":163},"s1TYA","const",[108,166,168],{"class":167},"saoiD"," decredChain",[108,170,171],{"class":163}," =",[108,173,123],{"class":174},"sULi6",[108,176,177],{"class":118},"(",[108,179,181],{"class":180},"sZW6a","await",[108,183,129],{"class":184},"spVlQ",[108,186,187],{"class":118},".",[108,189,90],{"class":174},[108,191,192],{"class":118},"()());\n",[108,194,196,198,201,203,205,207,209,211,213,215,218,221,224,226,229,231],{"class":110,"line":195},4,[108,197,164],{"class":163},[108,199,200],{"class":167}," testnet",[108,202,171],{"class":163},[108,204,123],{"class":174},[108,206,177],{"class":118},[108,208,181],{"class":180},[108,210,129],{"class":184},[108,212,187],{"class":118},[108,214,90],{"class":174},[108,216,217],{"class":118},"({",[108,219,220],{"class":122}," network",[108,222,223],{"class":118},":",[108,225,140],{"class":139},[108,227,228],{"class":143},"testnet",[108,230,147],{"class":139},[108,232,233],{"class":118}," })());\n",[235,236,237],"p",{},"Mainnet and testnet3 only, anything else throws in the constructor.",[93,239,241],{"id":240},"the-address","The address",[235,243,244,245,248],{},"Decred looks like Bitcoin from a distance and swaps the hash the moment you get close. ",[105,246,247],{},"RIPEMD160(BLAKE256(pubkey))",", a two byte prefix in front, then base58check with a double BLAKE-256 checksum instead of double SHA-256.",[250,251,252,268],"table",{},[253,254,255],"thead",{},[256,257,258,262,265],"tr",{},[259,260,261],"th",{},"Network",[259,263,264],{},"Prefix",[259,266,267],{},"Starts with",[269,270,271,287],"tbody",{},[256,272,273,277,282],{},[274,275,276],"td",{},"mainnet",[274,278,279],{},[105,280,281],{},"07 3f",[274,283,284],{},[105,285,286],{},"Ds",[256,288,289,291,296],{},[274,290,228],{},[274,292,293],{},[105,294,295],{},"0f 21",[274,297,298],{},[105,299,300],{},"Ts",[98,302,304],{"className":100,"code":303,"language":102,"meta":103,"style":103},"const privateKey = \"0000000000000000000000000000000000000000000000000000000000000001\";\nconst publicKey = decredChain.getKeyPublic(privateKey);\n\ndecredChain.getAddress(publicKey); \u002F\u002F DsmcYVbP1Nmag2H4AS17UTvmWXmGeA7nLDx\ntestnet.getAddress(publicKey); \u002F\u002F TsmfmUitQApgnNxQypdGd2x36djCCpDpERU\n",[105,305,306,324,348,352,374],{"__ignoreMap":103},[108,307,308,310,313,315,317,320,322],{"class":110,"line":111},[108,309,164],{"class":163},[108,311,312],{"class":167}," privateKey",[108,314,171],{"class":163},[108,316,140],{"class":139},[108,318,319],{"class":143},"0000000000000000000000000000000000000000000000000000000000000001",[108,321,147],{"class":139},[108,323,150],{"class":118},[108,325,326,328,331,333,335,337,340,342,345],{"class":110,"line":153},[108,327,164],{"class":163},[108,329,330],{"class":167}," publicKey",[108,332,171],{"class":163},[108,334,168],{"class":184},[108,336,187],{"class":118},[108,338,339],{"class":174},"getKeyPublic",[108,341,177],{"class":118},[108,343,344],{"class":184},"privateKey",[108,346,347],{"class":118},");\n",[108,349,350],{"class":110,"line":160},[108,351,157],{"emptyLinePlaceholder":156},[108,353,354,357,359,362,364,367,370],{"class":110,"line":195},[108,355,356],{"class":184},"decredChain",[108,358,187],{"class":118},[108,360,361],{"class":174},"getAddress",[108,363,177],{"class":118},[108,365,366],{"class":184},"publicKey",[108,368,369],{"class":118},"); ",[108,371,373],{"class":372},"sjhu3","\u002F\u002F DsmcYVbP1Nmag2H4AS17UTvmWXmGeA7nLDx\n",[108,375,377,379,381,383,385,387,389],{"class":110,"line":376},5,[108,378,228],{"class":184},[108,380,187],{"class":118},[108,382,361],{"class":174},[108,384,177],{"class":118},[108,386,366],{"class":184},[108,388,369],{"class":118},[108,390,391],{"class":372},"\u002F\u002F TsmfmUitQApgnNxQypdGd2x36djCCpDpERU\n",[235,393,394,395,398,399,401,402,405],{},"That's the only format. Ask for ",[105,396,397],{},"\"segwit\""," or anything else and ",[105,400,361],{}," throws a ",[105,403,404],{},"RangeError"," instead of quietly handing you a legacy address. Schnorr and Ed25519 keys, which dcrd also knows, aren't implemented.",[93,407,409],{"id":408},"validation","Validation",[98,411,413],{"className":100,"code":412,"language":102,"meta":103,"style":103},"decredChain.validateAddress(\"DsmcYVbP1Nmag2H4AS17UTvmWXmGeA7nLDx\"); \u002F\u002F true\ndecredChain.validateAddress(\"TsmfmUitQApgnNxQypdGd2x36djCCpDpERU\"); \u002F\u002F false, testnet on a mainnet driver\n",[105,414,415,438],{"__ignoreMap":103},[108,416,417,419,421,424,426,428,431,433,435],{"class":110,"line":111},[108,418,356],{"class":184},[108,420,187],{"class":118},[108,422,423],{"class":174},"validateAddress",[108,425,177],{"class":118},[108,427,147],{"class":139},[108,429,430],{"class":143},"DsmcYVbP1Nmag2H4AS17UTvmWXmGeA7nLDx",[108,432,147],{"class":139},[108,434,369],{"class":118},[108,436,437],{"class":372},"\u002F\u002F true\n",[108,439,440,442,444,446,448,450,453,455,457],{"class":110,"line":153},[108,441,356],{"class":184},[108,443,187],{"class":118},[108,445,423],{"class":174},[108,447,177],{"class":118},[108,449,147],{"class":139},[108,451,452],{"class":143},"TsmfmUitQApgnNxQypdGd2x36djCCpDpERU",[108,454,147],{"class":139},[108,456,369],{"class":118},[108,458,459],{"class":372},"\u002F\u002F false, testnet on a mainnet driver\n",[235,461,462],{},"Base58 decode with the BLAKE-256 checksum, 22 bytes of payload, and both prefix bytes have to match the driver's network. A Bitcoin address fails at the checksum before the prefix even gets a look.",[93,464,466],{"id":465},"mnemonics","Mnemonics",[235,468,469,472,473,476],{},[105,470,471],{},"deriveHDWallet"," throws. dcrd's HD derivation strips leading zero bytes from keys where BIP32 keeps them, so a plain BIP32 walk lands on the wrong key for some paths and looks perfectly fine doing it. A driver that's silently wrong is worse than one that refuses, so it refuses. ",[105,474,475],{},"deriveWallet"," with a private key works as usual, and so does WIF:",[98,478,480],{"className":100,"code":479,"language":102,"meta":103,"style":103},"import { encodeWIF, decodeWIF } from \"@agntn\u002Fkeys\";\n\nencodeWIF(privateKey, { chain: \"decred\" }); \u002F\u002F PmQdGRXNZdAgEqwDZMLAF2XSQRLFeSFKi4HLPbdW3kC66HegjYtxq\ndecodeWIF(wif, { chain: \"decred\" }).privateKey;\n",[105,481,482,508,512,541],{"__ignoreMap":103},[108,483,484,486,488,491,493,496,498,500,502,504,506],{"class":110,"line":111},[108,485,115],{"class":114},[108,487,119],{"class":118},[108,489,490],{"class":122}," encodeWIF",[108,492,126],{"class":118},[108,494,495],{"class":122}," decodeWIF",[108,497,132],{"class":118},[108,499,136],{"class":135},[108,501,140],{"class":139},[108,503,144],{"class":143},[108,505,147],{"class":139},[108,507,150],{"class":118},[108,509,510],{"class":110,"line":153},[108,511,157],{"emptyLinePlaceholder":156},[108,513,514,517,519,521,524,527,529,531,533,535,538],{"class":110,"line":160},[108,515,516],{"class":174},"encodeWIF",[108,518,177],{"class":118},[108,520,344],{"class":184},[108,522,523],{"class":118},", {",[108,525,526],{"class":122}," chain",[108,528,223],{"class":118},[108,530,140],{"class":139},[108,532,90],{"class":143},[108,534,147],{"class":139},[108,536,537],{"class":118}," }); ",[108,539,540],{"class":372},"\u002F\u002F PmQdGRXNZdAgEqwDZMLAF2XSQRLFeSFKi4HLPbdW3kC66HegjYtxq\n",[108,542,543,546,548,551,553,555,557,559,561,563,566,568],{"class":110,"line":195},[108,544,545],{"class":174},"decodeWIF",[108,547,177],{"class":118},[108,549,550],{"class":184},"wif",[108,552,523],{"class":118},[108,554,526],{"class":122},[108,556,223],{"class":118},[108,558,140],{"class":139},[108,560,90],{"class":143},[108,562,147],{"class":139},[108,564,565],{"class":118}," }).",[108,567,344],{"class":184},[108,569,150],{"class":118},[235,571,572,573,576,577,580],{},"Decred WIF has its own layout: two prefix bytes, a scheme byte that's ",[105,574,575],{},"0x00"," for ECDSA, the key, and a single BLAKE-256 checksum. Only the compressed form exists, ",[105,578,579],{},"compressed: false"," throws.",[93,582,584],{"id":583},"signing","Signing",[235,586,587,590,591,594,595,598],{},[105,588,589],{},"\"Decred Signed Message:\\n\""," with compact size lengths in front of the preamble and the message, one round of BLAKE-256, then secp256k1. 64 bytes of ",[105,592,593],{},"r||s"," in hex, verified with ",[105,596,597],{},"verifyMessage"," on the same driver.",[93,600,602],{"id":601},"where-it-lives","Where it lives",[235,604,605,608,609,612],{},[105,606,607],{},"src\u002Fblockchains\u002Fdecred.ts",", all of it. It extends ",[105,610,611],{},"AbstractBlockchain"," directly, not the Bitcoin base, because nothing except the curve is shared.",[614,615,616],"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":103,"searchDepth":153,"depth":153,"links":618},[619,620,621,622,623,624],{"id":95,"depth":153,"text":96},{"id":240,"depth":153,"text":241},{"id":408,"depth":153,"text":409},{"id":465,"depth":153,"text":466},{"id":583,"depth":153,"text":584},{"id":601,"depth":153,"text":602},"secp256k1 with BLAKE-256 in every hash. Addresses start with Ds. No mnemonic derivation and that's on purpose.","md",null,{"icon":629},"i-token-dcr",{"title":56,"description":625},"gI9Rhd0kSE_XvCFIFOjb3EnQwrHCoUzOlW9wfpJUnbE",[633,635],{"title":52,"path":53,"stem":54,"description":634,"children":-1},"ed25519 with base and enterprise and stake addresses in bech32. Mnemonic derivation is refused on purpose.",{"title":60,"path":61,"stem":62,"description":636,"children":-1},"secp256k1 with EIP-55 checksummed addresses and personal_sign message signatures.",1789574090632]