-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBlockValidationState.cs
More file actions
105 lines (92 loc) · 2.53 KB
/
BlockValidationState.cs
File metadata and controls
105 lines (92 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using BitcoinKernel.Core.Exceptions;
using BitcoinKernel.Interop;
using BitcoinKernel.Interop.Enums;
namespace BitcoinKernel.Core.Abstractions;
/// <summary>
/// Represents the validation state of a block.
/// </summary>
public sealed class BlockValidationState : IDisposable
{
private IntPtr _handle;
private bool _disposed;
/// <summary>
/// Creates a new block validation state.
/// </summary>
public BlockValidationState()
{
_handle = NativeMethods.BlockValidationStateCreate();
if (_handle == IntPtr.Zero)
{
throw new BlockException("Failed to create block validation state");
}
}
internal BlockValidationState(IntPtr handle)
{
if (handle == IntPtr.Zero)
{
throw new ArgumentException("Invalid block validation state handle", nameof(handle));
}
_handle = handle;
}
internal IntPtr Handle
{
get
{
ThrowIfDisposed();
return _handle;
}
}
/// <summary>
/// Gets the validation mode (valid, invalid, or internal error).
/// </summary>
public ValidationMode ValidationMode
{
get
{
ThrowIfDisposed();
return NativeMethods.BlockValidationStateGetValidationMode(_handle);
}
}
/// <summary>
/// Gets the block validation result (detailed error reason if invalid).
/// </summary>
public Interop.Enums.BlockValidationResult ValidationResult
{
get
{
ThrowIfDisposed();
return NativeMethods.BlockValidationStateGetBlockValidationResult(_handle);
}
}
/// <summary>
/// Creates a copy of this block validation state.
/// </summary>
public BlockValidationState Copy()
{
ThrowIfDisposed();
var copyPtr = NativeMethods.BlockValidationStateCopy(_handle);
if (copyPtr == IntPtr.Zero)
{
throw new BlockException("Failed to copy block validation state");
}
return new BlockValidationState(copyPtr);
}
private void ThrowIfDisposed()
{
if (_disposed)
throw new ObjectDisposedException(nameof(BlockValidationState));
}
public void Dispose()
{
if (!_disposed)
{
if (_handle != IntPtr.Zero)
{
NativeMethods.BlockValidationStateDestroy(_handle);
_handle = IntPtr.Zero;
}
_disposed = true;
}
}
~BlockValidationState() => Dispose();
}