UNPKG

turtlecoin-cryptonote-util

Version:

![image](https://user-images.githubusercontent.com/34389545/35821974-62e0e25c-0a70-11e8-87dd-2cfffeb6ed47.png)

148 lines (116 loc) 8.99 kB
// Copyright (c) 2020, The TurtleCoin Developers // // Please see the included LICENSE file for more information. import CryptoNoteUtils from '../typescript'; import {describe, it} from 'mocha'; import * as assert from 'assert'; const block = { blocktemplate: '0500b4318c1249164393f7b9d691e60aba81ca9bbffb9e0b23e6b01c93d9c621ab800000b5f9abe60500000000000' + '0000000000000000000000000000000000000000000000000000000000000010000000023032100000000000000000000000000000' + '000000000000000000000000000000000000001b9fe5801ff91fe58070802959f9d01c4cbd664e7c937687e7ae847f75745614ba4a' + '11a6f5c0b25a5ca42c314026840ba5dc6c84a533d005f0a6f9758c4eb4d19bffa3b4a73547596dac17b7d169003022f88b7b85f42c' + '789721e7ee44bded4b6e1e48f7fb9bb73dc87cda264adf06a54f02e02175cea7cf09b914749c650b9321678d3f0e4390cad20ac689' + '6be7ac14ba4f31ab0ea01021192fdc86fd815642850c0f50bc11df8ba1d39581d2c0642aa83f72f1c3fb22580ea3002c28a03fb9b3' + 'b7f6e4f9cdf2e74e93c8282580d8134722302b9978cdc3a35f39980897a02a4978ee1742da6f77791f065326922ff8c713687d2b52' + '215ce7911b08922a7602901296929051bf0b258b717ffdca80c8b0822063c9d3f70f0dbed9b3f2e0aca2fa1020600000000000012f' + '6b48f1800c368e046252e50165620fbb155176d17ddfdb98fd3227237760cf579af90593ec64a4a5549bd219969dc9aa1aac2dc3ea' + 'b529c90b2f8c20221f99f02bdfb9a7efb5e5e85b710ef442b3cc82431173db142947a4f755a22f45915e5f2d53027a4aee505305c7' + 'cde822f960578417779ef71c1c8b611e95f1643fd125a39df66f40ce82794c9debc342381f26763c80968f8bf8e5378b433c583a60' + '78348457ebe6ad61e5487ac3bebe22e03c46d9c894a511561ffbe9612809c17207493941d607b152f4ce193f828085ee8afcc0a351' + 'a9cecac0f01b2729df67af831637f76a8430848d86beb643df918af6cc554a8d0b42899671ee02cfbe64905b4458647a90a50aa307' + 'be48f3db57ff7f5446926ee70cee0c0cf7ad9021de727b2f97b5e2f0fd0103b24725d0c11ddd876de27a7b837bdd43eb4d9ca47988' + '3ad2dcd853ece92e6a7544b24e44051411e6b913760b9d997ca986985b92d51ccbc5708f0cd93c0ce2d1aea46a6744cc81a3df394c' + 'd099518cb3c3a5fa43e187c9d72bc3a245256fa60b450411b56d2258d4001b6133f58a5d48af0cc12af652c202b3c9de3f42602650' + '0c493c075340ca713a49843db16bda542fd76fb597914e1c975a70d12971baf70b8f7f6f452fd669f3cc00d0a0f36a3312f7c51cad' + 'f24cac9c24841eeaa742b5d1e74a750e5763afbd2a75e341edb4439801ac665dd0a3b16cc648a651546c7a3633f0a0274bb3815d6b' + 'da05e12fb7cbb908ceb582590a84a30ba6043178279343f5107713390b8e2ca2a8723ee7e5855c6af674bbd9b5a', difficulty: 9796275295, height: 1457937, reservedOffset: 411 }; const block_template_new = { blocktemplate: '0600b202c10839114a0beff7a198f58c8bb98dcb7bece23fe470f8932a7f408d966b0000ff97e5f9050000000000000' + '0000000000000000000000000000000000000000000000000000000000001000000002303210000000000000000000000000000000' + '0000000000000000000000000000000000001ecb4ab0101ffc4b4ab0106060295cfad0503908a8b7309d7167dcff4867bd31cf02a5' + '888bfb3a3c33fed81991d64029fd4040457feb01a915b1791a0b01e32e26414b105f500660edd9bbf4092c08ae80702101fe42efb6' + '5a694c3508758af2b05184858827f8b3494f2b29eb288d4d7bc19c0b80202d903c42269db0d5c5f961d717bf8f467582cb2ac5c2bb' + '189d57743d97b2e73e0e0dc2a021abb1f568a7aa4f0ba2ed2238c495ebaa0a8012abfd63fcb31836a11dcfd94c580897a02807910d' + '7993d5c21e367f466918da568fb3a8ab96ccaed732000087a2535647f8c0101651ba7aa2bf4fd745ce1ab683c7d6ab5a9db5295112' + '5627d437b3cb91324497f0706000000000000045d0dd5b208bf363b00d9e941197f1bea7df5336ee70a854ffdc42c13caca704505a' + '9f0d9e66a156ead440c72e168b4a4e656e1822593537898b9d6e93a3267583006e31a73a4fc42368ff94bcdd92e02bffd144c934c3' + '48b5d1015b7b1354741fa0100', difficulty: 11396601479, height: 2808388, reservedOffset: 378 } const expected_mining_blob = '0100b5f9abe605b4318c1249164393f7b9d691e60aba81ca9bbffb9e0b23e6b01c93d9c621ab800000000' + '04b27c162bc89b0bdfa0db8b5c99977943caf754bb6181d8e1bafc6af2ab0b0bb01'; const expected_merged_block = '0500b4318c1249164393f7b9d691e60aba81ca9bbffb9e0b23e6b01c93d9c621ab800100b5f9abe605b4' + '318c1249164393f7b9d691e60aba81ca9bbffb9e0b23e6b01c93d9c621ab80641c00000101000000230321008a7f7239a53ead2db2fc10' + '62a898c1af301e919e2f26e13a568176ba7f1a0e1f01b9fe5801ff91fe58070802959f9d01c4cbd664e7c937687e7ae847f75745614ba4' + 'a11a6f5c0b25a5ca42c314026840ba5dc6c84a533d005f0a6f9758c4eb4d19bffa3b4a73547596dac17b7d169003022f88b7b85f42c789' + '721e7ee44bded4b6e1e48f7fb9bb73dc87cda264adf06a54f02e02175cea7cf09b914749c650b9321678d3f0e4390cad20ac6896be7ac1' + '4ba4f31ab0ea01021192fdc86fd815642850c0f50bc11df8ba1d39581d2c0642aa83f72f1c3fb22580ea3002c28a03fb9b3b7f6e4f9cdf' + '2e74e93c8282580d8134722302b9978cdc3a35f39980897a02a4978ee1742da6f77791f065326922ff8c713687d2b52215ce7911b08922' + 'a7602901296929051bf0b258b717ffdca80c8b0822063c9d3f70f0dbed9b3f2e0aca2fa1020600000000000012f6b48f1800c368e04625' + '2e50165620fbb155176d17ddfdb98fd3227237760cf579af90593ec64a4a5549bd219969dc9aa1aac2dc3eab529c90b2f8c20221f99f02' + 'bdfb9a7efb5e5e85b710ef442b3cc82431173db142947a4f755a22f45915e5f2d53027a4aee505305c7cde822f960578417779ef71c1c8' + 'b611e95f1643fd125a39df66f40ce82794c9debc342381f26763c80968f8bf8e5378b433c583a6078348457ebe6ad61e5487ac3bebe22e' + '03c46d9c894a511561ffbe9612809c17207493941d607b152f4ce193f828085ee8afcc0a351a9cecac0f01b2729df67af831637f76a843' + '0848d86beb643df918af6cc554a8d0b42899671ee02cfbe64905b4458647a90a50aa307be48f3db57ff7f5446926ee70cee0c0cf7ad902' + '1de727b2f97b5e2f0fd0103b24725d0c11ddd876de27a7b837bdd43eb4d9ca479883ad2dcd853ece92e6a7544b24e44051411e6b913760' + 'b9d997ca986985b92d51ccbc5708f0cd93c0ce2d1aea46a6744cc81a3df394cd099518cb3c3a5fa43e187c9d72bc3a245256fa60b45041' + '1b56d2258d4001b6133f58a5d48af0cc12af652c202b3c9de3f426026500c493c075340ca713a49843db16bda542fd76fb597914e1c975' + 'a70d12971baf70b8f7f6f452fd669f3cc00d0a0f36a3312f7c51cadf24cac9c24841eeaa742b5d1e74a750e5763afbd2a75e341edb4439' + '801ac665dd0a3b16cc648a651546c7a3633f0a0274bb3815d6bda05e12fb7cbb908ceb582590a84a30ba6043178279343f5107713390b8' + 'e2ca2a8723ee7e5855c6af674bbd9b5a' const expected_block_id = '8e466960ef1cfffdcac94f8b0595d9edbcd54559649a1bfc934141f9ab013e9a'; describe('CryptoNote Utilities Tests', async () => { it('Address Prefix Decoding', async () => { const address = Buffer.from( 'TRTLuxN6FVALYxeAEKhtWDYNS9Vd9dHVp3QHwjKbo76ggQKgUfVjQp8iPypECCy3MwZVyu89k1fWE2Ji6EKedbrqECHHWouZN6g'); const expected_prefix = 3914525; const prefix = await CryptoNoteUtils.address_decode(address); assert(prefix === expected_prefix); }) it('Calculates Block ID', async () => { const block = Buffer.from(expected_merged_block, 'hex'); const id = await CryptoNoteUtils.get_block_id(block); assert(id.toString('hex') === expected_block_id); }) describe('Pre Prove Coinbase TX Claiming', async () => { it('To Mining Blob', async () => { const blob = Buffer.from(block.blocktemplate, 'hex'); const miningBlob = await CryptoNoteUtils.convert_blob(blob); assert(miningBlob.toString('hex') === expected_mining_blob); }) it('Merge Blocks: Nonce Number', async () => { const blob = Buffer.from(block.blocktemplate, 'hex'); const merged = await CryptoNoteUtils.construct_block_blob(blob, 0x1c64); assert(merged.toString('hex') === expected_merged_block); }) it('Merge Blocks: Nonce Buffer', async () => { const blob = Buffer.from(block.blocktemplate, 'hex'); const nonce = Buffer.alloc(4); nonce.writeUInt32LE(0x1c64, 0); const merged = await CryptoNoteUtils.construct_block_blob(blob, nonce); assert(merged.toString('hex') === expected_merged_block); }) }); describe('Post Prove Coinbase TX Claiming', async () => { it('Block ID', async() => { const blob = Buffer.from(block_template_new.blocktemplate, 'hex'); const id = await CryptoNoteUtils.get_block_id(blob); const expected_id = '12cea80912fa3eb82aebe32d44eb35ea4e5d7e3dbca54b7fc0bd980e86abacfb'; assert(id.toString('hex') === expected_id); }) it('To Mining Blob', async () => { const blob = Buffer.from(block_template_new.blocktemplate, 'hex'); const merged = await CryptoNoteUtils.convert_blob(blob); const expected_merged = '0100ff97e5f905b202c10839114a0beff7a198f58c8bb98dcb7bece23fe470f8932a7f408d966b00000000da12ed6f1ded6' + '1ada5c823311905f0e30d4f4884dba13b811e837f5fa55b07af01'; assert(merged.toString('hex') === expected_merged); }) }); })