prediction-market-agent-tooling 0.43.2__py3-none-any.whl → 0.43.4__py3-none-any.whl

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 (20) hide show
  1. prediction_market_agent_tooling/abis/depositablewrapper_erc20.abi.json +279 -0
  2. prediction_market_agent_tooling/abis/erc20.abi.json +221 -314
  3. prediction_market_agent_tooling/abis/erc4626.abi.json +623 -0
  4. prediction_market_agent_tooling/abis/proxy.abi.json +24 -0
  5. prediction_market_agent_tooling/gtypes.py +1 -1
  6. prediction_market_agent_tooling/markets/agent_market.py +2 -1
  7. prediction_market_agent_tooling/markets/manifold/manifold.py +3 -2
  8. prediction_market_agent_tooling/markets/omen/data_models.py +2 -1
  9. prediction_market_agent_tooling/markets/omen/omen.py +73 -38
  10. prediction_market_agent_tooling/markets/omen/omen_contracts.py +43 -12
  11. prediction_market_agent_tooling/markets/omen/omen_resolving.py +15 -5
  12. prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py +9 -0
  13. prediction_market_agent_tooling/markets/polymarket/polymarket.py +2 -1
  14. prediction_market_agent_tooling/tools/contract.py +303 -11
  15. {prediction_market_agent_tooling-0.43.2.dist-info → prediction_market_agent_tooling-0.43.4.dist-info}/METADATA +1 -1
  16. {prediction_market_agent_tooling-0.43.2.dist-info → prediction_market_agent_tooling-0.43.4.dist-info}/RECORD +19 -17
  17. prediction_market_agent_tooling/abis/wxdai.abi.json +0 -279
  18. {prediction_market_agent_tooling-0.43.2.dist-info → prediction_market_agent_tooling-0.43.4.dist-info}/LICENSE +0 -0
  19. {prediction_market_agent_tooling-0.43.2.dist-info → prediction_market_agent_tooling-0.43.4.dist-info}/WHEEL +0 -0
  20. {prediction_market_agent_tooling-0.43.2.dist-info → prediction_market_agent_tooling-0.43.4.dist-info}/entry_points.txt +0 -0
@@ -1,4 +1,5 @@
1
1
  import json
2
+ import os
2
3
  import time
3
4
  import typing as t
4
5
  from contextlib import contextmanager
@@ -151,11 +152,33 @@ class ContractBaseClass(BaseModel):
151
152
  return Web3(Web3.HTTPProvider(cls.CHAIN_RPC_URL))
152
153
 
153
154
 
155
+ class ContractProxyBaseClass(ContractBaseClass):
156
+ """
157
+ Contract base class for proxy contracts.
158
+ """
159
+
160
+ abi: ABI = abi_field_validator(
161
+ os.path.join(
162
+ os.path.dirname(os.path.realpath(__file__)), "../abis/proxy.abi.json"
163
+ )
164
+ )
165
+
166
+ def implementation(self, web3: Web3 | None = None) -> ChecksumAddress:
167
+ address = self.call("implementation", web3=web3)
168
+ return Web3.to_checksum_address(address)
169
+
170
+
154
171
  class ContractERC20BaseClass(ContractBaseClass):
155
172
  """
156
173
  Contract base class extended by ERC-20 standard methods.
157
174
  """
158
175
 
176
+ abi: ABI = abi_field_validator(
177
+ os.path.join(
178
+ os.path.dirname(os.path.realpath(__file__)), "../abis/erc20.abi.json"
179
+ )
180
+ )
181
+
159
182
  def approve(
160
183
  self,
161
184
  api_keys: APIKeys,
@@ -175,6 +198,41 @@ class ContractERC20BaseClass(ContractBaseClass):
175
198
  web3=web3,
176
199
  )
177
200
 
201
+ def transferFrom(
202
+ self,
203
+ api_keys: APIKeys,
204
+ sender: ChecksumAddress,
205
+ recipient: ChecksumAddress,
206
+ amount_wei: Wei,
207
+ tx_params: t.Optional[TxParams] = None,
208
+ web3: Web3 | None = None,
209
+ ) -> TxReceipt:
210
+ return self.send(
211
+ api_keys=api_keys,
212
+ function_name="transferFrom",
213
+ function_params=[sender, recipient, amount_wei],
214
+ tx_params=tx_params,
215
+ web3=web3,
216
+ )
217
+
218
+ def balanceOf(self, for_address: ChecksumAddress, web3: Web3 | None = None) -> Wei:
219
+ balance: Wei = self.call("balanceOf", [for_address], web3=web3)
220
+ return balance
221
+
222
+
223
+ class ContractDepositableWrapperERC20BaseClass(ContractERC20BaseClass):
224
+ """
225
+ ERC-20 standard base class extended for wrapper tokens.
226
+ Altough this is not a standard, it's seems to be a common pattern for wrapped tokens (at least it checks out for wxDai and wETH).
227
+ """
228
+
229
+ abi: ABI = abi_field_validator(
230
+ os.path.join(
231
+ os.path.dirname(os.path.realpath(__file__)),
232
+ "../abis/depositablewrapper_erc20.abi.json",
233
+ )
234
+ )
235
+
178
236
  def deposit(
179
237
  self,
180
238
  api_keys: APIKeys,
@@ -190,41 +248,93 @@ class ContractERC20BaseClass(ContractBaseClass):
190
248
  web3=web3,
191
249
  )
192
250
 
193
- def transferFrom(
251
+ def withdraw(
194
252
  self,
195
253
  api_keys: APIKeys,
196
- sender: ChecksumAddress,
197
- recipient: ChecksumAddress,
198
254
  amount_wei: Wei,
199
255
  tx_params: t.Optional[TxParams] = None,
200
256
  web3: Web3 | None = None,
201
257
  ) -> TxReceipt:
202
258
  return self.send(
203
259
  api_keys=api_keys,
204
- function_name="transferFrom",
205
- function_params=[sender, recipient, amount_wei],
260
+ function_name="withdraw",
261
+ function_params=[amount_wei],
206
262
  tx_params=tx_params,
207
263
  web3=web3,
208
264
  )
209
265
 
210
- def withdraw(
266
+
267
+ class ContractERC4626BaseClass(ContractERC20BaseClass):
268
+ """
269
+ Class for ERC-4626, which is a superset for ERC-20.
270
+ """
271
+
272
+ abi: ABI = abi_field_validator(
273
+ os.path.join(
274
+ os.path.dirname(os.path.realpath(__file__)), "../abis/erc4626.abi.json"
275
+ )
276
+ )
277
+
278
+ def asset(self, web3: Web3 | None = None) -> ChecksumAddress:
279
+ address = self.call("asset", web3=web3)
280
+ return Web3.to_checksum_address(address)
281
+
282
+ def deposit(
211
283
  self,
212
284
  api_keys: APIKeys,
213
285
  amount_wei: Wei,
286
+ receiver: ChecksumAddress,
214
287
  tx_params: t.Optional[TxParams] = None,
215
288
  web3: Web3 | None = None,
216
289
  ) -> TxReceipt:
217
290
  return self.send(
218
291
  api_keys=api_keys,
219
- function_name="withdraw",
220
- function_params=[amount_wei],
292
+ function_name="deposit",
293
+ function_params=[amount_wei, receiver],
221
294
  tx_params=tx_params,
222
295
  web3=web3,
223
296
  )
224
297
 
225
- def balanceOf(self, for_address: ChecksumAddress, web3: Web3 | None = None) -> Wei:
226
- balance: Wei = self.call("balanceOf", [for_address], web3=web3)
227
- return balance
298
+ def convertToShares(self, assets: Wei, web3: Web3 | None = None) -> Wei:
299
+ shares: Wei = self.call("convertToShares", [assets], web3=web3)
300
+ return shares
301
+
302
+ def convertToAssets(self, shares: Wei, web3: Web3 | None = None) -> Wei:
303
+ assets: Wei = self.call("convertToAssets", [shares], web3=web3)
304
+ return assets
305
+
306
+ def get_asset_token_contract(
307
+ self, web3: Web3 | None = None
308
+ ) -> ContractERC20BaseClass | ContractDepositableWrapperERC20BaseClass:
309
+ web3 = web3 or self.get_web3()
310
+ contract = init_erc4626_or_wrappererc20_or_erc20_contract(
311
+ self.asset(), web3=web3
312
+ )
313
+ assert not isinstance(
314
+ contract, ContractERC4626OnGnosisChain
315
+ ), "Asset token should be either Depositable Wrapper ERC-20 or ERC-20." # Shrinking down possible types.
316
+ return contract
317
+
318
+ def get_asset_token_balance(
319
+ self, for_address: ChecksumAddress, web3: Web3 | None = None
320
+ ) -> Wei:
321
+ asset_token_contract = self.get_asset_token_contract(web3=web3)
322
+ return asset_token_contract.balanceOf(for_address, web3=web3)
323
+
324
+ def deposit_asset_token(
325
+ self, asset_value: Wei, api_keys: APIKeys, web3: Web3 | None = None
326
+ ) -> TxReceipt:
327
+ for_address = api_keys.bet_from_address
328
+ web3 = web3 or self.get_web3()
329
+
330
+ asset_token_contract = self.get_asset_token_contract(web3=web3)
331
+ # Approve vault to withdraw the erc-20 token from the user.
332
+ asset_token_contract.approve(api_keys, self.address, asset_value, web3=web3)
333
+
334
+ # Deposit asset token (erc20) and we will receive shares in this vault.
335
+ receipt = self.deposit(api_keys, asset_value, for_address, web3=web3)
336
+
337
+ return receipt
228
338
 
229
339
 
230
340
  class ContractOnGnosisChain(ContractBaseClass):
@@ -236,7 +346,189 @@ class ContractOnGnosisChain(ContractBaseClass):
236
346
  CHAIN_RPC_URL = GNOSIS_RPC_URL
237
347
 
238
348
 
349
+ class ContractProxyOnGnosisChain(ContractProxyBaseClass, ContractOnGnosisChain):
350
+ """
351
+ Proxy contract base class with Gnosis Chain configuration.
352
+ """
353
+
354
+
239
355
  class ContractERC20OnGnosisChain(ContractERC20BaseClass, ContractOnGnosisChain):
240
356
  """
241
357
  ERC-20 standard base class with Gnosis Chain configuration.
242
358
  """
359
+
360
+
361
+ class ContractDepositableWrapperERC20OnGnosisChain(
362
+ ContractDepositableWrapperERC20BaseClass, ContractOnGnosisChain
363
+ ):
364
+ """
365
+ Depositable Wrapper ERC-20 standard base class with Gnosis Chain configuration.
366
+ """
367
+
368
+
369
+ class ContractERC4626OnGnosisChain(ContractERC4626BaseClass, ContractOnGnosisChain):
370
+ """
371
+ ERC-4626 standard base class with Gnosis Chain configuration.
372
+ """
373
+
374
+
375
+ def contract_implements_function(
376
+ contract_address: ChecksumAddress,
377
+ function_name: str,
378
+ web3: Web3,
379
+ function_arg_types: list[str] | None = None,
380
+ look_for_proxy_contract: bool = True,
381
+ ) -> bool:
382
+ function_signature = f"{function_name}({','.join(function_arg_types or [])})"
383
+ function_hash = web3.keccak(text=function_signature)[0:4].hex()[2:]
384
+ contract_code = web3.eth.get_code(contract_address).hex()
385
+ implements = function_hash in contract_code
386
+ if (
387
+ not implements
388
+ and look_for_proxy_contract
389
+ and contract_implements_function(
390
+ contract_address, "implementation", web3, look_for_proxy_contract=False
391
+ )
392
+ ):
393
+ implementation_address = ContractProxyOnGnosisChain(
394
+ address=contract_address
395
+ ).implementation()
396
+ implements = contract_implements_function(
397
+ implementation_address,
398
+ function_name=function_name,
399
+ web3=web3,
400
+ function_arg_types=function_arg_types,
401
+ look_for_proxy_contract=False,
402
+ )
403
+ return implements
404
+
405
+
406
+ def init_erc4626_or_wrappererc20_or_erc20_contract(
407
+ address: ChecksumAddress,
408
+ web3: Web3,
409
+ ) -> (
410
+ ContractERC20BaseClass
411
+ | ContractERC4626BaseClass
412
+ | ContractDepositableWrapperERC20BaseClass
413
+ ):
414
+ """
415
+ Checks if the given contract is Depositable ERC-20, ERC-20 or ERC-4626 and returns the appropriate class instance.
416
+ Throws an error if the contract is neither of them.
417
+ """
418
+ if contract_implements_function(address, "asset", web3=web3):
419
+ return ContractERC4626BaseClass(address=address)
420
+
421
+ elif contract_implements_function(
422
+ address,
423
+ "deposit",
424
+ web3=web3,
425
+ ):
426
+ return ContractDepositableWrapperERC20BaseClass(address=address)
427
+
428
+ elif contract_implements_function(
429
+ address,
430
+ "balanceOf",
431
+ web3=web3,
432
+ function_arg_types=["address"],
433
+ ):
434
+ return ContractERC20BaseClass(address=address)
435
+
436
+ else:
437
+ raise ValueError(
438
+ f"Contract at {address} on Gnosis Chain is neither WrapperERC-20, ERC-20 nor ERC-4626."
439
+ )
440
+
441
+
442
+ def auto_deposit_collateral_token(
443
+ collateral_token_contract: (
444
+ ContractERC20BaseClass
445
+ | ContractERC4626BaseClass
446
+ | ContractDepositableWrapperERC20BaseClass
447
+ ),
448
+ amount_wei: Wei,
449
+ api_keys: APIKeys,
450
+ web3: Web3 | None,
451
+ ) -> None:
452
+ for_address = api_keys.bet_from_address
453
+ # This might be in shares, if it's an erc-4626 token.
454
+ collateral_token_balance = collateral_token_contract.balanceOf(
455
+ for_address=for_address, web3=web3
456
+ )
457
+
458
+ if isinstance(collateral_token_contract, ContractERC4626BaseClass):
459
+ # In the more complex case, we need to deposit into the saving token, out of the erc-20 token.
460
+ # We need to compare with shares, because if erc-4626 is used, the liquidity in market will be in shares as well.
461
+ if collateral_token_balance < collateral_token_contract.convertToShares(
462
+ amount_wei
463
+ ):
464
+ asset_token_contract = collateral_token_contract.get_asset_token_contract(
465
+ web3=web3
466
+ )
467
+
468
+ # If the asset token is Depositable Wrapper ERC-20, we can deposit it, in case we don't have enough.
469
+ if (
470
+ collateral_token_contract.get_asset_token_balance(for_address, web3)
471
+ < amount_wei
472
+ ):
473
+ if isinstance(
474
+ asset_token_contract, ContractDepositableWrapperERC20BaseClass
475
+ ):
476
+ asset_token_contract.deposit(api_keys, amount_wei, web3=web3)
477
+ else:
478
+ raise ValueError(
479
+ f"Not enough of the asset token, but it's not a depositable wrapper token that we can deposit automatically."
480
+ )
481
+
482
+ collateral_token_contract.deposit_asset_token(amount_wei, api_keys, web3)
483
+
484
+ elif isinstance(
485
+ collateral_token_contract, ContractDepositableWrapperERC20BaseClass
486
+ ):
487
+ # If the collateral token is Depositable Wrapper ERC-20, it's a simple case where we can just deposit it, if needed.
488
+ if collateral_token_balance < amount_wei:
489
+ collateral_token_contract.deposit(api_keys, amount_wei, web3=web3)
490
+
491
+ elif isinstance(collateral_token_contract, ContractERC20BaseClass):
492
+ if collateral_token_balance < amount_wei:
493
+ raise ValueError(
494
+ f"Not enough of the collateral token, but it's not a wrapper token that we can deposit automatically."
495
+ )
496
+
497
+ else:
498
+ raise RuntimeError("Bug in our logic! :(")
499
+
500
+
501
+ def asset_or_shares(
502
+ collateral_token_contract: (
503
+ ContractERC20BaseClass
504
+ | ContractERC4626BaseClass
505
+ | ContractDepositableWrapperERC20BaseClass
506
+ ),
507
+ amount_wei: Wei,
508
+ ) -> Wei:
509
+ return (
510
+ collateral_token_contract.convertToShares(amount_wei)
511
+ if isinstance(collateral_token_contract, ContractERC4626BaseClass)
512
+ else amount_wei
513
+ )
514
+
515
+
516
+ def to_gnosis_chain_contract(
517
+ contract: (
518
+ ContractDepositableWrapperERC20BaseClass
519
+ | ContractERC4626BaseClass
520
+ | ContractERC20BaseClass
521
+ ),
522
+ ) -> (
523
+ ContractDepositableWrapperERC20OnGnosisChain
524
+ | ContractERC4626OnGnosisChain
525
+ | ContractERC20OnGnosisChain
526
+ ):
527
+ if isinstance(contract, ContractERC4626BaseClass):
528
+ return ContractERC4626OnGnosisChain(address=contract.address)
529
+ elif isinstance(contract, ContractDepositableWrapperERC20BaseClass):
530
+ return ContractDepositableWrapperERC20OnGnosisChain(address=contract.address)
531
+ elif isinstance(contract, ContractERC20BaseClass):
532
+ return ContractERC20OnGnosisChain(address=contract.address)
533
+ else:
534
+ raise ValueError("Unsupported contract type")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.43.2
3
+ Version: 0.43.4
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.12
@@ -1,4 +1,6 @@
1
- prediction_market_agent_tooling/abis/erc20.abi.json,sha256=jdWxiSALAJEwvIWE8VLNs82hnxl9UGWNyw80CNeS8ic,5461
1
+ prediction_market_agent_tooling/abis/depositablewrapper_erc20.abi.json,sha256=m0Wk3uQyLM8apWRRvX4d3u1d77bWVuXfV38D-aV48t0,4612
2
+ prediction_market_agent_tooling/abis/erc20.abi.json,sha256=b8t6tPUhjBo5dHFq8ipsK-ih_g29dOTbWI0GBZiEWL8,3685
3
+ prediction_market_agent_tooling/abis/erc4626.abi.json,sha256=qvmonhj3tJU5flR4pJjXCSSwB8tgEiJcx4Sc5ilQ5VY,17801
2
4
  prediction_market_agent_tooling/abis/omen_dxdao.abi.json,sha256=Z1kD1QfgYfGwsZEI2UFDNEGZ4hMOix3HGICk8xlO4Ds,9578
3
5
  prediction_market_agent_tooling/abis/omen_fpmm.abi.json,sha256=CDib_b5PVj4m0JBVCB20cTshiVx8st1Be-7E460qFoY,11406
4
6
  prediction_market_agent_tooling/abis/omen_fpmm_conditionaltokens.abi.json,sha256=ux30hTxtZiOZ86FsTEK8Xnm910iyjB1CFnkXrCbhfm8,9841
@@ -7,7 +9,7 @@ prediction_market_agent_tooling/abis/omen_kleros.abi.json,sha256=QPMXrYA5UCo_wVU
7
9
  prediction_market_agent_tooling/abis/omen_oracle.abi.json,sha256=YPZ-FLvd4PA9pYd6d5mQI1TD11JnsE0LGxH4XcZZFCA,1775
8
10
  prediction_market_agent_tooling/abis/omen_realitio.abi.json,sha256=7HmFkBF_rq83UTaH2kRRsEfc_WZuf4n-qvkB4nhvweo,15953
9
11
  prediction_market_agent_tooling/abis/omen_thumbnailmapping.abi.json,sha256=u1-3B8FB3Ys9KVJCH-lw9ArkicdxbNMf34dV-VEGMMU,930
10
- prediction_market_agent_tooling/abis/wxdai.abi.json,sha256=m3qC06Yug-pToI0lSFe1f8e6gKMIulnV3MA2K0X51hI,6055
12
+ prediction_market_agent_tooling/abis/proxy.abi.json,sha256=h24GXZ6Q0bSZlwh7zOv0EiDvbqUz_PHtWfKHTyPJ1w4,644
11
13
  prediction_market_agent_tooling/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
14
  prediction_market_agent_tooling/benchmark/agents.py,sha256=HPIFJvackW110ch3UkktbxhU48gMRVo4gQse84Klhdc,4000
13
15
  prediction_market_agent_tooling/benchmark/benchmark.py,sha256=xiHKzZx5GHSsDerFHMZ9j_LXAXnSaITSvv67iPe3MEU,21095
@@ -19,30 +21,30 @@ prediction_market_agent_tooling/deploy/constants.py,sha256=M5ty8URipYMGe_G-RzxRy
19
21
  prediction_market_agent_tooling/deploy/gcp/deploy.py,sha256=CYUgnfy-9XVk04kkxA_5yp0GE9Mw5caYqlFUZQ2j3ks,3739
20
22
  prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py,sha256=qYIHRxQLac3yxtZ8ChikiPG9O1aUQucHW0muTSm1nto,2627
21
23
  prediction_market_agent_tooling/deploy/gcp/utils.py,sha256=oyW0jgrUT2Tr49c7GlpcMsYNQjoCSOcWis3q-MmVAhU,6089
22
- prediction_market_agent_tooling/gtypes.py,sha256=lbV2nsPyhMIRI9olx0_6A06jwTWKYBPGMxyiGVFysag,2467
24
+ prediction_market_agent_tooling/gtypes.py,sha256=ezM2iAycTRJ0uHKK03s0z76a8YFSF438kjOwT_BAqz4,2474
23
25
  prediction_market_agent_tooling/loggers.py,sha256=ua9rynYmsbOJZjxPIFxRBooomeN08zuLSJ7lxZMDS7w,3133
24
- prediction_market_agent_tooling/markets/agent_market.py,sha256=4xMZSiNdr5NiJxuPWqhA6tnl4VloAxSpLvQdY7ySwAA,8393
26
+ prediction_market_agent_tooling/markets/agent_market.py,sha256=BELq6x3F4xLZwi0XmoN84RA7ttRQIclyHL2CY6a4Ixc,8409
25
27
  prediction_market_agent_tooling/markets/categorize.py,sha256=HyKSFHXPL7Hfe90ahbF7xszamYREUVrPkLcpifw1V9Y,935
26
28
  prediction_market_agent_tooling/markets/data_models.py,sha256=qD0LyFkzimaMkDVE0QO2a4I9fQ8qpO2qPmVzb-0JBik,2085
27
29
  prediction_market_agent_tooling/markets/manifold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
30
  prediction_market_agent_tooling/markets/manifold/api.py,sha256=AC2zmkzpBU3P4kyybs7CgPbDg4hLAx3GY5mjgDi7qDo,7221
29
31
  prediction_market_agent_tooling/markets/manifold/data_models.py,sha256=jHqOzOiN21wYvDNyh4VtbGtj4adWr6vA4liOQmh24cc,6239
30
- prediction_market_agent_tooling/markets/manifold/manifold.py,sha256=ai82Ozzx-BdtIDvORmepODh3S-EeyAvYBQyQUEarMLg,4179
32
+ prediction_market_agent_tooling/markets/manifold/manifold.py,sha256=7vLi3KT-Qqq523gb4AZxgbvuB0deSqS5KQYiLwCiMl4,4194
31
33
  prediction_market_agent_tooling/markets/manifold/utils.py,sha256=cPPFWXm3vCYH1jy7_ctJZuQH9ZDaPL4_AgAYzGWkoow,513
32
34
  prediction_market_agent_tooling/markets/markets.py,sha256=Hz3E7LJ5HIjCHQtdU5_Bymav2dYT0dDxKOL0i8mV0mg,3142
33
35
  prediction_market_agent_tooling/markets/metaculus/api.py,sha256=gvPQVAM5NlCyWzEMt4WML9saRBsK9eiHAZP6jwirVqc,2750
34
36
  prediction_market_agent_tooling/markets/metaculus/data_models.py,sha256=6TBy17xntdLBR61QCE5wddwTa_k2D0D8ZgK6p7sGUuc,2448
35
37
  prediction_market_agent_tooling/markets/metaculus/metaculus.py,sha256=uNF7LP4evvubk818g2zbX1VlnFxeUQOkNgx_e_LwaJA,3416
36
38
  prediction_market_agent_tooling/markets/omen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- prediction_market_agent_tooling/markets/omen/data_models.py,sha256=oY-5wvFR4lXaTsmXVKrqrAQ8TWd-mAHLaxI1ETatLOc,14477
38
- prediction_market_agent_tooling/markets/omen/omen.py,sha256=GSuUP8gjFKy6zp2dfq5AGlzu5T7B08cFdjjlw07rSdU,39114
39
- prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=JGXCO9MIVr-DGyoH2sxReAw7ZDTC_ev0UxDpq1QBv5Q,21854
40
- prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=kXXU-tir6Bwvgrc7P9nX4hZELahI79DoJy_7DMAoe4M,9035
41
- prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=kDbeZ8ImLtBSFz0GoGdCqeC1Xd3_eGMAxvmLFT8kp8Y,25222
39
+ prediction_market_agent_tooling/markets/omen/data_models.py,sha256=fpYxaslKq48lpNDsFUHcggY5geZIAKWDfC9FwUgIstE,14539
40
+ prediction_market_agent_tooling/markets/omen/omen.py,sha256=_H_1huaCXTpmDUmHaHqIQoCbIrrMATHeXXdkw5BHu1s,40713
41
+ prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=BmIWFvQ-CM355eHmRrKipS_FcYc6TEISv2l2r45qHAU,22790
42
+ prediction_market_agent_tooling/markets/omen/omen_resolving.py,sha256=tXTJM_HNefODAJSGU_w1OklZ457ZMAjL6dC0EvkUYQ8,9450
43
+ prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=s-CHD1DuWyGv1_KfxNZv8fmBft60528b51nZ5XANzpU,25692
42
44
  prediction_market_agent_tooling/markets/polymarket/api.py,sha256=HXmA1akA0qDj0m3e-GEvWG8x75pm6BX4H7YJPQcST7I,4767
43
45
  prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=9CJzakyEcsn6DQBK2nOXjOMzTZBLAmK_KqevXvW17DI,4292
44
46
  prediction_market_agent_tooling/markets/polymarket/data_models_web.py,sha256=yK0uxLQrwImVAXbvwscdmxTjSxMpAjCcN760EWEK_8M,11914
45
- prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=xGJejGYoDbLBfXabhOI85ZMNnAMsWTedCCPKP6KfGno,2721
47
+ prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=f7r79fAhLzwS22urfuhVW1Si2m2pZrr5r45WNt-Q3VU,2737
46
48
  prediction_market_agent_tooling/markets/polymarket/utils.py,sha256=m4JG6WULh5epCJt4XBMHg0ae5NoVhqlOvAl0A7DR9iM,2023
47
49
  prediction_market_agent_tooling/monitor/langfuse/langfuse_wrapper.py,sha256=b6T69YB1x8kSUvW9uRFuSWPLOrXzapZG7m5O5SU0QTQ,895
48
50
  prediction_market_agent_tooling/monitor/markets/manifold.py,sha256=GdYpgRX1GahDi-75Mr53jgtEg6nWcs_rHDUkg4o_7dQ,3352
@@ -59,7 +61,7 @@ prediction_market_agent_tooling/tools/betting_strategies/market_moving.py,sha256
59
61
  prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py,sha256=-FUSuQQgjcWSSnoFxnlAyTeilY6raJABJVM2QKkFqAY,438
60
62
  prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py,sha256=THMXwFlskvzbjnX_OiYtDSzI8XVFyULWfP2525_9UGc,429
61
63
  prediction_market_agent_tooling/tools/cache.py,sha256=tGHHd9HCiE_hCCtPtloHZQdDfBuiow9YsqJNYi2Tx_0,499
62
- prediction_market_agent_tooling/tools/contract.py,sha256=fWYQAJhLLBasEJCiJqZEiXOgJ3dO9Mknppdsd1gHchc,6999
64
+ prediction_market_agent_tooling/tools/contract.py,sha256=vjkPeZszvco_IAITp1GUfCZ3X8HrSol4GCDDa8TFFvw,17100
63
65
  prediction_market_agent_tooling/tools/costs.py,sha256=EaAJ7v9laD4VEV3d8B44M4u3_oEO_H16jRVCdoZ93Uw,954
64
66
  prediction_market_agent_tooling/tools/gnosis_rpc.py,sha256=_MYSoyOR2MgAJkop1ERf8RhLum-M8S6OjaAsaqUW41w,203
65
67
  prediction_market_agent_tooling/tools/google.py,sha256=SfVDxb3oEOUK8mpd0l3mTX9ybrdrTPNM6HjfJ7kfNjA,1794
@@ -73,8 +75,8 @@ prediction_market_agent_tooling/tools/singleton.py,sha256=CiIELUiI-OeS7U7eeHEt0r
73
75
  prediction_market_agent_tooling/tools/streamlit_user_login.py,sha256=NXEqfjT9Lc9QtliwSGRASIz1opjQ7Btme43H4qJbzgE,3010
74
76
  prediction_market_agent_tooling/tools/utils.py,sha256=JE9YWtPPhnTgLiOyGAZDNG5K8nCwUY9IZEuAlm9UcxA,6611
75
77
  prediction_market_agent_tooling/tools/web3_utils.py,sha256=nKRHmdLnWSKd3wpo-cysXGvhhrJ2Yf69sN2FFQfSt6s,10578
76
- prediction_market_agent_tooling-0.43.2.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
77
- prediction_market_agent_tooling-0.43.2.dist-info/METADATA,sha256=5Quxa1Np-dUlu07Lf34LIqKiEBIxDy3Mb2YVFq9Bd1k,7634
78
- prediction_market_agent_tooling-0.43.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
79
- prediction_market_agent_tooling-0.43.2.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
80
- prediction_market_agent_tooling-0.43.2.dist-info/RECORD,,
78
+ prediction_market_agent_tooling-0.43.4.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
79
+ prediction_market_agent_tooling-0.43.4.dist-info/METADATA,sha256=3-3qr88s5tHIqW1_h8tK8HCP5ayx-GANQyPFGCNkS_k,7634
80
+ prediction_market_agent_tooling-0.43.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
81
+ prediction_market_agent_tooling-0.43.4.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
82
+ prediction_market_agent_tooling-0.43.4.dist-info/RECORD,,