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.
- package/LICENSE +21 -0
- package/README.md +268 -0
- package/dist/blockchain/chain.d.ts +49 -0
- package/dist/blockchain/chain.d.ts.map +1 -0
- package/dist/blockchain/chain.js +33 -0
- package/dist/blockchain/chain.js.map +1 -0
- package/dist/blockchain/client.d.ts +19 -0
- package/dist/blockchain/client.d.ts.map +1 -0
- package/dist/blockchain/client.js +121 -0
- package/dist/blockchain/client.js.map +1 -0
- package/dist/config/constants.d.ts +53 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +61 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/env.d.ts +38 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +38 -0
- package/dist/config/env.js.map +1 -0
- package/dist/crown-king.d.ts +3 -0
- package/dist/crown-king.d.ts.map +1 -0
- package/dist/crown-king.js +1093 -0
- package/dist/crown-king.js.map +1 -0
- package/dist/crownking/agent-alliance.d.ts +49 -0
- package/dist/crownking/agent-alliance.d.ts.map +1 -0
- package/dist/crownking/agent-alliance.js +260 -0
- package/dist/crownking/agent-alliance.js.map +1 -0
- package/dist/crownking/agent.d.ts +77 -0
- package/dist/crownking/agent.d.ts.map +1 -0
- package/dist/crownking/agent.js +361 -0
- package/dist/crownking/agent.js.map +1 -0
- package/dist/crownking/auto-poster.d.ts +43 -0
- package/dist/crownking/auto-poster.d.ts.map +1 -0
- package/dist/crownking/auto-poster.js +179 -0
- package/dist/crownking/auto-poster.js.map +1 -0
- package/dist/crownking/contract.d.ts +62 -0
- package/dist/crownking/contract.d.ts.map +1 -0
- package/dist/crownking/contract.js +130 -0
- package/dist/crownking/contract.js.map +1 -0
- package/dist/crownking/copy-trader.d.ts +77 -0
- package/dist/crownking/copy-trader.d.ts.map +1 -0
- package/dist/crownking/copy-trader.js +265 -0
- package/dist/crownking/copy-trader.js.map +1 -0
- package/dist/crownking/index.d.ts +16 -0
- package/dist/crownking/index.d.ts.map +1 -0
- package/dist/crownking/index.js +18 -0
- package/dist/crownking/index.js.map +1 -0
- package/dist/crownking/leaderboard.d.ts +51 -0
- package/dist/crownking/leaderboard.d.ts.map +1 -0
- package/dist/crownking/leaderboard.js +213 -0
- package/dist/crownking/leaderboard.js.map +1 -0
- package/dist/crownking/live-scanner.d.ts +85 -0
- package/dist/crownking/live-scanner.d.ts.map +1 -0
- package/dist/crownking/live-scanner.js +345 -0
- package/dist/crownking/live-scanner.js.map +1 -0
- package/dist/crownking/momentum.d.ts +41 -0
- package/dist/crownking/momentum.d.ts.map +1 -0
- package/dist/crownking/momentum.js +251 -0
- package/dist/crownking/momentum.js.map +1 -0
- package/dist/crownking/personality.d.ts +77 -0
- package/dist/crownking/personality.d.ts.map +1 -0
- package/dist/crownking/personality.js +222 -0
- package/dist/crownking/personality.js.map +1 -0
- package/dist/crownking/portfolio.d.ts +62 -0
- package/dist/crownking/portfolio.d.ts.map +1 -0
- package/dist/crownking/portfolio.js +183 -0
- package/dist/crownking/portfolio.js.map +1 -0
- package/dist/crownking/sniper.d.ts +68 -0
- package/dist/crownking/sniper.d.ts.map +1 -0
- package/dist/crownking/sniper.js +264 -0
- package/dist/crownking/sniper.js.map +1 -0
- package/dist/crownking/social-graph.d.ts +72 -0
- package/dist/crownking/social-graph.d.ts.map +1 -0
- package/dist/crownking/social-graph.js +219 -0
- package/dist/crownking/social-graph.js.map +1 -0
- package/dist/crownking/token-creator.d.ts +42 -0
- package/dist/crownking/token-creator.d.ts.map +1 -0
- package/dist/crownking/token-creator.js +159 -0
- package/dist/crownking/token-creator.js.map +1 -0
- package/dist/crownking/trading-signals.d.ts +56 -0
- package/dist/crownking/trading-signals.d.ts.map +1 -0
- package/dist/crownking/trading-signals.js +253 -0
- package/dist/crownking/trading-signals.js.map +1 -0
- package/dist/crownking/types.d.ts +3 -0
- package/dist/crownking/types.d.ts.map +1 -0
- package/dist/crownking/types.js +4 -0
- package/dist/crownking/types.js.map +1 -0
- package/dist/crownking/whale-tracker.d.ts +53 -0
- package/dist/crownking/whale-tracker.d.ts.map +1 -0
- package/dist/crownking/whale-tracker.js +188 -0
- package/dist/crownking/whale-tracker.js.map +1 -0
- package/dist/crownsk/agent-alliance.d.ts +49 -0
- package/dist/crownsk/agent-alliance.d.ts.map +1 -0
- package/dist/crownsk/agent-alliance.js +260 -0
- package/dist/crownsk/agent-alliance.js.map +1 -0
- package/dist/crownsk/agent.d.ts +77 -0
- package/dist/crownsk/agent.d.ts.map +1 -0
- package/dist/crownsk/agent.js +361 -0
- package/dist/crownsk/agent.js.map +1 -0
- package/dist/crownsk/auto-poster.d.ts +43 -0
- package/dist/crownsk/auto-poster.d.ts.map +1 -0
- package/dist/crownsk/auto-poster.js +179 -0
- package/dist/crownsk/auto-poster.js.map +1 -0
- package/dist/crownsk/contract.d.ts +62 -0
- package/dist/crownsk/contract.d.ts.map +1 -0
- package/dist/crownsk/contract.js +130 -0
- package/dist/crownsk/contract.js.map +1 -0
- package/dist/crownsk/copy-trader.d.ts +77 -0
- package/dist/crownsk/copy-trader.d.ts.map +1 -0
- package/dist/crownsk/copy-trader.js +265 -0
- package/dist/crownsk/copy-trader.js.map +1 -0
- package/dist/crownsk/index.d.ts +16 -0
- package/dist/crownsk/index.d.ts.map +1 -0
- package/dist/crownsk/index.js +18 -0
- package/dist/crownsk/index.js.map +1 -0
- package/dist/crownsk/leaderboard.d.ts +51 -0
- package/dist/crownsk/leaderboard.d.ts.map +1 -0
- package/dist/crownsk/leaderboard.js +213 -0
- package/dist/crownsk/leaderboard.js.map +1 -0
- package/dist/crownsk/live-scanner.d.ts +85 -0
- package/dist/crownsk/live-scanner.d.ts.map +1 -0
- package/dist/crownsk/live-scanner.js +345 -0
- package/dist/crownsk/live-scanner.js.map +1 -0
- package/dist/crownsk/momentum.d.ts +41 -0
- package/dist/crownsk/momentum.d.ts.map +1 -0
- package/dist/crownsk/momentum.js +251 -0
- package/dist/crownsk/momentum.js.map +1 -0
- package/dist/crownsk/personality.d.ts +77 -0
- package/dist/crownsk/personality.d.ts.map +1 -0
- package/dist/crownsk/personality.js +222 -0
- package/dist/crownsk/personality.js.map +1 -0
- package/dist/crownsk/portfolio.d.ts +62 -0
- package/dist/crownsk/portfolio.d.ts.map +1 -0
- package/dist/crownsk/portfolio.js +183 -0
- package/dist/crownsk/portfolio.js.map +1 -0
- package/dist/crownsk/sniper.d.ts +68 -0
- package/dist/crownsk/sniper.d.ts.map +1 -0
- package/dist/crownsk/sniper.js +264 -0
- package/dist/crownsk/sniper.js.map +1 -0
- package/dist/crownsk/social-graph.d.ts +72 -0
- package/dist/crownsk/social-graph.d.ts.map +1 -0
- package/dist/crownsk/social-graph.js +219 -0
- package/dist/crownsk/social-graph.js.map +1 -0
- package/dist/crownsk/trading-signals.d.ts +56 -0
- package/dist/crownsk/trading-signals.d.ts.map +1 -0
- package/dist/crownsk/trading-signals.js +253 -0
- package/dist/crownsk/trading-signals.js.map +1 -0
- package/dist/crownsk/types.d.ts +3 -0
- package/dist/crownsk/types.d.ts.map +1 -0
- package/dist/crownsk/types.js +4 -0
- package/dist/crownsk/types.js.map +1 -0
- package/dist/crownsk/whale-tracker.d.ts +53 -0
- package/dist/crownsk/whale-tracker.d.ts.map +1 -0
- package/dist/crownsk/whale-tracker.js +188 -0
- package/dist/crownsk/whale-tracker.js.map +1 -0
- package/dist/crownsk.d.ts +3 -0
- package/dist/crownsk.d.ts.map +1 -0
- package/dist/crownsk.js +1102 -0
- package/dist/crownsk.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/karma/agent.d.ts +81 -0
- package/dist/karma/agent.d.ts.map +1 -0
- package/dist/karma/agent.js +366 -0
- package/dist/karma/agent.js.map +1 -0
- package/dist/karma/contract.d.ts +62 -0
- package/dist/karma/contract.d.ts.map +1 -0
- package/dist/karma/contract.js +130 -0
- package/dist/karma/contract.js.map +1 -0
- package/dist/karma/index.d.ts +6 -0
- package/dist/karma/index.d.ts.map +1 -0
- package/dist/karma/index.js +7 -0
- package/dist/karma/index.js.map +1 -0
- package/dist/karma/live-scanner.d.ts +85 -0
- package/dist/karma/live-scanner.d.ts.map +1 -0
- package/dist/karma/live-scanner.js +345 -0
- package/dist/karma/live-scanner.js.map +1 -0
- package/dist/karma/social-graph.d.ts +72 -0
- package/dist/karma/social-graph.d.ts.map +1 -0
- package/dist/karma/social-graph.js +219 -0
- package/dist/karma/social-graph.js.map +1 -0
- package/dist/karma/trading-signals.d.ts +38 -0
- package/dist/karma/trading-signals.d.ts.map +1 -0
- package/dist/karma/trading-signals.js +291 -0
- package/dist/karma/trading-signals.js.map +1 -0
- package/dist/karma/types.d.ts +3 -0
- package/dist/karma/types.d.ts.map +1 -0
- package/dist/karma/types.js +4 -0
- package/dist/karma/types.js.map +1 -0
- package/dist/karma-king.d.ts +3 -0
- package/dist/karma-king.d.ts.map +1 -0
- package/dist/karma-king.js +580 -0
- package/dist/karma-king.js.map +1 -0
- package/dist/moltbook/client.d.ts +34 -0
- package/dist/moltbook/client.d.ts.map +1 -0
- package/dist/moltbook/client.js +280 -0
- package/dist/moltbook/client.js.map +1 -0
- package/dist/moltbook/index.d.ts +3 -0
- package/dist/moltbook/index.d.ts.map +1 -0
- package/dist/moltbook/index.js +4 -0
- package/dist/moltbook/index.js.map +1 -0
- package/dist/moltbook/types.d.ts +100 -0
- package/dist/moltbook/types.d.ts.map +1 -0
- package/dist/moltbook/types.js +3 -0
- package/dist/moltbook/types.js.map +1 -0
- package/dist/nadfun/abis.d.ts +403 -0
- package/dist/nadfun/abis.d.ts.map +1 -0
- package/dist/nadfun/abis.js +267 -0
- package/dist/nadfun/abis.js.map +1 -0
- package/dist/nadfun/client.d.ts +21 -0
- package/dist/nadfun/client.d.ts.map +1 -0
- package/dist/nadfun/client.js +349 -0
- package/dist/nadfun/client.js.map +1 -0
- package/dist/nadfun/index.d.ts +5 -0
- package/dist/nadfun/index.d.ts.map +1 -0
- package/dist/nadfun/index.js +5 -0
- package/dist/nadfun/index.js.map +1 -0
- package/dist/nadfun/types.d.ts +72 -0
- package/dist/nadfun/types.d.ts.map +1 -0
- package/dist/nadfun/types.js +2 -0
- package/dist/nadfun/types.js.map +1 -0
- package/dist/nadfun/websocket.d.ts +18 -0
- package/dist/nadfun/websocket.d.ts.map +1 -0
- package/dist/nadfun/websocket.js +110 -0
- package/dist/nadfun/websocket.js.map +1 -0
- package/dist/utils/format.d.ts +9 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +39 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +81 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/wallet/manager.d.ts +76 -0
- package/dist/wallet/manager.d.ts.map +1 -0
- package/dist/wallet/manager.js +300 -0
- package/dist/wallet/manager.js.map +1 -0
- 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":"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"}
|
|
@@ -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
|