From b3c6c72c38de863cdf1551d411d6beb52755bcc3 Mon Sep 17 00:00:00 2001
From: Alexander Slesarenko <avslesarenko@gmail.com>
Date: Mon, 17 Apr 2023 23:26:05 +0200
Subject: [PATCH 1/7] sigma-v5.0.7: migrate code for new sigma

---
 .../scorex/crypto/authds/benchmarks/Helper.scala |  2 +-
 avldb/build.sbt                                  |  3 ++-
 .../avltree/batch/VersionedLDBAVLStorage.scala   |  2 +-
 .../batch/LDBVersionedStoreSpecification.scala   |  2 +-
 .../VersionedLDBAVLStorageSpecification.scala    |  4 ++--
 ...ionedLDBAVLStorageStatefulSpecification.scala |  2 +-
 .../benchmark/LDBVersionedStoreBenchmark.scala   |  2 +-
 .../authds/avltree/batch/benchmark/OOMTest.scala |  4 ++--
 build.sbt                                        |  2 +-
 .../wallet/interface4j/crypto/ErgoSignature.java |  3 ++-
 .../wallet/interpreter/ErgoInterpreter.scala     | 15 ++++++++++++---
 .../wallet/secrets/ExtendedPublicKey.scala       | 16 +++++++++++-----
 .../wallet/secrets/ExtendedSecretKey.scala       | 14 ++++++++++----
 .../wallet/boxes/DefaultBoxSelectorSpec.scala    |  2 +-
 .../wallet/crypto/ErgoSignatureSpec.scala        |  2 +-
 .../interpreter/ErgoProvingInterpreterSpec.scala |  4 ++--
 .../interpreter/ErgoUnsafeProverSpec.scala       |  4 ++--
 .../transactions/TransactionBuilderSpec.scala    |  8 ++++----
 .../ergoplatform/wallet/utils/Generators.scala   |  2 +-
 .../org/ergoplatform/http/api/ApiCodecs.scala    |  2 +-
 .../ergoplatform/mining/AutolykosPowScheme.scala | 11 +++++++----
 .../ergoplatform/mining/CandidateGenerator.scala |  7 ++++---
 .../scala/org/ergoplatform/mining/mining.scala   |  2 +-
 .../modifiers/mempool/ErgoTransaction.scala      |  4 ++--
 .../nodeView/state/UtxoStateReader.scala         |  2 +-
 .../nodeView/wallet/ErgoWalletSupport.scala      |  4 ++--
 src/main/scala/scorex/core/core.scala            |  4 ++--
 .../core/validation/ModifierValidator.scala      |  2 +-
 .../http/routes/TransactionApiRouteSpec.scala    |  2 +-
 .../modifiers/mempool/ErgoTransactionSpec.scala  |  4 ++--
 .../nodeView/wallet/ErgoWalletServiceSpec.scala  |  2 +-
 .../nodeView/wallet/ErgoWalletSpec.scala         |  2 +-
 .../persistence/OffChainRegistrySpec.scala       |  8 ++++----
 .../ergoplatform/utils/ErgoTestConstants.scala   |  2 +-
 .../org/ergoplatform/utils/WalletTestOps.scala   |  4 ++--
 35 files changed, 91 insertions(+), 64 deletions(-)

diff --git a/avldb/benchmarks/src/main/scala/scorex/crypto/authds/benchmarks/Helper.scala b/avldb/benchmarks/src/main/scala/scorex/crypto/authds/benchmarks/Helper.scala
index 2648c36245..66ef409502 100644
--- a/avldb/benchmarks/src/main/scala/scorex/crypto/authds/benchmarks/Helper.scala
+++ b/avldb/benchmarks/src/main/scala/scorex/crypto/authds/benchmarks/Helper.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.benchmarks
 
-import com.google.common.primitives.Longs
+import scorex.utils.Longs
 import scorex.crypto.authds.avltree.batch._
 import scorex.crypto.authds.{ADKey, ADValue}
 import scorex.crypto.hash.{Blake2b256, Digest32}
diff --git a/avldb/build.sbt b/avldb/build.sbt
index 3378dd64ee..7add06c7d9 100644
--- a/avldb/build.sbt
+++ b/avldb/build.sbt
@@ -5,7 +5,8 @@ name := "avldb"
 libraryDependencies ++= Seq(
   "javax.xml.bind" % "jaxb-api" % "2.4.0-b180830.0359",
   "ch.qos.logback" % "logback-classic" % "1.2.3",
-  "org.scorexfoundation" %% "scrypto" % "2.2.1"
+  "com.google.guava" % "guava" % "23.0",
+  "org.scorexfoundation" %% "scrypto" % "2.3.0"
 )
 
 libraryDependencies ++= Seq(
diff --git a/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorage.scala b/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorage.scala
index 7e13bf73ed..6c0d4f4822 100644
--- a/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorage.scala
+++ b/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorage.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.avltree.batch
 
-import com.google.common.primitives.Ints
+import scorex.utils.Ints
 import scorex.crypto.authds.avltree.batch.VersionedLDBAVLStorage.{InternalNodePrefix, LeafPrefix}
 import scorex.crypto.authds.{ADDigest, ADKey, ADValue, Balance}
 import scorex.util.encode.Base58
diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/LDBVersionedStoreSpecification.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/LDBVersionedStoreSpecification.scala
index f3236cfff3..9eb88a4630 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/LDBVersionedStoreSpecification.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/LDBVersionedStoreSpecification.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.avltree.batch
 
-import com.google.common.primitives.Longs
+import scorex.utils.Longs
 import org.scalatest.matchers.should.Matchers
 import org.scalatest.propspec.AnyPropSpec
 import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks
diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala
index 31e90fdecd..082c8994af 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.avltree.batch
 
-import com.google.common.primitives.Longs
+import scorex.utils.Longs
 import org.scalacheck.{Arbitrary, Gen}
 import org.scalatest.Assertion
 import org.scalatest.matchers.should.Matchers
@@ -193,7 +193,7 @@ class VersionedLDBAVLStorageSpecification extends AnyPropSpec
   val rollbackVersionsTest: (PERSISTENT_PROVER, STORAGE) => Assertion = { (prover: PERSISTENT_PROVER, storage: STORAGE) =>
     (0L until 50L).foreach { long =>
       val insert = Insert(ADKey @@ RandomBytes.randomBytes(32),
-        ADValue @@ com.google.common.primitives.Longs.toByteArray(long))
+        ADValue @@ scorex.utils.Longs.toByteArray(long))
       prover.performOneOperation(insert)
       prover.generateProofAndUpdateStorage()
       prover.digest
diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageStatefulSpecification.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageStatefulSpecification.scala
index a7b6288edd..81d0e64263 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageStatefulSpecification.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageStatefulSpecification.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.avltree.batch
 
-import com.google.common.primitives.Longs
+import scorex.utils.Longs
 import org.scalacheck.Test.Parameters
 import org.scalacheck.commands.Commands
 import org.scalacheck.{Prop, Gen}
diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/LDBVersionedStoreBenchmark.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/LDBVersionedStoreBenchmark.scala
index 62c16fcc10..7e791d9b70 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/LDBVersionedStoreBenchmark.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/LDBVersionedStoreBenchmark.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.avltree.batch.benchmark
 
-import com.google.common.primitives.Longs
+import scorex.utils.Longs
 import scorex.crypto.authds.avltree.batch.helpers.FileHelper
 import scorex.utils.Random
 import scorex.db.LDBVersionedStore
diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/OOMTest.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/OOMTest.scala
index 67e3c2c26c..3783675ef0 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/OOMTest.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/OOMTest.scala
@@ -3,7 +3,7 @@ package scorex.crypto.authds.avltree.batch.benchmark
 import java.io.File
 import java.nio.file.Files
 
-import com.google.common.primitives.{Longs, Shorts}
+import scorex.utils.{Longs, Shorts}
 import scorex.crypto.authds.{ADDigest, ADKey, ADValue}
 import scorex.crypto.authds.avltree.batch._
 import scorex.util.encode.Base16
@@ -67,7 +67,7 @@ object OOMTest extends App {
       Longs.toByteArray(value) ++ propBytes ++ (0.toByte +: Array.emptyByteArray) ++
         transactionId ++ Shorts.toByteArray(boxId)
     val id = Blake2b256.hash(bytes)
-    ADKey @@ id -> ADValue @@ bytes
+    ADKey @@@ id -> ADValue @@@ bytes
   }
 
   private def metadata(modId: Array[Byte], stateRoot: ADDigest): Seq[(Array[Byte], Array[Byte])] = {
diff --git a/build.sbt b/build.sbt
index 18b62c9859..e5e214ec56 100644
--- a/build.sbt
+++ b/build.sbt
@@ -37,7 +37,7 @@ val circeVersion = "0.13.0"
 val akkaVersion = "2.6.10"
 val akkaHttpVersion = "10.2.4"
 
-val sigmaStateVersion = "5.0.5"
+val sigmaStateVersion = "5.0.6-64-e991c928-SNAPSHOT"
 
 // for testing current sigmastate build (see sigmastate-ergo-it jenkins job)
 val effectiveSigmaStateVersion = Option(System.getenv().get("SIGMASTATE_VERSION")).getOrElse(sigmaStateVersion)
diff --git a/ergo-wallet/src/main/java/org/ergoplatform/wallet/interface4j/crypto/ErgoSignature.java b/ergo-wallet/src/main/java/org/ergoplatform/wallet/interface4j/crypto/ErgoSignature.java
index 8e27003ce4..989363a6f2 100644
--- a/ergo-wallet/src/main/java/org/ergoplatform/wallet/interface4j/crypto/ErgoSignature.java
+++ b/ergo-wallet/src/main/java/org/ergoplatform/wallet/interface4j/crypto/ErgoSignature.java
@@ -2,6 +2,7 @@
 
 import org.bouncycastle.math.ec.custom.sec.SecP256K1Point;
 import scala.math.BigInt;
+import sigmastate.crypto.Platform;
 
 import java.math.BigInteger;
 
@@ -25,7 +26,7 @@ public byte[] sign(byte[] msg, BigInteger sk) {
      * @return `true` is the signature is valid, `false` otherwise
      */
     public boolean verify(byte[] msg, byte[] signature, SecP256K1Point pk) {
-        return org.ergoplatform.wallet.crypto.ErgoSignature.verify(msg, signature, pk);
+        return org.ergoplatform.wallet.crypto.ErgoSignature.verify(msg, signature, new Platform.Ecp(pk));
     }
 
 }
diff --git a/ergo-wallet/src/main/scala/org/ergoplatform/wallet/interpreter/ErgoInterpreter.scala b/ergo-wallet/src/main/scala/org/ergoplatform/wallet/interpreter/ErgoInterpreter.scala
index 49460d9a3b..449ff6cb9a 100644
--- a/ergo-wallet/src/main/scala/org/ergoplatform/wallet/interpreter/ErgoInterpreter.scala
+++ b/ergo-wallet/src/main/scala/org/ergoplatform/wallet/interpreter/ErgoInterpreter.scala
@@ -3,10 +3,11 @@ package org.ergoplatform.wallet.interpreter
 import org.ergoplatform.ErgoLikeContext.Height
 import org.ergoplatform.wallet.protocol.Constants
 import org.ergoplatform.wallet.protocol.context.ErgoLikeParameters
-import org.ergoplatform.{ErgoLikeContext, ErgoBox, ErgoBoxCandidate, ErgoLikeInterpreter}
+import org.ergoplatform.{ErgoBox, ErgoBoxCandidate, ErgoLikeContext, ErgoLikeInterpreter}
 import scorex.crypto.authds.ADDigest
+import scorex.util.ScorexLogging
 import sigmastate.Values.ErgoTree
-import sigmastate.interpreter.Interpreter.{VerificationResult, ScriptEnv}
+import sigmastate.interpreter.Interpreter.{ScriptEnv, VerificationResult}
 import sigmastate.{AvlTreeData, AvlTreeFlags}
 
 import scala.util.Try
@@ -18,7 +19,15 @@ import scala.util.Try
   * @param params - current values of adjustable blockchain settings
   */
 class ErgoInterpreter(params: ErgoLikeParameters)
-  extends ErgoLikeInterpreter {
+  extends ErgoLikeInterpreter with ScorexLogging {
+
+  /** Override default logging for all Ergo interpreters. */
+  override protected def logMessage(msg: String): Unit = {
+    log.error(msg)
+  }
+  override protected def logMessage(msg: String, t: Throwable): Unit = {
+    log.error(msg, t)
+  }
 
   override type CTX = ErgoLikeContext
 
diff --git a/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedPublicKey.scala b/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedPublicKey.scala
index ad3955bf0f..56b15b3f50 100644
--- a/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedPublicKey.scala
+++ b/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedPublicKey.scala
@@ -1,13 +1,15 @@
 package org.ergoplatform.wallet.secrets
 
-import java.util
+import org.bouncycastle.math.ec.ECPoint
 
+import java.util
 import org.bouncycastle.util.BigIntegers
 import org.ergoplatform.wallet.Constants
 import org.ergoplatform.wallet.crypto.HmacSHA512
 import org.ergoplatform.wallet.serialization.ErgoWalletSerializer
 import scorex.util.serialization.{Reader, Writer}
 import sigmastate.basics.DLogProtocol.{DLogProverInput, ProveDlog}
+import sigmastate.crypto.CryptoFacade
 import sigmastate.interpreter.CryptoConstants
 
 import scala.annotation.tailrec
@@ -24,7 +26,7 @@ final class ExtendedPublicKey(private[secrets] val keyBytes: Array[Byte],
   def selfReflection: ExtendedPublicKey = this
 
   def key: ProveDlog = ProveDlog(
-    CryptoConstants.dlogGroup.curve.decodePoint(keyBytes).asInstanceOf[CryptoConstants.EcPointType]
+    CryptoConstants.dlogGroup.ctx.decodePoint(keyBytes)
   )
 
   def child(idx: Int): ExtendedPublicKey = ExtendedPublicKey.deriveChildPublicKey(this, idx)
@@ -56,11 +58,15 @@ object ExtendedPublicKey {
       .hash(parentKey.chainCode, parentKey.keyBytes ++ Index.serializeIndex(idx))
       .splitAt(Constants.SecretKeyLength)
     val childKeyProtoDecoded = BigIntegers.fromUnsignedByteArray(childKeyProto)
-    val childKey = DLogProverInput(childKeyProtoDecoded).publicImage.value.add(parentKey.key.value)
-    if (childKeyProtoDecoded.compareTo(CryptoConstants.groupOrder) >= 0 || childKey.isInfinity) {
+    val childKey = CryptoFacade.multiplyPoints(
+      DLogProverInput(childKeyProtoDecoded).publicImage.value,
+      parentKey.key.value)
+    if (childKeyProtoDecoded.compareTo(CryptoConstants.groupOrder) >= 0 || CryptoFacade.isInfinityPoint(childKey)) {
       deriveChildPublicKey(parentKey, idx + 1)
     } else {
-      new ExtendedPublicKey(childKey.getEncoded(true), childChainCode, parentKey.path.extended(idx))
+      new ExtendedPublicKey(
+        CryptoFacade.encodePoint(childKey, true),
+        childChainCode, parentKey.path.extended(idx))
     }
   }
 
diff --git a/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedSecretKey.scala b/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedSecretKey.scala
index 35825a0800..c860f979d8 100644
--- a/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedSecretKey.scala
+++ b/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedSecretKey.scala
@@ -1,8 +1,9 @@
 package org.ergoplatform.wallet.secrets
 
+import org.bouncycastle.math.ec.ECPoint
+
 import java.math.BigInteger
 import java.util
-
 import org.bouncycastle.util.BigIntegers
 import org.ergoplatform.wallet.Constants
 import org.ergoplatform.wallet.crypto.HmacSHA512
@@ -10,6 +11,7 @@ import org.ergoplatform.wallet.serialization.ErgoWalletSerializer
 import scorex.util.serialization.{Reader, Writer}
 import sigmastate.basics.DLogProtocol
 import sigmastate.basics.DLogProtocol.DLogProverInput
+import sigmastate.crypto.CryptoFacade
 import sigmastate.interpreter.CryptoConstants
 
 /**
@@ -30,8 +32,11 @@ final class ExtendedSecretKey(private[secrets] val keyBytes: Array[Byte],
 
   def child(idx: Int): ExtendedSecretKey = ExtendedSecretKey.deriveChildSecretKey(this, idx)
 
+  /** Returns extended public key corresponding to this secret key. */
   def publicKey: ExtendedPublicKey =
-    new ExtendedPublicKey(privateInput.publicImage.value.getEncoded(true), chainCode, path.toPublicBranch)
+    new ExtendedPublicKey(
+      CryptoFacade.encodePoint(privateInput.publicImage.value, compressed = true),
+      chainCode, path.toPublicBranch)
 
   def isErased: Boolean = keyBytes.forall(_ == 0x00)
 
@@ -60,7 +65,7 @@ object ExtendedSecretKey {
   def deriveChildSecretKey(parentKey: ExtendedSecretKey, idx: Int): ExtendedSecretKey = {
     val keyCoded: Array[Byte] =
       if (Index.isHardened(idx)) (0x00: Byte) +: parentKey.keyBytes
-      else parentKey.privateInput.publicImage.value.getEncoded(true)
+      else CryptoFacade.encodePoint(parentKey.privateInput.publicImage.value, compressed = true)
     val (childKeyProto, childChainCode) = HmacSHA512
       .hash(parentKey.chainCode, keyCoded ++ Index.serializeIndex(idx))
       .splitAt(Constants.SecretKeyLength)
@@ -85,7 +90,8 @@ object ExtendedSecretKey {
 
   def deriveChildPublicKey(parentKey: ExtendedSecretKey, idx: Int): ExtendedPublicKey = {
     val derivedSecret = deriveChildSecretKey(parentKey, idx)
-    val derivedPk = derivedSecret.privateInput.publicImage.value.getEncoded(true)
+    val derivedPk = CryptoFacade.encodePoint(
+      derivedSecret.privateInput.publicImage.value, compressed = true)
     val derivedPath = derivedSecret.path.copy(publicBranch = true)
     new ExtendedPublicKey(derivedPk, derivedSecret.chainCode, derivedPath)
   }
diff --git a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/boxes/DefaultBoxSelectorSpec.scala b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/boxes/DefaultBoxSelectorSpec.scala
index 44f8a6e211..aee68d6250 100644
--- a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/boxes/DefaultBoxSelectorSpec.scala
+++ b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/boxes/DefaultBoxSelectorSpec.scala
@@ -222,7 +222,7 @@ class DefaultBoxSelectorSpec extends AnyPropSpec with Matchers with EitherValues
     val tokenData = genTokens(3).last
     tokenData._2 shouldBe 2
 
-    val tokenId = ModifierId @@ bytesToId(tokenData._1)
+    val tokenId = ModifierId @@@ bytesToId(tokenData._1)
 
     val ergValue = 10 * MinBoxValue
 
diff --git a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/crypto/ErgoSignatureSpec.scala b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/crypto/ErgoSignatureSpec.scala
index f9286e5dd1..42993ec9df 100644
--- a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/crypto/ErgoSignatureSpec.scala
+++ b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/crypto/ErgoSignatureSpec.scala
@@ -18,7 +18,7 @@ class ErgoSignatureSpec extends AnyPropSpec with Matchers with Generators {
 
     val sig = sign(msg, secret.w)
 
-    verify(msg, sig, pk.h) shouldBe true
+    verify(msg, sig, pk.value) shouldBe true
   }
 
   property("always produce signature of fixed length") {
diff --git a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/interpreter/ErgoProvingInterpreterSpec.scala b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/interpreter/ErgoProvingInterpreterSpec.scala
index 438770a1f1..123b70695e 100644
--- a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/interpreter/ErgoProvingInterpreterSpec.scala
+++ b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/interpreter/ErgoProvingInterpreterSpec.scala
@@ -42,8 +42,8 @@ class ErgoProvingInterpreterSpec
 
       signedTxFull.inputs.map(_.spendingProof.proof).zip(signedTxFull.inputs.map(_.spendingProof.proof))
         .foreach { case (fullProof, unsafeProof) =>
-          ErgoSignature.verify(unsignedTx.messageToSign, fullProof, extendedSecretKey.publicKey.key.h) shouldBe
-            ErgoSignature.verify(unsignedTx.messageToSign, unsafeProof, extendedSecretKey.publicKey.key.h)
+          ErgoSignature.verify(unsignedTx.messageToSign, fullProof, extendedSecretKey.publicKey.key.value) shouldBe
+            ErgoSignature.verify(unsignedTx.messageToSign, unsafeProof, extendedSecretKey.publicKey.key.value)
         }
     }
   }
diff --git a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/interpreter/ErgoUnsafeProverSpec.scala b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/interpreter/ErgoUnsafeProverSpec.scala
index 2be289322c..e19690d8cb 100644
--- a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/interpreter/ErgoUnsafeProverSpec.scala
+++ b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/interpreter/ErgoUnsafeProverSpec.scala
@@ -32,8 +32,8 @@ class ErgoUnsafeProverSpec
 
       signedTxFull.inputs.map(_.spendingProof.proof).zip(signedTxFull.inputs.map(_.spendingProof.proof))
         .foreach { case (fullProof, unsafeProof) =>
-          ErgoSignature.verify(unsignedTx.messageToSign, fullProof, extendedSecretKey.publicKey.key.h) shouldBe
-            ErgoSignature.verify(unsignedTx.messageToSign, unsafeProof, extendedSecretKey.publicKey.key.h)
+          ErgoSignature.verify(unsignedTx.messageToSign, fullProof, extendedSecretKey.publicKey.key.value) shouldBe
+            ErgoSignature.verify(unsignedTx.messageToSign, unsafeProof, extendedSecretKey.publicKey.key.value)
         }
     }
   }
diff --git a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/transactions/TransactionBuilderSpec.scala b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/transactions/TransactionBuilderSpec.scala
index 3f41745308..9dfaad23a0 100644
--- a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/transactions/TransactionBuilderSpec.scala
+++ b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/transactions/TransactionBuilderSpec.scala
@@ -74,7 +74,7 @@ class TransactionBuilderSpec extends WalletTestHelpers with Matchers {
 
   property("token minting") {
     val inputBox = box(minBoxValue * 2)
-    val tokenId  = Digest32 @@ inputBox.id
+    val tokenId  = Digest32 @@@ inputBox.id
     val outBox = boxCandidate(minBoxValue, Seq(tokenId -> 100L))
     val res = transaction(inputBox, outBox)
 
@@ -87,7 +87,7 @@ class TransactionBuilderSpec extends WalletTestHelpers with Matchers {
 
   property("token burning") {
     val inputBox = box(minBoxValue * 3, Seq(Digest32 @@ idToBytes(tid1) -> 1000L, Digest32 @@ idToBytes(tid2) -> 2000L))
-    val tokenId  = Digest32 @@ inputBox.id
+    val tokenId  = Digest32 @@@ inputBox.id
     val outBox = boxCandidate(minBoxValue, Seq(tokenId -> 100L))
     val res = transaction(inputBox, outBox, burnTokens = Map(tid1 -> 400L, tid2 -> 800L))
 
@@ -105,7 +105,7 @@ class TransactionBuilderSpec extends WalletTestHelpers with Matchers {
 
   property("no fees") {
     val inputBox = box(minBoxValue)
-    val tokenId  = Digest32 @@ inputBox.id
+    val tokenId  = Digest32 @@@ inputBox.id
     val outBox = boxCandidate(minBoxValue, Seq(tokenId -> 100L))
     val res = transaction(inputBox, outBox, fee = None)
 
@@ -117,7 +117,7 @@ class TransactionBuilderSpec extends WalletTestHelpers with Matchers {
 
   property("change goes to fee, but no outFee box") {
     val inputBox = box(minBoxValue + minBoxValue / 2)
-    val tokenId  = Digest32 @@ inputBox.id
+    val tokenId  = Digest32 @@@ inputBox.id
     val outBox = boxCandidate(minBoxValue, Seq(tokenId -> 100L))
     val res = transaction(inputBox, outBox, fee = None)
 
diff --git a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/utils/Generators.scala b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/utils/Generators.scala
index ec4f7ff88f..0a515eb024 100644
--- a/ergo-wallet/src/test/scala/org/ergoplatform/wallet/utils/Generators.scala
+++ b/ergo-wallet/src/test/scala/org/ergoplatform/wallet/utils/Generators.scala
@@ -77,7 +77,7 @@ trait Generators {
   val assetGen: Gen[(TokenId, Long)] = for {
     id <- boxIdGen
     amt <- Gen.oneOf(1, 500, 20000, 10000000, Long.MaxValue)
-  } yield Digest32 @@ id -> amt
+  } yield Digest32 @@@ id -> amt
 
   def additionalTokensGen(cnt: Int): Gen[Seq[(TokenId, Long)]] = Gen.listOfN(cnt, assetGen)
 
diff --git a/src/main/scala/org/ergoplatform/http/api/ApiCodecs.scala b/src/main/scala/org/ergoplatform/http/api/ApiCodecs.scala
index cef83cbb00..0649507c17 100644
--- a/src/main/scala/org/ergoplatform/http/api/ApiCodecs.scala
+++ b/src/main/scala/org/ergoplatform/http/api/ApiCodecs.scala
@@ -204,7 +204,7 @@ trait ApiCodecs extends JsonCodecs {
     sigma =>
       val op = sigma.opCode.toByte.asJson
       sigma match {
-        case dlog: ProveDlog => Map("op" -> op, "h" -> dlog.h.asJson).asJson
+        case dlog: ProveDlog => Map("op" -> op, "h" -> dlog.value.asJson).asJson
         case dht: ProveDHTuple => Map("op" -> op, "g" -> dht.g.asJson, "h" -> dht.h.asJson, "u" -> dht.u.asJson, "v" -> dht.v.asJson).asJson
         case tp: TrivialProp => Map("op" -> op, "condition" -> tp.condition.asJson).asJson
         case and: CAND =>
diff --git a/src/main/scala/org/ergoplatform/mining/AutolykosPowScheme.scala b/src/main/scala/org/ergoplatform/mining/AutolykosPowScheme.scala
index 8e07df9224..69391fe498 100644
--- a/src/main/scala/org/ergoplatform/mining/AutolykosPowScheme.scala
+++ b/src/main/scala/org/ergoplatform/mining/AutolykosPowScheme.scala
@@ -16,6 +16,7 @@ import scorex.crypto.authds.{ADDigest, SerializedAdProof}
 import scorex.crypto.hash.{Blake2b256, Digest32}
 import scorex.util.{ModifierId, ScorexLogging}
 import sigmastate.basics.DLogProtocol.ProveDlog
+import sigmastate.crypto.CryptoFacade
 
 import scala.annotation.tailrec
 import scala.math.BigInt
@@ -126,8 +127,8 @@ class AutolykosPowScheme(val k: Int, val n: Int) extends ScorexLogging {
     val N = calcN(header)
 
     require(s.d < b, s"Incorrect d = ${s.d} for b = $b")
-    require(s.pk.getCurve == group.curve && !s.pk.isInfinity, "pk is incorrect")
-    require(s.w.getCurve == group.curve && !s.w.isInfinity, "w is incorrect")
+    require(CryptoFacade.getCurve(s.pk) == group.ctx.curve && !CryptoFacade.isInfinityPoint(s.pk), "pk is incorrect")
+    require(CryptoFacade.getCurve(s.w) == group.ctx.curve && !CryptoFacade.isInfinityPoint(s.w), "w is incorrect")
 
     val pkBytes = groupElemToBytes(s.pk)
     val wBytes = groupElemToBytes(s.w)
@@ -137,8 +138,10 @@ class AutolykosPowScheme(val k: Int, val n: Int) extends ScorexLogging {
 
     //height is not used in v1
     val f = indexes.map(idx => genElement(version, msg, pkBytes, wBytes, Ints.toByteArray(idx), null)).sum.mod(q)
-    val left = s.w.multiply(f.bigInteger)
-    val right = group.generator.multiply(s.d.bigInteger).add(s.pk)
+    val left = CryptoFacade.exponentiatePoint(s.w, f.bigInteger)
+    val right = CryptoFacade.multiplyPoints(
+      CryptoFacade.exponentiatePoint(group.generator, s.d.bigInteger),
+      s.pk)
     left == right
   }
 
diff --git a/src/main/scala/org/ergoplatform/mining/CandidateGenerator.scala b/src/main/scala/org/ergoplatform/mining/CandidateGenerator.scala
index dbdab5b7f2..0761afb673 100644
--- a/src/main/scala/org/ergoplatform/mining/CandidateGenerator.scala
+++ b/src/main/scala/org/ergoplatform/mining/CandidateGenerator.scala
@@ -13,7 +13,7 @@ import org.ergoplatform.modifiers.history.header.{Header, HeaderWithoutPow}
 import org.ergoplatform.modifiers.history.popow.NipopowAlgos
 import org.ergoplatform.modifiers.mempool.{ErgoTransaction, UnconfirmedTransaction}
 import org.ergoplatform.network.ErgoNodeViewSynchronizer.ReceivableMessages
-import ReceivableMessages.{ChangedHistory, ChangedMempool, ChangedState, NodeViewChange, FullBlockApplied}
+import ReceivableMessages.{ChangedHistory, ChangedMempool, ChangedState, FullBlockApplied, NodeViewChange}
 import org.ergoplatform.nodeView.ErgoReadersHolder.{GetReaders, Readers}
 import org.ergoplatform.nodeView.history.ErgoHistory.Height
 import org.ergoplatform.nodeView.history.{ErgoHistory, ErgoHistoryReader}
@@ -29,6 +29,7 @@ import scorex.util.encode.Base16
 import scorex.util.{ModifierId, ScorexLogging}
 import sigmastate.SType.ErgoBoxRType
 import sigmastate.basics.DLogProtocol.ProveDlog
+import sigmastate.crypto.CryptoFacade
 import sigmastate.eval.Extensions._
 import sigmastate.eval._
 import sigmastate.interpreter.ProverResult
@@ -183,7 +184,7 @@ class CandidateGenerator(
         if state.solvedBlock.isEmpty && state.cache.nonEmpty =>
       // Inject node pk if it is not externally set (in Autolykos 2)
       val solution =
-        if (preSolution.pk.isInfinity) {
+        if (CryptoFacade.isInfinityPoint(preSolution.pk)) {
           AutolykosSolution(minerPk.value, preSolution.w, preSolution.n, preSolution.d)
         } else {
           preSolution
@@ -506,7 +507,7 @@ object CandidateGenerator extends ScorexLogging {
         )
 
       val upcomingContext = state.stateContext.upcoming(
-        minerPk.h,
+        minerPk.value,
         timestamp,
         nBits,
         votes,
diff --git a/src/main/scala/org/ergoplatform/mining/mining.scala b/src/main/scala/org/ergoplatform/mining/mining.scala
index e7da407f4d..9b3a7fb3d3 100644
--- a/src/main/scala/org/ergoplatform/mining/mining.scala
+++ b/src/main/scala/org/ergoplatform/mining/mining.scala
@@ -14,7 +14,7 @@ package object mining {
 
   val PublicKeyLength: Byte = 33
 
-  val group: BcDlogGroup[EcPointType] = CryptoConstants.dlogGroup
+  val group: BcDlogGroup = CryptoConstants.dlogGroup
 
   // Group order, used in Autolykos V.1 for non-outsourceability,
   // and also to obtain target in both Autolykos v1 and v2
diff --git a/src/main/scala/org/ergoplatform/modifiers/mempool/ErgoTransaction.scala b/src/main/scala/org/ergoplatform/modifiers/mempool/ErgoTransaction.scala
index 983205c8ed..e1e16f26d8 100644
--- a/src/main/scala/org/ergoplatform/modifiers/mempool/ErgoTransaction.scala
+++ b/src/main/scala/org/ergoplatform/modifiers/mempool/ErgoTransaction.scala
@@ -227,10 +227,10 @@ case class ErgoTransaction(override val inputs: IndexedSeq[Input],
       lazy val reemissionSettings = stateContext.ergoSettings.chainSettings.reemission
       lazy val reemissionRules = reemissionSettings.reemissionRules
 
-      lazy val reemissionTokenId = ModifierId @@ reemissionSettings.reemissionTokenId
+      lazy val reemissionTokenId = ModifierId @@@ reemissionSettings.reemissionTokenId
       lazy val reemissionTokenIdBytes = reemissionSettings.reemissionTokenIdBytes
 
-      lazy val emissionNftId = ModifierId @@ reemissionSettings.emissionNftId
+      lazy val emissionNftId = ModifierId @@@ reemissionSettings.emissionNftId
       lazy val emissionNftIdBytes = reemissionSettings.emissionNftIdBytes
 
       lazy val chainSettings = stateContext.ergoSettings.chainSettings
diff --git a/src/main/scala/org/ergoplatform/nodeView/state/UtxoStateReader.scala b/src/main/scala/org/ergoplatform/nodeView/state/UtxoStateReader.scala
index 69db43c082..cc7646ec66 100644
--- a/src/main/scala/org/ergoplatform/nodeView/state/UtxoStateReader.scala
+++ b/src/main/scala/org/ergoplatform/nodeView/state/UtxoStateReader.scala
@@ -30,7 +30,7 @@ trait UtxoStateReader extends ErgoStateReader with TransactionValidation {
   protected val persistentProver: PersistentBatchAVLProver[Digest32, HF]
 
   def generateBatchProofForBoxes(boxes: Seq[ErgoBox.BoxId]): SerializedAdProof = persistentProver.synchronized {
-    boxes.map { box => persistentProver.performOneOperation(Lookup(ADKey @@ box)) }
+    boxes.map { box => persistentProver.performOneOperation(Lookup(ADKey @@@ box)) }
     persistentProver.prover().generateProof()
   }
 
diff --git a/src/main/scala/org/ergoplatform/nodeView/wallet/ErgoWalletSupport.scala b/src/main/scala/org/ergoplatform/nodeView/wallet/ErgoWalletSupport.scala
index ba19e06b59..cef8c8e37b 100644
--- a/src/main/scala/org/ergoplatform/nodeView/wallet/ErgoWalletSupport.scala
+++ b/src/main/scala/org/ergoplatform/nodeView/wallet/ErgoWalletSupport.scala
@@ -212,7 +212,7 @@ trait ErgoWalletSupport extends ScorexLogging {
                   def minimalErgoAmount: Long =
                     BoxUtils.minimalErgoAmountSimulated(
                       lockWithAddress.script,
-                      Colls.fromItems((Digest32 @@ assetId) -> amount),
+                      Colls.fromItems((Digest32 @@@ assetId) -> amount),
                       nonMandatoryRegisters,
                       parameters
                     )
@@ -221,7 +221,7 @@ trait ErgoWalletSupport extends ScorexLogging {
                     valueOpt.getOrElse(minimalErgoAmount),
                     lockWithAddress.script,
                     fullHeight,
-                    Colls.fromItems((Digest32 @@ assetId) -> amount),
+                    Colls.fromItems((Digest32 @@@ assetId) -> amount),
                     nonMandatoryRegisters
                   )
                 }
diff --git a/src/main/scala/scorex/core/core.scala b/src/main/scala/scorex/core/core.scala
index 8609bd0eb1..b71bae65b2 100644
--- a/src/main/scala/scorex/core/core.scala
+++ b/src/main/scala/scorex/core/core.scala
@@ -33,8 +33,8 @@ package object core {
 
   def versionToBytes(id: VersionTag): Array[Byte] = Base16.decode(id).get
 
-  def versionToId(version: VersionTag): util.ModifierId = util.ModifierId @@ version
+  def versionToId(version: VersionTag): util.ModifierId = util.ModifierId @@@ version
 
-  def idToVersion(id: util.ModifierId): VersionTag = VersionTag @@ id
+  def idToVersion(id: util.ModifierId): VersionTag = VersionTag @@@ id
 
 }
diff --git a/src/main/scala/scorex/core/validation/ModifierValidator.scala b/src/main/scala/scorex/core/validation/ModifierValidator.scala
index 8e23763c69..a8c35aea5b 100644
--- a/src/main/scala/scorex/core/validation/ModifierValidator.scala
+++ b/src/main/scala/scorex/core/validation/ModifierValidator.scala
@@ -151,7 +151,7 @@ case class ValidationState[T](result: ValidationResult[T], settings: ValidationS
           case Success(_) =>
             result
           case Failure(unexpectedEx) =>
-            settings.getError(id, unexpectedEx, ModifierId @@ bytesToId(Array.fill(32)(0.toByte)), modifierTypeId)
+            settings.getError(id, unexpectedEx, ModifierId @@@ bytesToId(Array.fill(32)(0.toByte)), modifierTypeId)
         }
       }
     }
diff --git a/src/test/scala/org/ergoplatform/http/routes/TransactionApiRouteSpec.scala b/src/test/scala/org/ergoplatform/http/routes/TransactionApiRouteSpec.scala
index 04d0e60ca1..ab267a4c33 100644
--- a/src/test/scala/org/ergoplatform/http/routes/TransactionApiRouteSpec.scala
+++ b/src/test/scala/org/ergoplatform/http/routes/TransactionApiRouteSpec.scala
@@ -44,7 +44,7 @@ class TransactionApiRouteSpec extends AnyFlatSpec
   val dataInput = DataInput(input.boxId)
 
   val absentModifierId = "0000000000000000000000000000000000000000000000000000000000000000"
-  val tokens = List[(TokenId, Long)](Digest32 @@ inputBox.id -> 10)
+  val tokens = List[(TokenId, Long)](Digest32 @@@ inputBox.id -> 10)
   val registers =
     Map(
       ErgoBox.R4 -> ByteArrayConstant("name".getBytes("UTF-8")),
diff --git a/src/test/scala/org/ergoplatform/modifiers/mempool/ErgoTransactionSpec.scala b/src/test/scala/org/ergoplatform/modifiers/mempool/ErgoTransactionSpec.scala
index 16a2389dfa..b3f9ead789 100644
--- a/src/test/scala/org/ergoplatform/modifiers/mempool/ErgoTransactionSpec.scala
+++ b/src/test/scala/org/ergoplatform/modifiers/mempool/ErgoTransactionSpec.scala
@@ -41,7 +41,7 @@ class ErgoTransactionSpec extends ErgoPropertyTest with ErgoTestConstants {
         (seq :+ ebc) -> true
       } else {
         if (ebc.additionalTokens.nonEmpty && ebc.additionalTokens.exists(t => !java.util.Arrays.equals(t._1, from.head.id))) {
-          (seq :+ modifyAsset(ebc, deltaFn, Digest32 @@ from.head.id)) -> true
+          (seq :+ modifyAsset(ebc, deltaFn, Digest32 @@@ from.head.id)) -> true
         } else {
           (seq :+ ebc) -> false
         }
@@ -96,7 +96,7 @@ class ErgoTransactionSpec extends ErgoPropertyTest with ErgoTestConstants {
     val minerPkHex = "0326df75ea615c18acc6bb4b517ac82795872f388d5d180aac90eaa84de750b942"
     val minerPk = Base16.decode(minerPkHex).map { point =>
       ProveDlog(
-        CryptoConstants.dlogGroup.curve.decodePoint(point).asInstanceOf[CryptoConstants.EcPointType]
+        CryptoConstants.dlogGroup.ctx.decodePoint(point)
       )
     }.get
     val inputs: IndexedSeq[Input] = IndexedSeq(
diff --git a/src/test/scala/org/ergoplatform/nodeView/wallet/ErgoWalletServiceSpec.scala b/src/test/scala/org/ergoplatform/nodeView/wallet/ErgoWalletServiceSpec.scala
index ba5a5015cb..044aeaafdd 100644
--- a/src/test/scala/org/ergoplatform/nodeView/wallet/ErgoWalletServiceSpec.scala
+++ b/src/test/scala/org/ergoplatform/nodeView/wallet/ErgoWalletServiceSpec.scala
@@ -259,7 +259,7 @@ class ErgoWalletServiceSpec
         val walletService = new ErgoWalletServiceImpl(settings)
         val signedTx = walletService.generateTransaction(wState, boxSelector, Seq(paymentRequest), inputsRaw = encodedBoxes, dataInputsRaw = Seq.empty, sign = true).get.asInstanceOf[ErgoTransaction]
 
-        ErgoSignature.verify(signedTx.messageToSign, signedTx.inputs.head.spendingProof.proof, pks.head.pubkey.h) shouldBe true
+        ErgoSignature.verify(signedTx.messageToSign, signedTx.inputs.head.spendingProof.proof, pks.head.pubkey.value) shouldBe true
         signedTx.inputs.size shouldBe 1
         signedTx.outputs.size shouldBe 2
 
diff --git a/src/test/scala/org/ergoplatform/nodeView/wallet/ErgoWalletSpec.scala b/src/test/scala/org/ergoplatform/nodeView/wallet/ErgoWalletSpec.scala
index 59ddc3e26d..9c223aa364 100644
--- a/src/test/scala/org/ergoplatform/nodeView/wallet/ErgoWalletSpec.scala
+++ b/src/test/scala/org/ergoplatform/nodeView/wallet/ErgoWalletSpec.scala
@@ -242,7 +242,7 @@ class ErgoWalletSpec extends ErgoPropertyTest with WalletTestOps with Eventually
   property("whitelist set, preserve tokens from auto-burn") {
     val inputs = {
       val x = IndexedSeq(new Input(genesisEmissionBox.id, emptyProverResult))
-      Seq(encodedTokenId(Digest32 @@ x.head.boxId))
+      Seq(encodedTokenId(Digest32 @@@ x.head.boxId))
     }
 
     implicit val ww: WalletFixture = new WalletFixture(settings
diff --git a/src/test/scala/org/ergoplatform/nodeView/wallet/persistence/OffChainRegistrySpec.scala b/src/test/scala/org/ergoplatform/nodeView/wallet/persistence/OffChainRegistrySpec.scala
index def88210a8..208dd74b87 100644
--- a/src/test/scala/org/ergoplatform/nodeView/wallet/persistence/OffChainRegistrySpec.scala
+++ b/src/test/scala/org/ergoplatform/nodeView/wallet/persistence/OffChainRegistrySpec.scala
@@ -35,7 +35,7 @@ class OffChainRegistrySpec
       registry.digest.walletAssetBalances.toMap shouldEqual assetsBalance.toMap
 
       //spend all the outputs
-      registry = registry.updateOnTransaction(Seq.empty, boxes.map(EncodedBoxId @@ _.boxId), Seq.empty)
+      registry = registry.updateOnTransaction(Seq.empty, boxes.map(EncodedBoxId @@@ _.boxId), Seq.empty)
       registry.digest.walletBalance shouldEqual 0
       registry.digest.walletAssetBalances shouldEqual Seq.empty
 
@@ -54,12 +54,12 @@ class OffChainRegistrySpec
         registry.digest.walletBalance shouldEqual fbalance
         registry.digest.walletAssetBalances.toMap shouldEqual fassetsBalance.toMap
 
-        registry = registry.updateOnTransaction(Seq.empty, filtered.map(EncodedBoxId @@ _.boxId), Seq(scan))
+        registry = registry.updateOnTransaction(Seq.empty, filtered.map(EncodedBoxId @@@ _.boxId), Seq(scan))
         registry.digest.walletBalance shouldEqual fbalance
         registry.digest.walletAssetBalances.toMap shouldEqual fassetsBalance.toMap
 
         val scan2 = Scan(scanId, "_", p, ScanWalletInteraction.Off, removeOffchain = true)
-        registry = registry.updateOnTransaction(Seq.empty, filtered.map(EncodedBoxId @@ _.boxId), Seq(scan2))
+        registry = registry.updateOnTransaction(Seq.empty, filtered.map(EncodedBoxId @@@ _.boxId), Seq(scan2))
         registry.digest.walletBalance shouldEqual 0
         registry.digest.walletAssetBalances shouldEqual Seq.empty
       }
@@ -72,7 +72,7 @@ class OffChainRegistrySpec
       val height = Random.nextInt(500) + 1
 
       //apply block to empty registry
-      val registry = OffChainRegistry.empty.updateOnBlock(height, boxes, boxes.map(EncodedBoxId @@ _.boxId))
+      val registry = OffChainRegistry.empty.updateOnBlock(height, boxes, boxes.map(EncodedBoxId @@@ _.boxId))
       val balance = balanceAmount(boxes.map(_.box))
       val assetsBalance = assetAmount(boxes.map(_.box))
       registry.height shouldEqual height
diff --git a/src/test/scala/org/ergoplatform/utils/ErgoTestConstants.scala b/src/test/scala/org/ergoplatform/utils/ErgoTestConstants.scala
index 7dabb08224..707035bf79 100644
--- a/src/test/scala/org/ergoplatform/utils/ErgoTestConstants.scala
+++ b/src/test/scala/org/ergoplatform/utils/ErgoTestConstants.scala
@@ -75,7 +75,7 @@ trait ErgoTestConstants extends ScorexLogging {
   val defaultMinerSecret: DLogProverInput = defaultProver.hdKeys.head.privateInput
   val defaultMinerSecretNumber: BigInt = defaultProver.hdKeys.head.privateInput.w
   val defaultMinerPk: ProveDlog = defaultMinerSecret.publicImage
-  val defaultMinerPkPoint: EcPointType = defaultMinerPk.h
+  val defaultMinerPkPoint: EcPointType = defaultMinerPk.value
 
   val defaultTimestamp: Long = 1552217190000L
   val defaultNBits: Long = settings.chainSettings.initialNBits
diff --git a/src/test/scala/org/ergoplatform/utils/WalletTestOps.scala b/src/test/scala/org/ergoplatform/utils/WalletTestOps.scala
index 2ad09180ad..ac6df7067d 100644
--- a/src/test/scala/org/ergoplatform/utils/WalletTestOps.scala
+++ b/src/test/scala/org/ergoplatform/utils/WalletTestOps.scala
@@ -78,7 +78,7 @@ trait WalletTestOps extends NodeViewBaseOps {
   def makeGenesisTxWithAsset(publicKey: ProveDlog, issueAsset: Boolean): ErgoTransaction = {
     val inputs = IndexedSeq(new Input(genesisEmissionBox.id, emptyProverResult))
     val assets: Seq[(TokenId, Long)] = if (issueAsset) {
-      Seq((Digest32 @@ inputs.head.boxId) -> 1L)
+      Seq((Digest32 @@@ inputs.head.boxId) -> 1L)
     } else {
       Seq.empty
     }
@@ -128,7 +128,7 @@ trait WalletTestOps extends NodeViewBaseOps {
     def isNewAsset(tokenId: TokenId, value: Long): Boolean = java.util.Arrays.equals(tokenId, newAssetIdStub)
 
     val (newAsset, spentAssets) = assets.partition((isNewAsset _).tupled)
-    newAsset.map(Digest32 @@ inputs.head.boxId -> _._2) ++ spentAssets
+    newAsset.map(Digest32 @@@ inputs.head.boxId -> _._2) ++ spentAssets
   }
 
   def randomNewAsset: Seq[(TokenId, Long)] = Seq(newAssetIdStub -> randomLong())

From 8cbf41d6f138f397f8c9bc84a377d3cd1261c276 Mon Sep 17 00:00:00 2001
From: Alexander Slesarenko <avslesarenko@gmail.com>
Date: Tue, 18 Apr 2023 14:31:25 +0200
Subject: [PATCH 2/7] sigma-v5.0.7: update sigma dep to SNAPSHOT

---
 build.sbt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sbt b/build.sbt
index e5e214ec56..9bfb8b46a7 100644
--- a/build.sbt
+++ b/build.sbt
@@ -37,7 +37,7 @@ val circeVersion = "0.13.0"
 val akkaVersion = "2.6.10"
 val akkaHttpVersion = "10.2.4"
 
-val sigmaStateVersion = "5.0.6-64-e991c928-SNAPSHOT"
+val sigmaStateVersion = "5.0.6-65-e42f8ae4-SNAPSHOT"
 
 // for testing current sigmastate build (see sigmastate-ergo-it jenkins job)
 val effectiveSigmaStateVersion = Option(System.getenv().get("SIGMASTATE_VERSION")).getOrElse(sigmaStateVersion)

From 298cb1c505df2bd93cfed5449347d6c8606ed99d Mon Sep 17 00:00:00 2001
From: Alexander Slesarenko <avslesarenko@gmail.com>
Date: Tue, 18 Apr 2023 15:30:43 +0200
Subject: [PATCH 3/7] sigma-v5.0.7: fixes after merge

---
 .../authds/avltree/batch/ProverNodeSerializer.scala       | 2 +-
 .../authds/avltree/batch/VersionedLDBAVLStorage.scala     | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/ProverNodeSerializer.scala b/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/ProverNodeSerializer.scala
index 7a89b50ffa..a2bffc75ca 100644
--- a/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/ProverNodeSerializer.scala
+++ b/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/ProverNodeSerializer.scala
@@ -54,7 +54,7 @@ class ProverNodeSerializer(store: LDBVersionedStore) extends ErgoSerializer[Prov
         if (store != null) {
           new ProxyInternalProverNode(key, leftKey, rightKey, balance)(store)
         } else {
-          new ProxyInternalNode[DigestType](key, Digest32 @@ leftKey, Digest32 @@ rightKey, balance)(hashFn)
+          new ProxyInternalNode[DigestType](key, Digest32 @@@ leftKey, Digest32 @@@ rightKey, balance)(hashFn)
         }
       case LeafPrefix =>
         val key = ADKey @@ r.getBytes(StateTreeParameters.keySize)
diff --git a/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorage.scala b/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorage.scala
index 3e3205cff7..76c7fef556 100644
--- a/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorage.scala
+++ b/avldb/src/main/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorage.scala
@@ -106,8 +106,8 @@ class VersionedLDBAVLStorage(store: LDBVersionedStore)
         val node = VersionedLDBAVLStorage.noStoreSerializer.parseBytes(nodeBytes)
         node match {
           case in: ProxyInternalNode[DigestType] =>
-            subtreeLoop(Digest32 @@ in.leftLabel, builder)
-            subtreeLoop(Digest32 @@ in.rightLabel, builder)
+            subtreeLoop(Digest32 @@@ in.leftLabel, builder)
+            subtreeLoop(Digest32 @@@ in.rightLabel, builder)
           case _ =>
         }
       }
@@ -125,8 +125,8 @@ class VersionedLDBAVLStorage(store: LDBVersionedStore)
         val node = VersionedLDBAVLStorage.noStoreSerializer.parseBytes(nodeBytes)
         node match {
           case in: ProxyInternalNode[DigestType] if level == manifestDepth =>
-            dumpSubtree(Digest32 @@ in.leftLabel)
-            dumpSubtree(Digest32 @@ in.rightLabel)
+            dumpSubtree(Digest32 @@@ in.leftLabel)
+            dumpSubtree(Digest32 @@@ in.rightLabel)
           case in: ProxyInternalNode[DigestType] =>
             manifestLoop(in.leftLabel, level + 1, manifestBuilder)
             manifestLoop(in.rightLabel, level + 1, manifestBuilder)

From 1e381888964122b939cde1c8b25968360de18e25 Mon Sep 17 00:00:00 2001
From: Alexander Slesarenko <avslesarenko@gmail.com>
Date: Sat, 22 Apr 2023 11:19:31 +0200
Subject: [PATCH 4/7] sigma-v5.0.7: update sigma to v5.0.7

---
 .../src/main/scala/scorex/crypto/authds/benchmarks/Helper.scala | 2 +-
 .../authds/avltree/batch/LDBVersionedStoreSpecification.scala   | 2 +-
 .../avltree/batch/VersionedLDBAVLStorageSpecification.scala     | 2 +-
 .../batch/VersionedLDBAVLStorageStatefulSpecification.scala     | 2 +-
 .../avltree/batch/benchmark/LDBVersionedStoreBenchmark.scala    | 2 +-
 .../scorex/crypto/authds/avltree/batch/benchmark/OOMTest.scala  | 2 +-
 build.sbt                                                       | 2 +-
 7 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/avldb/benchmarks/src/main/scala/scorex/crypto/authds/benchmarks/Helper.scala b/avldb/benchmarks/src/main/scala/scorex/crypto/authds/benchmarks/Helper.scala
index 51ddf00701..ab87dc73a9 100644
--- a/avldb/benchmarks/src/main/scala/scorex/crypto/authds/benchmarks/Helper.scala
+++ b/avldb/benchmarks/src/main/scala/scorex/crypto/authds/benchmarks/Helper.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.benchmarks
 
-import scorex.utils.Longs
+import com.google.common.primitives.Longs
 import scorex.crypto.authds.avltree.batch._
 import scorex.crypto.authds.{ADKey, ADValue}
 import scorex.crypto.hash.{Blake2b256, Digest32}
diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/LDBVersionedStoreSpecification.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/LDBVersionedStoreSpecification.scala
index 9eb88a4630..f3236cfff3 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/LDBVersionedStoreSpecification.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/LDBVersionedStoreSpecification.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.avltree.batch
 
-import scorex.utils.Longs
+import com.google.common.primitives.Longs
 import org.scalatest.matchers.should.Matchers
 import org.scalatest.propspec.AnyPropSpec
 import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks
diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala
index 082c8994af..9d35b24dc8 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.avltree.batch
 
-import scorex.utils.Longs
+import com.google.common.primitives.Longs
 import org.scalacheck.{Arbitrary, Gen}
 import org.scalatest.Assertion
 import org.scalatest.matchers.should.Matchers
diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageStatefulSpecification.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageStatefulSpecification.scala
index 81d0e64263..a7b6288edd 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageStatefulSpecification.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageStatefulSpecification.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.avltree.batch
 
-import scorex.utils.Longs
+import com.google.common.primitives.Longs
 import org.scalacheck.Test.Parameters
 import org.scalacheck.commands.Commands
 import org.scalacheck.{Prop, Gen}
diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/LDBVersionedStoreBenchmark.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/LDBVersionedStoreBenchmark.scala
index 7e791d9b70..62c16fcc10 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/LDBVersionedStoreBenchmark.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/LDBVersionedStoreBenchmark.scala
@@ -1,6 +1,6 @@
 package scorex.crypto.authds.avltree.batch.benchmark
 
-import scorex.utils.Longs
+import com.google.common.primitives.Longs
 import scorex.crypto.authds.avltree.batch.helpers.FileHelper
 import scorex.utils.Random
 import scorex.db.LDBVersionedStore
diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/OOMTest.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/OOMTest.scala
index 2d8aa5cd15..03b34284e2 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/OOMTest.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/benchmark/OOMTest.scala
@@ -3,7 +3,7 @@ package scorex.crypto.authds.avltree.batch.benchmark
 import java.io.File
 import java.nio.file.Files
 
-import scorex.utils.{Longs, Shorts}
+import com.google.common.primitives.{Longs, Shorts}
 import scorex.crypto.authds.{ADDigest, ADKey, ADValue}
 import scorex.crypto.authds.avltree.batch._
 import scorex.util.encode.Base16
diff --git a/build.sbt b/build.sbt
index 9bfb8b46a7..70fd1c86a1 100644
--- a/build.sbt
+++ b/build.sbt
@@ -37,7 +37,7 @@ val circeVersion = "0.13.0"
 val akkaVersion = "2.6.10"
 val akkaHttpVersion = "10.2.4"
 
-val sigmaStateVersion = "5.0.6-65-e42f8ae4-SNAPSHOT"
+val sigmaStateVersion = "5.0.7"
 
 // for testing current sigmastate build (see sigmastate-ergo-it jenkins job)
 val effectiveSigmaStateVersion = Option(System.getenv().get("SIGMASTATE_VERSION")).getOrElse(sigmaStateVersion)

From 88e58c6981bbabea03331df0a991aa631dfdcdae Mon Sep 17 00:00:00 2001
From: Alexander Slesarenko <avslesarenko@gmail.com>
Date: Sat, 22 Apr 2023 11:42:56 +0200
Subject: [PATCH 5/7] sigma-v5.0.7: avoid usage of scorex.utils.Longs

---
 .../avltree/batch/VersionedLDBAVLStorageSpecification.scala     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala
index 9d35b24dc8..443d42fd26 100644
--- a/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala
+++ b/avldb/src/test/scala/scorex/crypto/authds/avltree/batch/VersionedLDBAVLStorageSpecification.scala
@@ -193,7 +193,7 @@ class VersionedLDBAVLStorageSpecification extends AnyPropSpec
   val rollbackVersionsTest: (PERSISTENT_PROVER, STORAGE) => Assertion = { (prover: PERSISTENT_PROVER, storage: STORAGE) =>
     (0L until 50L).foreach { long =>
       val insert = Insert(ADKey @@ RandomBytes.randomBytes(32),
-        ADValue @@ scorex.utils.Longs.toByteArray(long))
+        ADValue @@ Longs.toByteArray(long))
       prover.performOneOperation(insert)
       prover.generateProofAndUpdateStorage()
       prover.digest

From 19c3fe889b1f920d5337f3322b5a18a0ed329895 Mon Sep 17 00:00:00 2001
From: Alexander Slesarenko <avslesarenko@gmail.com>
Date: Mon, 24 Apr 2023 12:55:01 +0200
Subject: [PATCH 6/7] sigma-v5.0.7: fix after merge

---
 .../nodeView/history/extra/ExtraIndexerSpecification.scala      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/test/scala/org/ergoplatform/nodeView/history/extra/ExtraIndexerSpecification.scala b/src/test/scala/org/ergoplatform/nodeView/history/extra/ExtraIndexerSpecification.scala
index b81a6b14f9..d836c47696 100644
--- a/src/test/scala/org/ergoplatform/nodeView/history/extra/ExtraIndexerSpecification.scala
+++ b/src/test/scala/org/ergoplatform/nodeView/history/extra/ExtraIndexerSpecification.scala
@@ -298,7 +298,7 @@ object ChainGenerator extends ErgoTestHelpers {
     val tokens: ArrayBuffer[(TokenId, Long)] = ArrayBuffer.empty[(TokenId, Long)]
     inOpt match {
       case Some(input) if cond =>
-        tokens += Tuple2(Digest32 @@ input.id, math.abs(Random.nextInt()))
+        tokens += Tuple2(Digest32 @@@ input.id, math.abs(Random.nextInt()))
       case Some(tokenBox) if !cond =>
         tokenBox.additionalTokens.toArray.foreach(tokens += _)
       case _ =>

From a36132a2ab392c59da0888564e052d81a23e2317 Mon Sep 17 00:00:00 2001
From: Alexander Slesarenko <avslesarenko@gmail.com>
Date: Mon, 24 Apr 2023 13:00:34 +0200
Subject: [PATCH 7/7] sigma-v5.0.7: addressed review comments

---
 .../ergoplatform/wallet/secrets/ExtendedPublicKey.scala   | 8 ++++----
 .../ergoplatform/wallet/secrets/ExtendedSecretKey.scala   | 7 +++----
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedPublicKey.scala b/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedPublicKey.scala
index 56b15b3f50..4fe572243c 100644
--- a/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedPublicKey.scala
+++ b/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedPublicKey.scala
@@ -1,7 +1,5 @@
 package org.ergoplatform.wallet.secrets
 
-import org.bouncycastle.math.ec.ECPoint
-
 import java.util
 import org.bouncycastle.util.BigIntegers
 import org.ergoplatform.wallet.Constants
@@ -65,8 +63,10 @@ object ExtendedPublicKey {
       deriveChildPublicKey(parentKey, idx + 1)
     } else {
       new ExtendedPublicKey(
-        CryptoFacade.encodePoint(childKey, true),
-        childChainCode, parentKey.path.extended(idx))
+        keyBytes = CryptoFacade.encodePoint(childKey, compressed = true),
+        chainCode = childChainCode,
+        path = parentKey.path.extended(idx)
+      )
     }
   }
 
diff --git a/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedSecretKey.scala b/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedSecretKey.scala
index c860f979d8..1ac40239f4 100644
--- a/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedSecretKey.scala
+++ b/ergo-wallet/src/main/scala/org/ergoplatform/wallet/secrets/ExtendedSecretKey.scala
@@ -1,7 +1,5 @@
 package org.ergoplatform.wallet.secrets
 
-import org.bouncycastle.math.ec.ECPoint
-
 import java.math.BigInteger
 import java.util
 import org.bouncycastle.util.BigIntegers
@@ -35,8 +33,9 @@ final class ExtendedSecretKey(private[secrets] val keyBytes: Array[Byte],
   /** Returns extended public key corresponding to this secret key. */
   def publicKey: ExtendedPublicKey =
     new ExtendedPublicKey(
-      CryptoFacade.encodePoint(privateInput.publicImage.value, compressed = true),
-      chainCode, path.toPublicBranch)
+      keyBytes = CryptoFacade.encodePoint(privateInput.publicImage.value, compressed = true),
+      chainCode = chainCode,
+      path = path.toPublicBranch)
 
   def isErased: Boolean = keyBytes.forall(_ == 0x00)