@sparkdreamnft/sparkdreamjs 0.0.24 → 0.0.25

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.
@@ -61,7 +61,9 @@ function createBaseParams() {
61
61
  postConvictionLockSeconds: BigInt(0),
62
62
  postConvictionStreamRatePerBlock: "",
63
63
  maxForumRepPerTagPerEpoch: "",
64
- postConvictionStakerSlashBps: BigInt(0)
64
+ postConvictionStakerSlashBps: BigInt(0),
65
+ curationDreamReward: "",
66
+ acceptProposalTimeout: BigInt(0)
65
67
  };
66
68
  }
67
69
  /**
@@ -244,6 +246,12 @@ exports.Params = {
244
246
  if (message.postConvictionStakerSlashBps !== BigInt(0)) {
245
247
  writer.uint32(512).uint64(message.postConvictionStakerSlashBps);
246
248
  }
249
+ if (message.curationDreamReward !== "") {
250
+ writer.uint32(522).string(message.curationDreamReward);
251
+ }
252
+ if (message.acceptProposalTimeout !== BigInt(0)) {
253
+ writer.uint32(528).int64(message.acceptProposalTimeout);
254
+ }
247
255
  return writer;
248
256
  },
249
257
  decode(input, length) {
@@ -421,6 +429,12 @@ exports.Params = {
421
429
  case 64:
422
430
  message.postConvictionStakerSlashBps = reader.uint64();
423
431
  break;
432
+ case 65:
433
+ message.curationDreamReward = reader.string();
434
+ break;
435
+ case 66:
436
+ message.acceptProposalTimeout = reader.int64();
437
+ break;
424
438
  default:
425
439
  reader.skipType(tag & 7);
426
440
  break;
@@ -486,6 +500,8 @@ exports.Params = {
486
500
  message.postConvictionStreamRatePerBlock = object.postConvictionStreamRatePerBlock ?? "";
487
501
  message.maxForumRepPerTagPerEpoch = object.maxForumRepPerTagPerEpoch ?? "";
488
502
  message.postConvictionStakerSlashBps = object.postConvictionStakerSlashBps !== undefined && object.postConvictionStakerSlashBps !== null ? BigInt(object.postConvictionStakerSlashBps.toString()) : BigInt(0);
503
+ message.curationDreamReward = object.curationDreamReward ?? "";
504
+ message.acceptProposalTimeout = object.acceptProposalTimeout !== undefined && object.acceptProposalTimeout !== null ? BigInt(object.acceptProposalTimeout.toString()) : BigInt(0);
489
505
  return message;
490
506
  },
491
507
  fromAmino(object) {
@@ -658,6 +674,12 @@ exports.Params = {
658
674
  if (object.post_conviction_staker_slash_bps !== undefined && object.post_conviction_staker_slash_bps !== null) {
659
675
  message.postConvictionStakerSlashBps = BigInt(object.post_conviction_staker_slash_bps);
660
676
  }
677
+ if (object.curation_dream_reward !== undefined && object.curation_dream_reward !== null) {
678
+ message.curationDreamReward = object.curation_dream_reward;
679
+ }
680
+ if (object.accept_proposal_timeout !== undefined && object.accept_proposal_timeout !== null) {
681
+ message.acceptProposalTimeout = BigInt(object.accept_proposal_timeout);
682
+ }
661
683
  return message;
662
684
  },
663
685
  toAmino(message) {
@@ -718,6 +740,8 @@ exports.Params = {
718
740
  obj.post_conviction_stream_rate_per_block = message.postConvictionStreamRatePerBlock === "" ? undefined : message.postConvictionStreamRatePerBlock;
719
741
  obj.max_forum_rep_per_tag_per_epoch = message.maxForumRepPerTagPerEpoch === "" ? undefined : message.maxForumRepPerTagPerEpoch;
720
742
  obj.post_conviction_staker_slash_bps = message.postConvictionStakerSlashBps !== BigInt(0) ? message.postConvictionStakerSlashBps?.toString() : undefined;
743
+ obj.curation_dream_reward = message.curationDreamReward === "" ? undefined : message.curationDreamReward;
744
+ obj.accept_proposal_timeout = message.acceptProposalTimeout !== BigInt(0) ? message.acceptProposalTimeout?.toString() : undefined;
721
745
  return obj;
722
746
  },
723
747
  fromAminoMsg(object) {
@@ -793,7 +817,9 @@ function createBaseForumOperationalParams() {
793
817
  postConvictionLockSeconds: BigInt(0),
794
818
  postConvictionStreamRatePerBlock: "",
795
819
  maxForumRepPerTagPerEpoch: "",
796
- postConvictionStakerSlashBps: BigInt(0)
820
+ postConvictionStakerSlashBps: BigInt(0),
821
+ curationDreamReward: "",
822
+ acceptProposalTimeout: BigInt(0)
797
823
  };
798
824
  }
799
825
  /**
@@ -959,6 +985,12 @@ exports.ForumOperationalParams = {
959
985
  if (message.postConvictionStakerSlashBps !== BigInt(0)) {
960
986
  writer.uint32(512).uint64(message.postConvictionStakerSlashBps);
961
987
  }
988
+ if (message.curationDreamReward !== "") {
989
+ writer.uint32(522).string(message.curationDreamReward);
990
+ }
991
+ if (message.acceptProposalTimeout !== BigInt(0)) {
992
+ writer.uint32(528).int64(message.acceptProposalTimeout);
993
+ }
962
994
  return writer;
963
995
  },
964
996
  decode(input, length) {
@@ -1118,6 +1150,12 @@ exports.ForumOperationalParams = {
1118
1150
  case 64:
1119
1151
  message.postConvictionStakerSlashBps = reader.uint64();
1120
1152
  break;
1153
+ case 65:
1154
+ message.curationDreamReward = reader.string();
1155
+ break;
1156
+ case 66:
1157
+ message.acceptProposalTimeout = reader.int64();
1158
+ break;
1121
1159
  default:
1122
1160
  reader.skipType(tag & 7);
1123
1161
  break;
@@ -1177,6 +1215,8 @@ exports.ForumOperationalParams = {
1177
1215
  message.postConvictionStreamRatePerBlock = object.postConvictionStreamRatePerBlock ?? "";
1178
1216
  message.maxForumRepPerTagPerEpoch = object.maxForumRepPerTagPerEpoch ?? "";
1179
1217
  message.postConvictionStakerSlashBps = object.postConvictionStakerSlashBps !== undefined && object.postConvictionStakerSlashBps !== null ? BigInt(object.postConvictionStakerSlashBps.toString()) : BigInt(0);
1218
+ message.curationDreamReward = object.curationDreamReward ?? "";
1219
+ message.acceptProposalTimeout = object.acceptProposalTimeout !== undefined && object.acceptProposalTimeout !== null ? BigInt(object.acceptProposalTimeout.toString()) : BigInt(0);
1180
1220
  return message;
1181
1221
  },
1182
1222
  fromAmino(object) {
@@ -1331,6 +1371,12 @@ exports.ForumOperationalParams = {
1331
1371
  if (object.post_conviction_staker_slash_bps !== undefined && object.post_conviction_staker_slash_bps !== null) {
1332
1372
  message.postConvictionStakerSlashBps = BigInt(object.post_conviction_staker_slash_bps);
1333
1373
  }
1374
+ if (object.curation_dream_reward !== undefined && object.curation_dream_reward !== null) {
1375
+ message.curationDreamReward = object.curation_dream_reward;
1376
+ }
1377
+ if (object.accept_proposal_timeout !== undefined && object.accept_proposal_timeout !== null) {
1378
+ message.acceptProposalTimeout = BigInt(object.accept_proposal_timeout);
1379
+ }
1334
1380
  return message;
1335
1381
  },
1336
1382
  toAmino(message) {
@@ -1385,6 +1431,8 @@ exports.ForumOperationalParams = {
1385
1431
  obj.post_conviction_stream_rate_per_block = message.postConvictionStreamRatePerBlock === "" ? undefined : message.postConvictionStreamRatePerBlock;
1386
1432
  obj.max_forum_rep_per_tag_per_epoch = message.maxForumRepPerTagPerEpoch === "" ? undefined : message.maxForumRepPerTagPerEpoch;
1387
1433
  obj.post_conviction_staker_slash_bps = message.postConvictionStakerSlashBps !== BigInt(0) ? message.postConvictionStakerSlashBps?.toString() : undefined;
1434
+ obj.curation_dream_reward = message.curationDreamReward === "" ? undefined : message.curationDreamReward;
1435
+ obj.accept_proposal_timeout = message.acceptProposalTimeout !== BigInt(0) ? message.acceptProposalTimeout?.toString() : undefined;
1388
1436
  return obj;
1389
1437
  },
1390
1438
  fromAminoMsg(object) {
@@ -1,5 +1,53 @@
1
1
  import { BinaryReader, BinaryWriter } from "../../../binary";
2
2
  import { DeepPartial } from "../../../helpers";
3
+ /**
4
+ * AccuracyEpochBucket holds one reward-epoch's resolved-appeal tally for a
5
+ * sentinel. Stored in a fixed-size ring on SentinelActivity (slot index =
6
+ * epoch % SentinelAccuracyRingSize); the `epoch` stamp disambiguates a live
7
+ * slot from a stale one left behind by an inactive epoch.
8
+ * @name AccuracyEpochBucket
9
+ * @package sparkdream.forum.v1
10
+ * @see proto type: sparkdream.forum.v1.AccuracyEpochBucket
11
+ */
12
+ export interface AccuracyEpochBucket {
13
+ epoch: bigint;
14
+ /**
15
+ * upheld_hides + upheld_locks + upheld_moves resolved this epoch
16
+ */
17
+ upheld: bigint;
18
+ /**
19
+ * overturned_* resolved this epoch
20
+ */
21
+ overturned: bigint;
22
+ }
23
+ export interface AccuracyEpochBucketProtoMsg {
24
+ typeUrl: "/sparkdream.forum.v1.AccuracyEpochBucket";
25
+ value: Uint8Array;
26
+ }
27
+ /**
28
+ * AccuracyEpochBucket holds one reward-epoch's resolved-appeal tally for a
29
+ * sentinel. Stored in a fixed-size ring on SentinelActivity (slot index =
30
+ * epoch % SentinelAccuracyRingSize); the `epoch` stamp disambiguates a live
31
+ * slot from a stale one left behind by an inactive epoch.
32
+ * @name AccuracyEpochBucketAmino
33
+ * @package sparkdream.forum.v1
34
+ * @see proto type: sparkdream.forum.v1.AccuracyEpochBucket
35
+ */
36
+ export interface AccuracyEpochBucketAmino {
37
+ epoch?: string;
38
+ /**
39
+ * upheld_hides + upheld_locks + upheld_moves resolved this epoch
40
+ */
41
+ upheld?: string;
42
+ /**
43
+ * overturned_* resolved this epoch
44
+ */
45
+ overturned?: string;
46
+ }
47
+ export interface AccuracyEpochBucketAminoMsg {
48
+ type: "/sparkdream.forum.v1.AccuracyEpochBucket";
49
+ value: AccuracyEpochBucketAmino;
50
+ }
3
51
  /**
4
52
  * SentinelActivity holds forum-specific action counters and local cooldowns
5
53
  * for a sentinel. The accountability record (bond, bond status, activity
@@ -39,6 +87,34 @@ export interface SentinelActivity {
39
87
  upheldPins: bigint;
40
88
  overturnedPins: bigint;
41
89
  epochPins: bigint;
90
+ /**
91
+ * Curation-proposal tracking. A sentinel may propose a reply as a thread's
92
+ * accepted answer (MsgMarkAcceptedReply on someone else's thread); the author
93
+ * confirms/rejects or it auto-confirms after a timeout.
94
+ * total_proposals — lifetime proposals created (incremented at propose).
95
+ * confirmed_proposals — lifetime proposals confirmed (author confirm or
96
+ * auto-confirm); credited to the proposing sentinel.
97
+ * rejected_proposals — lifetime proposals rejected by the author.
98
+ * epoch_curations — confirmed proposals in the current reward epoch.
99
+ * Feeds the sentinel reward score; reset each epoch.
100
+ * Incremented on CONFIRM (success), not on propose, so
101
+ * it cannot be farmed by spamming unconfirmed proposals.
102
+ */
103
+ totalProposals: bigint;
104
+ confirmedProposals: bigint;
105
+ rejectedProposals: bigint;
106
+ epochCurations: bigint;
107
+ /**
108
+ * Rolling-window accuracy ring. Fixed length SentinelAccuracyRingSize once
109
+ * first written; slot e % C holds reward-epoch e's resolved-appeal tally.
110
+ * x/rep's reward distribution computes accuracy over the last
111
+ * SentinelAccuracyWindowEpochs slots from this ring. The lifetime
112
+ * upheld_*\/overturned_* counters above are retained for display/audit and are
113
+ * NO LONGER used for reward accuracy. Append-only field — empty on records
114
+ * written before this field existed (no migration needed; an empty ring reads
115
+ * as zero decided appeals).
116
+ */
117
+ accuracyWindow: AccuracyEpochBucket[];
42
118
  }
43
119
  export interface SentinelActivityProtoMsg {
44
120
  typeUrl: "/sparkdream.forum.v1.SentinelActivity";
@@ -83,11 +159,60 @@ export interface SentinelActivityAmino {
83
159
  upheld_pins?: string;
84
160
  overturned_pins?: string;
85
161
  epoch_pins?: string;
162
+ /**
163
+ * Curation-proposal tracking. A sentinel may propose a reply as a thread's
164
+ * accepted answer (MsgMarkAcceptedReply on someone else's thread); the author
165
+ * confirms/rejects or it auto-confirms after a timeout.
166
+ * total_proposals — lifetime proposals created (incremented at propose).
167
+ * confirmed_proposals — lifetime proposals confirmed (author confirm or
168
+ * auto-confirm); credited to the proposing sentinel.
169
+ * rejected_proposals — lifetime proposals rejected by the author.
170
+ * epoch_curations — confirmed proposals in the current reward epoch.
171
+ * Feeds the sentinel reward score; reset each epoch.
172
+ * Incremented on CONFIRM (success), not on propose, so
173
+ * it cannot be farmed by spamming unconfirmed proposals.
174
+ */
175
+ total_proposals?: string;
176
+ confirmed_proposals?: string;
177
+ rejected_proposals?: string;
178
+ epoch_curations?: string;
179
+ /**
180
+ * Rolling-window accuracy ring. Fixed length SentinelAccuracyRingSize once
181
+ * first written; slot e % C holds reward-epoch e's resolved-appeal tally.
182
+ * x/rep's reward distribution computes accuracy over the last
183
+ * SentinelAccuracyWindowEpochs slots from this ring. The lifetime
184
+ * upheld_*\/overturned_* counters above are retained for display/audit and are
185
+ * NO LONGER used for reward accuracy. Append-only field — empty on records
186
+ * written before this field existed (no migration needed; an empty ring reads
187
+ * as zero decided appeals).
188
+ */
189
+ accuracy_window?: AccuracyEpochBucketAmino[];
86
190
  }
87
191
  export interface SentinelActivityAminoMsg {
88
192
  type: "/sparkdream.forum.v1.SentinelActivity";
89
193
  value: SentinelActivityAmino;
90
194
  }
195
+ /**
196
+ * AccuracyEpochBucket holds one reward-epoch's resolved-appeal tally for a
197
+ * sentinel. Stored in a fixed-size ring on SentinelActivity (slot index =
198
+ * epoch % SentinelAccuracyRingSize); the `epoch` stamp disambiguates a live
199
+ * slot from a stale one left behind by an inactive epoch.
200
+ * @name AccuracyEpochBucket
201
+ * @package sparkdream.forum.v1
202
+ * @see proto type: sparkdream.forum.v1.AccuracyEpochBucket
203
+ */
204
+ export declare const AccuracyEpochBucket: {
205
+ typeUrl: string;
206
+ encode(message: AccuracyEpochBucket, writer?: BinaryWriter): BinaryWriter;
207
+ decode(input: BinaryReader | Uint8Array, length?: number): AccuracyEpochBucket;
208
+ fromPartial(object: DeepPartial<AccuracyEpochBucket>): AccuracyEpochBucket;
209
+ fromAmino(object: AccuracyEpochBucketAmino): AccuracyEpochBucket;
210
+ toAmino(message: AccuracyEpochBucket): AccuracyEpochBucketAmino;
211
+ fromAminoMsg(object: AccuracyEpochBucketAminoMsg): AccuracyEpochBucket;
212
+ fromProtoMsg(message: AccuracyEpochBucketProtoMsg): AccuracyEpochBucket;
213
+ toProto(message: AccuracyEpochBucket): Uint8Array;
214
+ toProtoMsg(message: AccuracyEpochBucket): AccuracyEpochBucketProtoMsg;
215
+ };
91
216
  /**
92
217
  * SentinelActivity holds forum-specific action counters and local cooldowns
93
218
  * for a sentinel. The accountability record (bond, bond status, activity
@@ -1,8 +1,104 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SentinelActivity = void 0;
3
+ exports.SentinelActivity = exports.AccuracyEpochBucket = void 0;
4
4
  //@ts-nocheck
5
5
  const binary_1 = require("../../../binary");
6
+ function createBaseAccuracyEpochBucket() {
7
+ return {
8
+ epoch: BigInt(0),
9
+ upheld: BigInt(0),
10
+ overturned: BigInt(0)
11
+ };
12
+ }
13
+ /**
14
+ * AccuracyEpochBucket holds one reward-epoch's resolved-appeal tally for a
15
+ * sentinel. Stored in a fixed-size ring on SentinelActivity (slot index =
16
+ * epoch % SentinelAccuracyRingSize); the `epoch` stamp disambiguates a live
17
+ * slot from a stale one left behind by an inactive epoch.
18
+ * @name AccuracyEpochBucket
19
+ * @package sparkdream.forum.v1
20
+ * @see proto type: sparkdream.forum.v1.AccuracyEpochBucket
21
+ */
22
+ exports.AccuracyEpochBucket = {
23
+ typeUrl: "/sparkdream.forum.v1.AccuracyEpochBucket",
24
+ encode(message, writer = binary_1.BinaryWriter.create()) {
25
+ if (message.epoch !== BigInt(0)) {
26
+ writer.uint32(8).uint64(message.epoch);
27
+ }
28
+ if (message.upheld !== BigInt(0)) {
29
+ writer.uint32(16).uint64(message.upheld);
30
+ }
31
+ if (message.overturned !== BigInt(0)) {
32
+ writer.uint32(24).uint64(message.overturned);
33
+ }
34
+ return writer;
35
+ },
36
+ decode(input, length) {
37
+ const reader = input instanceof binary_1.BinaryReader ? input : new binary_1.BinaryReader(input);
38
+ let end = length === undefined ? reader.len : reader.pos + length;
39
+ const message = createBaseAccuracyEpochBucket();
40
+ while (reader.pos < end) {
41
+ const tag = reader.uint32();
42
+ switch (tag >>> 3) {
43
+ case 1:
44
+ message.epoch = reader.uint64();
45
+ break;
46
+ case 2:
47
+ message.upheld = reader.uint64();
48
+ break;
49
+ case 3:
50
+ message.overturned = reader.uint64();
51
+ break;
52
+ default:
53
+ reader.skipType(tag & 7);
54
+ break;
55
+ }
56
+ }
57
+ return message;
58
+ },
59
+ fromPartial(object) {
60
+ const message = createBaseAccuracyEpochBucket();
61
+ message.epoch = object.epoch !== undefined && object.epoch !== null ? BigInt(object.epoch.toString()) : BigInt(0);
62
+ message.upheld = object.upheld !== undefined && object.upheld !== null ? BigInt(object.upheld.toString()) : BigInt(0);
63
+ message.overturned = object.overturned !== undefined && object.overturned !== null ? BigInt(object.overturned.toString()) : BigInt(0);
64
+ return message;
65
+ },
66
+ fromAmino(object) {
67
+ const message = createBaseAccuracyEpochBucket();
68
+ if (object.epoch !== undefined && object.epoch !== null) {
69
+ message.epoch = BigInt(object.epoch);
70
+ }
71
+ if (object.upheld !== undefined && object.upheld !== null) {
72
+ message.upheld = BigInt(object.upheld);
73
+ }
74
+ if (object.overturned !== undefined && object.overturned !== null) {
75
+ message.overturned = BigInt(object.overturned);
76
+ }
77
+ return message;
78
+ },
79
+ toAmino(message) {
80
+ const obj = {};
81
+ obj.epoch = message.epoch !== BigInt(0) ? message.epoch?.toString() : undefined;
82
+ obj.upheld = message.upheld !== BigInt(0) ? message.upheld?.toString() : undefined;
83
+ obj.overturned = message.overturned !== BigInt(0) ? message.overturned?.toString() : undefined;
84
+ return obj;
85
+ },
86
+ fromAminoMsg(object) {
87
+ return exports.AccuracyEpochBucket.fromAmino(object.value);
88
+ },
89
+ fromProtoMsg(message) {
90
+ return exports.AccuracyEpochBucket.decode(message.value);
91
+ },
92
+ toProto(message) {
93
+ return exports.AccuracyEpochBucket.encode(message).finish();
94
+ },
95
+ toProtoMsg(message) {
96
+ return {
97
+ typeUrl: "/sparkdream.forum.v1.AccuracyEpochBucket",
98
+ value: exports.AccuracyEpochBucket.encode(message).finish()
99
+ };
100
+ }
101
+ };
6
102
  function createBaseSentinelActivity() {
7
103
  return {
8
104
  address: "",
@@ -28,7 +124,12 @@ function createBaseSentinelActivity() {
28
124
  totalPins: BigInt(0),
29
125
  upheldPins: BigInt(0),
30
126
  overturnedPins: BigInt(0),
31
- epochPins: BigInt(0)
127
+ epochPins: BigInt(0),
128
+ totalProposals: BigInt(0),
129
+ confirmedProposals: BigInt(0),
130
+ rejectedProposals: BigInt(0),
131
+ epochCurations: BigInt(0),
132
+ accuracyWindow: []
32
133
  };
33
134
  }
34
135
  /**
@@ -114,6 +215,21 @@ exports.SentinelActivity = {
114
215
  if (message.epochPins !== BigInt(0)) {
115
216
  writer.uint32(192).uint64(message.epochPins);
116
217
  }
218
+ if (message.totalProposals !== BigInt(0)) {
219
+ writer.uint32(200).uint64(message.totalProposals);
220
+ }
221
+ if (message.confirmedProposals !== BigInt(0)) {
222
+ writer.uint32(208).uint64(message.confirmedProposals);
223
+ }
224
+ if (message.rejectedProposals !== BigInt(0)) {
225
+ writer.uint32(216).uint64(message.rejectedProposals);
226
+ }
227
+ if (message.epochCurations !== BigInt(0)) {
228
+ writer.uint32(224).uint64(message.epochCurations);
229
+ }
230
+ for (const v of message.accuracyWindow) {
231
+ exports.AccuracyEpochBucket.encode(v, writer.uint32(234).fork()).ldelim();
232
+ }
117
233
  return writer;
118
234
  },
119
235
  decode(input, length) {
@@ -195,6 +311,21 @@ exports.SentinelActivity = {
195
311
  case 24:
196
312
  message.epochPins = reader.uint64();
197
313
  break;
314
+ case 25:
315
+ message.totalProposals = reader.uint64();
316
+ break;
317
+ case 26:
318
+ message.confirmedProposals = reader.uint64();
319
+ break;
320
+ case 27:
321
+ message.rejectedProposals = reader.uint64();
322
+ break;
323
+ case 28:
324
+ message.epochCurations = reader.uint64();
325
+ break;
326
+ case 29:
327
+ message.accuracyWindow.push(exports.AccuracyEpochBucket.decode(reader, reader.uint32()));
328
+ break;
198
329
  default:
199
330
  reader.skipType(tag & 7);
200
331
  break;
@@ -228,6 +359,11 @@ exports.SentinelActivity = {
228
359
  message.upheldPins = object.upheldPins !== undefined && object.upheldPins !== null ? BigInt(object.upheldPins.toString()) : BigInt(0);
229
360
  message.overturnedPins = object.overturnedPins !== undefined && object.overturnedPins !== null ? BigInt(object.overturnedPins.toString()) : BigInt(0);
230
361
  message.epochPins = object.epochPins !== undefined && object.epochPins !== null ? BigInt(object.epochPins.toString()) : BigInt(0);
362
+ message.totalProposals = object.totalProposals !== undefined && object.totalProposals !== null ? BigInt(object.totalProposals.toString()) : BigInt(0);
363
+ message.confirmedProposals = object.confirmedProposals !== undefined && object.confirmedProposals !== null ? BigInt(object.confirmedProposals.toString()) : BigInt(0);
364
+ message.rejectedProposals = object.rejectedProposals !== undefined && object.rejectedProposals !== null ? BigInt(object.rejectedProposals.toString()) : BigInt(0);
365
+ message.epochCurations = object.epochCurations !== undefined && object.epochCurations !== null ? BigInt(object.epochCurations.toString()) : BigInt(0);
366
+ message.accuracyWindow = object.accuracyWindow?.map(e => exports.AccuracyEpochBucket.fromPartial(e)) || [];
231
367
  return message;
232
368
  },
233
369
  fromAmino(object) {
@@ -304,6 +440,19 @@ exports.SentinelActivity = {
304
440
  if (object.epoch_pins !== undefined && object.epoch_pins !== null) {
305
441
  message.epochPins = BigInt(object.epoch_pins);
306
442
  }
443
+ if (object.total_proposals !== undefined && object.total_proposals !== null) {
444
+ message.totalProposals = BigInt(object.total_proposals);
445
+ }
446
+ if (object.confirmed_proposals !== undefined && object.confirmed_proposals !== null) {
447
+ message.confirmedProposals = BigInt(object.confirmed_proposals);
448
+ }
449
+ if (object.rejected_proposals !== undefined && object.rejected_proposals !== null) {
450
+ message.rejectedProposals = BigInt(object.rejected_proposals);
451
+ }
452
+ if (object.epoch_curations !== undefined && object.epoch_curations !== null) {
453
+ message.epochCurations = BigInt(object.epoch_curations);
454
+ }
455
+ message.accuracyWindow = object.accuracy_window?.map(e => exports.AccuracyEpochBucket.fromAmino(e)) || [];
307
456
  return message;
308
457
  },
309
458
  toAmino(message) {
@@ -332,6 +481,16 @@ exports.SentinelActivity = {
332
481
  obj.upheld_pins = message.upheldPins !== BigInt(0) ? message.upheldPins?.toString() : undefined;
333
482
  obj.overturned_pins = message.overturnedPins !== BigInt(0) ? message.overturnedPins?.toString() : undefined;
334
483
  obj.epoch_pins = message.epochPins !== BigInt(0) ? message.epochPins?.toString() : undefined;
484
+ obj.total_proposals = message.totalProposals !== BigInt(0) ? message.totalProposals?.toString() : undefined;
485
+ obj.confirmed_proposals = message.confirmedProposals !== BigInt(0) ? message.confirmedProposals?.toString() : undefined;
486
+ obj.rejected_proposals = message.rejectedProposals !== BigInt(0) ? message.rejectedProposals?.toString() : undefined;
487
+ obj.epoch_curations = message.epochCurations !== BigInt(0) ? message.epochCurations?.toString() : undefined;
488
+ if (message.accuracyWindow) {
489
+ obj.accuracy_window = message.accuracyWindow.map(e => e ? exports.AccuracyEpochBucket.toAmino(e) : undefined);
490
+ }
491
+ else {
492
+ obj.accuracy_window = message.accuracyWindow;
493
+ }
335
494
  return obj;
336
495
  },
337
496
  fromAminoMsg(object) {
@@ -15,6 +15,22 @@ export interface ThreadMetadata {
15
15
  proposedReplyId: bigint;
16
16
  proposedBy: string;
17
17
  proposedAt: bigint;
18
+ /**
19
+ * proposal_extended is set true once the auto-confirm EndBlocker has granted
20
+ * the one-time inactivity extension to a pending proposal (author appeared
21
+ * inactive when the timeout first elapsed). Prevents an indefinite extension
22
+ * loop — the next timeout auto-confirms regardless. Cleared when the proposal
23
+ * resolves (confirm/reject/auto-confirm).
24
+ */
25
+ proposalExtended: boolean;
26
+ /**
27
+ * proposal_fire_at is the exact ProposalAutoConfirmQueue key (unix seconds)
28
+ * under which the current pending proposal is enqueued. Stored so the manual
29
+ * confirm/reject paths can remove the precise queue entry, and so the
30
+ * EndBlocker can detect-and-drop stale entries (a key whose fire_at no longer
31
+ * matches the live proposal). 0 = no pending proposal.
32
+ */
33
+ proposalFireAt: bigint;
18
34
  pinnedReplyIds: bigint[];
19
35
  pinnedRecords: PinnedReplyRecord[];
20
36
  }
@@ -36,6 +52,22 @@ export interface ThreadMetadataAmino {
36
52
  proposed_reply_id?: string;
37
53
  proposed_by?: string;
38
54
  proposed_at?: string;
55
+ /**
56
+ * proposal_extended is set true once the auto-confirm EndBlocker has granted
57
+ * the one-time inactivity extension to a pending proposal (author appeared
58
+ * inactive when the timeout first elapsed). Prevents an indefinite extension
59
+ * loop — the next timeout auto-confirms regardless. Cleared when the proposal
60
+ * resolves (confirm/reject/auto-confirm).
61
+ */
62
+ proposal_extended?: boolean;
63
+ /**
64
+ * proposal_fire_at is the exact ProposalAutoConfirmQueue key (unix seconds)
65
+ * under which the current pending proposal is enqueued. Stored so the manual
66
+ * confirm/reject paths can remove the precise queue entry, and so the
67
+ * EndBlocker can detect-and-drop stale entries (a key whose fire_at no longer
68
+ * matches the live proposal). 0 = no pending proposal.
69
+ */
70
+ proposal_fire_at?: string;
39
71
  pinned_reply_ids?: string[];
40
72
  pinned_records?: PinnedReplyRecordAmino[];
41
73
  }
@@ -13,6 +13,8 @@ function createBaseThreadMetadata() {
13
13
  proposedReplyId: BigInt(0),
14
14
  proposedBy: "",
15
15
  proposedAt: BigInt(0),
16
+ proposalExtended: false,
17
+ proposalFireAt: BigInt(0),
16
18
  pinnedReplyIds: [],
17
19
  pinnedRecords: []
18
20
  };
@@ -47,6 +49,12 @@ exports.ThreadMetadata = {
47
49
  if (message.proposedAt !== BigInt(0)) {
48
50
  writer.uint32(56).int64(message.proposedAt);
49
51
  }
52
+ if (message.proposalExtended === true) {
53
+ writer.uint32(64).bool(message.proposalExtended);
54
+ }
55
+ if (message.proposalFireAt !== BigInt(0)) {
56
+ writer.uint32(72).int64(message.proposalFireAt);
57
+ }
50
58
  writer.uint32(82).fork();
51
59
  for (const v of message.pinnedReplyIds) {
52
60
  writer.uint64(v);
@@ -85,6 +93,12 @@ exports.ThreadMetadata = {
85
93
  case 7:
86
94
  message.proposedAt = reader.int64();
87
95
  break;
96
+ case 8:
97
+ message.proposalExtended = reader.bool();
98
+ break;
99
+ case 9:
100
+ message.proposalFireAt = reader.int64();
101
+ break;
88
102
  case 10:
89
103
  if ((tag & 7) === 2) {
90
104
  const end2 = reader.uint32() + reader.pos;
@@ -115,6 +129,8 @@ exports.ThreadMetadata = {
115
129
  message.proposedReplyId = object.proposedReplyId !== undefined && object.proposedReplyId !== null ? BigInt(object.proposedReplyId.toString()) : BigInt(0);
116
130
  message.proposedBy = object.proposedBy ?? "";
117
131
  message.proposedAt = object.proposedAt !== undefined && object.proposedAt !== null ? BigInt(object.proposedAt.toString()) : BigInt(0);
132
+ message.proposalExtended = object.proposalExtended ?? false;
133
+ message.proposalFireAt = object.proposalFireAt !== undefined && object.proposalFireAt !== null ? BigInt(object.proposalFireAt.toString()) : BigInt(0);
118
134
  message.pinnedReplyIds = object.pinnedReplyIds?.map(e => BigInt(e.toString())) || [];
119
135
  message.pinnedRecords = object.pinnedRecords?.map(e => types_1.PinnedReplyRecord.fromPartial(e)) || [];
120
136
  return message;
@@ -142,6 +158,12 @@ exports.ThreadMetadata = {
142
158
  if (object.proposed_at !== undefined && object.proposed_at !== null) {
143
159
  message.proposedAt = BigInt(object.proposed_at);
144
160
  }
161
+ if (object.proposal_extended !== undefined && object.proposal_extended !== null) {
162
+ message.proposalExtended = object.proposal_extended;
163
+ }
164
+ if (object.proposal_fire_at !== undefined && object.proposal_fire_at !== null) {
165
+ message.proposalFireAt = BigInt(object.proposal_fire_at);
166
+ }
145
167
  message.pinnedReplyIds = object.pinned_reply_ids?.map(e => BigInt(e)) || [];
146
168
  message.pinnedRecords = object.pinned_records?.map(e => types_1.PinnedReplyRecord.fromAmino(e)) || [];
147
169
  return message;
@@ -155,6 +177,8 @@ exports.ThreadMetadata = {
155
177
  obj.proposed_reply_id = message.proposedReplyId !== BigInt(0) ? message.proposedReplyId?.toString() : undefined;
156
178
  obj.proposed_by = message.proposedBy === "" ? undefined : message.proposedBy;
157
179
  obj.proposed_at = message.proposedAt !== BigInt(0) ? message.proposedAt?.toString() : undefined;
180
+ obj.proposal_extended = message.proposalExtended === false ? undefined : message.proposalExtended;
181
+ obj.proposal_fire_at = message.proposalFireAt !== BigInt(0) ? message.proposalFireAt?.toString() : undefined;
158
182
  if (message.pinnedReplyIds) {
159
183
  obj.pinned_reply_ids = message.pinnedReplyIds.map(e => e.toString());
160
184
  }
@@ -335,6 +335,13 @@ export interface Params {
335
335
  * Minimum appeal rate (appeals / actions) to qualify for a reward (default 0.05).
336
336
  */
337
337
  minAppealRate: string;
338
+ /**
339
+ * Rolling window (in reward epochs) over which sentinel reward accuracy is
340
+ * measured. Recent overturns move the ratio; inactivity ages a sentinel out.
341
+ * Bounded 1 <= W <= MaxSentinelAccuracyWindowEpochs (== the forum
342
+ * SentinelAccuracyRingSize). Default 6.
343
+ */
344
+ sentinelAccuracyWindowEpochs: bigint;
338
345
  /**
339
346
  * Per-member active work caps (anti-monopolization). 0 = unbounded.
340
347
  */
@@ -618,6 +625,13 @@ export interface ParamsAmino {
618
625
  * Minimum appeal rate (appeals / actions) to qualify for a reward (default 0.05).
619
626
  */
620
627
  min_appeal_rate?: string;
628
+ /**
629
+ * Rolling window (in reward epochs) over which sentinel reward accuracy is
630
+ * measured. Recent overturns move the ratio; inactivity ages a sentinel out.
631
+ * Bounded 1 <= W <= MaxSentinelAccuracyWindowEpochs (== the forum
632
+ * SentinelAccuracyRingSize). Default 6.
633
+ */
634
+ sentinel_accuracy_window_epochs?: string;
621
635
  /**
622
636
  * Per-member active work caps (anti-monopolization). 0 = unbounded.
623
637
  */
@@ -830,6 +844,11 @@ export interface RepOperationalParams {
830
844
  * Minimum appeal rate (appeals / actions) to qualify for a reward (default 0.05).
831
845
  */
832
846
  minAppealRate: string;
847
+ /**
848
+ * Rolling window (in reward epochs) for sentinel reward accuracy (mirrors
849
+ * Params.sentinel_accuracy_window_epochs). Default 6.
850
+ */
851
+ sentinelAccuracyWindowEpochs: bigint;
833
852
  /**
834
853
  * Per-member active work caps (mirrors Params.max_active_{initiatives,interims}_per_member). 0 = unbounded.
835
854
  */
@@ -1025,6 +1044,11 @@ export interface RepOperationalParamsAmino {
1025
1044
  * Minimum appeal rate (appeals / actions) to qualify for a reward (default 0.05).
1026
1045
  */
1027
1046
  min_appeal_rate?: string;
1047
+ /**
1048
+ * Rolling window (in reward epochs) for sentinel reward accuracy (mirrors
1049
+ * Params.sentinel_accuracy_window_epochs). Default 6.
1050
+ */
1051
+ sentinel_accuracy_window_epochs?: string;
1028
1052
  /**
1029
1053
  * Per-member active work caps (mirrors Params.max_active_{initiatives,interims}_per_member). 0 = unbounded.
1030
1054
  */