diff --git a/app/lib/common-libs/constants.ts b/app/lib/common-libs/constants.ts index b7cf84d6913f826fb360ec2e054d60d707fb14ce..3d7857579fa45cfdb511572c87acd058f8cc41ca 100644 --- a/app/lib/common-libs/constants.ts +++ b/app/lib/common-libs/constants.ts @@ -97,6 +97,9 @@ export const CommonConstants = { MAXIMUM_LEN_OF_OUTPUT, MAXIMUM_LEN_OF_UNLOCK, + POW_TURN_DURATION_PC: 100, + POW_TURN_DURATION_ARM: 500, + PROOF_OF_WORK: { UPPER_BOUND: [ '9A-F', diff --git a/app/modules/prover/lib/blockProver.ts b/app/modules/prover/lib/blockProver.ts index 6e14ea7467c994f01fc2430bdb068dc06669cb7a..5217aab5fea5f6f83598d99ddfafc9c0b35a3919 100644 --- a/app/modules/prover/lib/blockProver.ts +++ b/app/modules/prover/lib/blockProver.ts @@ -5,7 +5,8 @@ import {DBBlock} from "../../../lib/db/DBBlock" import {CommonConstants} from "../../../lib/common-libs/constants" import {BlockDTO} from "../../../lib/dto/BlockDTO" -const querablep = require('querablep'); +const os = require('os') +const querablep = require('querablep') const POW_FOUND = true; const POW_NOT_FOUND_YET = false; @@ -168,12 +169,20 @@ export class BlockProver { this.logger.info('Generating proof-of-work with %s leading zeros followed by [0-' + highMark + ']... (CPU usage set to %s%) for block#%s', nbZeros, (this.conf.cpu * 100).toFixed(0), block.number, block.issuer.slice(0,6)); const start = Date.now(); let result = await powFarm.askNewProof({ - newPoW: { conf: { - cpu: this.conf.cpu, - prefix: this.conf.prefix, - avgGenTime: this.conf.avgGenTime, - medianTimeBlocks: this.conf.medianTimeBlocks - }, block: block, zeros: nbZeros, highMark: highMark, forcedTime: forcedTime, pair: this.pair } + newPoW: { + turnDuration: os.arch().match(/arm/) ? CommonConstants.POW_TURN_DURATION_ARM : CommonConstants.POW_TURN_DURATION_PC, + conf: { + cpu: this.conf.cpu, + prefix: this.conf.prefix, + avgGenTime: this.conf.avgGenTime, + medianTimeBlocks: this.conf.medianTimeBlocks + }, + block: block, + zeros: nbZeros, + highMark: highMark, + forcedTime: forcedTime, + pair: this.pair + } }); if (!result) { this.logger.info('GIVEN proof-of-work for block#%s with %s leading zeros followed by [0-' + highMark + ']! stop PoW for %s', block.number, nbZeros, this.pair && this.pair.pub.slice(0,6)); diff --git a/app/modules/prover/lib/engine.ts b/app/modules/prover/lib/engine.ts index 63a3b6c8253781adf4f79b87eae9d429424a0fcd..12d2751d6c45f522027ce96c88de942cd9f0c62a 100644 --- a/app/modules/prover/lib/engine.ts +++ b/app/modules/prover/lib/engine.ts @@ -46,6 +46,9 @@ export class PowEngine { } setConf(value:any) { + if (os.arch().match(/arm/) && value.cpu !== undefined) { + value.cpu /= 2; // Don't know exactly why is ARM so much saturated by PoW, so let's divide by 2 + } return this.cluster.changeConf(value) }