< Summary - Combined Code Coverage

Information
Class: NLightning.Domain.Bitcoin.Transactions.Models.CommitmentTransactionModel
Assembly: NLightning.Domain
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Domain/Bitcoin/Transactions/Models/CommitmentTransactionModel.cs
Tag: 36_15743069263
Line coverage
73%
Covered lines: 28
Uncovered lines: 10
Coverable lines: 38
Total lines: 114
Line coverage: 73.6%
Branch coverage
30%
Covered branches: 6
Total branches: 20
Branch coverage: 30%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_FundingOutput()100%11100%
get_CommitmentNumber()100%11100%
get_TransactionId()100%210%
get_ToLocalOutput()100%11100%
get_ToRemoteOutput()100%11100%
get_LocalAnchorOutput()100%11100%
get_RemoteAnchorOutput()100%11100%
get_OfferedHtlcOutputs()100%11100%
get_ReceivedHtlcOutputs()100%11100%
get_Fee()100%210%
.ctor(...)75%8.01894.74%
GetLockTime()100%11100%
GetSequence()100%11100%
GetAllOutputs()0%156120%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Domain/Bitcoin/Transactions/Models/CommitmentTransactionModel.cs

#LineLine coverage
 1using NLightning.Domain.Bitcoin.Transactions.Interfaces;
 2using NLightning.Domain.Bitcoin.Transactions.Outputs;
 3using NLightning.Domain.Bitcoin.ValueObjects;
 4using NLightning.Domain.Money;
 5using NLightning.Domain.Protocol.Models;
 6
 7namespace NLightning.Domain.Bitcoin.Transactions.Models;
 8
 9/// <summary>
 10/// Represents a commitment transaction in the domain model.
 11/// This class encapsulates the logical structure of a Lightning Network commitment transaction
 12/// as defined by BOLT specifications, without dependencies on specific Bitcoin libraries.
 13/// </summary>
 14public class CommitmentTransactionModel
 15{
 16    /// <summary>
 17    /// Gets the funding outpoint that this commitment transaction spends.
 18    /// </summary>
 27619    public FundingOutputInfo FundingOutput { get; }
 20
 21    /// <summary>
 22    /// Gets the commitment number for this transaction.
 23    /// </summary>
 13624    public CommitmentNumber CommitmentNumber { get; }
 25
 26    /// <summary>
 27    /// Gets or sets the transaction ID after the transaction is constructed.
 28    /// </summary>
 029    public TxId? TransactionId { get; set; }
 30
 31    /// <summary>
 32    /// Gets the to_local output, if present.
 33    /// </summary>
 31634    public ToLocalOutputInfo? ToLocalOutput { get; }
 35
 36    /// <summary>
 37    /// Gets the to_remote output, if present.
 38    /// </summary>
 21239    public ToRemoteOutputInfo? ToRemoteOutput { get; }
 40
 41    /// <summary>
 42    /// Gets the local anchor output, if present.
 43    /// </summary>
 26844    public AnchorOutputInfo? LocalAnchorOutput { get; }
 45
 46    /// <summary>
 47    /// Gets the remote anchor output, if present.
 48    /// </summary>
 26849    public AnchorOutputInfo? RemoteAnchorOutput { get; }
 50
 51    /// <summary>
 52    /// Gets the list of offered HTLC outputs.
 53    /// </summary>
 6854    public IReadOnlyList<OfferedHtlcOutputInfo> OfferedHtlcOutputs { get; }
 55
 56    /// <summary>
 57    /// Gets the list of received HTLC outputs.
 58    /// </summary>
 6859    public IReadOnlyList<ReceivedHtlcOutputInfo> ReceivedHtlcOutputs { get; }
 60
 61    /// <summary>
 62    /// Gets the total fee for this transaction.
 63    /// </summary>
 064    public LightningMoney Fee { get; }
 65
 66    /// <summary>
 67    /// Creates a new instance of CommitmentTransactionModel.
 68    /// </summary>
 12069    public CommitmentTransactionModel(CommitmentNumber commitmentNumber, LightningMoney fee,
 12070                                      FundingOutputInfo fundingOutput, AnchorOutputInfo? localAnchorOutput = null,
 12071                                      AnchorOutputInfo? remoteAnchorOutput = null,
 12072                                      ToLocalOutputInfo? toLocalOutput = null,
 12073                                      ToRemoteOutputInfo? toRemoteOutput = null,
 12074                                      IEnumerable<OfferedHtlcOutputInfo>? offeredHtlcOutputs = null,
 12075                                      IEnumerable<ReceivedHtlcOutputInfo>? receivedHtlcOutputs = null)
 76    {
 12077        if (fundingOutput.TransactionId is null || fundingOutput.TransactionId.Value == TxId.Zero)
 078            throw new ArgumentException("Funding output must have a valid transaction ID.", nameof(fundingOutput));
 79
 12080        FundingOutput = fundingOutput;
 12081        CommitmentNumber = commitmentNumber;
 12082        Fee = fee;
 12083        ToLocalOutput = toLocalOutput;
 12084        ToRemoteOutput = toRemoteOutput;
 12085        LocalAnchorOutput = localAnchorOutput;
 12086        RemoteAnchorOutput = remoteAnchorOutput;
 12087        OfferedHtlcOutputs = (offeredHtlcOutputs ?? []).ToList();
 12088        ReceivedHtlcOutputs = (receivedHtlcOutputs ?? []).ToList();
 12089    }
 90
 91    /// <summary>
 92    /// Gets the Bitcoin locktime for this commitment transaction, derived from the commitment number.
 93    /// </summary>
 6894    public BitcoinLockTime GetLockTime() => CommitmentNumber.CalculateLockTime();
 95
 96    /// <summary>
 97    /// Gets the Bitcoin sequence for this commitment transaction, derived from the commitment number.
 98    /// </summary>
 6899    public BitcoinSequence GetSequence() => CommitmentNumber.CalculateSequence();
 100
 101    /// <summary>
 102    /// Gets all outputs of this commitment transaction.
 103    /// </summary>
 104    public IEnumerable<IOutputInfo> GetAllOutputs()
 105    {
 0106        if (ToLocalOutput != null) yield return ToLocalOutput;
 0107        if (ToRemoteOutput != null) yield return ToRemoteOutput;
 0108        if (LocalAnchorOutput != null) yield return LocalAnchorOutput;
 0109        if (RemoteAnchorOutput != null) yield return RemoteAnchorOutput;
 110
 0111        foreach (var output in OfferedHtlcOutputs) yield return output;
 0112        foreach (var output in ReceivedHtlcOutputs) yield return output;
 0113    }
 114}