Test results for hydra-node
Hydra.Utils
- Should throw if it can't write on disk
- Should throw if the file already exists
Hydra.Persistence
PersistenceIncremental
can handle empty files
is consistent after multiple append calls in presence of new-lines
Details
+++ OK, passed 200 tests:
77.5% some item contains a new line
5.0% no items storedit cannot load from a different thread once having started appending
Details
+++ OK, passed 100 tests.
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; 516 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
has alice, bob, carol sorted
Hydra.Options
Hydra Node RunOptions
validateRunOptions: using more than 5 parties should error out
validateRunOptions: loaded cardano keys needs to match with the hydra keys length
parses with default values
parses --host option given valid IPv4 and IPv6 addresses
parses --port option given valid port number
parses --peer
<host>:<port>
optiondoes parse --peer given ipv6 addresses
parses --monitoring-port option given valid port number
flag --version returns version with base version from cabal
parses --hydra-verification-key option as a filepath
parses --hydra-signing-key option as a filepath
parses --testnet-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-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.
switches to offline chain when using --initial-utxo
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
gen-hydra-keys sub-command
- should be able to parse gen-hydra-keys sub-command
- should parse gen-hydra-keys without the output-file flag using default file name
offline sub-command
- does parse with defaults
- does parse --ledger-genesis
- does parse --initial-utxo
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
roundtrip parsing & printing
Details
+++ OK, passed 100 tests.
Hydra.Node.Run
- throws exception given options are invalid
Hydra.Node.InputQueue
adds sequential id to all enqueued items
Details
+++ OK, passed 100 tests.
Hydra.Node
checkHeadState
- accepts configuration consistent with HeadState
- throws exception given contestation period differs
- throws exception given parties differ
- log error given configuration mismatches head state
stepHydraNode
events are sent to all sinks
event ids are strictly monotonic
Details
+++ OK, passed 100 tests.
can continue after re-hydration
emits a single ReqSn as leader, even after multiple ReqTxs
rotates snapshot leaders
processes out-of-order AckSn
notifies client when postTx throws PostTxError
signs snapshot even if it has seen conflicting transactions
hydrate
loads events from source into all sinks
Details
+++ OK, passed 100 tests.
event ids are consistent
Details
+++ OK, passed 100 tests.
fails if one sink fails
Details
+++ OK, passed 100 tests.
checks head state
Details
+++ OK, passed 100 tests.
Hydra.Network.Reliability
sending messages
broadcast messages to the network assigning a sequential id
Details
+++ OK, passed 100 tests.
stress test networking layer
Details
+++ OK, passed 5000 tests.
Messages from Alice to Bob (5000 in total):
32.60% < 10
18.68% < 20
14.52% < 30
10.98% < 40
7.66% < 50
5.32% < 60
4.62% < 70
2.92% < 80
2.16% < 90
0.54% < 100
Messages from Bob to Alice (5000 in total):
32.40% < 10
18.38% < 20
14.52% < 30
11.62% < 40
7.92% < 50
5.58% < 60
4.52% < 70
2.44% < 80
1.84% < 90
0.78% < 100broadcast updates counter from peers
appends messages to disk and can load them back
receiving messages
forward received messages
do not drop messages with same ids from different peers
Ignores messages with malformed acks
drops already received messages
Details
+++ OK, passed 100 tests:
60% 0
30% 1
8% 2
1% 3
1% 5
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.Authenticate
- pass the authenticated messages around
- drop message coming from unknown party
- drop message coming from party with wrong signature
- authenticate the message to broadcast
- logs dropped messages
Serialization
can roundtrip CBOR encoding/decoding of Signed Hydra Message
Details
+++ OK, passed 100 tests.
JSON encoding of AuthLog
allows to encode values with aeson and read them back
Details
+++ OK, passed 100 tests.
produces the same JSON as is found in golden/AuthLog.json
Hydra.Network
configureMessagePersistence
- throws ParameterMismatch when configuring given number of acks does not match number of parties
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
- handshake failures should call the handshakeCallback
- broadcasts messages between 3 connected peers
Hydra.Model.MockChain
works with valid transaction
Details
+++ OK, passed 100 tests.
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.
Action polarity (768 in total):
100.0% +
Actions (768 in total):
38.8% +NewTx
18.9% +Commit
11.8% +Seed
10.9% +Init
4.8% +Close
4.7% +Fanout
3.5% +RollbackAndForward
3.3% +Abort
3.3% +Decommit
Transitions (768 in total):
45.2% Open -> Open
12.6% Initial -> Initial
11.8% Start -> Idle
10.9% Idle -> Initial
6.2% Initial -> Open
4.8% Open -> Closed
4.7% Closed -> Final
3.3% Initial -> Final
0.4% Closed -> Closedcheck conflict-free liveness
Details
+++ OK, passed 100 tests.
Action polarity (839 in total):
100.0% +
Actions (839 in total):
30.0% +NewTx
17.8% +Commit
11.9% +StopTheWorld
10.7% +Seed
9.9% +Init
4.2% +Abort
3.8% +RollbackAndForward
2.4% +Close
2.4% +Decommit
2.4% +ObserveConfirmedTx
2.4% +Wait
2.1% +Fanout
Transitions (839 in total):
42.6% Open -> Open
13.9% Initial -> Initial
10.7% Start -> Idle
9.9% Idle -> Initial
6.3% Final -> Final
4.8% Initial -> Open
4.2% Initial -> Final
2.4% Open -> Closed
2.1% Closed -> Final
1.2% Start -> Start
1.1% Closed -> Closed
0.8% Idle -> Idlecheck head opens if all participants commit
Details
+++ OK, passed 100 tests.
Action polarity (676 in total):
100.0% +
Actions (676 in total):
40.8% +Commit
14.8% +Init
14.8% +ObserveHeadIsOpen
14.8% +Seed
14.8% +Wait
Transitions (676 in total):
29.6% Open -> Open
26.0% Initial -> Initial
14.8% Idle -> Initial
14.8% Initial -> Open
14.8% Start -> Idlefanout contains whole confirmed UTxO
Details
+++ OK, passed 100 tests.
Action polarity (879 in total):
100.0% +
Actions (879 in total):
28.7% +NewTx
17.0% +Commit
11.4% +StopTheWorld
10.2% +Seed
9.4% +Init
4.6% +Close
4.3% +Fanout
4.0% +Abort
3.6% +RollbackAndForward
2.3% +Decommit
2.3% +ObserveConfirmedTx
2.3% +Wait
Transitions (879 in total):
38.3% Open -> Open
13.3% Initial -> Initial
10.2% Start -> Idle
9.4% Idle -> Initial
8.3% Final -> Final
4.6% Initial -> Open
4.6% Open -> Closed
4.3% Closed -> Final
4.0% Initial -> Final
1.1% Start -> Start
1.0% Closed -> Closed
0.8% Idle -> IdletoRealUTxO is distributive
Details
+++ OK, passed 100 tests.
toTxOuts is distributive
Details
+++ OK, passed 100 tests.
parties contest to wrong closed snapshot
Details
+++ OK, passed 100 tests.
Action polarity (1276 in total):
100.00% +
Actions (1276 in total):
21.63% +Commit
15.67% +Wait
7.84% +CloseWithInitialSnapshot
7.84% +Fanout
7.84% +Init
7.84% +NewTx
7.84% +ObserveConfirmedTx
7.84% +ObserveHeadIsOpen
7.84% +Seed
7.84% +StopTheWorld
Transitions (1276 in total):
39.18% Open -> Open
13.79% Initial -> Initial
7.84% Closed -> Final
7.84% Final -> Final
7.84% Idle -> Initial
7.84% Initial -> Open
7.84% Open -> Closed
7.84% Start -> Idle
Hydra.Logging.Monitoring
- provides prometheus metrics from traces
Hydra.Logging
dumps logs to stdout in JSON with timestamp
Validates logs.yaml schema
Details
+++ OK, passed 1 test.
Schema covers all defined log entries
Details
+++ OK, passed 100 tests.
Hydra.Ledger.Simple
validates only correctly built transactions
Details
+++ OK, passed 100 tests.
Hydra.Ledger.Cardano.Time
roundtrip slotNoToUTCTime and slotNoFromUTCTime
Details
+++ OK, passed 100 tests.
slotNoFromUTCTime works for any time
Details
+++ OK, passed 100 tests:
52% before system start
46% after system start
2% equal to system start
Hydra.Ledger.Cardano
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.
genChainPoint
generates only some genesis points
Details
+++ OK, passed 800 tests (81.8% not at genesis).
genValue
produces realistic values
Details
+++ OK, passed 100 tests.
genOutput
has enough lovelace to cover assets
Details
+++ OK, passed 100 tests.
genTxOut
does generate good values
Details
+++ OK, passed 100 tests:
61% has datum
55% has multiple assets
51% is VK output
49% is Script output
45% has only ADA
applyTransactions
works with valid transaction
Details
+++ OK, passed 100 tests.
works with valid transaction deserialised from JSON
Details
+++ OK, passed 100 tests.
Tx
JSON encoding of Tx according to schema
Details
+++ OK, passed 5 tests.
PParams
Roundtrip JSON encoding
Details
+++ OK, passed 100 tests.
UTxO
JSON encoding of UTxO according to schema
Details
+++ OK, passed 1 test.
parses a specific UTxO
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
Hydra.JSONSchema
prop_validateJSONSchema
works with api.yaml and UTCTime
Details
+++ OK, passed 1 test.
validateJSON withJsonSpecifications
- works using identity selector and Null input
- fails on non-existing schema file
- fails with missing tool
- selects a sub-schema correctly
- produces helpful errors
- resolves refs
Hydra.HeadLogicSnapshot
On AckSn
- sends ReqSn when leader and there are seen transactions
- does NOT send ReqSn when we are the leader but there are NO seen transactions
- does NOT send ReqSn when we are NOT the leader but there are seen transactions
- updates seenSnapshot state when sending ReqSn
On ReqTx
always emit ReqSn given head has 1 member
Details
+++ OK, passed 100 tests.
sends ReqSn when leader and no snapshot in flight
does NOT send ReqSn when we are NOT the leader even if no snapshot in flight
does NOT send ReqSn when we are the leader but snapshot in flight
updates seenSnapshot state when sending ReqSn
Generic Snapshot property
there's always a leader for every snapshot number
Details
+++ OK, passed 100 tests; 14 discarded.
Hydra.HeadLogic
Coordinated Head Protocol using real Tx
any tx with expiring upper validity range gets pruned
Details
+++ OK, passed 100 tests.
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
Tracks Transaction Ids
- keeps transactions in allTxs given it receives a ReqTx
- removes transactions in allTxs given it receives a ReqSn
- removes transactions from allTxs when included in a acked snapshot even when emitting a ReqSn
Decommit
observes DecommitRequested and ReqDec in an Open state
ignores ReqDec when not in Open state
Details
+++ OK, passed 100 tests.
reports if a requested decommit tx is expired
wait for second decommit when another one is in flight
waits if a requested decommit tx is not (yet) applicable
updates decommitTx on valid ReqDec
emits ReqSn on valid RecDec
ReqSn
prunes local txs in order
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
rejects last AckSn if already received signature from this party
rejects snapshot request with transaction not applicable to previous snapshot
waits if we receive a snapshot with unseen 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 invalid snapshots version
rejects overlapping snapshot requests from the leader
rejects same version snapshot requests with differring decommit txs
ignores in-flight ReqTx when closed
ignores in-flight ReqDec when closed
everyone does collect on last commit after collect com
cannot observe abort after collect com
cannot observe collect com after abort
notifies 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
ignores unrelated initTx
Details
+++ OK, passed 100 tests.
connectivity messages passthrough without affecting the current state
Details
+++ OK, passed 100 tests.
ignores abortTx of another head
Details
+++ OK, passed 100 tests.
ignores collectComTx of another head
Details
+++ OK, passed 100 tests.
ignores decrementTx of another head
Details
+++ OK, passed 100 tests.
ignores closeTx of another head
Details
+++ OK, passed 100 tests.
ignores contestTx of another head
Details
+++ OK, passed 100 tests.
ignores fanoutTx of another head
Details
+++ OK, passed 100 tests.
empty inputs in decommit tx are prevented
Details
+++ OK, passed 100 tests.
Hydra.FireForget
- client can send 'Hail Hydra!' to server
Hydra.Events.FileBased
eventPairFromPersistenceIncremental
can handle continuous events
Details
+++ OK, passed 100 tests.
can handle non-continuous events
Details
+++ OK, passed 100 tests.
can handle duplicate events
Details
+++ OK, passed 100 tests.
can bootstrap from plain StateChanged events
Details
+++ OK, passed 100 tests.
persisted event format
JSON encoding of StateChanged
- allows to encode values with aeson and read them back
- produces the same JSON as is found in golden/StateChanged/HeadInitialized.json
- produces the same JSON as is found in golden/StateChanged/CommittedUTxO.json
- produces the same JSON as is found in golden/StateChanged/HeadAborted.json
- produces the same JSON as is found in golden/StateChanged/HeadOpened.json
- produces the same JSON as is found in golden/StateChanged/TransactionReceived.json
- produces the same JSON as is found in golden/StateChanged/TransactionAppliedToLocalUTxO.json
- produces the same JSON as is found in golden/StateChanged/DecommitRecorded.json
- produces the same JSON as is found in golden/StateChanged/SnapshotRequestDecided.json
- produces the same JSON as is found in golden/StateChanged/SnapshotRequested.json
- produces the same JSON as is found in golden/StateChanged/DecommitFinalized.json
- produces the same JSON as is found in golden/StateChanged/PartySignedSnapshot.json
- produces the same JSON as is found in golden/StateChanged/SnapshotConfirmed.json
- produces the same JSON as is found in golden/StateChanged/HeadClosed.json
- produces the same JSON as is found in golden/StateChanged/HeadContested.json
- produces the same JSON as is found in golden/StateChanged/HeadIsReadyToFanout.json
- produces the same JSON as is found in golden/StateChanged/HeadFannedOut.json
- produces the same JSON as is found in golden/StateChanged/ChainRolledBack.json
- produces the same JSON as is found in golden/StateChanged/TickObserved.json
JSON encoding of (StateEvent (Tx ConwayEra))
allows to encode values with aeson and read them back
Details
+++ OK, passed 100 tests.
produces the same JSON as is found in golden/StateEvent (Tx ConwayEra).json
Hydra.Crypto
MultiSignature
is sensitive to order
Details
+++ OK, passed 100 tests; 50 discarded.
aggregate/verifyMultiSignature roundtrip
Details
+++ OK, passed 100 tests.
aggregateInOrder/verifyMultiSignature roundtrip
Details
+++ OK, passed 100 tests; 17 discarded.
verifyMultiSignature fails when signature is missing
Details
+++ OK, passed 100 tests; 83 discarded.
does not validate multisig if less keys given
Details
+++ OK, passed 100 tests; 30 discarded (6% empty).
Signature
show includes escaped hex
can sign arbitrary messages
Details
+++ OK, passed 100 tests; 32 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; 30 discarded.
arbitrary @(SigningKey HydraKey) is reasonably collision resistant
Details
+++ OK, passed 100000 tests.
Hydra.ContestationPeriod
fromNominalDiffTime
works for diff times > 0
Details
+++ OK, passed 100 tests.
fails for diff times <= 0
Details
+++ OK, passed 100 tests.
rounds to 1 second
Details
+++ OK, passed 100 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
sets min utxo values
Details
+++ OK, passed 100 tests.
balances transaction with fees
Details
+++ OK, passed 100 tests.
Only 0% spending script, but expected 5%prefers largest utxo
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:
33% has dependent txs
28% has no tx that are ours
Hydra.Chain.Direct.TxTrace
generates interesting transaction traces
Details
+++ OK, passed 100 tests:
82% close with non initial snapshots
60% reach fanout
31% fanout with empty UTxO
29% fanout with some UTxO
15% empty
15% has decrements
2% fanout with additional UTxO to distribute
Only 0% has multiple contests, but expected 1%all valid transactions
Details
+++ OK, passed 100 tests.
Action polarity (675 in total):
74.2% -
25.8% +
Actions (675 in total):
62.1% -Close
9.5% +Close
8.9% +Fanout
7.9% -Decrement
7.0% +Decrement
4.3% -Contest
0.4% +Contest
Actions rejected by precondition (1300 in total):
50.62% Close
47.00% Decrement
2.38% ContestrealWorldModelUTxO preserves addition
Details
+++ OK, passed 100 tests.
Hydra.Chain.Direct.Tx
commitTx
genBlueprintTx generates interesting txs
Details
+++ OK, passed 100 tests:
100% blueprint has reference input
100% blueprint spends script UTxO
76% blueprint spends from script AND pub key
76% blueprint spends pub key UTxOValidate blueprint and commit transactions
Details
+++ OK, passed 100 tests.
observeHeadTx
All valid transitions for all possible states can be observed.
Details
+++ OK, passed 100 tests.
ChainTransition (100 in total):
15% Commit
15% Fanout
15% Init
12% Collect
12% Decrement
11% Abort
11% Close
9% Contest
HeadId (cardano)
headIdToPolicyId . mkHeadId === id
Details
+++ OK, passed 100 tests.
curencySymbolToHeadId . headIdToCurrencySymbol === id
Details
+++ OK, passed 100 tests.
HeadSeed (cardano)
headSeedToTxIn . txInToHeadSeed === id
Details
+++ OK, passed 100 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 100 tests:
55% collect failed already
45% collect, close and fanout passed
fanout
transaction size is below 16kB
Details
+++ OK, passed 100 tests:
54% Fanout size: 40-58
27% Fanout size: 10-40
17% Fanout size: 1-10
2% Fanout size: 0
55% 6kB
29% 5kB
16% 4kBvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests:
54% Fanout size: 40-58
27% Fanout size: 10-40
17% Fanout size: 1-10
2% Fanout size: 0
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):
19% > k blocks
16% one month
15% k blocks on mainnet
15% one week
14% one year
11% < k blocks
10% one dayvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests.
Close point (slot) (100 in total):
100% > 0
Contestation period (100 in total):
19% > k blocks
16% one month
15% k blocks on mainnet
15% one week
14% one year
11% < k blocks
10% one day
close
transaction size is below 16kB
Details
+++ OK, passed 100 tests:
100% ConfirmedSnapshot
100% 1kBvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests (100% ConfirmedSnapshot).
decrement
transaction size is below 16kB
Details
+++ OK, passed 100 tests (100% 1kB).
validates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests.
observes distributed outputs
Details
+++ OK, passed 100 tests.
collectCom
transaction size is below 16kB
Details
+++ OK, passed 100 tests:
94% 1kB
6% 0kBvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests.
abort
transaction size is below 16kB
Details
+++ OK, passed 100 tests:
61% Abort after some (but not all) commits
23% Abort immediately, after 0 commits
16% Abort after all commits
56% 5kB
44% 4kBvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests:
61% Abort after some (but not all) commits
23% Abort immediately, after 0 commits
16% Abort after all commitscan create valid abort transactions for any observed head
Details
+++ OK, passed 100 tests.
commit
transaction size is below 16kB
Details
+++ OK, passed 100 tests:
95% Non-empty commit
5% Empty commit
100% 0kBvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests:
95% Non-empty commit
5% Empty commitonly proper head is observed
Details
+++ OK, passed 100 tests:
95% Non-empty commit
5% Empty commitconsumes all inputs that are committed
Details
+++ OK, passed 100 tests:
95% Non-empty commit
5% Empty commitcan only be applied / observed once
Details
+++ OK, passed 100 tests:
95% Non-empty commit
5% Empty commitreject committing outputs with byron addresses
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:
100% 2+ parties
76% 5kB
24% 4kBvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests (100% 2+ parties).
only proper head is observed
Details
+++ OK, passed 100 tests (100% NotAHeadPolicy).
splitUTxO
it splits at least one utxo off
Details
+++ OK, passed 100 tests; 37 discarded.
observeTx
All valid transitions for all possible states can be observed.
Details
+++ OK, passed 100 tests.
ChainTransition (100 in total):
15% Commit
15% Fanout
15% Init
12% Collect
12% Decrement
11% Abort
11% Close
9% Contest
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
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:
30% Rollback 2 blocks
15% Rollback 6 blocks
14% Rollback 4 blocks
14% Rollback 5 blocks
12% Rollback 0 blocks
11% Rollback 3 blocks
4% Rollback 1 blocks
chainSyncHandler
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:
17% Init
15% Commit
14% Collect
12% Fanout
11% Abort
11% Contest
10% Close
10% Decrementrollbacks state onRollBackward
Details
+++ OK, passed 100 tests:
11% Rollback to: ChainSlot 0 / 2
11% Rollback to: ChainSlot 0 / 4
11% Rollback to: ChainSlot 0 / 6
9% Rollback to: ChainSlot 0 / 3
7% Rollback to: ChainSlot 2 / 2
6% Rollback to: ChainSlot 0 / 5
6% Rollback to: ChainSlot 1 / 2
5% Rollback to: ChainSlot 3 / 4
5% Rollback to: ChainSlot 3 / 6
5% Rollback to: ChainSlot 4 / 6
3% Rollback to: ChainSlot 1 / 3
3% Rollback to: ChainSlot 2 / 3
3% Rollback to: ChainSlot 4 / 4
3% Rollback to: ChainSlot 4 / 5
3% Rollback to: ChainSlot 5 / 5
2% Rollback to: ChainSlot 2 / 5
2% Rollback to: ChainSlot 3 / 3
1% Rollback to: ChainSlot 1 / 4
1% Rollback to: ChainSlot 1 / 6
1% Rollback to: ChainSlot 2 / 6
1% Rollback to: ChainSlot 3 / 5
1% Rollback to: ChainSlot 5 / 6
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
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
- ignores head initialization of other head
- 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
snapshots are created as long as transactions to snapshot exist
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
outputs utxo from confirmed snapshot when client requests it
can request decommit
requested decommits get approved
can only process one decommit at once
can process transactions while decommit pending
can close with decommit in flight
fanout utxo is correct after a decommit
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
- 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 (ServerOutput (Tx ConwayEra)))
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 ConwayEra)).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
matches JSON schema
Details
+++ OK, passed 1 test.
JSON encoding of (ReasonablySized (TimedServerOutput (Tx ConwayEra)))
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 ConwayEra)).json
Hydra.API.Server
should fail on port in use
greets
Greetings should contain the hydra-node version
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:
91% more than one message when reconnecting
6% no message when reconnecting
3% only one message when reconnectingdoes not echo history if client says no
Details
+++ OK, passed 100 tests:
91% more than one message when reconnecting
6% no message when reconnecting
3% only one message when reconnectingremoves UTXO from snapshot when clients request it
sequence numbers are continuous
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
TLS support
- accepts TLS connections when configured
Hydra.API.HTTPServer
JSON encoding of (ReasonablySized TransactionSubmitted)
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 TransactionSubmitted.json
JSON encoding of (ReasonablySized (SubmitTxRequest (Tx ConwayEra)))
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 (SubmitTxRequest (Tx ConwayEra)).json
JSON encoding of (ReasonablySized (DraftCommitTxRequest (Tx ConwayEra)))
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 (DraftCommitTxRequest (Tx ConwayEra)).json
JSON encoding of (ReasonablySized (DraftCommitTxResponse (Tx ConwayEra)))
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 (DraftCommitTxResponse (Tx ConwayEra)).json
Validate /commit publish api schema
Details
+++ OK, passed 1 test.
Validate /commit subscribe api schema
Details
+++ OK, passed 1 test.
Validate /cardano-transaction publish api schema
Details
+++ OK, passed 1 test.
Validate /cardano-transaction subscribe api schema
Details
+++ OK, passed 1 test.
Validate /decommit publish api schema
Details
+++ OK, passed 1 test.
Validate /decommit subscribe api schema
Details
+++ OK, passed 1 test.
SubmitTxRequest accepted tx formats
accepts json encoded transaction
Details
+++ OK, passed 100 tests.
accepts transaction encoded as TextEnvelope
Details
+++ OK, passed 100 tests.
API should respond correctly
POST /commit
responds on valid requests
Details
+++ OK, passed 100 tests.
handles PostTxErrors accordingly
Details
+++ OK, passed 400 tests:
6.5% CannotFindOwnInitial
6.0% UnsupportedLegacyOutput
5.0% CommittedTooMuchADAForMainnet
4.2% InvalidHeadId
GET /snapshot/utxo
responds correctly
Details
+++ OK, passed 100 tests.
ok response matches schema
Details
+++ OK, passed 4 tests:
50% empty
50% non empty
GET /protocol-parameters
- matches schema
- responds given parameters
Hydra.API.ClientInput
FromJSON (ValidatedTx era)
accepts transactions produced via cardano-cli
Details
+++ OK, passed 100 tests.
JSON encoding of (ReasonablySized (ClientInput (Tx ConwayEra)))
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 ConwayEra)).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