@coinbase/agentkit 0.9.0 → 0.10.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/README.md +137 -55
- package/dist/action-providers/cdp/cdpApiActionProvider.js +2 -0
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.d.ts +43 -0
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +151 -0
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.d.ts +1 -0
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +242 -0
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.d.ts +42 -0
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +132 -0
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.d.ts +1 -0
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +199 -0
- package/dist/action-providers/cdp/index.d.ts +3 -0
- package/dist/action-providers/cdp/index.js +3 -0
- package/dist/action-providers/cdp/schemas.d.ts +29 -0
- package/dist/action-providers/cdp/schemas.js +32 -1
- package/dist/action-providers/cdp/spendPermissionUtils.d.ts +24 -0
- package/dist/action-providers/cdp/spendPermissionUtils.js +66 -0
- package/dist/action-providers/farcaster/farcasterActionProvider.js +2 -0
- package/dist/action-providers/farcaster/farcasterActionProvider.test.js +55 -0
- package/dist/action-providers/farcaster/schemas.d.ts +13 -0
- package/dist/action-providers/farcaster/schemas.js +6 -0
- package/dist/action-providers/index.d.ts +3 -0
- package/dist/action-providers/index.js +3 -0
- package/dist/action-providers/truemarkets/constants.d.ts +179 -0
- package/dist/action-providers/truemarkets/constants.js +46 -0
- package/dist/action-providers/truemarkets/index.d.ts +1 -0
- package/dist/action-providers/truemarkets/index.js +17 -0
- package/dist/action-providers/truemarkets/schemas.d.ts +21 -0
- package/dist/action-providers/truemarkets/schemas.js +29 -0
- package/dist/action-providers/truemarkets/truemarketsActionProvider.d.ts +51 -0
- package/dist/action-providers/truemarkets/truemarketsActionProvider.js +469 -0
- package/dist/action-providers/truemarkets/truemarketsActionProvider.test.d.ts +1 -0
- package/dist/action-providers/truemarkets/truemarketsActionProvider.test.js +217 -0
- package/dist/action-providers/truemarkets/utils.d.ts +10 -0
- package/dist/action-providers/truemarkets/utils.js +9 -0
- package/dist/action-providers/twitter/schemas.d.ts +16 -0
- package/dist/action-providers/twitter/schemas.js +23 -1
- package/dist/action-providers/twitter/twitterActionProvider.d.ts +8 -1
- package/dist/action-providers/twitter/twitterActionProvider.js +56 -5
- package/dist/action-providers/twitter/twitterActionProvider.test.js +52 -2
- package/dist/action-providers/weth/constants.d.ts +9 -0
- package/dist/action-providers/weth/constants.js +12 -0
- package/dist/action-providers/weth/schemas.d.ts +7 -0
- package/dist/action-providers/weth/schemas.js +7 -1
- package/dist/action-providers/weth/wethActionProvider.d.ts +9 -1
- package/dist/action-providers/weth/wethActionProvider.js +50 -1
- package/dist/action-providers/weth/wethActionProvider.test.js +60 -0
- package/dist/action-providers/zerion/constants.d.ts +1 -0
- package/dist/action-providers/zerion/constants.js +4 -0
- package/dist/action-providers/zerion/index.d.ts +2 -0
- package/dist/action-providers/zerion/index.js +18 -0
- package/dist/action-providers/zerion/schemas.d.ts +11 -0
- package/dist/action-providers/zerion/schemas.js +15 -0
- package/dist/action-providers/zerion/types.d.ts +125 -0
- package/dist/action-providers/zerion/types.js +16 -0
- package/dist/action-providers/zerion/utils.d.ts +3 -0
- package/dist/action-providers/zerion/utils.js +45 -0
- package/dist/action-providers/zerion/zerionActionProvider.d.ts +57 -0
- package/dist/action-providers/zerion/zerionActionProvider.js +159 -0
- package/dist/action-providers/zerion/zerionActionProvider.test.d.ts +1 -0
- package/dist/action-providers/zerion/zerionActionProvider.test.js +213 -0
- package/dist/action-providers/zora/index.d.ts +3 -0
- package/dist/action-providers/zora/index.js +19 -0
- package/dist/action-providers/zora/schemas.d.ts +29 -0
- package/dist/action-providers/zora/schemas.js +31 -0
- package/dist/action-providers/zora/utils.d.ts +28 -0
- package/dist/action-providers/zora/utils.js +200 -0
- package/dist/action-providers/zora/zoraActionProvider.d.ts +36 -0
- package/dist/action-providers/zora/zoraActionProvider.js +151 -0
- package/dist/action-providers/zora/zoraActionProvider.test.d.ts +1 -0
- package/dist/action-providers/zora/zoraActionProvider.test.js +205 -0
- package/dist/wallet-providers/cdpShared.d.ts +4 -0
- package/dist/wallet-providers/cdpSmartWalletProvider.d.ts +8 -1
- package/dist/wallet-providers/cdpSmartWalletProvider.js +23 -11
- package/package.json +3 -2
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
12
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
13
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
14
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
15
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
16
|
+
};
|
|
17
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
18
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
19
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
20
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
21
|
+
};
|
|
22
|
+
var _TrueMarketsActionProvider_publicClient;
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.truemarketsActionProvider = exports.TrueMarketsActionProvider = void 0;
|
|
25
|
+
const zod_1 = require("zod");
|
|
26
|
+
const actionProvider_1 = require("../actionProvider");
|
|
27
|
+
const actionDecorator_1 = require("../actionDecorator");
|
|
28
|
+
const schemas_1 = require("./schemas");
|
|
29
|
+
const constants_1 = require("./constants");
|
|
30
|
+
const constants_2 = require("../erc20/constants");
|
|
31
|
+
const wallet_providers_1 = require("../../wallet-providers");
|
|
32
|
+
const viem_1 = require("viem");
|
|
33
|
+
const chains_1 = require("viem/chains");
|
|
34
|
+
/**
|
|
35
|
+
* TrueMarketsActionProvider provides actions to interact with TrueMarkets contracts.
|
|
36
|
+
*/
|
|
37
|
+
class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
38
|
+
/**
|
|
39
|
+
* Constructor for the TrueMarketsActionProvider.
|
|
40
|
+
*
|
|
41
|
+
* @param config - The configuration options for the TrueMarketsActionProvider.
|
|
42
|
+
*/
|
|
43
|
+
constructor(config) {
|
|
44
|
+
super("truemarkets", []);
|
|
45
|
+
_TrueMarketsActionProvider_publicClient.set(this, void 0);
|
|
46
|
+
/**
|
|
47
|
+
* Checks if the TrueMarkets action provider supports the given network.
|
|
48
|
+
* Currently only supports Base mainnet.
|
|
49
|
+
*
|
|
50
|
+
* @param network - The network to check.
|
|
51
|
+
* @returns True if the TrueMarkets action provider supports the network, false otherwise.
|
|
52
|
+
*/
|
|
53
|
+
this.supportsNetwork = (network) => network.networkId === "base-mainnet";
|
|
54
|
+
__classPrivateFieldSet(this, _TrueMarketsActionProvider_publicClient, (0, viem_1.createPublicClient)({
|
|
55
|
+
chain: chains_1.base,
|
|
56
|
+
transport: config?.RPC_URL ? (0, viem_1.http)(config.RPC_URL) : (0, viem_1.http)(),
|
|
57
|
+
}), "f");
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Gets active markets from the TruthMarketManager contract.
|
|
61
|
+
*
|
|
62
|
+
* @param walletProvider - The wallet provider to use for contract interactions.
|
|
63
|
+
* @param args - The input arguments for the action, including pagination and sorting options.
|
|
64
|
+
* @returns JSON object containing the active markets information.
|
|
65
|
+
*/
|
|
66
|
+
async getPredictionMarkets(walletProvider, args) {
|
|
67
|
+
try {
|
|
68
|
+
const limit = args.limit;
|
|
69
|
+
const offset = args.offset;
|
|
70
|
+
const sortOrder = args.sortOrder;
|
|
71
|
+
// Get total number of markets
|
|
72
|
+
const numMarkets = await walletProvider.readContract({
|
|
73
|
+
address: constants_1.TruthMarketManager_ADDRESS,
|
|
74
|
+
abi: constants_1.TruthMarketManagerABI,
|
|
75
|
+
functionName: "numberOfActiveMarkets",
|
|
76
|
+
});
|
|
77
|
+
if (numMarkets === 0n) {
|
|
78
|
+
return JSON.stringify({
|
|
79
|
+
success: true,
|
|
80
|
+
totalMarkets: 0,
|
|
81
|
+
markets: [],
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
const totalMarkets = Number(numMarkets);
|
|
85
|
+
const adjustedOffset = Math.min(offset, totalMarkets - 1);
|
|
86
|
+
const adjustedLimit = Math.min(limit, totalMarkets - adjustedOffset);
|
|
87
|
+
// Create an array of indices to fetch based on sort order
|
|
88
|
+
const indices = [];
|
|
89
|
+
if (sortOrder === "desc") {
|
|
90
|
+
// For descending order, start from the end
|
|
91
|
+
for (let i = totalMarkets - 1 - adjustedOffset; i >= Math.max(0, totalMarkets - adjustedOffset - adjustedLimit); i--) {
|
|
92
|
+
indices.push(i);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
// For ascending order, start from the beginning
|
|
97
|
+
for (let i = adjustedOffset; i < adjustedOffset + adjustedLimit; i++) {
|
|
98
|
+
indices.push(i);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Use multicall to fetch all market addresses in a single call
|
|
102
|
+
const addressCalls = indices.map(index => ({
|
|
103
|
+
address: constants_1.TruthMarketManager_ADDRESS,
|
|
104
|
+
abi: constants_1.TruthMarketManagerABI,
|
|
105
|
+
functionName: "getActiveMarketAddress",
|
|
106
|
+
args: [BigInt(index)],
|
|
107
|
+
}));
|
|
108
|
+
const marketAddresses = await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").multicall({
|
|
109
|
+
contracts: addressCalls,
|
|
110
|
+
});
|
|
111
|
+
// Filter out errors and extract results
|
|
112
|
+
const validAddresses = marketAddresses
|
|
113
|
+
.filter(result => result.status === "success")
|
|
114
|
+
.map(result => result.result);
|
|
115
|
+
if (validAddresses.length === 0) {
|
|
116
|
+
return JSON.stringify({
|
|
117
|
+
success: false,
|
|
118
|
+
error: "Failed to retrieve market addresses",
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// Use multicall to fetch all market questions in a single call
|
|
122
|
+
const questionCalls = validAddresses.map(address => ({
|
|
123
|
+
address,
|
|
124
|
+
abi: constants_1.TruthMarketABI,
|
|
125
|
+
functionName: "marketQuestion",
|
|
126
|
+
}));
|
|
127
|
+
const marketQuestionsResult = await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").multicall({
|
|
128
|
+
contracts: questionCalls,
|
|
129
|
+
});
|
|
130
|
+
// Create market objects mapping indices to addresses and questions
|
|
131
|
+
const markets = indices
|
|
132
|
+
.filter((_, idx) => idx < validAddresses.length)
|
|
133
|
+
.map((id, idx) => ({
|
|
134
|
+
id,
|
|
135
|
+
address: validAddresses[idx],
|
|
136
|
+
marketQuestion: marketQuestionsResult[idx].status === "success"
|
|
137
|
+
? marketQuestionsResult[idx].result
|
|
138
|
+
: "Failed to retrieve question",
|
|
139
|
+
}));
|
|
140
|
+
return JSON.stringify({
|
|
141
|
+
success: true,
|
|
142
|
+
totalMarkets,
|
|
143
|
+
markets,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
return JSON.stringify({
|
|
148
|
+
success: false,
|
|
149
|
+
error: `Error retrieving active markets: ${error}`,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Gets detailed information for a specific market address.
|
|
155
|
+
*
|
|
156
|
+
* @param walletProvider - The wallet provider to use for contract interactions.
|
|
157
|
+
* @param args - The input arguments for the action, containing the market address.
|
|
158
|
+
* @returns JSON object containing detailed market information.
|
|
159
|
+
*/
|
|
160
|
+
async getPredictionMarketDetails(walletProvider, args) {
|
|
161
|
+
try {
|
|
162
|
+
let marketAddress;
|
|
163
|
+
// Check if input is an Ethereum address
|
|
164
|
+
const ethAddressRegex = /^0x[a-fA-F0-9]{40}$/;
|
|
165
|
+
if (ethAddressRegex.test(args)) {
|
|
166
|
+
marketAddress = args;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
// Try to parse as market ID
|
|
170
|
+
const marketId = parseInt(args, 10);
|
|
171
|
+
if (isNaN(marketId) || marketId < 0) {
|
|
172
|
+
return JSON.stringify({
|
|
173
|
+
success: false,
|
|
174
|
+
error: `Invalid input: "${args}". Must be either a valid Ethereum address (0x...) or a non-negative market ID number.`,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
try {
|
|
178
|
+
marketAddress = (await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").readContract({
|
|
179
|
+
address: constants_1.TruthMarketManager_ADDRESS,
|
|
180
|
+
abi: constants_1.TruthMarketManagerABI,
|
|
181
|
+
functionName: "getActiveMarketAddress",
|
|
182
|
+
args: [BigInt(marketId)],
|
|
183
|
+
}));
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
return JSON.stringify({
|
|
187
|
+
success: false,
|
|
188
|
+
error: `Error retrieving market address for ID ${marketId}: ${error}`,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Get basic market info using multicall
|
|
193
|
+
const basicInfoCalls = [
|
|
194
|
+
{
|
|
195
|
+
address: marketAddress,
|
|
196
|
+
abi: constants_1.TruthMarketABI,
|
|
197
|
+
functionName: "marketQuestion",
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
address: marketAddress,
|
|
201
|
+
abi: constants_1.TruthMarketABI,
|
|
202
|
+
functionName: "additionalInfo",
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
address: marketAddress,
|
|
206
|
+
abi: constants_1.TruthMarketABI,
|
|
207
|
+
functionName: "marketSource",
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
address: marketAddress,
|
|
211
|
+
abi: constants_1.TruthMarketABI,
|
|
212
|
+
functionName: "getCurrentStatus",
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
address: marketAddress,
|
|
216
|
+
abi: constants_1.TruthMarketABI,
|
|
217
|
+
functionName: "endOfTrading",
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
address: marketAddress,
|
|
221
|
+
abi: constants_1.TruthMarketABI,
|
|
222
|
+
functionName: "getPoolAddresses",
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
address: marketAddress,
|
|
226
|
+
abi: constants_1.TruthMarketABI,
|
|
227
|
+
functionName: "winningPosition",
|
|
228
|
+
},
|
|
229
|
+
];
|
|
230
|
+
const basicInfoResults = await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").multicall({
|
|
231
|
+
contracts: basicInfoCalls,
|
|
232
|
+
});
|
|
233
|
+
// Extract results, handling potential errors
|
|
234
|
+
if (basicInfoResults.some(result => result.status === "failure")) {
|
|
235
|
+
return JSON.stringify({
|
|
236
|
+
success: false,
|
|
237
|
+
error: "Error retrieving basic market information",
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
const question = basicInfoResults[0].result;
|
|
241
|
+
const additionalInfo = basicInfoResults[1].result;
|
|
242
|
+
const source = basicInfoResults[2].result;
|
|
243
|
+
const statusNum = basicInfoResults[3].result;
|
|
244
|
+
const endOfTrading = basicInfoResults[4].result;
|
|
245
|
+
const pools = basicInfoResults[5].result;
|
|
246
|
+
const marketWinningPosition = Number(basicInfoResults[6].result);
|
|
247
|
+
// Get pool addresses
|
|
248
|
+
const [yesPool, noPool] = pools;
|
|
249
|
+
// Get pool token information using multicall
|
|
250
|
+
const poolInfoCalls = [
|
|
251
|
+
{
|
|
252
|
+
address: yesPool,
|
|
253
|
+
abi: constants_1.UniswapV3PoolABI,
|
|
254
|
+
functionName: "token0",
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
address: yesPool,
|
|
258
|
+
abi: constants_1.UniswapV3PoolABI,
|
|
259
|
+
functionName: "token1",
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
address: noPool,
|
|
263
|
+
abi: constants_1.UniswapV3PoolABI,
|
|
264
|
+
functionName: "token0",
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
address: noPool,
|
|
268
|
+
abi: constants_1.UniswapV3PoolABI,
|
|
269
|
+
functionName: "token1",
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
address: yesPool,
|
|
273
|
+
abi: constants_1.UniswapV3PoolABI,
|
|
274
|
+
functionName: "slot0",
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
address: noPool,
|
|
278
|
+
abi: constants_1.UniswapV3PoolABI,
|
|
279
|
+
functionName: "slot0",
|
|
280
|
+
},
|
|
281
|
+
];
|
|
282
|
+
const poolInfoResults = await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").multicall({
|
|
283
|
+
contracts: poolInfoCalls,
|
|
284
|
+
});
|
|
285
|
+
if (poolInfoResults.some(result => result.status === "failure")) {
|
|
286
|
+
return JSON.stringify({
|
|
287
|
+
success: false,
|
|
288
|
+
error: "Error retrieving pool information",
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
const yesToken0 = poolInfoResults[0].result;
|
|
292
|
+
const yesToken1 = poolInfoResults[1].result;
|
|
293
|
+
const noToken0 = poolInfoResults[2].result;
|
|
294
|
+
const noToken1 = poolInfoResults[3].result;
|
|
295
|
+
const yesSlot0 = poolInfoResults[4].result;
|
|
296
|
+
const noSlot0 = poolInfoResults[5].result;
|
|
297
|
+
// Determine payment token (USDC or TYD) - should be the same for both pools
|
|
298
|
+
const payToken = yesToken0 === constants_1.USDC_ADDRESS || yesToken0 === constants_1.TYD_ADDRESS ? yesToken0 : yesToken1;
|
|
299
|
+
// Determine which token is the YES/NO token in each pool
|
|
300
|
+
const yesToken = yesToken0 === payToken ? yesToken1 : yesToken0;
|
|
301
|
+
const noToken = noToken0 === payToken ? noToken1 : noToken0;
|
|
302
|
+
const isYesToken0 = yesToken0 === yesToken;
|
|
303
|
+
const isNoToken0 = noToken0 === noToken;
|
|
304
|
+
// Extract sqrtPriceX96 from slot0 results
|
|
305
|
+
const yesSqrtPriceX96 = yesSlot0[0];
|
|
306
|
+
const noSqrtPriceX96 = noSlot0[0];
|
|
307
|
+
// Get pool balances using multicall
|
|
308
|
+
const balanceCalls = [
|
|
309
|
+
{
|
|
310
|
+
address: payToken,
|
|
311
|
+
abi: constants_2.abi,
|
|
312
|
+
functionName: "balanceOf",
|
|
313
|
+
args: [yesPool],
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
address: yesToken,
|
|
317
|
+
abi: constants_2.abi,
|
|
318
|
+
functionName: "balanceOf",
|
|
319
|
+
args: [yesPool],
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
address: payToken,
|
|
323
|
+
abi: constants_2.abi,
|
|
324
|
+
functionName: "balanceOf",
|
|
325
|
+
args: [noPool],
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
address: noToken,
|
|
329
|
+
abi: constants_2.abi,
|
|
330
|
+
functionName: "balanceOf",
|
|
331
|
+
args: [noPool],
|
|
332
|
+
},
|
|
333
|
+
];
|
|
334
|
+
const balanceResults = await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").multicall({
|
|
335
|
+
contracts: balanceCalls,
|
|
336
|
+
});
|
|
337
|
+
if (balanceResults.some(result => result.status === "failure")) {
|
|
338
|
+
return JSON.stringify({
|
|
339
|
+
success: false,
|
|
340
|
+
error: "Error retrieving token balances",
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
const yesPoolStableBalance = balanceResults[0].result;
|
|
344
|
+
const yesPoolTokenBalance = balanceResults[1].result;
|
|
345
|
+
const noPoolStableBalance = balanceResults[2].result;
|
|
346
|
+
const noPoolTokenBalance = balanceResults[3].result;
|
|
347
|
+
// Calculate prices from slot0 data
|
|
348
|
+
const calculatePrice = (sqrtPriceX96, isTokenZero, usdcDecimals_, tokenDecimals_) => {
|
|
349
|
+
const Q96 = 2n ** 96n;
|
|
350
|
+
const sqrtPrice = Number(sqrtPriceX96) / Number(Q96);
|
|
351
|
+
const price = sqrtPrice * sqrtPrice;
|
|
352
|
+
// Decimal adjustment between USDC and YES/NO tokens
|
|
353
|
+
const decimalAdjustment = 10 ** (Number(tokenDecimals_) - Number(usdcDecimals_));
|
|
354
|
+
if (isTokenZero) {
|
|
355
|
+
// If YES/NO token is token0, price = price * decimalAdjustment
|
|
356
|
+
return price * decimalAdjustment;
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
// If YES/NO token is token1, price = 1/price * decimalAdjustment
|
|
360
|
+
return (1 / price) * decimalAdjustment;
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
// Calculate TVL based on token balances and prices
|
|
364
|
+
const payDecimals = payToken === constants_1.USDC_ADDRESS ? Number(constants_1.USDC_DECIMALS) : Number(constants_1.TYD_DECIMALS);
|
|
365
|
+
const yesNoTokenDecimals_ = Number(constants_1.YESNO_DECIMALS);
|
|
366
|
+
const yesPrice = calculatePrice(yesSqrtPriceX96, isYesToken0, payDecimals, yesNoTokenDecimals_);
|
|
367
|
+
const noPrice = calculatePrice(noSqrtPriceX96, isNoToken0, payDecimals, yesNoTokenDecimals_);
|
|
368
|
+
// Calculate TVL using token balances
|
|
369
|
+
const yesPoolStableValue = Number((0, viem_1.formatUnits)(yesPoolStableBalance || 0n, payDecimals));
|
|
370
|
+
const yesPoolTokenValue = Number((0, viem_1.formatUnits)(yesPoolTokenBalance || 0n, yesNoTokenDecimals_)) * yesPrice;
|
|
371
|
+
const noPoolStableValue = Number((0, viem_1.formatUnits)(noPoolStableBalance || 0n, payDecimals));
|
|
372
|
+
const noPoolTokenValue = Number((0, viem_1.formatUnits)(noPoolTokenBalance || 0n, yesNoTokenDecimals_)) * noPrice;
|
|
373
|
+
const yesTVL = yesPoolStableValue + yesPoolTokenValue;
|
|
374
|
+
const noTVL = noPoolStableValue + noPoolTokenValue;
|
|
375
|
+
const totalTVL = yesTVL + noTVL;
|
|
376
|
+
// Map winning position to string
|
|
377
|
+
let winningPositionString = "Open";
|
|
378
|
+
switch (marketWinningPosition) {
|
|
379
|
+
case 1:
|
|
380
|
+
winningPositionString = "Yes";
|
|
381
|
+
break;
|
|
382
|
+
case 2:
|
|
383
|
+
winningPositionString = "No";
|
|
384
|
+
break;
|
|
385
|
+
case 3:
|
|
386
|
+
winningPositionString = "Canceled";
|
|
387
|
+
break;
|
|
388
|
+
default:
|
|
389
|
+
winningPositionString = "Open";
|
|
390
|
+
}
|
|
391
|
+
return JSON.stringify({
|
|
392
|
+
success: true,
|
|
393
|
+
marketAddress,
|
|
394
|
+
question,
|
|
395
|
+
additionalInfo,
|
|
396
|
+
source,
|
|
397
|
+
status: Number(statusNum),
|
|
398
|
+
resolutionTime: Number(endOfTrading),
|
|
399
|
+
prices: {
|
|
400
|
+
yes: parseFloat(yesPrice.toFixed(6)),
|
|
401
|
+
no: parseFloat(noPrice.toFixed(6)),
|
|
402
|
+
},
|
|
403
|
+
tokens: {
|
|
404
|
+
yes: {
|
|
405
|
+
tokenAddress: yesToken,
|
|
406
|
+
lpAddress: yesPool,
|
|
407
|
+
poolSize: parseFloat(yesTVL.toFixed(2)),
|
|
408
|
+
},
|
|
409
|
+
no: {
|
|
410
|
+
tokenAddress: noToken,
|
|
411
|
+
lpAddress: noPool,
|
|
412
|
+
poolSize: parseFloat(noTVL.toFixed(2)),
|
|
413
|
+
},
|
|
414
|
+
payToken: {
|
|
415
|
+
tokenAddress: payToken,
|
|
416
|
+
tokenName: payToken === constants_1.USDC_ADDRESS ? "USDC" : "TYD",
|
|
417
|
+
},
|
|
418
|
+
},
|
|
419
|
+
tvl: parseFloat(totalTVL.toFixed(2)),
|
|
420
|
+
winningPosition: marketWinningPosition,
|
|
421
|
+
winningPositionString,
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
catch (error) {
|
|
425
|
+
return JSON.stringify({
|
|
426
|
+
success: false,
|
|
427
|
+
error: `Error retrieving market details: ${error}`,
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
exports.TrueMarketsActionProvider = TrueMarketsActionProvider;
|
|
433
|
+
_TrueMarketsActionProvider_publicClient = new WeakMap();
|
|
434
|
+
__decorate([
|
|
435
|
+
(0, actionDecorator_1.CreateAction)({
|
|
436
|
+
name: "get_prediction_markets",
|
|
437
|
+
description: `
|
|
438
|
+
This tool will retrieve prediction markets from the Truemarkets platform.
|
|
439
|
+
It returns a list of markets with their ID, contract address and market question.
|
|
440
|
+
You can paginate results using limit and offset parameters, and sort them in ascending or descending order.
|
|
441
|
+
Market IDs are sorted by their creation date, with the oldest market having ID 0.
|
|
442
|
+
`,
|
|
443
|
+
schema: schemas_1.GetTruthMarketsSchema,
|
|
444
|
+
}),
|
|
445
|
+
__metadata("design:type", Function),
|
|
446
|
+
__metadata("design:paramtypes", [wallet_providers_1.EvmWalletProvider, void 0]),
|
|
447
|
+
__metadata("design:returntype", Promise)
|
|
448
|
+
], TrueMarketsActionProvider.prototype, "getPredictionMarkets", null);
|
|
449
|
+
__decorate([
|
|
450
|
+
(0, actionDecorator_1.CreateAction)({
|
|
451
|
+
name: "get_market_details",
|
|
452
|
+
description: `
|
|
453
|
+
This tool will retrieve detailed information about a specific Truemarkets prediction market.
|
|
454
|
+
It returns comprehensive data including market question, status, liquidity pool information,
|
|
455
|
+
prices for YES/NO tokens and Total Value Locked (TVL).
|
|
456
|
+
The prices of the YES/NO token reflect the odds of the outcome.
|
|
457
|
+
If the price of YES tokens is larger than of NO tokens, the market favors a YES outcome and vice versa.
|
|
458
|
+
You can query using either:
|
|
459
|
+
- marketAddress: The direct contract address of the market
|
|
460
|
+
- id: The market ID (numeric identifier of the market)
|
|
461
|
+
`,
|
|
462
|
+
schema: schemas_1.GetTruthMarketDetailsSchema,
|
|
463
|
+
}),
|
|
464
|
+
__metadata("design:type", Function),
|
|
465
|
+
__metadata("design:paramtypes", [wallet_providers_1.EvmWalletProvider, void 0]),
|
|
466
|
+
__metadata("design:returntype", Promise)
|
|
467
|
+
], TrueMarketsActionProvider.prototype, "getPredictionMarketDetails", null);
|
|
468
|
+
const truemarketsActionProvider = (config) => new TrueMarketsActionProvider(config);
|
|
469
|
+
exports.truemarketsActionProvider = truemarketsActionProvider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|