All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.wavesplatform.test.DomainPresets.scala Maven / Gradle / Ivy

The newest version!
package com.wavesplatform.test

import com.wavesplatform.features.{BlockchainFeature, BlockchainFeatures}
import com.wavesplatform.lang.directives.values.*
import com.wavesplatform.settings.{FunctionalitySettings, WavesSettings, loadConfig}

object DomainPresets {
  implicit class WavesSettingsOps(val ws: WavesSettings) extends AnyVal {
    def configure(transformF: FunctionalitySettings => FunctionalitySettings): WavesSettings = {
      val functionalitySettings = transformF(ws.blockchainSettings.functionalitySettings)
      ws.copy(blockchainSettings = ws.blockchainSettings.copy(functionalitySettings = functionalitySettings))
    }

    def withFeatures(fs: BlockchainFeature*): WavesSettings =
      configure(_.copy(preActivatedFeatures = fs.map(_.id -> 0).toMap))

    def addFeatures(fs: BlockchainFeature*): WavesSettings = configure { functionalitySettings =>
      val newFeatures = functionalitySettings.preActivatedFeatures ++ fs.map(_.id -> 0)
      functionalitySettings.copy(preActivatedFeatures = newFeatures)
    }

    def setFeaturesHeight(fs: (BlockchainFeature, Int)*): WavesSettings = configure { functionalitySettings =>
      val newFeatures = functionalitySettings.preActivatedFeatures ++ fs.map { case (f, height) => (f.id, height) }
      functionalitySettings.copy(preActivatedFeatures = newFeatures)
    }

    def withActivationPeriod(period: Int): WavesSettings =
      configure(_.copy(featureCheckBlocksPeriod = period, blocksForFeatureActivation = period, doubleFeaturesPeriodsAfterHeight = 10000))

    def noFeatures(): WavesSettings = {
      ws.copy(
        blockchainSettings = ws.blockchainSettings.copy(
          functionalitySettings = ws.blockchainSettings.functionalitySettings
            .copy(preActivatedFeatures = Map.empty)
        ),
        featuresSettings = ws.featuresSettings.copy(supported = Nil)
      )
    }
  }

  lazy val SettingsFromDefaultConfig: WavesSettings = WavesSettings.fromRootConfig(loadConfig(None))

  def domainSettingsWithFS(fs: FunctionalitySettings): WavesSettings =
    SettingsFromDefaultConfig.copy(
      blockchainSettings = SettingsFromDefaultConfig.blockchainSettings.copy(functionalitySettings = fs)
    )

  def domainSettingsWithPreactivatedFeatures(fs: BlockchainFeature*): WavesSettings =
    domainSettingsWithFeatures(fs.map(_ -> 0)*)

  def domainSettingsWithFeatures(fs: (BlockchainFeature, Int)*): WavesSettings = {
    val defaultFS = SettingsFromDefaultConfig
      .noFeatures()
      .blockchainSettings
      .functionalitySettings

    domainSettingsWithFS(defaultFS.copy(preActivatedFeatures = fs.map { case (f, h) =>
      f.id -> h
    }.toMap))
  }

  val NG: WavesSettings = domainSettingsWithPreactivatedFeatures(
    BlockchainFeatures.MassTransfer, // Removes limit of 100 transactions per block
    BlockchainFeatures.NG
  )

  val ScriptsAndSponsorship: WavesSettings = NG
    .addFeatures(
      BlockchainFeatures.SmartAccounts,
      BlockchainFeatures.SmartAccountTrading,
      BlockchainFeatures.OrderV3,
      BlockchainFeatures.FeeSponsorship,
      BlockchainFeatures.DataTransaction,
      BlockchainFeatures.SmartAssets
    )
    .setFeaturesHeight(
      BlockchainFeatures.FeeSponsorship -> -NG.blockchainSettings.functionalitySettings.activationWindowSize(1)
    )

  val RideV3: WavesSettings = ScriptsAndSponsorship.addFeatures(
    BlockchainFeatures.Ride4DApps
  )

  val RideV4: WavesSettings = RideV3.addFeatures(
    BlockchainFeatures.BlockReward,
    BlockchainFeatures.BlockV5
  )

  val RideV4WithRewards: WavesSettings = RideV4.addFeatures(BlockchainFeatures.BlockReward)

  val RideV5: WavesSettings = RideV4.addFeatures(BlockchainFeatures.SynchronousCalls)

  val RideV6: WavesSettings = RideV5.addFeatures(BlockchainFeatures.RideV6)

  val ConsensusImprovements: WavesSettings = RideV6.addFeatures(BlockchainFeatures.ConsensusImprovements)

  val BlockRewardDistribution: WavesSettings = ConsensusImprovements.addFeatures(BlockchainFeatures.BlockRewardDistribution)

  val ContinuationTransaction: WavesSettings = RideV6
    .addFeatures(BlockchainFeatures.ContinuationTransaction)
    .copy(
      featuresSettings = RideV6.featuresSettings.copy(autoShutdownOnUnsupportedFeature = false)
    )

  val TransactionStateSnapshot: WavesSettings = BlockRewardDistribution.addFeatures(BlockchainFeatures.LightNode)

  def settingsForRide(version: StdLibVersion): WavesSettings =
    version match {
      case V1 => RideV3
      case V2 => RideV3
      case V3 => RideV3
      case V4 => RideV4
      case V5 => RideV5
      case V6 => RideV6
      case V7 => BlockRewardDistribution
      case V8 => TransactionStateSnapshot
    }

  def mostRecent: WavesSettings = RideV6
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy