Skip to main content

Test Results for hydra-node

Hydra.SnapshotStrategy

New Snapshot Decision

  • sends ReqSn given is leader and no snapshot in flight and there's a seen tx

  • always ReqSn given head has 1 member and there's a seen tx

    Details
    +++ OK, passed 100 tests:
    89% ConfirmedSnapshot
    11% InitialSnapshot
  • there's always a leader for every snapsnot number

    Details
    +++ OK, passed 100 tests; 16 discarded.
  • do not send ReqSn when we aren't leader

  • do not send ReqSn when there is a snapshot in flight

  • do not send ReqSn when there's no seen transactions

Snapshot Emission

  • update seenSnapshot state when sending ReqSn

Hydra.Persistence

PersistenceIncremental

  • can handle empty files

  • is consistent after multiple append calls in presence of new-lines

    Details
    +++ OK, passed 400 tests:
    70.0% some item contains a new line
    4.2% no items stored

Persistence

  • can handle empty files

  • is consistent after save/load roundtrip

    Details
    +++ OK, passed 100 tests.

Hydra.Party

Ord

  • is transitive

    Details
    +++ OK, passed 100 tests; 570 discarded.
  • is reflexive

    Details
    +++ OK, passed 100 tests.
  • is antisymmetric

    Details
    +++ OK, passed 100 tests.
  • implements Eq and Ord correspondingly

    Details
    +++ OK, passed 100 tests.

JSON encoding of Party

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/Party.json

Hydra.Options

Hydra Node RunOptions

  • validateRunOptions: using more than 4 parties should error out

  • validateRunOptions: loaded cardano keys needs to match with the hydra keys length

  • parses with default node-id set

  • parses --host option given valid IPv4 and IPv6 addresses

  • parses --port option given valid port number

  • parses --peer <host>:<port> option

  • does parse --peer given ipv6 addresses

  • parses --monitoring-port option given valid port number

  • parses --version flag as a parse error

  • parses --hydra-verification-key option as a filepath

  • parses --hydra-signing-key option as a filepath

  • parses --testned-magic option as a number

  • parses --mainnet option

  • parses --contestation-period option as a number of seconds

  • parses --mainnet flag

  • parses --node-socket as a filepath

  • parses --cardano-signing-key option as a filepath

  • parses --cardano-verification-key option as a filepath

  • parses --ledger-genesis-file as a filepath

  • parses --ledger-protocol-parameters-file as a filepath

  • parses --start-chain-from as a pair of slot number and block header hash

  • parses --start-chain-from 0 as starting from genesis

  • parses --hydra-scripts-tx-id as a tx id

    Details
    +++ OK, passed 100 tests.

JSON encoding of RunOptions

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/RunOptions.json

  • roundtrip parsing & printing

    Details
    +++ OK, passed 100 tests.

publish-scripts sub-command

  • does not parse without any options
  • does not parse with some missing option (1)
  • does not parse with some missing option (2)
  • does not parse with some missing option (3)
  • should parse using testnet and all options
  • should parse using mainnet and all options

Hydra.Node

  • emits a single ReqSn and AckSn as leader, even after multiple ReqTxs
  • rotates snapshot leaders
  • processes out-of-order AckSn
  • notifies client when postTx throws PostTxError

Hydra.Network.Heartbeat

  • sends a heartbeat message with local host after 500 ms
  • sends Connected when Ping received from other peer
  • sends Connected when any message received from other party
  • do not send Connected on subsequent messages from already Connected party
  • sends Disconnected given no messages has been received from known party within twice heartbeat delay
  • stop sending heartbeat message given action sends a message
  • restart sending heartbeat messages given last message sent is older than heartbeat delay

Hydra.Network

Serialisation

  • can roundtrip CBOR encoding/decoding of Hydra Message

    Details
    +++ OK, passed 100 tests.

JSON encoding of (Message SimpleTx)

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/Message SimpleTx.json

Ouroboros Network

  • broadcasts messages to single connected peer
  • broadcasts messages between 3 connected peers

Hydra.Model

  • model should not generate 0 Ada UTxO

    Details
    +++ OK, passed 10000 tests.
  • model generates consistent traces

    Details
    +++ OK, passed 10000 tests.
  • implementation respects model

    Details
    +++ OK, passed 100 tests.

    Actions (1930 in total):
    77.10% NewTx
    11.87% Commit
    4.82% Seed
    4.56% Init
    1.66% Abort

    Transitions (1930 in total):
    77.10% Open -> Open
    9.48% Initial -> Initial
    4.82% Start -> Idle
    4.56% Idle -> Initial
    2.38% Initial -> Open
    1.66% Initial -> Final
  • check conflict-free liveness

    Details
    +++ OK, passed 100 tests.

    Actions (1166 in total):
    53.09% NewTx
    15.61% Commit
    8.58% StopTheWorld
    7.80% Seed
    6.86% Init
    2.92% Abort
    2.57% ObserveConfirmedTx
    2.57% Wait

    Transitions (1166 in total):
    60.81% Open -> Open
    14.41% Initial -> Initial
    7.80% Start -> Idle
    6.86% Idle -> Initial
    2.92% Final -> Final
    2.92% Initial -> Final
    2.57% Initial -> Open
    0.94% Idle -> Idle
    0.77% Start -> Start
  • check head opens if all participants commit

    Details
    +++ OK, passed 100 tests.

    Actions (800 in total):
    50.0% Commit
    12.5% Init
    12.5% ObserveHeadIsOpen
    12.5% Seed
    12.5% Wait

    Transitions (800 in total):
    37.5% Initial -> Initial
    25.0% Open -> Open
    12.5% Idle -> Initial
    12.5% Initial -> Open
    12.5% Start -> Idle

Hydra.Logging.Monitoring

  • provides prometheus metrics from traces

Hydra.Logging

  • dumps logs to stdout in JSON with timestamp

  • HydraLog

    Details
    +++ OK, passed 1 test.

Hydra.Ledger.Simple

  • validates only correctly built transactions

    Details
    +++ OK, passed 100 tests.

Hydra.Ledger.Cardano

JSON encoding of (Tx BabbageEra)

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/Tx BabbageEra.json

JSON encoding of (UTxO' (TxOut CtxUTxO BabbageEra))

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/UTxO' (TxOut CtxUTxO BabbageEra).json

JSON encoding of AssetName

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/AssetName.json

  • Same TxId before/after JSON encoding

    Details
    +++ OK, passed 100 tests.
  • Roundtrip to and from Ledger

    Details
    +++ OK, passed 100 tests.
  • CBOR encoding of Tx

    Details
    +++ OK, passed 100 tests.
  • applies valid transaction

    Details
    +++ OK, passed 100 tests.
  • applies valid transaction serialised from JSON

    Details
    +++ OK, passed 100 tests.
  • should parse a Cardano.UTxO

  • should parse a Tx

Evaluate helpers

  • slotNoFromUTCTime . slotNoToUTCTime === id

    Details
    +++ OK, passed 100 tests.

Generators

  • arbitrary @TxIn is reasonably collision resistant

    Details
    +++ OK, passed 100000 tests.
  • arbitrary @TxId is reasonably collision resistant

    Details
    +++ OK, passed 100000 tests.
  • arbitrary @(VerificationKey PaymentKey) is reasonably collision resistant

    Details
    +++ OK, passed 100000 tests.
  • arbitrary @(Hash PaymentKey) is reasonably collision resistant

    Details
    +++ OK, passed 100000 tests.
  • genUTxOAlonzo does not generate collapsing values

    Details
    +++ OK, passed 100 tests.
  • genUTxOAdaOnlyOfSize does not generate collapsing values

    Details
    +++ OK, passed 100 tests.
  • genUTxOFor is reasonably collision resistant

    Details
    +++ OK, passed 100000 tests.
  • genOneUTxOFor is reasonably collision resistant

    Details
    +++ OK, passed 100000 tests.

genTxOut

  • does generate good values

    Details
    +++ OK, passed 200 tests:
    94.5% has multiple assets
    69.5% has datum
    52.5% is VK output
    47.5% is Script output
    5.5% has only ADA

Hydra.HeadLogic

Coordinated Head Protocol

  • reports if a requested tx is expired
  • waits if a requested tx is not (yet) applicable
  • confirms snapshot given it receives AckSn from all parties
  • rejects last AckSn if one signature was from a different snapshot
  • rejects last AckSn if one signature was from a different key
  • rejects last AckSn if one signature was from a completely different message
  • waits if we receive a snapshot with not-yet-seen transactions
  • waits if we receive an AckSn for an unseen snapshot
  • rejects if we receive a too far future snapshot
  • waits if we receive a future snapshot while collecting signatures
  • acks signed snapshot from the constant leader
  • does not ack snapshots from non-leaders
  • rejects too-old snapshots
  • rejects too-old snapshots when collecting signatures
  • rejects too-new snapshots from the leader
  • rejects overlapping snapshot requests from the leader
  • ignores in-flight ReqTx when closed
  • notifies client when it receives a ping
  • everyone does collect on last commit after collect com
  • cannot observe abort after collect com
  • cannot observe collect com after abort
  • notify user on head closing and when passing the contestation deadline
  • contests when detecting close with old snapshot
  • re-contests when detecting contest with old snapshot

Types

JSON encoding of (HeadState SimpleTx)

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/HeadState SimpleTx.json

JSON encoding of (Event SimpleTx)

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/Event SimpleTx.json

Hydra.FireForget

  • client can send 'Hail Hydra!' to server

Hydra.Crypto

MultiSignature

  • is sensitive to order

    Details
    +++ OK, passed 100 tests; 58 discarded.
  • aggregate/verifyMultiSignature roundtrip

    Details
    +++ OK, passed 100 tests.

Signature

  • show includes escaped hex

  • can sign arbitrary messages

    Details
    +++ OK, passed 100 tests; 34 discarded.
  • sign/verify roundtrip

    Details
    +++ OK, passed 100 tests.

VerificationKey

  • show includes escaped hex

JSON encoding of (VerificationKey HydraKey)

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/VerificationKey HydraKey.json

SigningKey

  • show includes escaped hex

  • can be generated when seed exceeds the max seed size for algorithm

  • can be generated

    Details
    +++ OK, passed 100 tests; 32 discarded.
  • arbitrary @(SigningKey HydraKey) is reasonably collision resistant

    Details
    +++ OK, passed 100000 tests.

Hydra.Chain.Direct.Wallet

newTinyWallet

  • initialises wallet by querying UTxO

    Details
    +++ OK, passed 100 tests.
  • re-queries UTxO from the tip, even on reset

    Details
    +++ OK, passed 100 tests.

coverFee

  • balances transaction with fees

    Details
    +++ OK, passed 100 tests.

applyTxs

  • only reduces the UTXO set when no address is ours

    Details
    +++ OK, passed 100 tests.
  • Seen inputs are consumed and not in the resulting UTXO

    Details
    +++ OK, passed 100 tests.

genTxsSpending / genUTxO

  • are well-suited for testing

    Details
    +++ OK, passed 100 tests:
    35% has dependent txs
    27% has no tx that are ours

Hydra.Chain.Direct.Tx

collectComTx

  • cover fee correctly handles redeemers

    Details
    +++ OK, passed 60 tests (100% No fuel UTxO found).
  • Ignore InitTx with wrong contestation period

    Details
    +++ OK, passed 60 tests.
  • Ignore InitTx with wrong cardano keys

    Details
    +++ OK, passed 60 tests.

Hydra.Chain.Direct.TimeHandle

  • can roundtrip currentPointInTime

    Details
    +++ OK, passed 100 tests.
  • should convert slot within latest/current era

Hydra.Chain.Direct.State

acceptance

  • can close & fanout every collected head

    Details
    +++ OK, passed 200 tests:
    78.5% collect failed already
    21.5% collect, close and fanout passed

fanout

  • transaction size is below 16kB

    Details
    +++ OK, passed 100 tests:
    56% Fanout size: 40-58
    27% Fanout size: 10-40
    10% Fanout size: 0
    7% Fanout size: 1-10

    52% 6kB
    29% 5kB
    19% 4kB
  • validates within maxTxExecutionUnits

    Details
    +++ OK, passed 100 tests:
    56% Fanout size: 40-58
    27% Fanout size: 10-40
    10% Fanout size: 0
    7% Fanout size: 1-10

contest

  • transaction size is below 16kB

    Details
    +++ OK, passed 100 tests (100% 1kB).

    Close point (slot) (100 in total):
    100% > 0

    Contestation period (100 in total):
    21% > k blocks
    20% k blocks on mainnet
    16% < k blocks
    12% one month
    11% one year
    10% one day
    10% one week
  • validates within maxTxExecutionUnits

    Details
    +++ OK, passed 100 tests.

    Close point (slot) (100 in total):
    100% > 0

    Contestation period (100 in total):
    21% > k blocks
    20% k blocks on mainnet
    16% < k blocks
    12% one month
    11% one year
    10% one day
    10% one week

close

  • transaction size is below 16kB

    Details
    +++ OK, passed 100 tests:
    89% ConfirmedSnapshot
    11% InitialSnapshot

    89% 1kB
    11% 0kB
  • validates within maxTxExecutionUnits

    Details
    +++ OK, passed 100 tests:
    89% ConfirmedSnapshot
    11% InitialSnapshot

collectCom

  • transaction size is below 16kB

    Details
    +++ OK, passed 100 tests (100% 1kB).
  • validates within maxTxExecutionUnits

    Details
    +++ OK, passed 100 tests.

abort

  • transaction size is below 16kB

    Details
    +++ OK, passed 100 tests:
    63% Abort after some (but not all) commits
    19% Abort immediately, after 0 commits
    18% Abort after all commits

    52% 4kB
    48% 5kB
  • validates within maxTxExecutionUnits

    Details
    +++ OK, passed 100 tests:
    63% Abort after some (but not all) commits
    19% Abort immediately, after 0 commits
    18% Abort after all commits
  • ignore aborts of other heads

    Details
    +++ OK, passed 100 tests.

commit

  • transaction size is below 16kB

    Details
    +++ OK, passed 100 tests:
    89% Non-empty commit
    11% Empty commit

    100% 0kB
  • validates within maxTxExecutionUnits

    Details
    +++ OK, passed 100 tests:
    89% Non-empty commit
    11% Empty commit
  • consumes all inputs that are committed

    Details
    +++ OK, passed 100 tests:
    89% Non-empty commit
    11% Empty commit
  • can only be applied / observed once

    Details
    +++ OK, passed 100 tests:
    89% Non-empty commit
    11% Empty commit
  • reject committing outputs with byron addresses

    Details
    +++ OK, passed 100 tests.
  • reject committing outputs with reference scripts

    Details
    +++ OK, passed 100 tests.
  • reject Commits with more than maxMainnetLovelace Lovelace

    Details
    +++ OK, passed 100 tests.

init

  • transaction size is below 16kB

    Details
    +++ OK, passed 100 tests:
    75% 2+ parties
    25% 1 party

    61% 5kB
    39% 4kB
  • validates within maxTxExecutionUnits

    Details
    +++ OK, passed 100 tests:
    75% 2+ parties
    25% 1 party
  • only proper head is observed

    Details
    +++ OK, passed 100 tests.
  • is not observed if not invited

    Details
    +++ OK, passed 100 tests.

observeTx

  • All valid transitions for all possible states can be observed.

    Details
    +++ OK, passed 100 tests.

    ChainTransition (100 in total):
    22% Init
    18% Close
    17% Contest
    15% Commit
    14% Collect
    14% Fanout

Plutus.PubKeyHash

JSON encoding of PubKeyHash

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/PubKeyHash.json

ChainState

JSON encoding of ChainState

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/ChainState.json

Hydra.Chain.Direct.ScriptRegistry

  • newScriptRegistry (registryUTxO r) === Just r

    Details
    +++ OK, passed 100 tests.

Hydra.Chain.Direct.Handlers

LocalChainState

  • can resume from chain state

    Details
    +++ OK, passed 100 tests:
    31% Rollback 2 blocks
    18% Rollback 3 blocks
    16% Rollback 5 blocks
    15% Rollback 4 blocks
    11% Rollback 1 blocks
    9% Rollback 0 blocks

chainSyncHanlder

  • roll forward results in Tick events

    Details
    +++ OK, passed 100 tests.
  • roll forward fails with outdated TimeHandle

    Details
    +++ OK, passed 100 tests.
  • observes transactions onRollForward

    Details
    +++ OK, passed 100 tests:
    22% Commit
    20% Contest
    18% Init
    17% Collect
    12% Fanout
    11% Close
  • rollbacks state onRollBackward

    Details
    +++ OK, passed 100 tests:
    16% Rollback to: ChainSlot 0 / 2
    14% Rollback to: ChainSlot 0 / 3
    13% Rollback to: ChainSlot 0 / 4
    12% Rollback to: ChainSlot 2 / 2
    7% Rollback to: ChainSlot 3 / 3
    6% Rollback to: ChainSlot 0 / 5
    5% Rollback to: ChainSlot 5 / 5
    4% Rollback to: ChainSlot 3 / 4
    3% Rollback to: ChainSlot 1 / 2
    3% Rollback to: ChainSlot 2 / 3
    3% Rollback to: ChainSlot 2 / 5
    3% Rollback to: ChainSlot 4 / 5
    2% Rollback to: ChainSlot 1 / 4
    2% Rollback to: ChainSlot 1 / 5
    2% Rollback to: ChainSlot 2 / 4
    2% Rollback to: ChainSlot 3 / 5
    2% Rollback to: ChainSlot 4 / 4
    1% Rollback to: ChainSlot 1 / 3

Hydra.Chain.Direct.Contract

Fanout

  • is healthy

    Details
    +++ OK, passed 1 test.
  • does not survive random adversarial mutations

    Details
    +++ OK, passed 200 tests.

    FanoutMutation (200 in total):
    38.0% MutateAddUnexpectedOutput
    34.0% MutateChangeOutputValue
    28.0% MutateValidityBeforeDeadline

Contest

  • is healthy

    Details
    +++ OK, passed 1 test.
  • does not survive random adversarial mutations

    Details
    +++ OK, passed 200 tests.

    ContestMutation (200 in total):
    10.5% MutateHeadIdInOutput
    7.5% MutateTokenMintingOrBurning
    7.5% NotUpdateDeadlineAlthoughItShould
    6.5% MutateOutputContestationPeriod
    6.5% NotContinueContract
    6.0% MutateSignatureButNotSnapshotNumber
    5.0% MutateContesters
    5.0% MutateInputContesters
    5.0% MutateRequiredSigner
    5.0% MutateValidityPastDeadline
    4.5% MutatePartiesInOutput
    4.5% MutateSnapshotNumberButNotSignature
    4.0% ContestFromDifferentHead
    4.0% MutateMultipleRequiredSigner
    4.0% SnapshotNotSignedByAllParties
    3.5% MutateValueInOutput
    3.0% MutateNoRequiredSigner
    3.0% PushDeadlineAlthoughItShouldNot
    2.5% MutateContestUTxOHash
    2.5% MutateToNonNewerSnapshot

CloseInitial

  • is healthy

    Details
    +++ OK, passed 1 test.
  • does not survive random adversarial mutations

    Details
    +++ OK, passed 400 tests.

    CloseInitialMutation (400 in total):
    100.0% MutateCloseContestationDeadline'

Close

  • is healthy

    Details
    +++ OK, passed 1 test.
  • does not survive random adversarial mutations

    Details
    +++ OK, passed 200 tests.

    CloseMutation (200 in total):
    9.0% CloseFromDifferentHead
    8.0% MutateContestationDeadline
    7.0% MutateSignatureButNotSnapshotNumber
    6.5% MutateContesters
    6.5% NotContinueContract
    6.0% MutateInfiniteUpperBound
    6.0% MutateValueInOutput
    5.5% MutateInfiniteLowerBound
    5.5% MutateMultipleRequiredSigner
    5.5% SnapshotNotSignedByAllParties
    5.0% MutateHeadIdInOutput
    4.5% MutateSnapshotNumberToLessThanEqualZero
    4.0% MutateCloseUTxOHash
    4.0% MutateNoRequiredSigner
    4.0% MutateValidityInterval
    3.5% MutatePartiesInOutput
    3.5% MutateSnapshotNumberButNotSignature
    3.0% MutateRequiredSigner
    3.0% MutateTokenMintingOrBurning

CollectCom

  • is healthy

    Details
    +++ OK, passed 1 test.
  • does not survive random adversarial mutations

    Details
    +++ OK, passed 200 tests.

    CollectComMutation (200 in total):
    16.0% NotContinueContract
    15.0% MutateTokenMintingOrBurning
    13.0% ExtractSomeValue
    13.0% MutateHeadId
    12.0% MutateNumberOfParties
    11.5% MutateCommitToInitial
    11.5% MutateRequiredSigner
    8.0% MutateOpenUTxOHash

Commit

  • is healthy

    Details
    +++ OK, passed 1 test.
  • does not survive random adversarial mutations

    Details
    +++ OK, passed 100 tests.

    CommitMutation (100 in total):
    22% NonContinuousHeadId
    15% MutateRequiredSigner
    14% MutateCommitOutputValue
    14% MutateCommittedAddress
    13% UsePTFromDifferentHead
    11% MutateCommittedValue
    11% MutateTokenMintingOrBurning

Abort

  • is healthy

    Details
    +++ OK, passed 100 tests.
  • does not survive random adversarial mutations

    Details
    +++ OK, passed 200 tests.

    AbortMutation (200 in total):
    12.5% MutateThreadTokenQuantity
    11.5% ReorderCommitOutputs
    11.0% BurnOneTokenMore
    10.5% DropCollectedInput
    10.5% MutateParties
    10.0% MutateRequiredSigner
    9.5% MutateUseDifferentHeadToAbort
    8.5% DropOneCommitOutput
    8.0% MintOnAbort
    8.0% UseInputFromOtherHead

Init

  • is healthy

    Details
    +++ OK, passed 1 test.
  • does not survive random adversarial mutations

    Details
    +++ OK, passed 100 tests.

    InitMutation (100 in total):
    22% MintTooManyTokens
    15% MutateDropSeedInput
    14% MutateAddAnotherPT
    14% MutateDropInitialOutput
    13% MutateHeadIdInDatum
    11% MutateInitialOutputValue
    11% MutateSeedInDatum

Serializing commits

  • deserializeCommit . serializeCommit === id

    Details
    +++ OK, passed 100 tests.

TxOut hashing

  • OffChain.hashUTxO == OnChain.hashTxOuts (on sorted tx outs)

    Details
    +++ OK, passed 20 tests.
  • OnChain.hashPreSerializedCommits == OnChain.hashTxOuts (on sorted tx outs)

    Details
    +++ OK, passed 20 tests.
  • does care about ordering of TxOut

    Details
    +++ OK, passed 20 tests; 27 discarded.

Signature validator

  • verifies single signature produced off-chain

    Details
    +++ OK, passed 100 tests.
  • verifies snapshot multi-signature for list of parties and signatures

    Details
    +++ OK, passed 100 tests.

Hydra.Behavior

rolling back & forward does not make the node crash

  • does work for rollbacks past init
  • does work for rollbacks past open

Hydra Node Logging

  • traces processing of events
  • traces handling of effects

JSON encoding of (HydraNodeLog SimpleTx)

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/HydraNodeLog SimpleTx.json

Two participant Head

  • only opens the head after all nodes committed
  • can abort and re-open a head when one party has not committed
  • cannot abort head when commits have been collected
  • cannot commit twice
  • outputs committed utxo when client requests it

in an open head

  • sees the head closed by other nodes

  • valid new transactions are seen by all parties

  • valid new transactions get snapshotted

  • depending transactions stay pending and are confirmed in order

  • depending transactions expire if not applicable in time

  • sending two conflicting transactions should lead one being confirmed and one expired

  • multiple transactions get snapshotted

  • outputs utxo from confirmed snapshot when client requests it

  • can be finalized by all parties after contestation period

  • contest automatically when detecting closing with old snapshot

Single participant Head

  • accepts Init command
  • accepts Commit after successful Init
  • not accepts commits when the head is open
  • can close an open head
  • does not fanout automatically
  • does finalize head after contestation period upon command

Sanity tests of test suite

  • does not delay for real

Hydra.API.ServerOutput

JSON encoding of (ReasonablySized (TimedServerOutput (Tx BabbageEra)))

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/ReasonablySized (TimedServerOutput (Tx BabbageEra)).json

JSON encoding of (ReasonablySized (ServerOutput (Tx BabbageEra)))

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/ReasonablySized (ServerOutput (Tx BabbageEra)).json

JSON encoding of (ReasonablySized (ServerOutput SimpleTx))

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/ReasonablySized (ServerOutput SimpleTx).json

Hydra.API.Server

ServerSpec

  • should fail on port in use

  • greets

  • sends sendOutput to all connected clients

  • sends all sendOutput history to all connected clients after a restart

  • echoes history (past outputs) to client upon reconnection

    Details
    +++ OK, passed 100 tests:
    87% more than one message when reconnecting
    8% only one message when reconnecting
    5% no message when reconnecting
  • does not echo history if client says no

    Details
    +++ OK, passed 100 tests:
    87% more than one message when reconnecting
    8% only one message when reconnecting
    5% no message when reconnecting
  • outputs tx as cbor or json depending on the client

  • removes UTXO from snapshot when clients request it

  • sequence numbers are continuous and strictly monotonically increasing

    Details
    +++ OK, passed 100 tests.
  • displays correctly headStatus and snapshotUtxo in a Greeting message

  • greets with correct head status and snapshot utxo after restart

  • sends an error when input cannot be decoded

Hydra.API.ClientInput

FromJSON (ValidatedTx era)

  • accepts transactions produced via cardano-cli

    Details
    +++ OK, passed 100 tests.
  • accepts raw CBOR-base16-encoded transactions

    Details
    +++ OK, passed 100 tests.

JSON encoding of (ReasonablySized (ClientInput (Tx BabbageEra)))

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/ReasonablySized (ClientInput (Tx BabbageEra)).json

JSON encoding of (ReasonablySized (ClientInput SimpleTx))

  • allows to encode values with aeson and read them back

    Details
    +++ OK, passed 100 tests.
  • produces the same JSON as is found in golden/ReasonablySized (ClientInput SimpleTx).json