@aztec/sequencer-client 0.0.0-test.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +45 -0
  2. package/dest/client/index.d.ts +2 -0
  3. package/dest/client/index.d.ts.map +1 -0
  4. package/dest/client/index.js +1 -0
  5. package/dest/client/sequencer-client.d.ts +71 -0
  6. package/dest/client/sequencer-client.d.ts.map +1 -0
  7. package/dest/client/sequencer-client.js +117 -0
  8. package/dest/config.d.ts +29 -0
  9. package/dest/config.d.ts.map +1 -0
  10. package/dest/config.js +143 -0
  11. package/dest/global_variable_builder/global_builder.d.ts +32 -0
  12. package/dest/global_variable_builder/global_builder.d.ts.map +1 -0
  13. package/dest/global_variable_builder/global_builder.js +79 -0
  14. package/dest/global_variable_builder/index.d.ts +2 -0
  15. package/dest/global_variable_builder/index.d.ts.map +1 -0
  16. package/dest/global_variable_builder/index.js +1 -0
  17. package/dest/index.d.ts +8 -0
  18. package/dest/index.d.ts.map +1 -0
  19. package/dest/index.js +9 -0
  20. package/dest/publisher/config.d.ts +31 -0
  21. package/dest/publisher/config.d.ts.map +1 -0
  22. package/dest/publisher/config.js +35 -0
  23. package/dest/publisher/index.d.ts +2 -0
  24. package/dest/publisher/index.d.ts.map +1 -0
  25. package/dest/publisher/index.js +1 -0
  26. package/dest/publisher/sequencer-publisher-metrics.d.ts +25 -0
  27. package/dest/publisher/sequencer-publisher-metrics.d.ts.map +1 -0
  28. package/dest/publisher/sequencer-publisher-metrics.js +129 -0
  29. package/dest/publisher/sequencer-publisher.d.ts +152 -0
  30. package/dest/publisher/sequencer-publisher.d.ts.map +1 -0
  31. package/dest/publisher/sequencer-publisher.js +481 -0
  32. package/dest/sequencer/allowed.d.ts +3 -0
  33. package/dest/sequencer/allowed.d.ts.map +1 -0
  34. package/dest/sequencer/allowed.js +27 -0
  35. package/dest/sequencer/config.d.ts +2 -0
  36. package/dest/sequencer/config.d.ts.map +1 -0
  37. package/dest/sequencer/config.js +1 -0
  38. package/dest/sequencer/index.d.ts +4 -0
  39. package/dest/sequencer/index.d.ts.map +1 -0
  40. package/dest/sequencer/index.js +3 -0
  41. package/dest/sequencer/metrics.d.ts +24 -0
  42. package/dest/sequencer/metrics.d.ts.map +1 -0
  43. package/dest/sequencer/metrics.js +102 -0
  44. package/dest/sequencer/sequencer.d.ts +180 -0
  45. package/dest/sequencer/sequencer.d.ts.map +1 -0
  46. package/dest/sequencer/sequencer.js +623 -0
  47. package/dest/sequencer/timetable.d.ts +38 -0
  48. package/dest/sequencer/timetable.d.ts.map +1 -0
  49. package/dest/sequencer/timetable.js +110 -0
  50. package/dest/sequencer/utils.d.ts +48 -0
  51. package/dest/sequencer/utils.d.ts.map +1 -0
  52. package/dest/sequencer/utils.js +53 -0
  53. package/dest/slasher/factory.d.ts +7 -0
  54. package/dest/slasher/factory.d.ts.map +1 -0
  55. package/dest/slasher/factory.js +8 -0
  56. package/dest/slasher/index.d.ts +3 -0
  57. package/dest/slasher/index.d.ts.map +1 -0
  58. package/dest/slasher/index.js +2 -0
  59. package/dest/slasher/slasher_client.d.ts +75 -0
  60. package/dest/slasher/slasher_client.d.ts.map +1 -0
  61. package/dest/slasher/slasher_client.js +132 -0
  62. package/dest/test/index.d.ts +17 -0
  63. package/dest/test/index.d.ts.map +1 -0
  64. package/dest/test/index.js +10 -0
  65. package/dest/tx_validator/archive_cache.d.ts +14 -0
  66. package/dest/tx_validator/archive_cache.d.ts.map +1 -0
  67. package/dest/tx_validator/archive_cache.js +22 -0
  68. package/dest/tx_validator/gas_validator.d.ts +14 -0
  69. package/dest/tx_validator/gas_validator.d.ts.map +1 -0
  70. package/dest/tx_validator/gas_validator.js +78 -0
  71. package/dest/tx_validator/nullifier_cache.d.ts +16 -0
  72. package/dest/tx_validator/nullifier_cache.d.ts.map +1 -0
  73. package/dest/tx_validator/nullifier_cache.js +24 -0
  74. package/dest/tx_validator/phases_validator.d.ts +12 -0
  75. package/dest/tx_validator/phases_validator.d.ts.map +1 -0
  76. package/dest/tx_validator/phases_validator.js +80 -0
  77. package/dest/tx_validator/test_utils.d.ts +23 -0
  78. package/dest/tx_validator/test_utils.d.ts.map +1 -0
  79. package/dest/tx_validator/test_utils.js +26 -0
  80. package/dest/tx_validator/tx_validator_factory.d.ts +18 -0
  81. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -0
  82. package/dest/tx_validator/tx_validator_factory.js +50 -0
  83. package/package.json +121 -0
  84. package/src/client/index.ts +1 -0
  85. package/src/client/sequencer-client.ts +219 -0
  86. package/src/config.ts +179 -0
  87. package/src/global_variable_builder/global_builder.ts +108 -0
  88. package/src/global_variable_builder/index.ts +1 -0
  89. package/src/index.ts +10 -0
  90. package/src/publisher/config.ts +75 -0
  91. package/src/publisher/index.ts +1 -0
  92. package/src/publisher/sequencer-publisher-metrics.ts +176 -0
  93. package/src/publisher/sequencer-publisher.ts +625 -0
  94. package/src/sequencer/allowed.ts +36 -0
  95. package/src/sequencer/config.ts +1 -0
  96. package/src/sequencer/index.ts +3 -0
  97. package/src/sequencer/metrics.ts +137 -0
  98. package/src/sequencer/sequencer.ts +759 -0
  99. package/src/sequencer/timetable.ts +123 -0
  100. package/src/sequencer/utils.ts +74 -0
  101. package/src/slasher/factory.ts +15 -0
  102. package/src/slasher/index.ts +2 -0
  103. package/src/slasher/slasher_client.ts +193 -0
  104. package/src/test/index.ts +20 -0
  105. package/src/tx_validator/archive_cache.ts +28 -0
  106. package/src/tx_validator/gas_validator.ts +101 -0
  107. package/src/tx_validator/nullifier_cache.ts +30 -0
  108. package/src/tx_validator/phases_validator.ts +98 -0
  109. package/src/tx_validator/test_utils.ts +48 -0
  110. package/src/tx_validator/tx_validator_factory.ts +120 -0
@@ -0,0 +1,137 @@
1
+ import {
2
+ Attributes,
3
+ type Gauge,
4
+ type Histogram,
5
+ Metrics,
6
+ type TelemetryClient,
7
+ type Tracer,
8
+ type UpDownCounter,
9
+ ValueType,
10
+ } from '@aztec/telemetry-client';
11
+
12
+ import { type SequencerState, type SequencerStateCallback, sequencerStateToNumber } from './utils.js';
13
+
14
+ export class SequencerMetrics {
15
+ public readonly tracer: Tracer;
16
+
17
+ private blockCounter: UpDownCounter;
18
+ private blockBuildDuration: Histogram;
19
+ private blockBuildManaPerSecond: Gauge;
20
+ private stateTransitionBufferDuration: Histogram;
21
+ private currentBlockNumber: Gauge;
22
+ private currentBlockSize: Gauge;
23
+ private blockBuilderInsertions: Histogram;
24
+
25
+ private timeToCollectAttestations: Gauge;
26
+
27
+ constructor(client: TelemetryClient, getState: SequencerStateCallback, name = 'Sequencer') {
28
+ const meter = client.getMeter(name);
29
+ this.tracer = client.getTracer(name);
30
+
31
+ this.blockCounter = meter.createUpDownCounter(Metrics.SEQUENCER_BLOCK_COUNT);
32
+
33
+ this.blockBuildDuration = meter.createHistogram(Metrics.SEQUENCER_BLOCK_BUILD_DURATION, {
34
+ unit: 'ms',
35
+ description: 'Duration to build a block',
36
+ valueType: ValueType.INT,
37
+ });
38
+
39
+ this.blockBuildManaPerSecond = meter.createGauge(Metrics.SEQUENCER_BLOCK_BUILD_MANA_PER_SECOND, {
40
+ unit: 'mana/s',
41
+ description: 'Mana per second when building a block',
42
+ valueType: ValueType.INT,
43
+ });
44
+
45
+ this.stateTransitionBufferDuration = meter.createHistogram(Metrics.SEQUENCER_STATE_TRANSITION_BUFFER_DURATION, {
46
+ unit: 'ms',
47
+ description:
48
+ 'The time difference between when the sequencer needed to transition to a new state and when it actually did.',
49
+ valueType: ValueType.INT,
50
+ });
51
+
52
+ const currentState = meter.createObservableGauge(Metrics.SEQUENCER_CURRENT_STATE, {
53
+ description: 'Current state of the sequencer',
54
+ });
55
+
56
+ currentState.addCallback(observer => {
57
+ observer.observe(sequencerStateToNumber(getState()));
58
+ });
59
+
60
+ this.currentBlockNumber = meter.createGauge(Metrics.SEQUENCER_CURRENT_BLOCK_NUMBER, {
61
+ description: 'Current block number',
62
+ valueType: ValueType.INT,
63
+ });
64
+
65
+ this.currentBlockSize = meter.createGauge(Metrics.SEQUENCER_CURRENT_BLOCK_SIZE, {
66
+ description: 'Current block size',
67
+ valueType: ValueType.INT,
68
+ });
69
+
70
+ this.timeToCollectAttestations = meter.createGauge(Metrics.SEQUENCER_TIME_TO_COLLECT_ATTESTATIONS, {
71
+ description: 'The time spent collecting attestations from committee members',
72
+ valueType: ValueType.INT,
73
+ });
74
+
75
+ this.blockBuilderInsertions = meter.createHistogram(Metrics.SEQUENCER_BLOCK_BUILD_INSERTION_TIME, {
76
+ description: 'Timer for tree insertions performed by the block builder',
77
+ unit: 'us',
78
+ valueType: ValueType.INT,
79
+ });
80
+
81
+ this.setCurrentBlock(0, 0);
82
+ }
83
+
84
+ startCollectingAttestationsTimer(): () => void {
85
+ const startTime = Date.now();
86
+ const stop = () => {
87
+ const duration = Date.now() - startTime;
88
+ this.recordTimeToCollectAttestations(duration);
89
+ };
90
+ return stop.bind(this);
91
+ }
92
+
93
+ recordTimeToCollectAttestations(time: number) {
94
+ this.timeToCollectAttestations.record(time);
95
+ }
96
+
97
+ recordBlockBuilderTreeInsertions(timeUs: number) {
98
+ this.blockBuilderInsertions.record(Math.ceil(timeUs));
99
+ }
100
+
101
+ recordCancelledBlock() {
102
+ this.blockCounter.add(1, {
103
+ [Attributes.STATUS]: 'cancelled',
104
+ });
105
+ this.setCurrentBlock(0, 0);
106
+ }
107
+
108
+ recordBuiltBlock(buildDurationMs: number, totalMana: number) {
109
+ this.blockCounter.add(1, {
110
+ [Attributes.STATUS]: 'built',
111
+ });
112
+ this.blockBuildDuration.record(Math.ceil(buildDurationMs));
113
+ this.blockBuildManaPerSecond.record(Math.ceil((totalMana * 1000) / buildDurationMs));
114
+ }
115
+
116
+ recordFailedBlock() {
117
+ this.blockCounter.add(1, {
118
+ [Attributes.STATUS]: 'failed',
119
+ });
120
+ this.setCurrentBlock(0, 0);
121
+ }
122
+
123
+ recordNewBlock(blockNumber: number, txCount: number) {
124
+ this.setCurrentBlock(blockNumber, txCount);
125
+ }
126
+
127
+ recordStateTransitionBufferMs(durationMs: number, state: SequencerState) {
128
+ this.stateTransitionBufferDuration.record(durationMs, {
129
+ [Attributes.SEQUENCER_STATE]: state,
130
+ });
131
+ }
132
+
133
+ private setCurrentBlock(blockNumber: number, txCount: number) {
134
+ this.currentBlockNumber.record(blockNumber);
135
+ this.currentBlockSize.record(txCount);
136
+ }
137
+ }