-
Notifications
You must be signed in to change notification settings - Fork 167
/
DefaultFakePowScheme.scala
41 lines (35 loc) · 1.57 KB
/
DefaultFakePowScheme.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package org.ergoplatform.mining
import org.ergoplatform.modifiers.history.header.Header
import scorex.crypto.authds.ADDigest
import scorex.crypto.hash.Digest32
import sigmastate.crypto.CryptoConstants.EcPointType
import scala.util.{Random, Success, Try}
/**
* Fake Pow Scheme for tests.
* Fill solution with random values, as any block is valid during validation
*/
class DefaultFakePowScheme(k: Int, n: Int) extends AutolykosPowScheme(k, n) {
override def validate(header: Header): Try[Unit] = Success(())
override def prove(parentOpt: Option[Header],
version: Header.Version,
nBits: Long,
stateRoot: ADDigest,
adProofsRoot: Digest32,
transactionsRoot: Digest32,
timestamp: Header.Timestamp,
extensionHash: Digest32,
votes: Array[Byte],
sk: PrivateKey,
minNonce: Long = Long.MinValue,
maxNonce: Long = Long.MaxValue): Option[Header] = {
val (parentId, height) = AutolykosPowScheme.derivedHeaderFields(parentOpt)
val pk: EcPointType = genPk(sk)
val w: EcPointType = genPk(Random.nextLong())
val n: Array[Byte] = Array.fill(8)(0: Byte)
val d: BigInt = q / (height + 10)
val s = AutolykosSolution(pk, w, n, d)
Some(Header(version, parentId, adProofsRoot, stateRoot, transactionsRoot, timestamp,
nBits, height, extensionHash, s, votes))
}
override def realDifficulty(header: Header): PrivateKey = header.requiredDifficulty
}