Created
February 1, 2018 12:34
-
-
Save l3wi/75e506344648adb4aabcb7d308b74963 to your computer and use it in GitHub Desktop.
Validate PoW directly from trytes without iota.lib.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Crypto = require('iota.crypto.js') | |
// Vars | |
const trytes = `IEQJQMEBIPXMRRUMMVIRAYDGIODMLU9WBNLSAJBKMXGLBN9MSSAUDIJRYGCBBNJMTWVHTFZCUKKYQXHWCZINYARZN9PXKYUXWIGHKIYSHJVNYQUUF9YJRQZJOHLMUVBWJA9RCOXYBIGFXYWUXMSLBQWGVHFJH9BQNXAIM9HOC9WVBYZJFVDQBYMXLMLNEYSETVYBDLMVVXHUYEMZEQJARFXYVYLR9TPZQFFDKOQTKZDCWZOODEACKEWXOHABGCQLOZXWNIFMZKPQIRWHGMFPUUVBCQGX9SLJBSYUQKQLKGUAZVQHSQNIQY9UJHDCV9IEVMCD9FIRGAH9QQYCQHEXHGUBJPATWWKS9SLEPGLEPFAED99XDYLWKBAXRPKSENENWGOTFCDAYXRGDNFBZEZMDTEGUNC9DLM9J9SMOKMPBPNUTLNNOFUKFUDVXJZQJNDNLJEFZRAJWISPKRBHMJNQJFVBCYFEMXJHVSVZUXLQBNAZEU9GIVTBYHXZI9JUGJHMC9QZYOEWAAKBQZOIYRLTLMWODJLXPMPGNAQISOEODRKJJAOG99ORJPZHXUTUGDODIRNRNLGMCGDASIBVPYCVZCWAQIVGLMLNPVDPAMTCUNNMIMPZBNIRLOUZ9BDGEQFTO9NPAZK9KJZGVRGPQXGZFJ9VBWBJIUDSQGCGKTOKAAGSSJWWMHCLTKRAEWQMTCTNEBZCUMYXCA9KDGHFGHMCAYZI9IJBPZLSZPCVDXZIVIAFKVSCIFIGS9CUKYSQKJAUXBTYOJERATWBUIBGPFQLXFQMMRSPH9TJMOGQUVNMXCAQQGLSBRCMAOEKRRVCZRGTLRJHDFWHUIZUKXXJFDNKHTGEJHVKLLVIKWRSPJNHLHNWM9UJCRSKIDUYUDXKRPNDYWUZWMKLNEYMHXLBQWT9IDKHZLGCECFLQDZMOMCY9DBWTEHUOCZJMCOYUETNTHV9VUAUHODJCYGDQICZCQV9IYDQKGESHHTRD9TDMJFCUQKRDYHEOLCWC9ABEEESPZH9YFEKRAZOR9YERPSYHUNSJ9IVICNFYBJUWQO9JUTEYN9YOQASQCULXO9IGLUZUFCSWNDGSNIVDY9HLD9OUKJMFEF9TTHNU9WWHLFJJVQNKMROYYVCIEPYVAGVVIOQGY9I9MLXHQVXJTCOZMPSTIYGCIQORROPVCQDEHPM9WEUWUAXXHAERDZCLCUVLP9CJNWCGHHRKSQYYXUDBSAGATQMGBFBOFKPKNIRSNFXEKZQMICQDKXRHX9DLWZK9OKGIFXGUTVSGRAZURJDFVSBBFTSWBNAJKPAUEKNQNECDYZIILNEQF9KFWJFWZLGJRSLR9KXFKONUZLCXJAMKEDMPZ99NOHPPAAEEUWYAOOUUNBVTEGQLJJRSCENYCBJBUQRGTEWJKZVIVLULGPJZYMUHGJUIYRBVRBNCVLVYZJYZXMZGQX9PKR9GBLQEXR9NIMNBEIBIFCYLULARVFIZJRHUPUJKOXZMUHWLH9NWCTHXLUZKZITSAB9BUDRJGEVBBYCDGAULUWLOH9KKEPMCATXNTJWFETGRECAERDTCMJW9J9UU9N9EAIXSJWSGVNAJMCHUBHYEVHKXUD9MASGJJAABW9CEVCPGXKGSHKQQNYJHSLRCVOQQOIQM9FPRG99VQZCEQDNRQLP9OXIBIKPVGADGNYBMTKHNEEKKEC9CREGDYCLASU9OAGJWQKUXJFFBEBUBFS9BRVCO9JACBRCWEMGUWVTMARLCA9CPQABWRYKEFEEWHXNWBNXJZ9KZCQMRHDWOOHQGXY9ENFAUHZFZKALGTFKWLLAR9NNOXSYNLLPYSZTXZBY9VUKIOQ9OANTSDWPZNAXNHAAQDCRUNYKUXFC9MCVJ9WHFGCADAAMQUQ9VMXT9YAMWKQAFFFSXUJEJDWEFDORWKCEID9BPUFRVISYYONNNTUZJZYUBTKHZQBFBMCTPYVNENGMUJZSXQETZIJKPXAVCKYWGPPIXDMTVOGMZJYTJBMWELDX9S9QCGTWNOFADETSIHB9POOLXFCHW9SLUCOVKAEQIQXIVLELRDLWUATDPBMYTYGQCHDGASTVZWWPORIKMXJKYTGDQHEATWVSVYWLAKXOXYLYQTZGMYCGNFJ9DPWKHDYAFICUTWUX9NQFEUDQIQKFW9CAEFXYCZNMAVTOWUS99FNTS9DBUWWJWHUSPYXXQJEGDO9KXSWEENHYMGDAF9HISMSPNMTKBZNEEYYQJSWK9ETMOGFJG9NOIX9POKZCMTLD999999999999999999999999999999999999999999999999999999RJ9KTYD99B99999999C99999999G9QJBOOSY9UDEZZBX9HPEHIOJRLXGCSTIENORDH9KD9SCHOFHJXLIGGVHJZ99VUSUKFZLYVNQEQAHWLGWSXHNEGSJXRZCUF9XNXZATXPHTMFNCMBOMFMIWXEHMSLUYTUHBASYTJP9IZDOKRP9YLXTFE9G9WWBA9999BYZEUNFSSSBKAIGWPRKXRIYVIOTMO9OKWNIMTSMXGUYTGEPPW9UCDBIIYKXJOZRGFNPRPGHZBCNSZ9999999999999999999999999999999RCMXWXBJE999999999MMMMMMMMMIA999IM99999999999999999999` | |
// CURLY Hashing func. | |
const hash = (rounds, ...keys) => { | |
const curl = new Crypto.curl(rounds) | |
const key = new Int32Array(243) | |
curl.initialize() | |
keys.map(k => curl.absorb(k, 0, k.length)) | |
curl.squeeze(key, 0, 243) | |
return key | |
} | |
/// Validate Pow | |
const validatePow = (trytes, mwm) => { | |
////////////// Find MWM of TX //////////// | |
// 1. Converts the trytes to trits | |
// 2. Hash trits using Curl-p | |
// 3. Reverse the Array (Pow finds a nonce for which the resulting tx hash has a {mwm} of zeros at the end) | |
// 4. Map through the array to find the first index that is not 0 | |
const txPow = hash(81, Crypto.converter.trits(trytes)) | |
.reverse() | |
.findIndex((trit, i) => trit !== 0) | |
// Check MWM passed into the func matches the length of 0's in tx hash | |
console.log('MWM of tx: ' + txPow) | |
let pow = txPow >= mwm | |
// Return result | |
return pow | |
} | |
console.log(validatePow(trytes, 14) ? 'Tx pow is valid' : 'Tx pow is invalid') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment