prediction-market-agent-tooling 0.34.0__tar.gz → 0.35.0__tar.gz

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 (72) hide show
  1. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/PKG-INFO +1 -1
  2. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/omen/omen.py +43 -4
  3. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/utils.py +33 -0
  4. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/pyproject.toml +1 -1
  5. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/LICENSE +0 -0
  6. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/README.md +0 -0
  7. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/abis/erc20.abi.json +0 -0
  8. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/abis/omen_dxdao.abi.json +0 -0
  9. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/abis/omen_fpmm.abi.json +0 -0
  10. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/abis/omen_fpmm_conditionaltokens.abi.json +0 -0
  11. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/abis/omen_fpmm_factory.abi.json +0 -0
  12. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/abis/omen_kleros.abi.json +0 -0
  13. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/abis/omen_oracle.abi.json +0 -0
  14. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/abis/omen_realitio.abi.json +0 -0
  15. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/abis/wxdai.abi.json +0 -0
  16. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/benchmark/__init__.py +0 -0
  17. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/benchmark/agents.py +0 -0
  18. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/benchmark/benchmark.py +0 -0
  19. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/benchmark/utils.py +0 -0
  20. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/config.py +0 -0
  21. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/deploy/agent.py +0 -0
  22. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/deploy/agent_example.py +0 -0
  23. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/deploy/constants.py +0 -0
  24. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/deploy/gcp/deploy.py +0 -0
  25. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py +0 -0
  26. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/deploy/gcp/utils.py +0 -0
  27. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/gtypes.py +0 -0
  28. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/loggers.py +0 -0
  29. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/agent_market.py +0 -0
  30. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/categorize.py +0 -0
  31. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/data_models.py +0 -0
  32. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/manifold/__init__.py +0 -0
  33. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/manifold/api.py +0 -0
  34. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/manifold/data_models.py +0 -0
  35. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/manifold/manifold.py +0 -0
  36. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/manifold/utils.py +0 -0
  37. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/markets.py +0 -0
  38. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/omen/__init__.py +0 -0
  39. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/omen/data_models.py +0 -0
  40. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/omen/omen_contracts.py +0 -0
  41. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/omen/omen_resolving.py +0 -0
  42. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py +0 -0
  43. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/polymarket/api.py +0 -0
  44. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/polymarket/data_models.py +0 -0
  45. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/polymarket/data_models_web.py +0 -0
  46. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/polymarket/polymarket.py +0 -0
  47. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/markets/polymarket/utils.py +0 -0
  48. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/monitor/langfuse/langfuse_wrapper.py +0 -0
  49. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/monitor/markets/manifold.py +0 -0
  50. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/monitor/markets/omen.py +0 -0
  51. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/monitor/markets/polymarket.py +0 -0
  52. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/monitor/monitor.py +0 -0
  53. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/monitor/monitor_app.py +0 -0
  54. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/monitor/monitor_settings.py +0 -0
  55. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/py.typed +0 -0
  56. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/balances.py +0 -0
  57. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/betting_strategies/kelly_criterion.py +0 -0
  58. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/betting_strategies/market_moving.py +0 -0
  59. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py +0 -0
  60. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py +0 -0
  61. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/cache.py +0 -0
  62. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/contract.py +0 -0
  63. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/costs.py +0 -0
  64. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/gnosis_rpc.py +0 -0
  65. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/google.py +0 -0
  66. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/hexbytes_custom.py +0 -0
  67. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/is_predictable.py +0 -0
  68. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/parallelism.py +0 -0
  69. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/safe.py +0 -0
  70. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/singleton.py +0 -0
  71. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/streamlit_user_login.py +0 -0
  72. {prediction_market_agent_tooling-0.34.0 → prediction_market_agent_tooling-0.35.0}/prediction_market_agent_tooling/tools/web3_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.34.0
3
+ Version: 0.35.0
4
4
  Summary: Tools to benchmark, deploy and monitor prediction market agents.
5
5
  Author: Gnosis
6
6
  Requires-Python: >=3.10,<3.12
@@ -10,6 +10,7 @@ from prediction_market_agent_tooling.gtypes import (
10
10
  ChecksumAddress,
11
11
  HexAddress,
12
12
  HexStr,
13
+ OmenOutcomeToken,
13
14
  OutcomeStr,
14
15
  Probability,
15
16
  Wei,
@@ -54,7 +55,10 @@ from prediction_market_agent_tooling.markets.omen.omen_subgraph_handler import (
54
55
  )
55
56
  from prediction_market_agent_tooling.tools.balances import get_balances
56
57
  from prediction_market_agent_tooling.tools.hexbytes_custom import HexBytes
57
- from prediction_market_agent_tooling.tools.utils import check_not_none
58
+ from prediction_market_agent_tooling.tools.utils import (
59
+ calculate_sell_amount_in_collateral,
60
+ check_not_none,
61
+ )
58
62
  from prediction_market_agent_tooling.tools.web3_utils import (
59
63
  add_fraction,
60
64
  remove_fraction,
@@ -80,6 +84,8 @@ class OmenAgentMarket(AgentMarket):
80
84
  finalized_time: datetime | None
81
85
  created_time: datetime
82
86
  close_time: datetime
87
+ outcome_token_amounts: list[OmenOutcomeToken]
88
+ fee: float # proportion, from 0 to 1
83
89
 
84
90
  INVALID_MARKET_ANSWER: HexStr = HexStr(
85
91
  "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
@@ -155,19 +161,50 @@ class OmenAgentMarket(AgentMarket):
155
161
  web3=web3,
156
162
  )
157
163
 
164
+ def calculate_sell_amount_in_collateral(
165
+ self, amount: TokenAmount, outcome: bool
166
+ ) -> xDai:
167
+ if len(self.outcome_token_amounts) != 2:
168
+ raise ValueError(
169
+ f"Market {self.id} has {len(self.outcome_token_amounts)} "
170
+ f"outcomes. This method only supports binary markets."
171
+ )
172
+ sell_index = self.yes_index if outcome else self.no_index
173
+ other_index = self.no_index if outcome else self.yes_index
174
+ collateral = calculate_sell_amount_in_collateral(
175
+ shares_to_sell=amount.amount,
176
+ holdings=wei_to_xdai(Wei(self.outcome_token_amounts[sell_index])),
177
+ other_holdings=wei_to_xdai(Wei(self.outcome_token_amounts[other_index])),
178
+ fee=self.fee,
179
+ )
180
+ return xDai(collateral)
181
+
158
182
  def sell_tokens(
159
- self, outcome: bool, amount: TokenAmount, auto_withdraw: bool = False
183
+ self,
184
+ outcome: bool,
185
+ amount: TokenAmount,
186
+ auto_withdraw: bool = False,
187
+ api_keys: APIKeys | None = None,
188
+ web3: Web3 | None = None,
160
189
  ) -> None:
161
190
  if not self.can_be_traded():
162
191
  raise ValueError(
163
192
  f"Market {self.id} is not open for trading. Cannot sell tokens."
164
193
  )
194
+
195
+ # Convert from token (i.e. share) number to xDai value of tokens, as
196
+ # this is the expected unit of the argument in the smart contract.
197
+ collateral = self.calculate_sell_amount_in_collateral(
198
+ amount=amount,
199
+ outcome=outcome,
200
+ )
165
201
  binary_omen_sell_outcome_tx(
166
- api_keys=APIKeys(),
167
- amount=xDai(amount.amount),
202
+ amount=collateral,
203
+ api_keys=api_keys if api_keys is not None else APIKeys(),
168
204
  market=self,
169
205
  binary_outcome=outcome,
170
206
  auto_withdraw=auto_withdraw,
207
+ web3=web3,
171
208
  )
172
209
 
173
210
  def was_any_bet_outcome_correct(
@@ -245,6 +282,8 @@ class OmenAgentMarket(AgentMarket):
245
282
  url=model.url,
246
283
  volume=wei_to_xdai(model.collateralVolume),
247
284
  close_time=model.close_time,
285
+ outcome_token_amounts=model.outcomeTokenAmounts,
286
+ fee=float(wei_to_xdai(model.fee)) if model.fee is not None else 0.0,
248
287
  )
249
288
 
250
289
  @staticmethod
@@ -7,6 +7,7 @@ from typing import Any, NoReturn, Optional, Type, TypeVar, cast
7
7
  import pytz
8
8
  import requests
9
9
  from pydantic import BaseModel, ValidationError
10
+ from scipy.optimize import newton
10
11
  from scipy.stats import entropy
11
12
 
12
13
  from prediction_market_agent_tooling.gtypes import (
@@ -173,3 +174,35 @@ def prob_uncertainty(prob: Probability) -> float:
173
174
  - Market's probability is 0.95, so the market is quite certain about YES: prob_uncertainty(0.95) == 0.286
174
175
  """
175
176
  return float(entropy([prob, 1 - prob], base=2))
177
+
178
+
179
+ def calculate_sell_amount_in_collateral(
180
+ shares_to_sell: float,
181
+ holdings: float,
182
+ other_holdings: float,
183
+ fee: float,
184
+ ) -> float:
185
+ """
186
+ Computes the amount of collateral that needs to be sold to get `shares`
187
+ amount of shares. Returns None if the amount can't be computed.
188
+
189
+ Taken from https://github.com/protofire/omen-exchange/blob/29d0ab16bdafa5cc0d37933c1c7608a055400c73/app/src/util/tools/fpmm/trading/index.ts#L99
190
+ Simplified for binary markets.
191
+ """
192
+
193
+ if not (0 <= fee < 1.0):
194
+ raise ValueError("Fee must be between 0 and 1")
195
+
196
+ for v in [shares_to_sell, holdings, other_holdings]:
197
+ if v <= 0:
198
+ raise ValueError("All share args must be greater than 0")
199
+
200
+ def f(r: float) -> float:
201
+ R = r / (1 - fee)
202
+ first_term = other_holdings - R
203
+ second_term = holdings + shares_to_sell - R
204
+ third_term = holdings * other_holdings
205
+ return (first_term * second_term) - third_term
206
+
207
+ amount_to_sell = newton(f, 0)
208
+ return float(amount_to_sell) * 0.999999 # Avoid rounding errors
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "prediction-market-agent-tooling"
3
- version = "0.34.0"
3
+ version = "0.35.0"
4
4
  description = "Tools to benchmark, deploy and monitor prediction market agents."
5
5
  authors = ["Gnosis"]
6
6
  readme = "README.md"