prediction-market-agent-tooling 0.14.1__py3-none-any.whl → 0.15.0__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 (28) hide show
  1. prediction_market_agent_tooling/abis/erc20.abi.json +315 -0
  2. prediction_market_agent_tooling/benchmark/agents.py +7 -1
  3. prediction_market_agent_tooling/benchmark/benchmark.py +22 -24
  4. prediction_market_agent_tooling/config.py +27 -4
  5. prediction_market_agent_tooling/deploy/agent.py +3 -3
  6. prediction_market_agent_tooling/markets/agent_market.py +20 -9
  7. prediction_market_agent_tooling/markets/manifold/manifold.py +9 -1
  8. prediction_market_agent_tooling/markets/omen/data_models.py +42 -11
  9. prediction_market_agent_tooling/markets/omen/omen.py +135 -52
  10. prediction_market_agent_tooling/markets/omen/omen_contracts.py +36 -34
  11. prediction_market_agent_tooling/markets/omen/omen_replicate.py +11 -16
  12. prediction_market_agent_tooling/markets/omen/omen_resolve_replicated.py +32 -25
  13. prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py +46 -13
  14. prediction_market_agent_tooling/markets/polymarket/polymarket.py +1 -1
  15. prediction_market_agent_tooling/monitor/markets/omen.py +5 -3
  16. prediction_market_agent_tooling/monitor/markets/polymarket.py +3 -2
  17. prediction_market_agent_tooling/monitor/monitor.py +26 -20
  18. prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py +1 -1
  19. prediction_market_agent_tooling/tools/contract.py +32 -17
  20. prediction_market_agent_tooling/tools/costs.py +31 -0
  21. prediction_market_agent_tooling/tools/parallelism.py +16 -1
  22. prediction_market_agent_tooling/tools/safe.py +130 -0
  23. prediction_market_agent_tooling/tools/web3_utils.py +100 -15
  24. {prediction_market_agent_tooling-0.14.1.dist-info → prediction_market_agent_tooling-0.15.0.dist-info}/METADATA +13 -1
  25. {prediction_market_agent_tooling-0.14.1.dist-info → prediction_market_agent_tooling-0.15.0.dist-info}/RECORD +28 -25
  26. {prediction_market_agent_tooling-0.14.1.dist-info → prediction_market_agent_tooling-0.15.0.dist-info}/LICENSE +0 -0
  27. {prediction_market_agent_tooling-0.14.1.dist-info → prediction_market_agent_tooling-0.15.0.dist-info}/WHEEL +0 -0
  28. {prediction_market_agent_tooling-0.14.1.dist-info → prediction_market_agent_tooling-0.15.0.dist-info}/entry_points.txt +0 -0
@@ -2,6 +2,9 @@ from typing import Any, Optional, TypeVar
2
2
 
3
3
  import tenacity
4
4
  from eth_account import Account
5
+ from eth_typing import URI
6
+ from gnosis.eth import EthereumClient
7
+ from gnosis.safe.safe import Safe
5
8
  from loguru import logger
6
9
  from pydantic.types import SecretStr
7
10
  from web3 import Web3
@@ -104,6 +107,42 @@ def call_function_on_contract(
104
107
  return output
105
108
 
106
109
 
110
+ def prepare_tx(
111
+ web3: Web3,
112
+ contract_address: ChecksumAddress,
113
+ contract_abi: ABI,
114
+ from_address: ChecksumAddress | None,
115
+ function_name: str,
116
+ function_params: Optional[list[Any] | dict[str, Any]] = None,
117
+ tx_params: Optional[TxParams] = None,
118
+ ) -> TxParams:
119
+ contract = web3.eth.contract(address=contract_address, abi=contract_abi)
120
+
121
+ # Fill in required defaults, if not provided.
122
+ tx_params_new = TxParams()
123
+ if tx_params:
124
+ tx_params_new.update(tx_params)
125
+
126
+ if not tx_params_new.get("from") and not from_address:
127
+ raise ValueError(
128
+ "Cannot have both tx_params[`from`] and from_address not defined."
129
+ )
130
+
131
+ if not tx_params_new.get("from") and from_address:
132
+ tx_params_new["from"] = from_address
133
+
134
+ if not tx_params_new.get("nonce"):
135
+ from_checksummed = Web3.to_checksum_address(tx_params_new["from"])
136
+ tx_params_new["nonce"] = web3.eth.get_transaction_count(from_checksummed)
137
+
138
+ # Build the transaction.
139
+ function_call = contract.functions[function_name](*parse_function_params(function_params)) # type: ignore # TODO: Fix Mypy, as this works just OK.
140
+ tx_params_new = function_call.build_transaction(tx_params_new)
141
+ gas = web3.eth.estimate_gas(tx_params_new)
142
+ tx_params_new["gas"] = gas
143
+ return tx_params_new
144
+
145
+
107
146
  @tenacity.retry(
108
147
  # Retry only for the transaction errors that match the given patterns,
109
148
  # add other retrieable errors gradually to be safe.
@@ -118,7 +157,6 @@ def call_function_on_contract(
118
157
  )
119
158
  def send_function_on_contract_tx(
120
159
  web3: Web3,
121
- *,
122
160
  contract_address: ChecksumAddress,
123
161
  contract_abi: ABI,
124
162
  from_private_key: PrivateKey,
@@ -127,23 +165,20 @@ def send_function_on_contract_tx(
127
165
  tx_params: Optional[TxParams] = None,
128
166
  timeout: int = 180,
129
167
  ) -> TxReceipt:
130
- contract = web3.eth.contract(address=contract_address, abi=contract_abi)
131
-
132
- from_address = private_key_to_public_key(from_private_key)
133
-
134
- # Fill in required defaults, if not provided.
135
- tx_params = tx_params or {}
136
- tx_params["nonce"] = tx_params.get(
137
- "nonce", web3.eth.get_transaction_count(from_address)
168
+ public_key = private_key_to_public_key(from_private_key)
169
+
170
+ tx_params = prepare_tx(
171
+ web3=web3,
172
+ contract_address=contract_address,
173
+ contract_abi=contract_abi,
174
+ from_address=public_key,
175
+ function_name=function_name,
176
+ function_params=function_params,
177
+ tx_params=tx_params,
138
178
  )
139
- tx_params["from"] = tx_params.get("from", from_address)
140
-
141
- # Build the transaction.
142
- function_call = contract.functions[function_name](*parse_function_params(function_params)) # type: ignore # TODO: Fix Mypy, as this works just OK.
143
- tx = function_call.build_transaction(tx_params)
144
179
  # Sign with the private key.
145
180
  signed_tx = web3.eth.account.sign_transaction(
146
- tx, private_key=from_private_key.get_secret_value()
181
+ tx_params, private_key=from_private_key.get_secret_value()
147
182
  )
148
183
  # Send the signed transaction.
149
184
  send_tx = web3.eth.send_raw_transaction(signed_tx.rawTransaction)
@@ -152,3 +187,53 @@ def send_function_on_contract_tx(
152
187
  # Verify it didn't fail.
153
188
  check_tx_receipt(receipt_tx)
154
189
  return receipt_tx
190
+
191
+
192
+ @tenacity.retry(
193
+ # Retry only for the transaction errors that match the given patterns,
194
+ # add other retrieable errors gradually to be safe.
195
+ retry=tenacity.retry_if_exception_message(
196
+ match="(.*wrong transaction nonce.*)|(.*Invalid.*)|(.*OldNonce.*)"
197
+ ),
198
+ wait=tenacity.wait_chain(*[tenacity.wait_fixed(n) for n in range(1, 10)]),
199
+ stop=tenacity.stop_after_attempt(9),
200
+ after=lambda x: logger.debug(
201
+ f"send_function_on_contract_tx_using_safe failed, {x.attempt_number=}."
202
+ ),
203
+ )
204
+ def send_function_on_contract_tx_using_safe(
205
+ web3: Web3,
206
+ contract_address: ChecksumAddress,
207
+ contract_abi: ABI,
208
+ from_private_key: PrivateKey,
209
+ safe_address: ChecksumAddress,
210
+ function_name: str,
211
+ function_params: Optional[list[Any] | dict[str, Any]] = None,
212
+ tx_params: Optional[TxParams] = None,
213
+ timeout: int = 180,
214
+ ) -> TxReceipt:
215
+ tx_params = prepare_tx(
216
+ web3=web3,
217
+ contract_address=contract_address,
218
+ contract_abi=contract_abi,
219
+ from_address=safe_address,
220
+ function_name=function_name,
221
+ function_params=function_params,
222
+ tx_params=tx_params,
223
+ )
224
+
225
+ if not web3.provider.endpoint_uri: # type: ignore
226
+ raise EnvironmentError(f"RPC_URL not available in web3 object.")
227
+ ethereum_client = EthereumClient(ethereum_node_url=URI(web3.provider.endpoint_uri)) # type: ignore
228
+ s = Safe(safe_address, ethereum_client) # type: ignore
229
+ safe_tx = s.build_multisig_tx(
230
+ to=Web3.to_checksum_address(tx_params["to"]),
231
+ data=HexBytes(tx_params["data"]),
232
+ value=tx_params["value"],
233
+ )
234
+ safe_tx.sign(from_private_key.get_secret_value())
235
+ safe_tx.call() # simulate call
236
+ tx_hash, tx = safe_tx.execute(from_private_key.get_secret_value())
237
+ receipt_tx = web3.eth.wait_for_transaction_receipt(tx_hash, timeout=timeout)
238
+ check_tx_receipt(receipt_tx)
239
+ return receipt_tx
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prediction-market-agent-tooling
3
- Version: 0.14.1
3
+ Version: 0.15.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
@@ -11,6 +11,7 @@ Provides-Extra: google
11
11
  Provides-Extra: langchain
12
12
  Requires-Dist: autoflake (>=2.2.1,<3.0.0)
13
13
  Requires-Dist: cron-validator (>=1.0.8,<2.0.0)
14
+ Requires-Dist: eth-account (>=0.8.0,<0.9.0)
14
15
  Requires-Dist: eth-typing (>=3.0.0,<4.0.0)
15
16
  Requires-Dist: functions-framework (>=3.5.0,<4.0.0)
16
17
  Requires-Dist: google-api-python-client (==2.95.0) ; extra == "google"
@@ -24,8 +25,11 @@ Requires-Dist: langchain-openai (>=0.0.5,<0.0.6) ; extra == "langchain"
24
25
  Requires-Dist: loguru (>=0.7.2,<0.8.0)
25
26
  Requires-Dist: mech-client (>=0.2.13,<0.3.0)
26
27
  Requires-Dist: numpy (>=1.26.4,<2.0.0)
28
+ Requires-Dist: prompt-toolkit (>=3.0.43,<4.0.0)
27
29
  Requires-Dist: pydantic (>=2.6.1,<3.0.0)
28
30
  Requires-Dist: pydantic-settings (>=2.1.0,<3.0.0)
31
+ Requires-Dist: safe-cli (>=1.0.0,<2.0.0)
32
+ Requires-Dist: safe-eth-py (>=6.0.0b14,<7.0.0)
29
33
  Requires-Dist: scikit-learn (>=1.4.0,<2.0.0)
30
34
  Requires-Dist: streamlit (>=1.31.0,<2.0.0)
31
35
  Requires-Dist: subgrounds (>=1.8.1,<2.0.0)
@@ -104,6 +108,14 @@ class DeployableCoinFlipAgent(DeployableAgent):
104
108
  DeployableCoinFlipAgent().deploy_gcp(...)
105
109
  ```
106
110
 
111
+ For deploying a Safe manually for a given agent, run the script below:
112
+
113
+ ```commandline
114
+ poetry run python scripts/create_safe_for_agent.py --from-private-key <YOUR_AGENT_PRIVATE_KEY> --salt-nonce 42
115
+ ```
116
+ This will output the newly created Safe in the terminal, and it can then be copied over to the deployment part (e.g. Terraform).
117
+ Note that `salt_nonce` can be passed so that the created safe is deterministically created for each agent, so that, if the same `salt_nonce` is used, the script will not create a new Safe for the agent, instead it will output the previously existent Safe.
118
+
107
119
  ## Monitoring
108
120
 
109
121
  Monitor the performance of the agents deployed to GCP, as well as meta-metrics of the prediction market platforms they are deployed to.
@@ -1,3 +1,4 @@
1
+ prediction_market_agent_tooling/abis/erc20.abi.json,sha256=jdWxiSALAJEwvIWE8VLNs82hnxl9UGWNyw80CNeS8ic,5461
1
2
  prediction_market_agent_tooling/abis/omen_dxdao.abi.json,sha256=Z1kD1QfgYfGwsZEI2UFDNEGZ4hMOix3HGICk8xlO4Ds,9578
2
3
  prediction_market_agent_tooling/abis/omen_fpmm.abi.json,sha256=CDib_b5PVj4m0JBVCB20cTshiVx8st1Be-7E460qFoY,11406
3
4
  prediction_market_agent_tooling/abis/omen_fpmm_conditionaltokens.abi.json,sha256=ux30hTxtZiOZ86FsTEK8Xnm910iyjB1CFnkXrCbhfm8,9841
@@ -7,62 +8,64 @@ prediction_market_agent_tooling/abis/omen_oracle.abi.json,sha256=YPZ-FLvd4PA9pYd
7
8
  prediction_market_agent_tooling/abis/omen_realitio.abi.json,sha256=7HmFkBF_rq83UTaH2kRRsEfc_WZuf4n-qvkB4nhvweo,15953
8
9
  prediction_market_agent_tooling/abis/wxdai.abi.json,sha256=m3qC06Yug-pToI0lSFe1f8e6gKMIulnV3MA2K0X51hI,6055
9
10
  prediction_market_agent_tooling/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- prediction_market_agent_tooling/benchmark/agents.py,sha256=YZidRshIxhbj7NLLKcny5ezMhv-JBvIU0uwmfaD93AU,3737
11
- prediction_market_agent_tooling/benchmark/benchmark.py,sha256=0lcVX65IGyrGo0WHtOwBh5NFdSEY0M2wS8CB55CcYos,21237
11
+ prediction_market_agent_tooling/benchmark/agents.py,sha256=HtZGjY0En7lmUaLyynZSNO_YjsCg-hlRi6YQ4ZGQyHc,3829
12
+ prediction_market_agent_tooling/benchmark/benchmark.py,sha256=xiHKzZx5GHSsDerFHMZ9j_LXAXnSaITSvv67iPe3MEU,21095
12
13
  prediction_market_agent_tooling/benchmark/utils.py,sha256=tV9eN71aFQnNU7jXsBDSbuz6VoYyvHqJL1ezyXViyHM,2754
13
- prediction_market_agent_tooling/config.py,sha256=od-liDKWT-nZFj5BU4tC-Cho29t4AGdDrnIZettdVHM,2851
14
- prediction_market_agent_tooling/deploy/agent.py,sha256=gIQkmZIX08Vov9AJGDrlFb5TmQnCnwT46MZGuGtSb6I,7725
14
+ prediction_market_agent_tooling/config.py,sha256=Cvl9RWlOEPRzdSE7-ChTyKSMNTgNoOYmtJ0lT5yDqpE,3570
15
+ prediction_market_agent_tooling/deploy/agent.py,sha256=ju-BDe8Ek1mTLWMoIyp_LLcNt2KhxgITa0O8OtgW_ko,7788
15
16
  prediction_market_agent_tooling/deploy/agent_example.py,sha256=vwswPCOutCG9vIqJT5lBcI1FZy3QRkNyVbNIJdn6wvk,652
16
17
  prediction_market_agent_tooling/deploy/constants.py,sha256=M5ty8URipYMGe_G-RzxRydK3AFL6CyvmqCraJUrLBnE,82
17
18
  prediction_market_agent_tooling/deploy/gcp/deploy.py,sha256=CYUgnfy-9XVk04kkxA_5yp0GE9Mw5caYqlFUZQ2j3ks,3739
18
19
  prediction_market_agent_tooling/deploy/gcp/kubernetes_models.py,sha256=qYIHRxQLac3yxtZ8ChikiPG9O1aUQucHW0muTSm1nto,2627
19
20
  prediction_market_agent_tooling/deploy/gcp/utils.py,sha256=oyW0jgrUT2Tr49c7GlpcMsYNQjoCSOcWis3q-MmVAhU,6089
20
21
  prediction_market_agent_tooling/gtypes.py,sha256=xGSJXw12hzp8LwvQ956l01GiZMWd07MZTYqo8CXVeLY,2417
21
- prediction_market_agent_tooling/markets/agent_market.py,sha256=lAJwBS6GjMwkM_mwLTfXVgBPJBw0go_qNCV4-b4kjVQ,5288
22
+ prediction_market_agent_tooling/markets/agent_market.py,sha256=qeuIXEujziDu_gQPvMiHsGSejhkPQtHhO_E7l16NOL0,5997
22
23
  prediction_market_agent_tooling/markets/categorize.py,sha256=yTd-lDMPW4ESDSzmxeLLBuzLX0FggOF7Vbswh7295o0,941
23
24
  prediction_market_agent_tooling/markets/data_models.py,sha256=uODY3aoFp8YYeLAUcrzMk1yU8pIKsTLobB9xIEGTmKs,1170
24
25
  prediction_market_agent_tooling/markets/manifold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
26
  prediction_market_agent_tooling/markets/manifold/api.py,sha256=K79zWSqBs3rpkZwpp6moKkPBB81p5jWn1wFuk-rLVi4,7274
26
27
  prediction_market_agent_tooling/markets/manifold/data_models.py,sha256=2DZIxwtDp-PH0UWTGiktMFIGAAQoVutI07UsxjNyTyE,5296
27
- prediction_market_agent_tooling/markets/manifold/manifold.py,sha256=Ehk-JWXa78TotIAsEvH8Rsu1Q47rvi7boC44rQP8w4I,3497
28
+ prediction_market_agent_tooling/markets/manifold/manifold.py,sha256=DJZ88r5BGtAugUw5SIyDfzK1S70titba_fwT7OYXuAY,3896
28
29
  prediction_market_agent_tooling/markets/manifold/utils.py,sha256=cPPFWXm3vCYH1jy7_ctJZuQH9ZDaPL4_AgAYzGWkoow,513
29
30
  prediction_market_agent_tooling/markets/markets.py,sha256=pIYIlTAvXGrGh1XxNlHJQPEGi36_DHQ-WN2m0TCjEn0,1575
30
31
  prediction_market_agent_tooling/markets/omen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- prediction_market_agent_tooling/markets/omen/data_models.py,sha256=e-C2_FSn4wqt-L5QsSnT5vjUEdnX352ir6dJE9lydVc,12950
32
- prediction_market_agent_tooling/markets/omen/omen.py,sha256=avATUx7PqnvA_wlnfaYb_IStEqhGqTazo4hLaemQWOM,28263
33
- prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=OFKRpt59iVGvBCUScj0iGJJuqQwkjRefxhM58tOy57E,19354
34
- prediction_market_agent_tooling/markets/omen/omen_replicate.py,sha256=VOvatdK_9OMrYhF1f_7DL8c-kcUDuzUWa5VbKpR6LfQ,7427
35
- prediction_market_agent_tooling/markets/omen/omen_resolve_replicated.py,sha256=5Aqpl99TIXPbV7oL7qyrxPZd2hdl7rz1yhqSGKioUB4,11187
36
- prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=G1Fk2BLEk3VVAgXJIKfZ8PaMo8KEMvQpX1N9Dg_tSjw,20882
32
+ prediction_market_agent_tooling/markets/omen/data_models.py,sha256=g6A_DQ54m-_3XQO02AM4NliDycsgYvg8hgpt8Dri5cg,14111
33
+ prediction_market_agent_tooling/markets/omen/omen.py,sha256=aZhz2dRFYuAP2h1TlrPWN4lIuOrSvvCjXV-3WcP3TG4,31392
34
+ prediction_market_agent_tooling/markets/omen/omen_contracts.py,sha256=vblZAS_aWTSB6I5LDx_E7hg5gyvocs1I9qxSfxM8YfM,19733
35
+ prediction_market_agent_tooling/markets/omen/omen_replicate.py,sha256=1Yp8vpuZS15kIMPKqMxH0vrvXOsStI4KVA2DrS4V134,7409
36
+ prediction_market_agent_tooling/markets/omen/omen_resolve_replicated.py,sha256=v6fRGv3Loy5PARoRyyAiCNY2TvKGE-Jxr27-1i-D40A,11356
37
+ prediction_market_agent_tooling/markets/omen/omen_subgraph_handler.py,sha256=F2JyAYqCR4REOnFB2cngbngh7ib7SMt0VtFw7mGt2Yc,22266
37
38
  prediction_market_agent_tooling/markets/polymarket/api.py,sha256=p1JkqL9kF8C04qbmqFzF0hgtzD5kN3yup2hYOjxazQ4,4188
38
39
  prediction_market_agent_tooling/markets/polymarket/data_models.py,sha256=srTl8-0FM76AGLRDWzjLpf46ikWloaBCgkn0XqZoKCI,4248
39
40
  prediction_market_agent_tooling/markets/polymarket/data_models_web.py,sha256=ueL_sNYZO5vC8fTsqp7xfjNa7eJQVYkm_kM50HSoQbY,10854
40
- prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=khbFEqtu7ZiydKf0yllwhixPsduSBRjgf6ZUC-ygAaA,2670
41
+ prediction_market_agent_tooling/markets/polymarket/polymarket.py,sha256=zqGfiUOH9f7jmDcQAt30wrHyfmqLMNwCYtotsxFoJmA,2678
41
42
  prediction_market_agent_tooling/markets/polymarket/utils.py,sha256=Gwd2kOK_DrsjtyqgO6ob8oK7tjsB1Yo-Hf7IS5UGnio,1960
42
43
  prediction_market_agent_tooling/monitor/markets/manifold.py,sha256=GdYpgRX1GahDi-75Mr53jgtEg6nWcs_rHDUkg4o_7dQ,3352
43
- prediction_market_agent_tooling/monitor/markets/omen.py,sha256=jOLPnIbDU9syjnYtHfOb2xa6-Ize3vbplgh-8WWkuT4,3323
44
- prediction_market_agent_tooling/monitor/markets/polymarket.py,sha256=I9z9aO1wncyGI3a09ihrw17JkeBKjAuMmC0I9pl_9o4,1781
45
- prediction_market_agent_tooling/monitor/monitor.py,sha256=i_TxNp6OH6_G8D0F5_BX_2_wnaZysdaoslmiKlT4EV0,12633
44
+ prediction_market_agent_tooling/monitor/markets/omen.py,sha256=cYyKdX4qhGo-VqsboOyWHmMyFsdcX899RrHH5oMEwRI,3503
45
+ prediction_market_agent_tooling/monitor/markets/polymarket.py,sha256=j_CHY03LAhg84p-TpwbkuzzIdd5YUWapW3hk7U79Phs,1879
46
+ prediction_market_agent_tooling/monitor/monitor.py,sha256=ZTk1sUmkTN2vK7xRfw1M1ooUYJleIjddVK1OfHS5gSg,13174
46
47
  prediction_market_agent_tooling/monitor/monitor_app.py,sha256=rDxgdDJqSK0ARx0TJFMkS76npkHZJz0__Rp0xTpiRok,4611
47
48
  prediction_market_agent_tooling/monitor/monitor_settings.py,sha256=Xiozs3AsufuJ04JOe1vjUri-IAMWHjjmc2ugGGiHNH4,947
48
49
  prediction_market_agent_tooling/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
50
  prediction_market_agent_tooling/tools/balances.py,sha256=R4oNr2l5wRkQVX-YoQXw5Iw_aLHT-RYxEg3AoxuEwa4,625
50
51
  prediction_market_agent_tooling/tools/betting_strategies/kelly_criterion.py,sha256=IbhQPoKsQnjnag_n_wAL12n8QdCe7tAMRNV2QS8yYxY,3520
51
52
  prediction_market_agent_tooling/tools/betting_strategies/market_moving.py,sha256=0qPFA0hNzgUKt49xovwwFaSYrunFgpWZ0Di1Lo3g5qw,4367
52
- prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py,sha256=hlTvTR_isXegJFWgQefSmv5CkWddLSvKZuDfcvgRVQE,422
53
+ prediction_market_agent_tooling/tools/betting_strategies/minimum_bet_to_win.py,sha256=-FUSuQQgjcWSSnoFxnlAyTeilY6raJABJVM2QKkFqAY,438
53
54
  prediction_market_agent_tooling/tools/betting_strategies/stretch_bet_between.py,sha256=THMXwFlskvzbjnX_OiYtDSzI8XVFyULWfP2525_9UGc,429
54
55
  prediction_market_agent_tooling/tools/cache.py,sha256=tGHHd9HCiE_hCCtPtloHZQdDfBuiow9YsqJNYi2Tx_0,499
55
- prediction_market_agent_tooling/tools/contract.py,sha256=Onm4vy3Tt8uH7w8CweDu6CDpJv8KG4FFmANC37dZzaM,6040
56
+ prediction_market_agent_tooling/tools/contract.py,sha256=xtkhQ2fLtFcrUUsD0TWjILloP2RdrpU5fZ0l9KJAg5s,6760
57
+ prediction_market_agent_tooling/tools/costs.py,sha256=EaAJ7v9laD4VEV3d8B44M4u3_oEO_H16jRVCdoZ93Uw,954
56
58
  prediction_market_agent_tooling/tools/gnosis_rpc.py,sha256=fVHe_7qw5vejx03ThM8p3XMviWND8gs-DHz0IaLywpI,685
57
59
  prediction_market_agent_tooling/tools/google.py,sha256=P-ifiMk7bxQdU1ceON9apcZlw4rLHeOcYwxdeE4Of6Q,1761
58
60
  prediction_market_agent_tooling/tools/hexbytes_custom.py,sha256=Bp94qgPjvjWf1Vb4lNzGFDXRdThw1rJ91vL6r2PWq5E,2096
59
61
  prediction_market_agent_tooling/tools/is_predictable.py,sha256=MkElDkQRd2K3ZoAbqwk9WZluhqGDgx4vdt5cq_DoAz8,2618
60
- prediction_market_agent_tooling/tools/parallelism.py,sha256=OXJ1JB3mqfeCwMHib3nmuj5pSAGQDrJkzQiUPfmINuE,921
62
+ prediction_market_agent_tooling/tools/parallelism.py,sha256=8mgkF5sBwFGS5GMvlpzam82Y3p2swPYuNsywpQuy-a4,1508
63
+ prediction_market_agent_tooling/tools/safe.py,sha256=gNgcY6ugckx3DbupR8VBezDgh1dZXpc8oZlPerZ3Atg,5162
61
64
  prediction_market_agent_tooling/tools/singleton.py,sha256=CiIELUiI-OeS7U7eeHEt0rnVhtQGzwoUdAgn_7u_GBM,729
62
65
  prediction_market_agent_tooling/tools/utils.py,sha256=6MRfLr5xGPEQGobLz_eCsE_p-XaAeOCcmygwgNCIvqE,5044
63
- prediction_market_agent_tooling/tools/web3_utils.py,sha256=FmOBG_8Da9DZXdXtNAc_XKXFR7TECukpJep08fPBHXI,5282
64
- prediction_market_agent_tooling-0.14.1.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
65
- prediction_market_agent_tooling-0.14.1.dist-info/METADATA,sha256=xyiZh2yot-My4XRWv_e1o7DsQvtwe3bs73kg3r8Mkdg,4699
66
- prediction_market_agent_tooling-0.14.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
67
- prediction_market_agent_tooling-0.14.1.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
68
- prediction_market_agent_tooling-0.14.1.dist-info/RECORD,,
66
+ prediction_market_agent_tooling/tools/web3_utils.py,sha256=tl_uN-SpKK4nXpqlSozefzMXpbAe9rFzaCB9IQ0QJxY,8335
67
+ prediction_market_agent_tooling-0.15.0.dist-info/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
68
+ prediction_market_agent_tooling-0.15.0.dist-info/METADATA,sha256=Ei0er6jj362sgd3C_fXOrBhXLpxbqah55n_RKgjaLW8,5468
69
+ prediction_market_agent_tooling-0.15.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
70
+ prediction_market_agent_tooling-0.15.0.dist-info/entry_points.txt,sha256=m8PukHbeH5g0IAAmOf_1Ahm-sGAMdhSSRQmwtpmi2s8,81
71
+ prediction_market_agent_tooling-0.15.0.dist-info/RECORD,,