Skip to content

Instantly share code, notes, and snippets.

@l3wi
Created February 1, 2018 12:34
Show Gist options
  • Save l3wi/75e506344648adb4aabcb7d308b74963 to your computer and use it in GitHub Desktop.
Save l3wi/75e506344648adb4aabcb7d308b74963 to your computer and use it in GitHub Desktop.
Validate PoW directly from trytes without iota.lib.js
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