@sparkdreamnft/sparkdreamjs 0.0.18 → 0.0.20

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 (66) hide show
  1. package/esm/sparkdream/blog/v1/params.js +62 -2
  2. package/esm/sparkdream/blog/v1/tx.js +583 -2
  3. package/esm/sparkdream/blog/v1/tx.registry.js +74 -2
  4. package/esm/sparkdream/blog/v1/tx.rpc.msg.js +33 -3
  5. package/esm/sparkdream/collect/v1/params.js +109 -1
  6. package/esm/sparkdream/collect/v1/tx.js +293 -1
  7. package/esm/sparkdream/collect/v1/tx.registry.js +38 -2
  8. package/esm/sparkdream/collect/v1/tx.rpc.msg.js +17 -2
  9. package/esm/sparkdream/collect/v1/types.js +135 -3
  10. package/esm/sparkdream/forum/v1/params.js +218 -2
  11. package/esm/sparkdream/forum/v1/post.js +25 -1
  12. package/esm/sparkdream/forum/v1/query.js +469 -0
  13. package/esm/sparkdream/forum/v1/query.lcd.js +30 -0
  14. package/esm/sparkdream/forum/v1/query.rpc.Query.js +31 -1
  15. package/esm/sparkdream/forum/v1/tx.js +460 -0
  16. package/esm/sparkdream/forum/v1/tx.registry.js +56 -2
  17. package/esm/sparkdream/forum/v1/tx.rpc.msg.js +30 -1
  18. package/esm/sparkdream/forum/v1/types.js +355 -0
  19. package/esm/sparkdream/forum/v1/user_rate_limit.js +41 -2
  20. package/esm/sparkdream/rep/v1/member.js +209 -1
  21. package/esm/sparkdream/rep/v1/query.js +13 -22
  22. package/package.json +1 -1
  23. package/sparkdream/blog/v1/params.d.ts +52 -0
  24. package/sparkdream/blog/v1/params.js +62 -2
  25. package/sparkdream/blog/v1/tx.d.ts +381 -6
  26. package/sparkdream/blog/v1/tx.js +584 -3
  27. package/sparkdream/blog/v1/tx.registry.d.ts +49 -1
  28. package/sparkdream/blog/v1/tx.registry.js +73 -1
  29. package/sparkdream/blog/v1/tx.rpc.msg.d.ts +27 -3
  30. package/sparkdream/blog/v1/tx.rpc.msg.js +32 -2
  31. package/sparkdream/bundle.d.ts +474 -0
  32. package/sparkdream/collect/v1/params.d.ts +124 -0
  33. package/sparkdream/collect/v1/params.js +109 -1
  34. package/sparkdream/collect/v1/tx.d.ts +195 -3
  35. package/sparkdream/collect/v1/tx.js +294 -2
  36. package/sparkdream/collect/v1/tx.registry.d.ts +25 -1
  37. package/sparkdream/collect/v1/tx.registry.js +37 -1
  38. package/sparkdream/collect/v1/tx.rpc.msg.d.ts +15 -2
  39. package/sparkdream/collect/v1/tx.rpc.msg.js +16 -1
  40. package/sparkdream/collect/v1/types.d.ts +112 -0
  41. package/sparkdream/collect/v1/types.js +135 -3
  42. package/sparkdream/forum/v1/params.d.ts +210 -0
  43. package/sparkdream/forum/v1/params.js +218 -2
  44. package/sparkdream/forum/v1/post.d.ts +28 -0
  45. package/sparkdream/forum/v1/post.js +25 -1
  46. package/sparkdream/forum/v1/query.d.ts +273 -0
  47. package/sparkdream/forum/v1/query.js +470 -1
  48. package/sparkdream/forum/v1/query.lcd.d.ts +4 -1
  49. package/sparkdream/forum/v1/query.lcd.js +30 -0
  50. package/sparkdream/forum/v1/query.rpc.Query.d.ts +18 -1
  51. package/sparkdream/forum/v1/query.rpc.Query.js +30 -0
  52. package/sparkdream/forum/v1/tx.d.ts +291 -0
  53. package/sparkdream/forum/v1/tx.js +462 -2
  54. package/sparkdream/forum/v1/tx.registry.d.ts +37 -1
  55. package/sparkdream/forum/v1/tx.registry.js +55 -1
  56. package/sparkdream/forum/v1/tx.rpc.msg.d.ts +27 -1
  57. package/sparkdream/forum/v1/tx.rpc.msg.js +29 -0
  58. package/sparkdream/forum/v1/types.d.ts +247 -0
  59. package/sparkdream/forum/v1/types.js +356 -1
  60. package/sparkdream/forum/v1/user_rate_limit.d.ts +24 -3
  61. package/sparkdream/forum/v1/user_rate_limit.js +41 -2
  62. package/sparkdream/rep/v1/member.d.ts +134 -0
  63. package/sparkdream/rep/v1/member.js +210 -2
  64. package/sparkdream/rep/v1/query.d.ts +2 -4
  65. package/sparkdream/rep/v1/query.js +13 -22
  66. package/sparkdream/rpc.query.d.ts +3 -0
@@ -1,5 +1,5 @@
1
1
  import { TxRpc } from "../../../types";
2
- import { MsgUpdateParams, MsgUpdateParamsResponse, MsgUpdateOperationalParams, MsgUpdateOperationalParamsResponse, MsgCreatePost, MsgCreatePostResponse, MsgEditPost, MsgEditPostResponse, MsgDeletePost, MsgDeletePostResponse, MsgFreezeThread, MsgFreezeThreadResponse, MsgUnarchiveThread, MsgUnarchiveThreadResponse, MsgPinPost, MsgPinPostResponse, MsgUnpinPost, MsgUnpinPostResponse, MsgLockThread, MsgLockThreadResponse, MsgUnlockThread, MsgUnlockThreadResponse, MsgMoveThread, MsgMoveThreadResponse, MsgFollowThread, MsgFollowThreadResponse, MsgUnfollowThread, MsgUnfollowThreadResponse, MsgUpvotePost, MsgUpvotePostResponse, MsgDownvotePost, MsgDownvotePostResponse, MsgFlagPost, MsgFlagPostResponse, MsgDismissFlags, MsgDismissFlagsResponse, MsgHidePost, MsgHidePostResponse, MsgUnhidePost, MsgUnhidePostResponse, MsgAppealPost, MsgAppealPostResponse, MsgAppealThreadLock, MsgAppealThreadLockResponse, MsgAppealThreadMove, MsgAppealThreadMoveResponse, MsgCreateBounty, MsgCreateBountyResponse, MsgAwardBounty, MsgAwardBountyResponse, MsgIncreaseBounty, MsgIncreaseBountyResponse, MsgCancelBounty, MsgCancelBountyResponse, MsgAssignBountyToReply, MsgAssignBountyToReplyResponse, MsgPinReply, MsgPinReplyResponse, MsgUnpinReply, MsgUnpinReplyResponse, MsgDisputePin, MsgDisputePinResponse, MsgMarkAcceptedReply, MsgMarkAcceptedReplyResponse, MsgConfirmProposedReply, MsgConfirmProposedReplyResponse, MsgRejectProposedReply, MsgRejectProposedReplyResponse, MsgSetForumPaused, MsgSetForumPausedResponse, MsgSetModerationPaused, MsgSetModerationPausedResponse } from "./tx";
2
+ import { MsgUpdateParams, MsgUpdateParamsResponse, MsgUpdateOperationalParams, MsgUpdateOperationalParamsResponse, MsgCreatePost, MsgCreatePostResponse, MsgEditPost, MsgEditPostResponse, MsgDeletePost, MsgDeletePostResponse, MsgFreezeThread, MsgFreezeThreadResponse, MsgUnarchiveThread, MsgUnarchiveThreadResponse, MsgPinPost, MsgPinPostResponse, MsgUnpinPost, MsgUnpinPostResponse, MsgMakePostPermanent, MsgMakePostPermanentResponse, MsgLockThread, MsgLockThreadResponse, MsgUnlockThread, MsgUnlockThreadResponse, MsgMoveThread, MsgMoveThreadResponse, MsgFollowThread, MsgFollowThreadResponse, MsgUnfollowThread, MsgUnfollowThreadResponse, MsgUpvotePost, MsgUpvotePostResponse, MsgDownvotePost, MsgDownvotePostResponse, MsgStakePostConviction, MsgStakePostConvictionResponse, MsgReleasePostConviction, MsgReleasePostConvictionResponse, MsgFlagPost, MsgFlagPostResponse, MsgDismissFlags, MsgDismissFlagsResponse, MsgHidePost, MsgHidePostResponse, MsgUnhidePost, MsgUnhidePostResponse, MsgAppealPost, MsgAppealPostResponse, MsgAppealThreadLock, MsgAppealThreadLockResponse, MsgAppealThreadMove, MsgAppealThreadMoveResponse, MsgCreateBounty, MsgCreateBountyResponse, MsgAwardBounty, MsgAwardBountyResponse, MsgIncreaseBounty, MsgIncreaseBountyResponse, MsgCancelBounty, MsgCancelBountyResponse, MsgAssignBountyToReply, MsgAssignBountyToReplyResponse, MsgPinReply, MsgPinReplyResponse, MsgUnpinReply, MsgUnpinReplyResponse, MsgDisputePin, MsgDisputePinResponse, MsgMarkAcceptedReply, MsgMarkAcceptedReplyResponse, MsgConfirmProposedReply, MsgConfirmProposedReplyResponse, MsgRejectProposedReply, MsgRejectProposedReplyResponse, MsgSetForumPaused, MsgSetForumPausedResponse, MsgSetModerationPaused, MsgSetModerationPausedResponse } from "./tx";
3
3
  /** Msg defines the Msg service. */
4
4
  export interface Msg {
5
5
  /**
@@ -26,6 +26,15 @@ export interface Msg {
26
26
  pinPost(request: MsgPinPost): Promise<MsgPinPostResponse>;
27
27
  /** UnpinPost defines the UnpinPost RPC. */
28
28
  unpinPost(request: MsgUnpinPost): Promise<MsgUnpinPostResponse>;
29
+ /**
30
+ * MakePostPermanent promotes an ephemeral post (root post or reply) to
31
+ * permanent by clearing its expiration_time and dropping the matching
32
+ * ExpirationQueue / EphemeralByAuthor entries. Strict separation from pin:
33
+ * pin is display-only and now refuses ephemeral targets, MakePermanent is
34
+ * the lifecycle change. Gated on make_permanent_min_trust_level (default
35
+ * PROVISIONAL) and consumes one slot from the daily post-rate limit.
36
+ */
37
+ makePostPermanent(request: MsgMakePostPermanent): Promise<MsgMakePostPermanentResponse>;
29
38
  /** LockThread defines the LockThread RPC. */
30
39
  lockThread(request: MsgLockThread): Promise<MsgLockThreadResponse>;
31
40
  /** UnlockThread defines the UnlockThread RPC. */
@@ -40,6 +49,20 @@ export interface Msg {
40
49
  upvotePost(request: MsgUpvotePost): Promise<MsgUpvotePostResponse>;
41
50
  /** DownvotePost defines the DownvotePost RPC. */
42
51
  downvotePost(request: MsgDownvotePost): Promise<MsgDownvotePostResponse>;
52
+ /**
53
+ * StakePostConviction opens a PostConvictionStake: locks the staker's DREAM
54
+ * and starts EndBlocker-driven per-tag rep accrual for the post's author.
55
+ * Caller must be ESTABLISHED+, must not be the post's author, and must
56
+ * commit at least Params.min_post_conviction_stake DREAM.
57
+ */
58
+ stakePostConviction(request: MsgStakePostConviction): Promise<MsgStakePostConvictionResponse>;
59
+ /**
60
+ * ReleasePostConviction closes a previously-opened PostConvictionStake
61
+ * after post_conviction_lock_seconds has elapsed. The non-slashed portion
62
+ * of the staker's DREAM is unlocked; any rep credited to the author stays
63
+ * (subject to the slash path on confirmed hide).
64
+ */
65
+ releasePostConviction(request: MsgReleasePostConviction): Promise<MsgReleasePostConvictionResponse>;
43
66
  /** FlagPost defines the FlagPost RPC. */
44
67
  flagPost(request: MsgFlagPost): Promise<MsgFlagPostResponse>;
45
68
  /** DismissFlags defines the DismissFlags RPC. */
@@ -100,6 +123,7 @@ export declare class MsgClientImpl implements Msg {
100
123
  unarchiveThread: (request: MsgUnarchiveThread) => Promise<MsgUnarchiveThreadResponse>;
101
124
  pinPost: (request: MsgPinPost) => Promise<MsgPinPostResponse>;
102
125
  unpinPost: (request: MsgUnpinPost) => Promise<MsgUnpinPostResponse>;
126
+ makePostPermanent: (request: MsgMakePostPermanent) => Promise<MsgMakePostPermanentResponse>;
103
127
  lockThread: (request: MsgLockThread) => Promise<MsgLockThreadResponse>;
104
128
  unlockThread: (request: MsgUnlockThread) => Promise<MsgUnlockThreadResponse>;
105
129
  moveThread: (request: MsgMoveThread) => Promise<MsgMoveThreadResponse>;
@@ -107,6 +131,8 @@ export declare class MsgClientImpl implements Msg {
107
131
  unfollowThread: (request: MsgUnfollowThread) => Promise<MsgUnfollowThreadResponse>;
108
132
  upvotePost: (request: MsgUpvotePost) => Promise<MsgUpvotePostResponse>;
109
133
  downvotePost: (request: MsgDownvotePost) => Promise<MsgDownvotePostResponse>;
134
+ stakePostConviction: (request: MsgStakePostConviction) => Promise<MsgStakePostConvictionResponse>;
135
+ releasePostConviction: (request: MsgReleasePostConviction) => Promise<MsgReleasePostConvictionResponse>;
110
136
  flagPost: (request: MsgFlagPost) => Promise<MsgFlagPostResponse>;
111
137
  dismissFlags: (request: MsgDismissFlags) => Promise<MsgDismissFlagsResponse>;
112
138
  hidePost: (request: MsgHidePost) => Promise<MsgHidePostResponse>;
@@ -64,6 +64,17 @@ class MsgClientImpl {
64
64
  const promise = this.rpc.request("sparkdream.forum.v1.Msg", "UnpinPost", data);
65
65
  return promise.then(data => tx_1.MsgUnpinPostResponse.decode(new binary_1.BinaryReader(data)));
66
66
  };
67
+ /* MakePostPermanent promotes an ephemeral post (root post or reply) to
68
+ permanent by clearing its expiration_time and dropping the matching
69
+ ExpirationQueue / EphemeralByAuthor entries. Strict separation from pin:
70
+ pin is display-only and now refuses ephemeral targets, MakePermanent is
71
+ the lifecycle change. Gated on make_permanent_min_trust_level (default
72
+ PROVISIONAL) and consumes one slot from the daily post-rate limit. */
73
+ makePostPermanent = async (request) => {
74
+ const data = tx_1.MsgMakePostPermanent.encode(request).finish();
75
+ const promise = this.rpc.request("sparkdream.forum.v1.Msg", "MakePostPermanent", data);
76
+ return promise.then(data => tx_1.MsgMakePostPermanentResponse.decode(new binary_1.BinaryReader(data)));
77
+ };
67
78
  /* LockThread defines the LockThread RPC. */
68
79
  lockThread = async (request) => {
69
80
  const data = tx_1.MsgLockThread.encode(request).finish();
@@ -106,6 +117,24 @@ class MsgClientImpl {
106
117
  const promise = this.rpc.request("sparkdream.forum.v1.Msg", "DownvotePost", data);
107
118
  return promise.then(data => tx_1.MsgDownvotePostResponse.decode(new binary_1.BinaryReader(data)));
108
119
  };
120
+ /* StakePostConviction opens a PostConvictionStake: locks the staker's DREAM
121
+ and starts EndBlocker-driven per-tag rep accrual for the post's author.
122
+ Caller must be ESTABLISHED+, must not be the post's author, and must
123
+ commit at least Params.min_post_conviction_stake DREAM. */
124
+ stakePostConviction = async (request) => {
125
+ const data = tx_1.MsgStakePostConviction.encode(request).finish();
126
+ const promise = this.rpc.request("sparkdream.forum.v1.Msg", "StakePostConviction", data);
127
+ return promise.then(data => tx_1.MsgStakePostConvictionResponse.decode(new binary_1.BinaryReader(data)));
128
+ };
129
+ /* ReleasePostConviction closes a previously-opened PostConvictionStake
130
+ after post_conviction_lock_seconds has elapsed. The non-slashed portion
131
+ of the staker's DREAM is unlocked; any rep credited to the author stays
132
+ (subject to the slash path on confirmed hide). */
133
+ releasePostConviction = async (request) => {
134
+ const data = tx_1.MsgReleasePostConviction.encode(request).finish();
135
+ const promise = this.rpc.request("sparkdream.forum.v1.Msg", "ReleasePostConviction", data);
136
+ return promise.then(data => tx_1.MsgReleasePostConvictionResponse.decode(new binary_1.BinaryReader(data)));
137
+ };
109
138
  /* FlagPost defines the FlagPost RPC. */
110
139
  flagPost = async (request) => {
111
140
  const data = tx_1.MsgFlagPost.encode(request).finish();
@@ -133,6 +133,186 @@ export interface PinnedReplyRecordAminoMsg {
133
133
  type: "/sparkdream.forum.v1.PinnedReplyRecord";
134
134
  value: PinnedReplyRecordAmino;
135
135
  }
136
+ /**
137
+ * ForumRepEpochCounter tracks how much forum reputation a single author has
138
+ * earned in a single tag during the current UTC-day epoch. Reset implicitly
139
+ * by comparing epoch_id to floor(block_time / 86400) on read — when the
140
+ * stored epoch_id is stale, the accumulated counter is treated as zero and
141
+ * overwritten on the next credit. Used by the post-conviction accrual loop
142
+ * to enforce Params.max_forum_rep_per_tag_per_epoch.
143
+ * @name ForumRepEpochCounter
144
+ * @package sparkdream.forum.v1
145
+ * @see proto type: sparkdream.forum.v1.ForumRepEpochCounter
146
+ */
147
+ export interface ForumRepEpochCounter {
148
+ /**
149
+ * epoch_id is the UTC-day index: floor(block_time / 86400).
150
+ */
151
+ epochId: bigint;
152
+ /**
153
+ * accumulated is the dec-string of rep credited so far this epoch.
154
+ */
155
+ accumulated: string;
156
+ }
157
+ export interface ForumRepEpochCounterProtoMsg {
158
+ typeUrl: "/sparkdream.forum.v1.ForumRepEpochCounter";
159
+ value: Uint8Array;
160
+ }
161
+ /**
162
+ * ForumRepEpochCounter tracks how much forum reputation a single author has
163
+ * earned in a single tag during the current UTC-day epoch. Reset implicitly
164
+ * by comparing epoch_id to floor(block_time / 86400) on read — when the
165
+ * stored epoch_id is stale, the accumulated counter is treated as zero and
166
+ * overwritten on the next credit. Used by the post-conviction accrual loop
167
+ * to enforce Params.max_forum_rep_per_tag_per_epoch.
168
+ * @name ForumRepEpochCounterAmino
169
+ * @package sparkdream.forum.v1
170
+ * @see proto type: sparkdream.forum.v1.ForumRepEpochCounter
171
+ */
172
+ export interface ForumRepEpochCounterAmino {
173
+ /**
174
+ * epoch_id is the UTC-day index: floor(block_time / 86400).
175
+ */
176
+ epoch_id?: string;
177
+ /**
178
+ * accumulated is the dec-string of rep credited so far this epoch.
179
+ */
180
+ accumulated?: string;
181
+ }
182
+ export interface ForumRepEpochCounterAminoMsg {
183
+ type: "/sparkdream.forum.v1.ForumRepEpochCounter";
184
+ value: ForumRepEpochCounterAmino;
185
+ }
186
+ /**
187
+ * @name PostConvictionStake_AccruedRepPerTagEntry
188
+ * @package sparkdream.forum.v1
189
+ * @see proto type: sparkdream.forum.v1.undefined
190
+ */
191
+ export interface PostConvictionStake_AccruedRepPerTagEntry {
192
+ key: string;
193
+ value: string;
194
+ }
195
+ export interface PostConvictionStake_AccruedRepPerTagEntryProtoMsg {
196
+ typeUrl: string;
197
+ value: Uint8Array;
198
+ }
199
+ /**
200
+ * @name PostConvictionStake_AccruedRepPerTagEntryAmino
201
+ * @package sparkdream.forum.v1
202
+ * @see proto type: sparkdream.forum.v1.PostConvictionStake_AccruedRepPerTagEntry
203
+ */
204
+ export interface PostConvictionStake_AccruedRepPerTagEntryAmino {
205
+ key?: string;
206
+ value?: string;
207
+ }
208
+ export interface PostConvictionStake_AccruedRepPerTagEntryAminoMsg {
209
+ type: string;
210
+ value: PostConvictionStake_AccruedRepPerTagEntryAmino;
211
+ }
212
+ /**
213
+ * PostConvictionStake records an ESTABLISHED+ member's DREAM lock backing a
214
+ * post's author. While the stake is active, the EndBlocker streams per-tag
215
+ * reputation to the author proportional to the stake's share of total active
216
+ * stakes on the post (split evenly across the post's tags). On confirmed
217
+ * sentinel hide (ExpireHiddenPosts), the accrued rep is clawed back from the
218
+ * author per tag and a fraction of the staker's locked DREAM is slashed
219
+ * (staker_slash_bps) — both staker and author endorsed harm.
220
+ *
221
+ * Stakers cannot stake on their own posts. Stakes are released after
222
+ * unlocks_at via MsgReleasePostConviction; LockDREAM/UnlockDREAM bypass the
223
+ * 3% transfer tax because it is internal member-balance rebalancing, not a
224
+ * transfer.
225
+ * @name PostConvictionStake
226
+ * @package sparkdream.forum.v1
227
+ * @see proto type: sparkdream.forum.v1.PostConvictionStake
228
+ */
229
+ export interface PostConvictionStake {
230
+ id: bigint;
231
+ staker: string;
232
+ postId: bigint;
233
+ amount: string;
234
+ stakedAt: bigint;
235
+ unlocksAt: bigint;
236
+ /**
237
+ * accrued_rep_per_tag tracks how much rep this stake has minted to the
238
+ * author per tag, so a confirmed hide can claw back exactly the amount this
239
+ * stake produced (and no more). Map key is tag name, value is a decimal
240
+ * string (math.LegacyDec). Populated by the EndBlocker accrual loop.
241
+ */
242
+ accruedRepPerTag: {
243
+ [key: string]: string;
244
+ };
245
+ /**
246
+ * last_accrual_at is the last EndBlocker tick at which this stake credited
247
+ * rep to the author. Initialized to staked_at on creation; streaming is
248
+ * bounded by the per-(author,tag) epoch cap so multiple stakes can saturate
249
+ * a single tag without one stake monopolizing the budget.
250
+ */
251
+ lastAccrualAt: bigint;
252
+ /**
253
+ * released is set true once the staker has called MsgReleasePostConviction
254
+ * after unlocks_at. Released stakes are kept in state until the post's
255
+ * hide-appeal window has fully elapsed so any retroactive slash can still
256
+ * find them; after that they are GC'd by a pass in EndBlocker.
257
+ */
258
+ released: boolean;
259
+ }
260
+ export interface PostConvictionStakeProtoMsg {
261
+ typeUrl: "/sparkdream.forum.v1.PostConvictionStake";
262
+ value: Uint8Array;
263
+ }
264
+ /**
265
+ * PostConvictionStake records an ESTABLISHED+ member's DREAM lock backing a
266
+ * post's author. While the stake is active, the EndBlocker streams per-tag
267
+ * reputation to the author proportional to the stake's share of total active
268
+ * stakes on the post (split evenly across the post's tags). On confirmed
269
+ * sentinel hide (ExpireHiddenPosts), the accrued rep is clawed back from the
270
+ * author per tag and a fraction of the staker's locked DREAM is slashed
271
+ * (staker_slash_bps) — both staker and author endorsed harm.
272
+ *
273
+ * Stakers cannot stake on their own posts. Stakes are released after
274
+ * unlocks_at via MsgReleasePostConviction; LockDREAM/UnlockDREAM bypass the
275
+ * 3% transfer tax because it is internal member-balance rebalancing, not a
276
+ * transfer.
277
+ * @name PostConvictionStakeAmino
278
+ * @package sparkdream.forum.v1
279
+ * @see proto type: sparkdream.forum.v1.PostConvictionStake
280
+ */
281
+ export interface PostConvictionStakeAmino {
282
+ id?: string;
283
+ staker?: string;
284
+ post_id?: string;
285
+ amount?: string;
286
+ staked_at?: string;
287
+ unlocks_at?: string;
288
+ /**
289
+ * accrued_rep_per_tag tracks how much rep this stake has minted to the
290
+ * author per tag, so a confirmed hide can claw back exactly the amount this
291
+ * stake produced (and no more). Map key is tag name, value is a decimal
292
+ * string (math.LegacyDec). Populated by the EndBlocker accrual loop.
293
+ */
294
+ accrued_rep_per_tag?: {
295
+ [key: string]: string;
296
+ };
297
+ /**
298
+ * last_accrual_at is the last EndBlocker tick at which this stake credited
299
+ * rep to the author. Initialized to staked_at on creation; streaming is
300
+ * bounded by the per-(author,tag) epoch cap so multiple stakes can saturate
301
+ * a single tag without one stake monopolizing the budget.
302
+ */
303
+ last_accrual_at?: string;
304
+ /**
305
+ * released is set true once the staker has called MsgReleasePostConviction
306
+ * after unlocks_at. Released stakes are kept in state until the post's
307
+ * hide-appeal window has fully elapsed so any retroactive slash can still
308
+ * find them; after that they are GC'd by a pass in EndBlocker.
309
+ */
310
+ released?: boolean;
311
+ }
312
+ export interface PostConvictionStakeAminoMsg {
313
+ type: "/sparkdream.forum.v1.PostConvictionStake";
314
+ value: PostConvictionStakeAmino;
315
+ }
136
316
  /**
137
317
  * BountyAward represents an award given from a bounty.
138
318
  * @name BountyAward
@@ -169,3 +349,70 @@ export declare const PinnedReplyRecord: {
169
349
  toProto(message: PinnedReplyRecord): Uint8Array;
170
350
  toProtoMsg(message: PinnedReplyRecord): PinnedReplyRecordProtoMsg;
171
351
  };
352
+ /**
353
+ * ForumRepEpochCounter tracks how much forum reputation a single author has
354
+ * earned in a single tag during the current UTC-day epoch. Reset implicitly
355
+ * by comparing epoch_id to floor(block_time / 86400) on read — when the
356
+ * stored epoch_id is stale, the accumulated counter is treated as zero and
357
+ * overwritten on the next credit. Used by the post-conviction accrual loop
358
+ * to enforce Params.max_forum_rep_per_tag_per_epoch.
359
+ * @name ForumRepEpochCounter
360
+ * @package sparkdream.forum.v1
361
+ * @see proto type: sparkdream.forum.v1.ForumRepEpochCounter
362
+ */
363
+ export declare const ForumRepEpochCounter: {
364
+ typeUrl: string;
365
+ encode(message: ForumRepEpochCounter, writer?: BinaryWriter): BinaryWriter;
366
+ decode(input: BinaryReader | Uint8Array, length?: number): ForumRepEpochCounter;
367
+ fromPartial(object: DeepPartial<ForumRepEpochCounter>): ForumRepEpochCounter;
368
+ fromAmino(object: ForumRepEpochCounterAmino): ForumRepEpochCounter;
369
+ toAmino(message: ForumRepEpochCounter): ForumRepEpochCounterAmino;
370
+ fromAminoMsg(object: ForumRepEpochCounterAminoMsg): ForumRepEpochCounter;
371
+ fromProtoMsg(message: ForumRepEpochCounterProtoMsg): ForumRepEpochCounter;
372
+ toProto(message: ForumRepEpochCounter): Uint8Array;
373
+ toProtoMsg(message: ForumRepEpochCounter): ForumRepEpochCounterProtoMsg;
374
+ };
375
+ /**
376
+ * @name PostConvictionStake_AccruedRepPerTagEntry
377
+ * @package sparkdream.forum.v1
378
+ * @see proto type: sparkdream.forum.v1.undefined
379
+ */
380
+ export declare const PostConvictionStake_AccruedRepPerTagEntry: {
381
+ encode(message: PostConvictionStake_AccruedRepPerTagEntry, writer?: BinaryWriter): BinaryWriter;
382
+ decode(input: BinaryReader | Uint8Array, length?: number): PostConvictionStake_AccruedRepPerTagEntry;
383
+ fromPartial(object: DeepPartial<PostConvictionStake_AccruedRepPerTagEntry>): PostConvictionStake_AccruedRepPerTagEntry;
384
+ fromAmino(object: PostConvictionStake_AccruedRepPerTagEntryAmino): PostConvictionStake_AccruedRepPerTagEntry;
385
+ toAmino(message: PostConvictionStake_AccruedRepPerTagEntry): PostConvictionStake_AccruedRepPerTagEntryAmino;
386
+ fromAminoMsg(object: PostConvictionStake_AccruedRepPerTagEntryAminoMsg): PostConvictionStake_AccruedRepPerTagEntry;
387
+ fromProtoMsg(message: PostConvictionStake_AccruedRepPerTagEntryProtoMsg): PostConvictionStake_AccruedRepPerTagEntry;
388
+ toProto(message: PostConvictionStake_AccruedRepPerTagEntry): Uint8Array;
389
+ };
390
+ /**
391
+ * PostConvictionStake records an ESTABLISHED+ member's DREAM lock backing a
392
+ * post's author. While the stake is active, the EndBlocker streams per-tag
393
+ * reputation to the author proportional to the stake's share of total active
394
+ * stakes on the post (split evenly across the post's tags). On confirmed
395
+ * sentinel hide (ExpireHiddenPosts), the accrued rep is clawed back from the
396
+ * author per tag and a fraction of the staker's locked DREAM is slashed
397
+ * (staker_slash_bps) — both staker and author endorsed harm.
398
+ *
399
+ * Stakers cannot stake on their own posts. Stakes are released after
400
+ * unlocks_at via MsgReleasePostConviction; LockDREAM/UnlockDREAM bypass the
401
+ * 3% transfer tax because it is internal member-balance rebalancing, not a
402
+ * transfer.
403
+ * @name PostConvictionStake
404
+ * @package sparkdream.forum.v1
405
+ * @see proto type: sparkdream.forum.v1.PostConvictionStake
406
+ */
407
+ export declare const PostConvictionStake: {
408
+ typeUrl: string;
409
+ encode(message: PostConvictionStake, writer?: BinaryWriter): BinaryWriter;
410
+ decode(input: BinaryReader | Uint8Array, length?: number): PostConvictionStake;
411
+ fromPartial(object: DeepPartial<PostConvictionStake>): PostConvictionStake;
412
+ fromAmino(object: PostConvictionStakeAmino): PostConvictionStake;
413
+ toAmino(message: PostConvictionStake): PostConvictionStakeAmino;
414
+ fromAminoMsg(object: PostConvictionStakeAminoMsg): PostConvictionStake;
415
+ fromProtoMsg(message: PostConvictionStakeProtoMsg): PostConvictionStake;
416
+ toProto(message: PostConvictionStake): Uint8Array;
417
+ toProtoMsg(message: PostConvictionStake): PostConvictionStakeProtoMsg;
418
+ };