thecrownsk-bot 1.0.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 (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +268 -0
  3. package/dist/blockchain/chain.d.ts +49 -0
  4. package/dist/blockchain/chain.d.ts.map +1 -0
  5. package/dist/blockchain/chain.js +33 -0
  6. package/dist/blockchain/chain.js.map +1 -0
  7. package/dist/blockchain/client.d.ts +19 -0
  8. package/dist/blockchain/client.d.ts.map +1 -0
  9. package/dist/blockchain/client.js +121 -0
  10. package/dist/blockchain/client.js.map +1 -0
  11. package/dist/config/constants.d.ts +53 -0
  12. package/dist/config/constants.d.ts.map +1 -0
  13. package/dist/config/constants.js +61 -0
  14. package/dist/config/constants.js.map +1 -0
  15. package/dist/config/env.d.ts +38 -0
  16. package/dist/config/env.d.ts.map +1 -0
  17. package/dist/config/env.js +38 -0
  18. package/dist/config/env.js.map +1 -0
  19. package/dist/crown-king.d.ts +3 -0
  20. package/dist/crown-king.d.ts.map +1 -0
  21. package/dist/crown-king.js +1093 -0
  22. package/dist/crown-king.js.map +1 -0
  23. package/dist/crownking/agent-alliance.d.ts +49 -0
  24. package/dist/crownking/agent-alliance.d.ts.map +1 -0
  25. package/dist/crownking/agent-alliance.js +260 -0
  26. package/dist/crownking/agent-alliance.js.map +1 -0
  27. package/dist/crownking/agent.d.ts +77 -0
  28. package/dist/crownking/agent.d.ts.map +1 -0
  29. package/dist/crownking/agent.js +361 -0
  30. package/dist/crownking/agent.js.map +1 -0
  31. package/dist/crownking/auto-poster.d.ts +43 -0
  32. package/dist/crownking/auto-poster.d.ts.map +1 -0
  33. package/dist/crownking/auto-poster.js +179 -0
  34. package/dist/crownking/auto-poster.js.map +1 -0
  35. package/dist/crownking/contract.d.ts +62 -0
  36. package/dist/crownking/contract.d.ts.map +1 -0
  37. package/dist/crownking/contract.js +130 -0
  38. package/dist/crownking/contract.js.map +1 -0
  39. package/dist/crownking/copy-trader.d.ts +77 -0
  40. package/dist/crownking/copy-trader.d.ts.map +1 -0
  41. package/dist/crownking/copy-trader.js +265 -0
  42. package/dist/crownking/copy-trader.js.map +1 -0
  43. package/dist/crownking/index.d.ts +16 -0
  44. package/dist/crownking/index.d.ts.map +1 -0
  45. package/dist/crownking/index.js +18 -0
  46. package/dist/crownking/index.js.map +1 -0
  47. package/dist/crownking/leaderboard.d.ts +51 -0
  48. package/dist/crownking/leaderboard.d.ts.map +1 -0
  49. package/dist/crownking/leaderboard.js +213 -0
  50. package/dist/crownking/leaderboard.js.map +1 -0
  51. package/dist/crownking/live-scanner.d.ts +85 -0
  52. package/dist/crownking/live-scanner.d.ts.map +1 -0
  53. package/dist/crownking/live-scanner.js +345 -0
  54. package/dist/crownking/live-scanner.js.map +1 -0
  55. package/dist/crownking/momentum.d.ts +41 -0
  56. package/dist/crownking/momentum.d.ts.map +1 -0
  57. package/dist/crownking/momentum.js +251 -0
  58. package/dist/crownking/momentum.js.map +1 -0
  59. package/dist/crownking/personality.d.ts +77 -0
  60. package/dist/crownking/personality.d.ts.map +1 -0
  61. package/dist/crownking/personality.js +222 -0
  62. package/dist/crownking/personality.js.map +1 -0
  63. package/dist/crownking/portfolio.d.ts +62 -0
  64. package/dist/crownking/portfolio.d.ts.map +1 -0
  65. package/dist/crownking/portfolio.js +183 -0
  66. package/dist/crownking/portfolio.js.map +1 -0
  67. package/dist/crownking/sniper.d.ts +68 -0
  68. package/dist/crownking/sniper.d.ts.map +1 -0
  69. package/dist/crownking/sniper.js +264 -0
  70. package/dist/crownking/sniper.js.map +1 -0
  71. package/dist/crownking/social-graph.d.ts +72 -0
  72. package/dist/crownking/social-graph.d.ts.map +1 -0
  73. package/dist/crownking/social-graph.js +219 -0
  74. package/dist/crownking/social-graph.js.map +1 -0
  75. package/dist/crownking/token-creator.d.ts +42 -0
  76. package/dist/crownking/token-creator.d.ts.map +1 -0
  77. package/dist/crownking/token-creator.js +159 -0
  78. package/dist/crownking/token-creator.js.map +1 -0
  79. package/dist/crownking/trading-signals.d.ts +56 -0
  80. package/dist/crownking/trading-signals.d.ts.map +1 -0
  81. package/dist/crownking/trading-signals.js +253 -0
  82. package/dist/crownking/trading-signals.js.map +1 -0
  83. package/dist/crownking/types.d.ts +3 -0
  84. package/dist/crownking/types.d.ts.map +1 -0
  85. package/dist/crownking/types.js +4 -0
  86. package/dist/crownking/types.js.map +1 -0
  87. package/dist/crownking/whale-tracker.d.ts +53 -0
  88. package/dist/crownking/whale-tracker.d.ts.map +1 -0
  89. package/dist/crownking/whale-tracker.js +188 -0
  90. package/dist/crownking/whale-tracker.js.map +1 -0
  91. package/dist/crownsk/agent-alliance.d.ts +49 -0
  92. package/dist/crownsk/agent-alliance.d.ts.map +1 -0
  93. package/dist/crownsk/agent-alliance.js +260 -0
  94. package/dist/crownsk/agent-alliance.js.map +1 -0
  95. package/dist/crownsk/agent.d.ts +77 -0
  96. package/dist/crownsk/agent.d.ts.map +1 -0
  97. package/dist/crownsk/agent.js +361 -0
  98. package/dist/crownsk/agent.js.map +1 -0
  99. package/dist/crownsk/auto-poster.d.ts +43 -0
  100. package/dist/crownsk/auto-poster.d.ts.map +1 -0
  101. package/dist/crownsk/auto-poster.js +179 -0
  102. package/dist/crownsk/auto-poster.js.map +1 -0
  103. package/dist/crownsk/contract.d.ts +62 -0
  104. package/dist/crownsk/contract.d.ts.map +1 -0
  105. package/dist/crownsk/contract.js +130 -0
  106. package/dist/crownsk/contract.js.map +1 -0
  107. package/dist/crownsk/copy-trader.d.ts +77 -0
  108. package/dist/crownsk/copy-trader.d.ts.map +1 -0
  109. package/dist/crownsk/copy-trader.js +265 -0
  110. package/dist/crownsk/copy-trader.js.map +1 -0
  111. package/dist/crownsk/index.d.ts +16 -0
  112. package/dist/crownsk/index.d.ts.map +1 -0
  113. package/dist/crownsk/index.js +18 -0
  114. package/dist/crownsk/index.js.map +1 -0
  115. package/dist/crownsk/leaderboard.d.ts +51 -0
  116. package/dist/crownsk/leaderboard.d.ts.map +1 -0
  117. package/dist/crownsk/leaderboard.js +213 -0
  118. package/dist/crownsk/leaderboard.js.map +1 -0
  119. package/dist/crownsk/live-scanner.d.ts +85 -0
  120. package/dist/crownsk/live-scanner.d.ts.map +1 -0
  121. package/dist/crownsk/live-scanner.js +345 -0
  122. package/dist/crownsk/live-scanner.js.map +1 -0
  123. package/dist/crownsk/momentum.d.ts +41 -0
  124. package/dist/crownsk/momentum.d.ts.map +1 -0
  125. package/dist/crownsk/momentum.js +251 -0
  126. package/dist/crownsk/momentum.js.map +1 -0
  127. package/dist/crownsk/personality.d.ts +77 -0
  128. package/dist/crownsk/personality.d.ts.map +1 -0
  129. package/dist/crownsk/personality.js +222 -0
  130. package/dist/crownsk/personality.js.map +1 -0
  131. package/dist/crownsk/portfolio.d.ts +62 -0
  132. package/dist/crownsk/portfolio.d.ts.map +1 -0
  133. package/dist/crownsk/portfolio.js +183 -0
  134. package/dist/crownsk/portfolio.js.map +1 -0
  135. package/dist/crownsk/sniper.d.ts +68 -0
  136. package/dist/crownsk/sniper.d.ts.map +1 -0
  137. package/dist/crownsk/sniper.js +264 -0
  138. package/dist/crownsk/sniper.js.map +1 -0
  139. package/dist/crownsk/social-graph.d.ts +72 -0
  140. package/dist/crownsk/social-graph.d.ts.map +1 -0
  141. package/dist/crownsk/social-graph.js +219 -0
  142. package/dist/crownsk/social-graph.js.map +1 -0
  143. package/dist/crownsk/trading-signals.d.ts +56 -0
  144. package/dist/crownsk/trading-signals.d.ts.map +1 -0
  145. package/dist/crownsk/trading-signals.js +253 -0
  146. package/dist/crownsk/trading-signals.js.map +1 -0
  147. package/dist/crownsk/types.d.ts +3 -0
  148. package/dist/crownsk/types.d.ts.map +1 -0
  149. package/dist/crownsk/types.js +4 -0
  150. package/dist/crownsk/types.js.map +1 -0
  151. package/dist/crownsk/whale-tracker.d.ts +53 -0
  152. package/dist/crownsk/whale-tracker.d.ts.map +1 -0
  153. package/dist/crownsk/whale-tracker.js +188 -0
  154. package/dist/crownsk/whale-tracker.js.map +1 -0
  155. package/dist/crownsk.d.ts +3 -0
  156. package/dist/crownsk.d.ts.map +1 -0
  157. package/dist/crownsk.js +1102 -0
  158. package/dist/crownsk.js.map +1 -0
  159. package/dist/index.d.ts +5 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +9 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/karma/agent.d.ts +81 -0
  164. package/dist/karma/agent.d.ts.map +1 -0
  165. package/dist/karma/agent.js +366 -0
  166. package/dist/karma/agent.js.map +1 -0
  167. package/dist/karma/contract.d.ts +62 -0
  168. package/dist/karma/contract.d.ts.map +1 -0
  169. package/dist/karma/contract.js +130 -0
  170. package/dist/karma/contract.js.map +1 -0
  171. package/dist/karma/index.d.ts +6 -0
  172. package/dist/karma/index.d.ts.map +1 -0
  173. package/dist/karma/index.js +7 -0
  174. package/dist/karma/index.js.map +1 -0
  175. package/dist/karma/live-scanner.d.ts +85 -0
  176. package/dist/karma/live-scanner.d.ts.map +1 -0
  177. package/dist/karma/live-scanner.js +345 -0
  178. package/dist/karma/live-scanner.js.map +1 -0
  179. package/dist/karma/social-graph.d.ts +72 -0
  180. package/dist/karma/social-graph.d.ts.map +1 -0
  181. package/dist/karma/social-graph.js +219 -0
  182. package/dist/karma/social-graph.js.map +1 -0
  183. package/dist/karma/trading-signals.d.ts +38 -0
  184. package/dist/karma/trading-signals.d.ts.map +1 -0
  185. package/dist/karma/trading-signals.js +291 -0
  186. package/dist/karma/trading-signals.js.map +1 -0
  187. package/dist/karma/types.d.ts +3 -0
  188. package/dist/karma/types.d.ts.map +1 -0
  189. package/dist/karma/types.js +4 -0
  190. package/dist/karma/types.js.map +1 -0
  191. package/dist/karma-king.d.ts +3 -0
  192. package/dist/karma-king.d.ts.map +1 -0
  193. package/dist/karma-king.js +580 -0
  194. package/dist/karma-king.js.map +1 -0
  195. package/dist/moltbook/client.d.ts +34 -0
  196. package/dist/moltbook/client.d.ts.map +1 -0
  197. package/dist/moltbook/client.js +280 -0
  198. package/dist/moltbook/client.js.map +1 -0
  199. package/dist/moltbook/index.d.ts +3 -0
  200. package/dist/moltbook/index.d.ts.map +1 -0
  201. package/dist/moltbook/index.js +4 -0
  202. package/dist/moltbook/index.js.map +1 -0
  203. package/dist/moltbook/types.d.ts +100 -0
  204. package/dist/moltbook/types.d.ts.map +1 -0
  205. package/dist/moltbook/types.js +3 -0
  206. package/dist/moltbook/types.js.map +1 -0
  207. package/dist/nadfun/abis.d.ts +403 -0
  208. package/dist/nadfun/abis.d.ts.map +1 -0
  209. package/dist/nadfun/abis.js +267 -0
  210. package/dist/nadfun/abis.js.map +1 -0
  211. package/dist/nadfun/client.d.ts +21 -0
  212. package/dist/nadfun/client.d.ts.map +1 -0
  213. package/dist/nadfun/client.js +349 -0
  214. package/dist/nadfun/client.js.map +1 -0
  215. package/dist/nadfun/index.d.ts +5 -0
  216. package/dist/nadfun/index.d.ts.map +1 -0
  217. package/dist/nadfun/index.js +5 -0
  218. package/dist/nadfun/index.js.map +1 -0
  219. package/dist/nadfun/types.d.ts +72 -0
  220. package/dist/nadfun/types.d.ts.map +1 -0
  221. package/dist/nadfun/types.js +2 -0
  222. package/dist/nadfun/types.js.map +1 -0
  223. package/dist/nadfun/websocket.d.ts +18 -0
  224. package/dist/nadfun/websocket.d.ts.map +1 -0
  225. package/dist/nadfun/websocket.js +110 -0
  226. package/dist/nadfun/websocket.js.map +1 -0
  227. package/dist/utils/format.d.ts +9 -0
  228. package/dist/utils/format.d.ts.map +1 -0
  229. package/dist/utils/format.js +39 -0
  230. package/dist/utils/format.js.map +1 -0
  231. package/dist/utils/index.d.ts +3 -0
  232. package/dist/utils/index.d.ts.map +1 -0
  233. package/dist/utils/index.js +3 -0
  234. package/dist/utils/index.js.map +1 -0
  235. package/dist/utils/logger.d.ts +3 -0
  236. package/dist/utils/logger.d.ts.map +1 -0
  237. package/dist/utils/logger.js +81 -0
  238. package/dist/utils/logger.js.map +1 -0
  239. package/dist/wallet/manager.d.ts +76 -0
  240. package/dist/wallet/manager.d.ts.map +1 -0
  241. package/dist/wallet/manager.js +300 -0
  242. package/dist/wallet/manager.js.map +1 -0
  243. package/package.json +61 -0
@@ -0,0 +1,361 @@
1
+ // CrownKing Autonomous Agent
2
+ // Main agent loop that orchestrates all functionality
3
+ // Moltiverse Hackathon 2026 - Full Feature Suite
4
+ import { moltbookClient } from '../moltbook/client.js';
5
+ import { socialGraph } from './social-graph.js';
6
+ import { calculateBribeAmount, hasRecentBribe, } from './contract.js';
7
+ import { scanMoltbookForSignals, getTopBuySignals, executeTrade, cleanupOldData, } from './trading-signals.js';
8
+ import { getBalance } from '../blockchain/client.js';
9
+ import { formatEther, parseEther } from 'viem';
10
+ import { logger } from '../utils/logger.js';
11
+ // New feature imports
12
+ import { autoGenerateContent, processPostQueue } from './auto-poster.js';
13
+ import { runAllianceRoutine, getAllianceStats } from './agent-alliance.js';
14
+ import { scanWhaleActivity } from './whale-tracker.js';
15
+ import { scanNewTokens } from './sniper.js';
16
+ import { getCompetitiveInsights } from './leaderboard.js';
17
+ import { PERSONALITY, getRandomCatchphrase } from './personality.js';
18
+ const DEFAULT_CONFIG = {
19
+ name: PERSONALITY.name,
20
+ description: `${PERSONALITY.title} - An autonomous agent that hunts alpha, tracks whales, snipes new tokens, and dominates the Moltbook leaderboard. Built for Moltiverse Hackathon 2026. ${getRandomCatchphrase()}`,
21
+ maxDailyBribes: parseEther('1'), // 1 MON max daily bribes
22
+ maxSingleBribe: parseEther('0.1'), // 0.1 MON max per bribe
23
+ maxDailyTrades: 10,
24
+ minSignalConfidence: 60,
25
+ targetSubmolts: ['crypto', 'monad', 'trading', 'agents', 'nadfun'],
26
+ autoTrade: false, // Safety: disabled by default
27
+ autoBribe: false, // Safety: disabled by default
28
+ };
29
+ class CrownKingAgent {
30
+ config;
31
+ isRunning = false;
32
+ dailyBribes = 0n;
33
+ dailyTrades = 0;
34
+ lastDayReset = Date.now();
35
+ constructor(config = {}) {
36
+ this.config = { ...DEFAULT_CONFIG, ...config };
37
+ }
38
+ /**
39
+ * Initialize the agent
40
+ */
41
+ async initialize() {
42
+ logger.info('Initializing CrownKing agent...', { name: this.config.name });
43
+ // Check wallet balance
44
+ const balance = await getBalance();
45
+ logger.info('Wallet balance', { balance: formatEther(balance) });
46
+ if (balance === 0n) {
47
+ logger.warn('Wallet has zero balance - trading will not work');
48
+ }
49
+ // Check if registered on Moltbook
50
+ if (!moltbookClient.isRegistered()) {
51
+ logger.info('Moltbook not registered - social features disabled');
52
+ logger.info('Trading features work with live blockchain data');
53
+ }
54
+ else {
55
+ // Get agent info
56
+ try {
57
+ const me = await moltbookClient.getMe();
58
+ logger.info('Moltbook agent loaded', {
59
+ name: me.name,
60
+ karma: me.karma,
61
+ claimed: me.is_claimed,
62
+ });
63
+ }
64
+ catch {
65
+ logger.warn('Could not fetch Moltbook agent info');
66
+ }
67
+ // Subscribe to target submolts
68
+ for (const submolt of this.config.targetSubmolts) {
69
+ try {
70
+ await moltbookClient.subscribe(submolt);
71
+ }
72
+ catch {
73
+ // May already be subscribed or submolt doesn't exist
74
+ }
75
+ }
76
+ }
77
+ logger.info('CrownKing agent initialized - ready for live trading');
78
+ }
79
+ /**
80
+ * Reset daily counters
81
+ */
82
+ resetDailyCounters() {
83
+ const now = Date.now();
84
+ if (now - this.lastDayReset > 24 * 60 * 60 * 1000) {
85
+ this.dailyBribes = 0n;
86
+ this.dailyTrades = 0;
87
+ this.lastDayReset = now;
88
+ cleanupOldData();
89
+ logger.info('Daily counters reset');
90
+ }
91
+ }
92
+ /**
93
+ * Main agent loop iteration
94
+ */
95
+ async tick() {
96
+ this.resetDailyCounters();
97
+ const hasMoltbook = moltbookClient.isRegistered();
98
+ // Send heartbeat to Moltbook (only if registered)
99
+ if (hasMoltbook) {
100
+ await moltbookClient.heartbeat();
101
+ }
102
+ // Scan for trading signals (always works - uses live blockchain data)
103
+ await scanMoltbookForSignals();
104
+ // Scan for whale activity
105
+ await scanWhaleActivity(100);
106
+ // Scan for new tokens
107
+ await scanNewTokens(50);
108
+ // Build social graph from feed (only if Moltbook available)
109
+ if (hasMoltbook) {
110
+ await this.buildSocialGraph();
111
+ }
112
+ // Execute karma strategy (only if Moltbook available)
113
+ if (this.config.autoBribe && hasMoltbook) {
114
+ await this.executeKarmaStrategy();
115
+ }
116
+ // Execute trading strategy (always works - uses live blockchain)
117
+ if (this.config.autoTrade) {
118
+ await this.executeTradingStrategy();
119
+ }
120
+ // Engage with content (only if Moltbook available)
121
+ if (hasMoltbook) {
122
+ await this.engageWithContent();
123
+ }
124
+ // Run alliance routine (follow/engage with allies)
125
+ if (hasMoltbook) {
126
+ await runAllianceRoutine();
127
+ }
128
+ // Auto-generate and post content
129
+ if (hasMoltbook) {
130
+ await autoGenerateContent();
131
+ await processPostQueue();
132
+ }
133
+ // Check leaderboard position
134
+ if (hasMoltbook) {
135
+ const insights = await getCompetitiveInsights();
136
+ if (insights.rank) {
137
+ logger.info('Leaderboard position', {
138
+ rank: insights.rank,
139
+ karmaToNextRank: insights.karmaToNextRank,
140
+ });
141
+ }
142
+ }
143
+ // Log status with live data
144
+ const balance = await getBalance();
145
+ const signals = getTopBuySignals(5);
146
+ const allianceStats = getAllianceStats();
147
+ logger.info('Tick complete', {
148
+ moltbook: hasMoltbook,
149
+ balance: formatEther(balance),
150
+ dailyTrades: this.dailyTrades,
151
+ buySignals: signals.length,
152
+ allies: allianceStats.totalAllies,
153
+ });
154
+ }
155
+ /**
156
+ * Build social graph from recent activity
157
+ */
158
+ async buildSocialGraph() {
159
+ if (!moltbookClient.isRegistered()) {
160
+ logger.debug('Skipping social graph build - Moltbook not registered');
161
+ return;
162
+ }
163
+ try {
164
+ const feed = await moltbookClient.getFeed();
165
+ for (const post of feed.posts) {
166
+ try {
167
+ await socialGraph.addAgent(post.author);
168
+ }
169
+ catch {
170
+ // Ignore errors for individual agents
171
+ }
172
+ }
173
+ const stats = socialGraph.getStats();
174
+ logger.debug('Social graph updated', stats);
175
+ }
176
+ catch (error) {
177
+ const errorMsg = error instanceof Error ? error.message : String(error);
178
+ logger.warn('Failed to build social graph', { error: errorMsg });
179
+ }
180
+ }
181
+ /**
182
+ * Execute karma bribe strategy
183
+ */
184
+ async executeKarmaStrategy() {
185
+ if (this.dailyBribes >= this.config.maxDailyBribes) {
186
+ logger.debug('Daily bribe limit reached');
187
+ return;
188
+ }
189
+ // Find valuable targets
190
+ const targets = this.findBribeTargets();
191
+ for (const target of targets.slice(0, 3)) {
192
+ // Limit to 3 bribes per tick
193
+ if (this.dailyBribes >= this.config.maxDailyBribes)
194
+ break;
195
+ try {
196
+ await this.bribeAgent(target);
197
+ }
198
+ catch (error) {
199
+ logger.warn('Bribe failed', { target: target.agentId, error });
200
+ }
201
+ }
202
+ }
203
+ /**
204
+ * Find good targets for karma bribes
205
+ */
206
+ findBribeTargets() {
207
+ // Strategy: target undervalued agents (high karma, low followers)
208
+ // These are likely to reciprocate and provide good ROI
209
+ const undervalued = socialGraph.getUndervaluedAgents(10);
210
+ const risingStars = socialGraph.getRisingStars(10);
211
+ // Combine and dedupe
212
+ const targets = new Map();
213
+ for (const agent of [...undervalued, ...risingStars]) {
214
+ if (!hasRecentBribe(agent.agentId, 'follow')) {
215
+ targets.set(agent.agentId, agent);
216
+ }
217
+ }
218
+ return Array.from(targets.values());
219
+ }
220
+ /**
221
+ * Bribe an agent
222
+ */
223
+ async bribeAgent(target) {
224
+ const amount = calculateBribeAmount('follow', target.karma);
225
+ if (amount > this.config.maxSingleBribe) {
226
+ logger.debug('Bribe amount exceeds max', {
227
+ target: target.agentName,
228
+ amount: formatEther(amount),
229
+ });
230
+ return;
231
+ }
232
+ // Check balance
233
+ const balance = await getBalance();
234
+ if (balance < amount) {
235
+ logger.warn('Insufficient balance for bribe');
236
+ return;
237
+ }
238
+ // For now, we don't have agent wallet addresses
239
+ // In production, this would be resolved via Moltbook API or on-chain registry
240
+ logger.info('Would bribe agent', {
241
+ target: target.agentName,
242
+ karma: target.karma,
243
+ amount: formatEther(amount),
244
+ });
245
+ this.dailyBribes += amount;
246
+ }
247
+ /**
248
+ * Execute trading strategy based on signals
249
+ */
250
+ async executeTradingStrategy() {
251
+ if (this.dailyTrades >= this.config.maxDailyTrades) {
252
+ logger.debug('Daily trade limit reached');
253
+ return;
254
+ }
255
+ const buySignals = getTopBuySignals(3);
256
+ for (const signal of buySignals) {
257
+ if (signal.confidence < this.config.minSignalConfidence)
258
+ continue;
259
+ if (this.dailyTrades >= this.config.maxDailyTrades)
260
+ break;
261
+ try {
262
+ const result = await executeTrade(signal);
263
+ if (result.success) {
264
+ this.dailyTrades++;
265
+ logger.info('Trade executed', {
266
+ token: signal.token,
267
+ confidence: signal.confidence,
268
+ txHash: result.txHash,
269
+ });
270
+ }
271
+ }
272
+ catch (error) {
273
+ logger.warn('Trade failed', { signal, error });
274
+ }
275
+ }
276
+ }
277
+ /**
278
+ * Engage with content (upvote, comment)
279
+ */
280
+ async engageWithContent() {
281
+ if (!moltbookClient.isRegistered()) {
282
+ logger.debug('Skipping engagement - Moltbook not registered');
283
+ return;
284
+ }
285
+ try {
286
+ const feed = await moltbookClient.getFeed();
287
+ // Upvote quality content
288
+ for (const post of feed.posts.slice(0, 5)) {
289
+ // Simple quality heuristic: upvotes > 5 and from high-karma author
290
+ if (post.upvotes > 5 && post.author.karma > 50) {
291
+ try {
292
+ await moltbookClient.upvote(post.id);
293
+ }
294
+ catch {
295
+ // May have already upvoted
296
+ }
297
+ }
298
+ }
299
+ // Consider following high-karma authors
300
+ for (const post of feed.posts.slice(0, 3)) {
301
+ if (post.author.karma > 100) {
302
+ try {
303
+ await moltbookClient.follow(post.author.id);
304
+ }
305
+ catch {
306
+ // May already be following
307
+ }
308
+ }
309
+ }
310
+ }
311
+ catch (error) {
312
+ const errorMsg = error instanceof Error ? error.message : String(error);
313
+ logger.warn('Engagement failed', { error: errorMsg });
314
+ }
315
+ }
316
+ /**
317
+ * Start the agent loop
318
+ */
319
+ async start(intervalMs = 5 * 60 * 1000) {
320
+ if (this.isRunning) {
321
+ logger.warn('Agent is already running');
322
+ return;
323
+ }
324
+ await this.initialize();
325
+ this.isRunning = true;
326
+ logger.info('CrownKing agent started', { interval: intervalMs });
327
+ while (this.isRunning) {
328
+ try {
329
+ await this.tick();
330
+ }
331
+ catch (error) {
332
+ logger.error('Agent tick failed', { error });
333
+ }
334
+ // Wait for next iteration
335
+ await new Promise(resolve => setTimeout(resolve, intervalMs));
336
+ }
337
+ }
338
+ /**
339
+ * Stop the agent loop
340
+ */
341
+ stop() {
342
+ this.isRunning = false;
343
+ logger.info('CrownKing agent stopped');
344
+ }
345
+ /**
346
+ * Get agent status
347
+ */
348
+ getStatus() {
349
+ return {
350
+ running: this.isRunning,
351
+ dailyBribes: formatEther(this.dailyBribes),
352
+ dailyTrades: this.dailyTrades,
353
+ graphStats: socialGraph.getStats(),
354
+ };
355
+ }
356
+ }
357
+ // Export singleton
358
+ export const crownKingAgent = new CrownKingAgent();
359
+ // Export class for custom instances
360
+ export { CrownKingAgent };
361
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/crownking/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { WhaleActivity } from './whale-tracker.js';
2
+ import type { NewToken } from './sniper.js';
3
+ /**
4
+ * Queue a post for later
5
+ */
6
+ export declare function queuePost(submolt: string, title: string, content: string): void;
7
+ /**
8
+ * Process the post queue
9
+ */
10
+ export declare function processPostQueue(): Promise<boolean>;
11
+ /**
12
+ * Generate and queue whale alert
13
+ */
14
+ export declare function postWhaleAlert(activity: WhaleActivity): void;
15
+ /**
16
+ * Generate and queue new token alert
17
+ */
18
+ export declare function postNewTokenAlert(token: NewToken): Promise<void>;
19
+ /**
20
+ * Generate and post market insight
21
+ */
22
+ export declare function postMarketInsight(): Promise<void>;
23
+ /**
24
+ * Post top trading signal
25
+ */
26
+ export declare function postTopSignal(): void;
27
+ /**
28
+ * Post greeting (GM/GN)
29
+ */
30
+ export declare function postGreeting(type: 'gm' | 'gn'): void;
31
+ /**
32
+ * Auto-generate content based on activity
33
+ */
34
+ export declare function autoGenerateContent(): Promise<void>;
35
+ /**
36
+ * Get post queue status
37
+ */
38
+ export declare function getPostQueueStatus(): {
39
+ queueLength: number;
40
+ canPostNow: boolean;
41
+ nextPostIn: number;
42
+ };
43
+ //# sourceMappingURL=auto-poster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-poster.d.ts","sourceRoot":"","sources":["../../src/crownking/auto-poster.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAc5C;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAG/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CA8BzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAQ5D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAQtE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBvD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAmBpC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAGpD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgDzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAQA"}
@@ -0,0 +1,179 @@
1
+ // Auto-Poster Module
2
+ // Automatically generates and posts content to Moltbook
3
+ import { moltbookClient } from '../moltbook/client.js';
4
+ import { logger } from '../utils/logger.js';
5
+ import { generateWhaleAlert, generateNewTokenAlert, generateMarketInsight, generateSignalPost, generateGreeting, } from './personality.js';
6
+ import { getTokenData } from './trading-signals.js';
7
+ import { getWhaleAccumulatingTokens } from './whale-tracker.js';
8
+ import { getDetectedTokens, evaluateForSnipe } from './sniper.js';
9
+ // Rate limiting
10
+ let lastPostTime = 0;
11
+ const MIN_POST_INTERVAL = 30 * 60 * 1000; // 30 minutes (Moltbook allows 1 per 30 min)
12
+ const postQueue = [];
13
+ /**
14
+ * Check if we can post (rate limit)
15
+ */
16
+ function canPost() {
17
+ return Date.now() - lastPostTime >= MIN_POST_INTERVAL;
18
+ }
19
+ /**
20
+ * Queue a post for later
21
+ */
22
+ export function queuePost(submolt, title, content) {
23
+ postQueue.push({ submolt, title, content });
24
+ logger.debug('Post queued', { submolt, title, queueLength: postQueue.length });
25
+ }
26
+ /**
27
+ * Process the post queue
28
+ */
29
+ export async function processPostQueue() {
30
+ if (!moltbookClient.isRegistered()) {
31
+ return false;
32
+ }
33
+ if (!canPost()) {
34
+ const waitTime = Math.ceil((MIN_POST_INTERVAL - (Date.now() - lastPostTime)) / 60000);
35
+ logger.debug('Rate limited', { waitMinutes: waitTime });
36
+ return false;
37
+ }
38
+ const post = postQueue.shift();
39
+ if (!post) {
40
+ return false;
41
+ }
42
+ try {
43
+ await moltbookClient.createPost(post.submolt, post.title, post.content);
44
+ lastPostTime = Date.now();
45
+ logger.info('Posted to Moltbook', { submolt: post.submolt, title: post.title });
46
+ return true;
47
+ }
48
+ catch (error) {
49
+ // Re-queue on failure (unless rate limited)
50
+ const errorMsg = error instanceof Error ? error.message : String(error);
51
+ if (!errorMsg.includes('rate')) {
52
+ postQueue.unshift(post);
53
+ }
54
+ logger.warn('Post failed', { error: errorMsg });
55
+ return false;
56
+ }
57
+ }
58
+ /**
59
+ * Generate and queue whale alert
60
+ */
61
+ export function postWhaleAlert(activity) {
62
+ const { title, content } = generateWhaleAlert(activity.wallet, activity.action, activity.amount, activity.token);
63
+ queuePost('trading', title, content);
64
+ }
65
+ /**
66
+ * Generate and queue new token alert
67
+ */
68
+ export async function postNewTokenAlert(token) {
69
+ const evaluation = await evaluateForSnipe(token);
70
+ const { title, content } = generateNewTokenAlert(token.address, token.creator, evaluation);
71
+ queuePost('crypto', title, content);
72
+ }
73
+ /**
74
+ * Generate and post market insight
75
+ */
76
+ export async function postMarketInsight() {
77
+ const tokenData = getTokenData();
78
+ const whaleTokens = getWhaleAccumulatingTokens();
79
+ if (tokenData.length === 0) {
80
+ return;
81
+ }
82
+ const whalesBuying = whaleTokens.reduce((sum, t) => sum + t.buyCount, 0);
83
+ const topToken = tokenData[0] ? { symbol: tokenData[0].symbol, holders: tokenData[0].holders } : null;
84
+ const avgScore = tokenData.reduce((sum, t) => sum + t.score, 0) / tokenData.length;
85
+ const { title, content } = generateMarketInsight({
86
+ tokensTracked: tokenData.length,
87
+ whalesBuying,
88
+ whalesSelling: 0, // Would need to track this separately
89
+ topToken,
90
+ avgScore,
91
+ });
92
+ queuePost('monad', title, content);
93
+ }
94
+ /**
95
+ * Post top trading signal
96
+ */
97
+ export function postTopSignal() {
98
+ const tokenData = getTokenData();
99
+ if (tokenData.length === 0)
100
+ return;
101
+ // Find the best signal
102
+ const best = tokenData.reduce((a, b) => a.score > b.score ? a : b);
103
+ if (best.score < 60)
104
+ return; // Only post strong signals
105
+ const { title, content } = generateSignalPost({
106
+ token: best.token,
107
+ symbol: best.symbol,
108
+ action: best.recommendation,
109
+ score: best.score,
110
+ holders: best.holders,
111
+ signals: best.signals,
112
+ });
113
+ queuePost('trading', title, content);
114
+ }
115
+ /**
116
+ * Post greeting (GM/GN)
117
+ */
118
+ export function postGreeting(type) {
119
+ const { title, content } = generateGreeting(type);
120
+ queuePost('monad', title, content);
121
+ }
122
+ /**
123
+ * Auto-generate content based on activity
124
+ */
125
+ export async function autoGenerateContent() {
126
+ if (!moltbookClient.isRegistered()) {
127
+ return;
128
+ }
129
+ // Check recent whale activity
130
+ const { getRecentWhaleActivity } = await import('./whale-tracker.js');
131
+ const recentWhales = getRecentWhaleActivity(5);
132
+ // Post whale alerts for very recent activity (last 10 minutes)
133
+ const tenMinutesAgo = Date.now() - 10 * 60 * 1000;
134
+ for (const activity of recentWhales) {
135
+ if (activity.timestamp > tenMinutesAgo) {
136
+ postWhaleAlert(activity);
137
+ break; // Only one whale alert per cycle
138
+ }
139
+ }
140
+ // Check for new tokens
141
+ const newTokens = getDetectedTokens(5);
142
+ const fiveMinutesAgo = Date.now() - 5 * 60 * 1000;
143
+ for (const token of newTokens) {
144
+ if (token.timestamp > fiveMinutesAgo) {
145
+ await postNewTokenAlert(token);
146
+ break; // Only one token alert per cycle
147
+ }
148
+ }
149
+ // Periodically post market insights
150
+ const hour = new Date().getHours();
151
+ if (hour === 9 || hour === 15 || hour === 21) {
152
+ await postMarketInsight();
153
+ }
154
+ // GM at 8am, GN at 11pm (based on server time)
155
+ if (hour === 8) {
156
+ postGreeting('gm');
157
+ }
158
+ else if (hour === 23) {
159
+ postGreeting('gn');
160
+ }
161
+ // Post top signal once a day
162
+ if (hour === 12) {
163
+ postTopSignal();
164
+ }
165
+ // Process the queue
166
+ await processPostQueue();
167
+ }
168
+ /**
169
+ * Get post queue status
170
+ */
171
+ export function getPostQueueStatus() {
172
+ const nextPostIn = canPost() ? 0 : Math.ceil((MIN_POST_INTERVAL - (Date.now() - lastPostTime)) / 60000);
173
+ return {
174
+ queueLength: postQueue.length,
175
+ canPostNow: canPost(),
176
+ nextPostIn,
177
+ };
178
+ }
179
+ //# sourceMappingURL=auto-poster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-poster.js","sourceRoot":"","sources":["../../src/crownking/auto-poster.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,wDAAwD;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIlE,gBAAgB;AAChB,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,4CAA4C;AACtF,MAAM,SAAS,GAA+D,EAAE,CAAC;AAEjF;;GAEG;AACH,SAAS,OAAO;IACd,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,IAAI,iBAAiB,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,KAAa,EAAE,OAAe;IACvE,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACtF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACxE,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAuB;IACpD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAC3C,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,KAAK,CACf,CAAC;IACF,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAe;IACrD,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAC9C,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,UAAU,CACX,CAAC;IACF,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,0BAA0B,EAAE,CAAC;IAEjD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtG,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;IAEnF,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC;QAC/C,aAAa,EAAE,SAAS,CAAC,MAAM;QAC/B,YAAY;QACZ,aAAa,EAAE,CAAC,EAAE,sCAAsC;QACxD,QAAQ;QACR,QAAQ;KACT,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,uBAAuB;IACvB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;QAAE,OAAO,CAAC,2BAA2B;IAExD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC;QAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,cAAc;QAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;IAEH,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClD,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC;QACnC,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAE/C,+DAA+D;IAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAClD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,QAAQ,CAAC,SAAS,GAAG,aAAa,EAAE,CAAC;YACvC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACzB,MAAM,CAAC,iCAAiC;QAC1C,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,SAAS,GAAG,cAAc,EAAE,CAAC;YACrC,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,iCAAiC;QAC1C,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;IACnC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAC7C,MAAM,iBAAiB,EAAE,CAAC;IAC5B,CAAC;IAED,+CAA+C;IAC/C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;SAAM,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACvB,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,6BAA6B;IAC7B,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,aAAa,EAAE,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,MAAM,gBAAgB,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAKhC,MAAM,UAAU,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAExG,OAAO;QACL,WAAW,EAAE,SAAS,CAAC,MAAM;QAC7B,UAAU,EAAE,OAAO,EAAE;QACrB,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { type Address, type Hex } from 'viem';
2
+ export interface BribeRequest {
3
+ toAddress: Address;
4
+ toAgentId: string;
5
+ amount: bigint;
6
+ action: 'follow' | 'endorse' | 'promote' | 'engage';
7
+ }
8
+ export interface BribeRecord {
9
+ txHash: Hex;
10
+ from: Address;
11
+ to: Address;
12
+ amount: bigint;
13
+ action: string;
14
+ agentId: string;
15
+ timestamp: number;
16
+ }
17
+ /**
18
+ * Send a karma bribe to another agent
19
+ * Direct MON transfer with encoded memo
20
+ */
21
+ export declare function sendKarmaBribe(request: BribeRequest): Promise<BribeRecord>;
22
+ /**
23
+ * Calculate bribe amount based on action type and target karma
24
+ */
25
+ export declare function calculateBribeAmount(action: 'follow' | 'endorse' | 'promote' | 'engage', targetKarma: number): bigint;
26
+ /**
27
+ * Get bribe history for analytics
28
+ */
29
+ export declare function getBribeHistory(): BribeRecord[];
30
+ /**
31
+ * Get total bribes sent
32
+ */
33
+ export declare function getTotalBribesSent(): bigint;
34
+ /**
35
+ * Get bribes by action type
36
+ */
37
+ export declare function getBribesByAction(action: string): BribeRecord[];
38
+ /**
39
+ * Check if we've already bribed an agent recently
40
+ */
41
+ export declare function hasRecentBribe(agentId: string, action: string, withinMs?: number): boolean;
42
+ interface ReputationScore {
43
+ agentId: string;
44
+ bribesReceived: number;
45
+ totalValue: bigint;
46
+ actions: Record<string, number>;
47
+ lastBribe: number;
48
+ }
49
+ /**
50
+ * Update reputation after bribe
51
+ */
52
+ export declare function updateReputation(record: BribeRecord): void;
53
+ /**
54
+ * Get reputation score for an agent
55
+ */
56
+ export declare function getReputation(agentId: string): ReputationScore | undefined;
57
+ /**
58
+ * Get top agents by total bribe value received
59
+ */
60
+ export declare function getTopBribedAgents(limit?: number): ReputationScore[];
61
+ export {};
62
+ //# sourceMappingURL=contract.d.ts.map