StandardTxVariations

scalus.testing.StandardTxVariations

Standard transaction variation patterns for property-based and exhaustive testing.

This object provides factory methods for creating common transaction variation patterns. Each method returns a TxVariations[S] or TxSamplingVariations[S] that can be combined with other variations using the ++ operator.

Variations receive a TxTemplate containing the base transaction builder, sponsor, and signer. They modify the builder or create new transactions using the template's sponsor/signer.

==Example Usage==

val stealVariation = StandardTxVariations.removeContractOutput[AuctionState](
 extractUtxo = _.utxo,
 redeemer = _ => BidRedeemer.toData,
 script = auctionScript
)

// Combine with other variations
val allVariations = stealVariation ++ corruptDatumVariation

// Use in testing - txTemplate provides base tx, sponsor, signer
stealVariation.enumerate(provider, state, txTemplate)

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any
Self type

Members list

Value members

Concrete methods

def aroundDeadline[S](extractDeadline: S => Long): TxSamplingVariations[S]

Test around a deadline boundary - modifies validity interval of base tx.

Test around a deadline boundary - modifies validity interval of base tx.

Attributes

def aroundThreshold[S](extractThreshold: S => Coin, extractUtxo: S => Utxo, redeemer: S => Data, script: PlutusScript): TxSamplingVariations[S]

Test around a value threshold - modifies output value in base tx.

Test around a value threshold - modifies output value in base tx.

Attributes

def corruptDatum[S](extractUtxo: S => Utxo, corruptedDatums: S => Gen[Data], redeemer: S => Data, script: PlutusScript): TxSamplingVariations[S]

Corrupt datum - return correct value but wrong datum.

Corrupt datum - return correct value but wrong datum.

Attributes

def default[S](extractUtxo: S => Utxo, extractDatum: S => Data, redeemer: S => Data, script: PlutusScript): TxVariations[S]

Default combined variations for testing common attack vectors.

Default combined variations for testing common attack vectors.

Includes:

  • removeContractOutput: Steal attack - spend without returning funds
  • duplicateOutput: Double output attack - split value into two outputs
  • stealPartialValue: Partial theft - return less value than expected

Attributes

def defaultExtended[S](extractUtxo: S => Utxo, extractDatum: S => Data, redeemer: S => Data, script: PlutusScript, corruptedDatums: S => Gen[Data], alternativeAddresses: S => Gen[Address]): TxVariations[S]

Extended default variations with corrupted datum and wrong address testing.

Extended default variations with corrupted datum and wrong address testing.

Attributes

def doubleSatisfaction[S](extractFirstUtxo: S => Utxo, extractSecondUtxo: S => Utxo, firstRedeemer: S => Data, secondRedeemer: S => Data, outputValue: S => Value, outputDatum: S => Data, script: PlutusScript): TxVariations[S]

Double satisfaction attack - spend two UTXOs, only satisfy one.

Double satisfaction attack - spend two UTXOs, only satisfy one.

Attributes

def duplicateOutput[S](extractUtxo: S => Utxo, extractDatum: S => Data, redeemer: S => Data, script: PlutusScript): TxVariations[S]

Duplicate output - split value into two outputs.

Duplicate output - split value into two outputs.

Attributes

def mintExtra[S](assetName: AssetName, expectedAmount: S => Long, extraAmounts: Gen[Long], redeemer: Data, script: PlutusScript): TxSamplingVariations[S]

Mint extra tokens beyond allowed.

Mint extra tokens beyond allowed.

Attributes

No validity range - removes time constraints from base tx.

No validity range - removes time constraints from base tx.

Attributes

def removeContractOutput[S](extractUtxo: S => Utxo, redeemer: S => Data, script: PlutusScript): TxVariations[S]

Remove expected output - funds go to change (steal attack).

Remove expected output - funds go to change (steal attack).

Attributes

Remove required reference input from base tx.

Remove required reference input from base tx.

Attributes

def slotsAround(deadline: Long): Gen[Long]

Generate slots around a deadline.

Generate slots around a deadline.

Attributes

def stealPartialValue[S](extractUtxo: S => Utxo, extractExpectedValue: S => Value, extractDatum: S => Data, redeemer: S => Data, script: PlutusScript): TxSamplingVariations[S]

Return partial value - less than expected.

Return partial value - less than expected.

Attributes

def unauthorizedMint[S](assetName: AssetName, mintAmounts: Gen[Long], redeemer: Data, script: PlutusScript): TxSamplingVariations[S]

Unauthorized mint - add minting to base transaction.

Unauthorized mint - add minting to base transaction.

Attributes

def valuesAround(threshold: Coin): Gen[Coin]

Generate values around a threshold.

Generate values around a threshold.

Attributes

Wide validity range - sets overly permissive time bounds on base tx.

Wide validity range - sets overly permissive time bounds on base tx.

Attributes

def wrongOutputAddress[S](extractUtxo: S => Utxo, addresses: S => Gen[Address], extractDatum: S => Data, redeemer: S => Data, script: PlutusScript): TxSamplingVariations[S]

Wrong output address - send to wrong recipient.

Wrong output address - send to wrong recipient.

Attributes

def wrongRedeemer[S](extractUtxo: S => Utxo, redeemers: S => Gen[Data], script: PlutusScript): TxSamplingVariations[S]

Wrong redeemer - use incorrect redeemer with base tx outputs.

Wrong redeemer - use incorrect redeemer with base tx outputs.

Attributes

def wrongReferenceInput[S](wrongRefs: S => Gen[Utxo]): TxSamplingVariations[S]

Add wrong/stale reference input to base tx.

Add wrong/stale reference input to base tx.

Attributes