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 400 tests:
74.8% some item contains a new line
4.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; 427 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.44% < 10
19.56% < 20
13.84% < 30
10.58% < 40
8.50% < 50
5.72% < 60
4.44% < 70
3.00% < 80
1.38% < 90
0.54% < 100
Messages from Bob to Alice (5000 in total):
32.44% < 10
19.48% < 20
14.12% < 30
10.16% < 40
8.08% < 50
5.94% < 60
4.44% < 70
3.02% < 80
1.60% < 90
0.72% < 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:
63% 0
26% 1
7% 2
4% 3
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 (666 in total):
100.0% +
Actions (666 in total):
30.6% +NewTx
24.6% +Commit
14.1% +Seed
13.2% +Init
4.8% +Abort
3.5% +Close
3.5% +Fanout
3.0% +RollbackAndForward
2.7% +Decommit
Transitions (666 in total):
35.9% Open -> Open
17.9% Initial -> Initial
14.1% Start -> Idle
13.2% Idle -> Initial
6.8% Initial -> Open
4.8% Initial -> Final
3.5% Closed -> Final
3.5% Open -> Closed
0.5% Closed -> Closedcheck conflict-free liveness
Details
+++ OK, passed 100 tests.
Action polarity (963 in total):
100.0% +
Actions (963 in total):
34.5% +NewTx
17.9% +Commit
10.4% +StopTheWorld
9.4% +Seed
9.0% +Init
4.2% +RollbackAndForward
3.3% +Close
3.2% +Abort
2.8% +Fanout
2.4% +Decommit
1.5% +ObserveConfirmedTx
1.5% +Wait
Transitions (963 in total):
44.8% Open -> Open
14.1% Initial -> Initial
9.4% Start -> Idle
9.0% Idle -> Initial
6.0% Final -> Final
4.8% Initial -> Open
3.3% Open -> Closed
3.2% Initial -> Final
2.8% Closed -> Final
1.1% Closed -> Closed
0.9% Start -> Start
0.4% Idle -> Idlecheck head opens if all participants commit
Details
+++ OK, passed 100 tests.
Action polarity (690 in total):
100.0% +
Actions (690 in total):
42.0% +Commit
14.5% +Init
14.5% +ObserveHeadIsOpen
14.5% +Seed
14.5% +Wait
Transitions (690 in total):
29.0% Open -> Open
27.5% Initial -> Initial
14.5% Idle -> Initial
14.5% Initial -> Open
14.5% Start -> Idlefanout contains whole confirmed UTxO
Details
+++ OK, passed 100 tests.
Action polarity (991 in total):
100.0% +
Actions (991 in total):
33.5% +NewTx
17.4% +Commit
10.1% +StopTheWorld
9.2% +Seed
8.8% +Init
4.6% +Close
4.1% +Fanout
4.0% +RollbackAndForward
3.1% +Abort
2.3% +Decommit
1.4% +ObserveConfirmedTx
1.4% +Wait
Transitions (991 in total):
42.1% Open -> Open
13.7% Initial -> Initial
9.2% Start -> Idle
8.8% Idle -> Initial
7.3% Final -> Final
4.6% Initial -> Open
4.6% Open -> Closed
4.1% Closed -> Final
3.1% Initial -> Final
1.1% Closed -> Closed
0.9% Start -> Start
0.4% 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 (1290 in total):
100.00% +
Actions (1290 in total):
22.48% +Commit
15.50% +Wait
7.75% +CloseWithInitialSnapshot
7.75% +Fanout
7.75% +Init
7.75% +NewTx
7.75% +ObserveConfirmedTx
7.75% +ObserveHeadIsOpen
7.75% +Seed
7.75% +StopTheWorld
Transitions (1290 in total):
38.76% Open -> Open
14.73% Initial -> Initial
7.75% Closed -> Final
7.75% Final -> Final
7.75% Idle -> Initial
7.75% Initial -> Open
7.75% Open -> Closed
7.75% 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:
54% before system start
45% after system start
1% 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 (84.9% 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:
65% has datum
59% has multiple assets
56% is Script output
44% is VK output
41% 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; 65 discarded.
aggregate/verifyMultiSignature roundtrip
Details
+++ OK, passed 100 tests.
aggregateInOrder/verifyMultiSignature roundtrip
Details
+++ OK, passed 100 tests; 16 discarded.
verifyMultiSignature fails when signature is missing
Details
+++ OK, passed 100 tests; 87 discarded.
does not validate multisig if less keys given
Details
+++ OK, passed 100 tests; 19 discarded (6% empty).
Signature
show includes escaped hex
can sign arbitrary messages
Details
+++ OK, passed 100 tests; 31 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.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:
34% has dependent txs
30% has no tx that are ours
Hydra.Chain.Direct.TxTrace
generates interesting transaction traces
Details
+++ OK, passed 100 tests:
87% close with non initial snapshots
60% reach fanout
36% fanout with some UTxO
24% fanout with empty UTxO
11% has decrements
10% empty
5% fanout with additional UTxO to distribute
Only 0% has multiple contests, but expected 1%all valid transactions
Details
+++ OK, passed 100 tests.
Action polarity (571 in total):
70.6% -
29.4% +
Actions (571 in total):
55.7% -Close
10.7% +Close
10.5% +Fanout
8.8% -Decrement
7.9% +Decrement
6.1% -Contest
0.4% +Contest
Actions rejected by precondition (1485 in total):
50.37% Close
47.41% Decrement
2.22% 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
68% blueprint spends from script AND pub key
68% 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):
19% Decrement
15% Init
12% Close
12% Collect
11% Commit
11% Contest
10% Abort
10% Fanout
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:
51% collect, close and fanout passed
49% collect failed already
fanout
transaction size is below 16kB
Details
+++ OK, passed 100 tests:
53% Fanout size: 40-58
24% Fanout size: 10-40
22% Fanout size: 1-10
1% Fanout size: 0
53% 6kB
35% 5kB
12% 4kBvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests:
53% Fanout size: 40-58
24% Fanout size: 10-40
22% Fanout size: 1-10
1% 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):
18% k blocks on mainnet
16% one year
15% one day
14% < k blocks
14% one month
13% > k blocks
10% one weekvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests.
Close point (slot) (100 in total):
100% > 0
Contestation period (100 in total):
18% k blocks on mainnet
16% one year
15% one day
14% < k blocks
14% one month
13% > k blocks
10% one week
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:
98% 1kB
2% 0kBvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests.
abort
transaction size is below 16kB
Details
+++ OK, passed 100 tests:
60% Abort after some (but not all) commits
20% Abort after all commits
20% Abort immediately, after 0 commits
57% 5kB
43% 4kBvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests:
60% Abort after some (but not all) commits
20% Abort after all commits
20% Abort immediately, after 0 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:
92% Non-empty commit
8% Empty commit
100% 0kBvalidates within maxTxExecutionUnits
Details
+++ OK, passed 100 tests:
92% Non-empty commit
8% Empty commitonly proper head is observed
Details
+++ OK, passed 100 tests:
92% Non-empty commit
8% Empty commitconsumes all inputs that are committed
Details
+++ OK, passed 100 tests:
92% Non-empty commit
8% Empty commitcan only be applied / observed once
Details
+++ OK, passed 100 tests:
92% Non-empty commit
8% 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
77% 5kB
23% 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):
19% Decrement
15% Init
12% Close
12% Collect
11% Commit
11% Contest
10% Abort
10% Fanout
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:
22% Rollback 2 blocks
14% Rollback 0 blocks
14% Rollback 3 blocks
14% Rollback 5 blocks
14% Rollback 6 blocks
11% Rollback 1 blocks
11% Rollback 4 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:
18% Fanout
15% Decrement
15% Init
14% Collect
13% Contest
9% Close
8% Abort
8% Commitrollbacks state onRollBackward
Details
+++ OK, passed 100 tests:
13% Rollback to: ChainSlot 0 / 3
12% Rollback to: ChainSlot 0 / 6
11% Rollback to: ChainSlot 0 / 5
10% Rollback to: ChainSlot 0 / 2
7% Rollback to: ChainSlot 2 / 2
6% Rollback to: ChainSlot 0 / 4
6% Rollback to: ChainSlot 1 / 2
3% Rollback to: ChainSlot 1 / 4
3% Rollback to: ChainSlot 1 / 6
3% Rollback to: ChainSlot 2 / 5
3% Rollback to: ChainSlot 3 / 6
3% Rollback to: ChainSlot 4 / 5
3% Rollback to: ChainSlot 5 / 6
2% Rollback to: ChainSlot 2 / 3
2% Rollback to: ChainSlot 2 / 4
2% Rollback to: ChainSlot 2 / 6
2% Rollback to: ChainSlot 3 / 3
2% Rollback to: ChainSlot 3 / 5
2% Rollback to: ChainSlot 5 / 5
2% Rollback to: ChainSlot 6 / 6
1% Rollback to: ChainSlot 1 / 3
1% Rollback to: ChainSlot 1 / 5
1% Rollback to: ChainSlot 4 / 4
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
5% no message when reconnecting
4% only one message when reconnectingdoes not echo history if client says no
Details
+++ OK, passed 100 tests:
91% more than one message when reconnecting
5% no message when reconnecting
4% 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:
5.5% InvalidHeadId
5.2% CannotFindOwnInitial
4.8% CommittedTooMuchADAForMainnet
4.5% UnsupportedLegacyOutput
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