github.com/cryptoecc/eth-ecc@v0.0.3/consensus/ethash/LDPCDecoder.go (about) 1 package ethash 2 3 import ( 4 "math" 5 ) 6 7 //OptimizedDecoding return hashVector, outputWord, LRrtl and It is 20% faster than previous decoding function when they use same nonce 8 //percentage can be changed because of random nonce 9 func OptimizedDecoding(parameters Parameters, hashVector []int, H, rowInCol, colInRow [][]int) ([]int, []int, [][]float64) { 10 outputWord := make([]int, parameters.n) 11 LRqtl := make([][]float64, parameters.n) 12 LRrtl := make([][]float64, parameters.n) 13 LRft := make([]float64, parameters.n) 14 15 for i := 0; i < parameters.n; i++ { 16 LRqtl[i] = make([]float64, parameters.m) 17 LRrtl[i] = make([]float64, parameters.m) 18 LRft[i] = math.Log((1-crossErr)/crossErr) * float64((hashVector[i]*2 - 1)) 19 } 20 LRpt := make([]float64, parameters.n) 21 22 for ind := 1; ind <= maxIter; ind++ { 23 for t := 0; t < parameters.n; t++ { 24 temp3 := 0.0 25 26 for mp := 0; mp < parameters.wc; mp++ { 27 temp3 = infinityTest(temp3 + LRrtl[t][rowInCol[mp][t]]) 28 } 29 for m := 0; m < parameters.wc; m++ { 30 temp4 := temp3 31 temp4 = infinityTest(temp4 - LRrtl[t][rowInCol[m][t]]) 32 LRqtl[t][rowInCol[m][t]] = infinityTest(LRft[t] + temp4) 33 } 34 } 35 36 for k := 0; k < parameters.wr; k++ { 37 for l := 0; l < parameters.wr; l++ { 38 temp3 := 0.0 39 sign := 1.0 40 tempSign := 0.0 41 for m := 0; m < parameters.wr; m++ { 42 if m != l { 43 temp3 = temp3 + funcF(math.Abs(LRqtl[colInRow[m][k]][k])) 44 if LRqtl[colInRow[m][k]][k] > 0.0 { 45 tempSign = 1.0 46 } else { 47 tempSign = -1.0 48 } 49 sign = sign * tempSign 50 } 51 } 52 magnitude := funcF(temp3) 53 LRrtl[colInRow[l][k]][k] = infinityTest(sign * magnitude) 54 } 55 } 56 57 for t := 0; t < parameters.n; t++ { 58 LRpt[t] = infinityTest(LRft[t]) 59 for k := 0; k < parameters.wc; k++ { 60 LRpt[t] += LRrtl[t][rowInCol[k][t]] 61 LRpt[t] = infinityTest(LRpt[t]) 62 } 63 64 if LRpt[t] >= 0 { 65 outputWord[t] = 1 66 } else { 67 outputWord[t] = 0 68 } 69 } 70 } 71 72 return hashVector, outputWord, LRrtl 73 }