opinion-clob-sdk 0.1.10__py3-none-any.whl → 0.1.11__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.

Potentially problematic release.


This version of opinion-clob-sdk might be problematic. Click here for more details.

Files changed (67) hide show
  1. opinion_clob_sdk/__init__.py +1 -1
  2. opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
  3. opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
  4. opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
  5. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
  6. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
  7. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
  8. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
  9. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
  10. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
  11. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
  12. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
  13. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
  14. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
  15. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
  16. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
  17. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
  18. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
  19. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
  20. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
  21. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +26 -0
  22. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/__init__.py +0 -0
  23. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/contract_caller.py +390 -0
  24. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/contracts/__init__.py +0 -0
  25. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/contracts/conditional_tokens.py +707 -0
  26. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/contracts/erc20.py +111 -0
  27. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/exception.py +11 -0
  28. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/__init__.py +0 -0
  29. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/builders/__init__.py +0 -0
  30. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/builders/base_builder.py +41 -0
  31. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/builders/exception.py +2 -0
  32. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/builders/order_builder.py +90 -0
  33. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/builders/order_builder_test.py +40 -0
  34. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/constants.py +2 -0
  35. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/model/__init__.py +0 -0
  36. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/model/order.py +254 -0
  37. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/model/order_type.py +9 -0
  38. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/model/sides.py +8 -0
  39. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/model/signatures.py +8 -0
  40. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/signer.py +20 -0
  41. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +125 -0
  42. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/__init__.py +0 -0
  43. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/constants.py +19 -0
  44. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/eip712/__init__.py +176 -0
  45. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/enums.py +6 -0
  46. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/exceptions.py +94 -0
  47. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/multisend.py +347 -0
  48. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/safe.py +141 -0
  49. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/safe_contracts/__init__.py +0 -0
  50. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/safe_contracts/compatibility_fallback_handler_v1_3_0.py +327 -0
  51. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/safe_contracts/multisend_v1_3_0.py +22 -0
  52. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/safe_contracts/safe_v1_3_0.py +1035 -0
  53. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/safe_contracts/utils.py +26 -0
  54. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/safe_signature.py +364 -0
  55. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/safe_test.py +37 -0
  56. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/safe_tx.py +437 -0
  57. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/signatures.py +63 -0
  58. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/typing.py +17 -0
  59. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/safe/utils.py +218 -0
  60. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/config.py +4 -0
  61. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/model.py +19 -0
  62. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/sdk.py +957 -0
  63. opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/verify_api_calls.py +135 -0
  64. {opinion_clob_sdk-0.1.10.dist-info → opinion_clob_sdk-0.1.11.dist-info}/METADATA +1 -1
  65. {opinion_clob_sdk-0.1.10.dist-info → opinion_clob_sdk-0.1.11.dist-info}/RECORD +67 -24
  66. {opinion_clob_sdk-0.1.10.dist-info → opinion_clob_sdk-0.1.11.dist-info}/WHEEL +0 -0
  67. {opinion_clob_sdk-0.1.10.dist-info → opinion_clob_sdk-0.1.11.dist-info}/top_level.txt +0 -0
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.10"
15
+ __version__ = "0.1.11"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -79,37 +79,23 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
79
79
 
80
80
  if side == OrderSide.BUY:
81
81
  # For BUY: price = maker/taker
82
- # Goal: Find maximum taker such that floor(taker * price) <= maker
83
- # Then use recalculated_maker = floor(taker * price)
82
+ # Goal: Calculate taker = floor(maker / price)
83
+ # Then recalculated_maker = floor(taker * price)
84
84
  #
85
- # This ensures precision: given (recalculated_maker, taker, price),
85
+ # Note: Due to integer arithmetic, recalculated_maker may be slightly less than
86
+ # the original maker_amount. This is expected and unavoidable with fixed precision.
87
+ #
88
+ # This ensures: given (recalculated_maker, taker, price),
86
89
  # you can always verify: recalculated_maker = floor(taker * price)
87
90
 
88
- # Calculate exact taker = maker / price
91
+ # Calculate taker amount: taker = floor(maker / price)
89
92
  exact_taker = maker_decimal / price_decimal
90
-
91
- # Start with floor(exact_taker)
92
93
  taker_amount = int(exact_taker)
93
94
 
94
- # Calculate corresponding maker = floor(taker * price)
95
+ # Recalculate maker = floor(taker * price) using exact Decimal arithmetic
95
96
  recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
97
  recalculated_maker_amount = int(recalculated_maker_decimal)
97
98
 
98
- # Try to increment taker to use more of the available maker amount
99
- # but ensure we don't exceed the original maker_amount
100
- while taker_amount > 0:
101
- test_taker = taker_amount + 1
102
- test_maker_decimal = Decimal(str(test_taker)) * price_decimal
103
- test_maker = int(test_maker_decimal)
104
-
105
- if test_maker <= maker_amount:
106
- # We can use this higher taker value
107
- taker_amount = test_taker
108
- recalculated_maker_amount = test_maker
109
- else:
110
- # Can't increase further without exceeding maker_amount
111
- break
112
-
113
99
  else: # SELL
114
100
  # For SELL: price = taker/maker
115
101
  # We want: taker = floor(maker * price)
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.10"
15
+ __version__ = "0.1.11"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -79,37 +79,23 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
79
79
 
80
80
  if side == OrderSide.BUY:
81
81
  # For BUY: price = maker/taker
82
- # Goal: Find maximum taker such that floor(taker * price) <= maker
83
- # Then use recalculated_maker = floor(taker * price)
82
+ # Goal: Calculate taker = floor(maker / price)
83
+ # Then recalculated_maker = floor(taker * price)
84
84
  #
85
- # This ensures precision: given (recalculated_maker, taker, price),
85
+ # Note: Due to integer arithmetic, recalculated_maker may be slightly less than
86
+ # the original maker_amount. This is expected and unavoidable with fixed precision.
87
+ #
88
+ # This ensures: given (recalculated_maker, taker, price),
86
89
  # you can always verify: recalculated_maker = floor(taker * price)
87
90
 
88
- # Calculate exact taker = maker / price
91
+ # Calculate taker amount: taker = floor(maker / price)
89
92
  exact_taker = maker_decimal / price_decimal
90
-
91
- # Start with floor(exact_taker)
92
93
  taker_amount = int(exact_taker)
93
94
 
94
- # Calculate corresponding maker = floor(taker * price)
95
+ # Recalculate maker = floor(taker * price) using exact Decimal arithmetic
95
96
  recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
97
  recalculated_maker_amount = int(recalculated_maker_decimal)
97
98
 
98
- # Try to increment taker to use more of the available maker amount
99
- # but ensure we don't exceed the original maker_amount
100
- while taker_amount > 0:
101
- test_taker = taker_amount + 1
102
- test_maker_decimal = Decimal(str(test_taker)) * price_decimal
103
- test_maker = int(test_maker_decimal)
104
-
105
- if test_maker <= maker_amount:
106
- # We can use this higher taker value
107
- taker_amount = test_taker
108
- recalculated_maker_amount = test_maker
109
- else:
110
- # Can't increase further without exceeding maker_amount
111
- break
112
-
113
99
  else: # SELL
114
100
  # For SELL: price = taker/maker
115
101
  # We want: taker = floor(maker * price)
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.10"
15
+ __version__ = "0.1.11"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -79,37 +79,23 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
79
79
 
80
80
  if side == OrderSide.BUY:
81
81
  # For BUY: price = maker/taker
82
- # Goal: Find maximum taker such that floor(taker * price) <= maker
83
- # Then use recalculated_maker = floor(taker * price)
82
+ # Goal: Calculate taker = floor(maker / price)
83
+ # Then recalculated_maker = floor(taker * price)
84
84
  #
85
- # This ensures precision: given (recalculated_maker, taker, price),
85
+ # Note: Due to integer arithmetic, recalculated_maker may be slightly less than
86
+ # the original maker_amount. This is expected and unavoidable with fixed precision.
87
+ #
88
+ # This ensures: given (recalculated_maker, taker, price),
86
89
  # you can always verify: recalculated_maker = floor(taker * price)
87
90
 
88
- # Calculate exact taker = maker / price
91
+ # Calculate taker amount: taker = floor(maker / price)
89
92
  exact_taker = maker_decimal / price_decimal
90
-
91
- # Start with floor(exact_taker)
92
93
  taker_amount = int(exact_taker)
93
94
 
94
- # Calculate corresponding maker = floor(taker * price)
95
+ # Recalculate maker = floor(taker * price) using exact Decimal arithmetic
95
96
  recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
97
  recalculated_maker_amount = int(recalculated_maker_decimal)
97
98
 
98
- # Try to increment taker to use more of the available maker amount
99
- # but ensure we don't exceed the original maker_amount
100
- while taker_amount > 0:
101
- test_taker = taker_amount + 1
102
- test_maker_decimal = Decimal(str(test_taker)) * price_decimal
103
- test_maker = int(test_maker_decimal)
104
-
105
- if test_maker <= maker_amount:
106
- # We can use this higher taker value
107
- taker_amount = test_taker
108
- recalculated_maker_amount = test_maker
109
- else:
110
- # Can't increase further without exceeding maker_amount
111
- break
112
-
113
99
  else: # SELL
114
100
  # For SELL: price = taker/maker
115
101
  # We want: taker = floor(maker * price)
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.10"
15
+ __version__ = "0.1.11"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -79,37 +79,23 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
79
79
 
80
80
  if side == OrderSide.BUY:
81
81
  # For BUY: price = maker/taker
82
- # Goal: Find maximum taker such that floor(taker * price) <= maker
83
- # Then use recalculated_maker = floor(taker * price)
82
+ # Goal: Calculate taker = floor(maker / price)
83
+ # Then recalculated_maker = floor(taker * price)
84
84
  #
85
- # This ensures precision: given (recalculated_maker, taker, price),
85
+ # Note: Due to integer arithmetic, recalculated_maker may be slightly less than
86
+ # the original maker_amount. This is expected and unavoidable with fixed precision.
87
+ #
88
+ # This ensures: given (recalculated_maker, taker, price),
86
89
  # you can always verify: recalculated_maker = floor(taker * price)
87
90
 
88
- # Calculate exact taker = maker / price
91
+ # Calculate taker amount: taker = floor(maker / price)
89
92
  exact_taker = maker_decimal / price_decimal
90
-
91
- # Start with floor(exact_taker)
92
93
  taker_amount = int(exact_taker)
93
94
 
94
- # Calculate corresponding maker = floor(taker * price)
95
+ # Recalculate maker = floor(taker * price) using exact Decimal arithmetic
95
96
  recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
97
  recalculated_maker_amount = int(recalculated_maker_decimal)
97
98
 
98
- # Try to increment taker to use more of the available maker amount
99
- # but ensure we don't exceed the original maker_amount
100
- while taker_amount > 0:
101
- test_taker = taker_amount + 1
102
- test_maker_decimal = Decimal(str(test_taker)) * price_decimal
103
- test_maker = int(test_maker_decimal)
104
-
105
- if test_maker <= maker_amount:
106
- # We can use this higher taker value
107
- taker_amount = test_taker
108
- recalculated_maker_amount = test_maker
109
- else:
110
- # Can't increase further without exceeding maker_amount
111
- break
112
-
113
99
  else: # SELL
114
100
  # For SELL: price = taker/maker
115
101
  # We want: taker = floor(maker * price)
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.10"
15
+ __version__ = "0.1.11"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -79,37 +79,23 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
79
79
 
80
80
  if side == OrderSide.BUY:
81
81
  # For BUY: price = maker/taker
82
- # Goal: Find maximum taker such that floor(taker * price) <= maker
83
- # Then use recalculated_maker = floor(taker * price)
82
+ # Goal: Calculate taker = floor(maker / price)
83
+ # Then recalculated_maker = floor(taker * price)
84
84
  #
85
- # This ensures precision: given (recalculated_maker, taker, price),
85
+ # Note: Due to integer arithmetic, recalculated_maker may be slightly less than
86
+ # the original maker_amount. This is expected and unavoidable with fixed precision.
87
+ #
88
+ # This ensures: given (recalculated_maker, taker, price),
86
89
  # you can always verify: recalculated_maker = floor(taker * price)
87
90
 
88
- # Calculate exact taker = maker / price
91
+ # Calculate taker amount: taker = floor(maker / price)
89
92
  exact_taker = maker_decimal / price_decimal
90
-
91
- # Start with floor(exact_taker)
92
93
  taker_amount = int(exact_taker)
93
94
 
94
- # Calculate corresponding maker = floor(taker * price)
95
+ # Recalculate maker = floor(taker * price) using exact Decimal arithmetic
95
96
  recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
97
  recalculated_maker_amount = int(recalculated_maker_decimal)
97
98
 
98
- # Try to increment taker to use more of the available maker amount
99
- # but ensure we don't exceed the original maker_amount
100
- while taker_amount > 0:
101
- test_taker = taker_amount + 1
102
- test_maker_decimal = Decimal(str(test_taker)) * price_decimal
103
- test_maker = int(test_maker_decimal)
104
-
105
- if test_maker <= maker_amount:
106
- # We can use this higher taker value
107
- taker_amount = test_taker
108
- recalculated_maker_amount = test_maker
109
- else:
110
- # Can't increase further without exceeding maker_amount
111
- break
112
-
113
99
  else: # SELL
114
100
  # For SELL: price = taker/maker
115
101
  # We want: taker = floor(maker * price)
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.10"
15
+ __version__ = "0.1.11"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -79,37 +79,23 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
79
79
 
80
80
  if side == OrderSide.BUY:
81
81
  # For BUY: price = maker/taker
82
- # Goal: Find maximum taker such that floor(taker * price) <= maker
83
- # Then use recalculated_maker = floor(taker * price)
82
+ # Goal: Calculate taker = floor(maker / price)
83
+ # Then recalculated_maker = floor(taker * price)
84
84
  #
85
- # This ensures precision: given (recalculated_maker, taker, price),
85
+ # Note: Due to integer arithmetic, recalculated_maker may be slightly less than
86
+ # the original maker_amount. This is expected and unavoidable with fixed precision.
87
+ #
88
+ # This ensures: given (recalculated_maker, taker, price),
86
89
  # you can always verify: recalculated_maker = floor(taker * price)
87
90
 
88
- # Calculate exact taker = maker / price
91
+ # Calculate taker amount: taker = floor(maker / price)
89
92
  exact_taker = maker_decimal / price_decimal
90
-
91
- # Start with floor(exact_taker)
92
93
  taker_amount = int(exact_taker)
93
94
 
94
- # Calculate corresponding maker = floor(taker * price)
95
+ # Recalculate maker = floor(taker * price) using exact Decimal arithmetic
95
96
  recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
97
  recalculated_maker_amount = int(recalculated_maker_decimal)
97
98
 
98
- # Try to increment taker to use more of the available maker amount
99
- # but ensure we don't exceed the original maker_amount
100
- while taker_amount > 0:
101
- test_taker = taker_amount + 1
102
- test_maker_decimal = Decimal(str(test_taker)) * price_decimal
103
- test_maker = int(test_maker_decimal)
104
-
105
- if test_maker <= maker_amount:
106
- # We can use this higher taker value
107
- taker_amount = test_taker
108
- recalculated_maker_amount = test_maker
109
- else:
110
- # Can't increase further without exceeding maker_amount
111
- break
112
-
113
99
  else: # SELL
114
100
  # For SELL: price = taker/maker
115
101
  # We want: taker = floor(maker * price)
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.10"
15
+ __version__ = "0.1.11"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -79,37 +79,23 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
79
79
 
80
80
  if side == OrderSide.BUY:
81
81
  # For BUY: price = maker/taker
82
- # Goal: Find maximum taker such that floor(taker * price) <= maker
83
- # Then use recalculated_maker = floor(taker * price)
82
+ # Goal: Calculate taker = floor(maker / price)
83
+ # Then recalculated_maker = floor(taker * price)
84
84
  #
85
- # This ensures precision: given (recalculated_maker, taker, price),
85
+ # Note: Due to integer arithmetic, recalculated_maker may be slightly less than
86
+ # the original maker_amount. This is expected and unavoidable with fixed precision.
87
+ #
88
+ # This ensures: given (recalculated_maker, taker, price),
86
89
  # you can always verify: recalculated_maker = floor(taker * price)
87
90
 
88
- # Calculate exact taker = maker / price
91
+ # Calculate taker amount: taker = floor(maker / price)
89
92
  exact_taker = maker_decimal / price_decimal
90
-
91
- # Start with floor(exact_taker)
92
93
  taker_amount = int(exact_taker)
93
94
 
94
- # Calculate corresponding maker = floor(taker * price)
95
+ # Recalculate maker = floor(taker * price) using exact Decimal arithmetic
95
96
  recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
97
  recalculated_maker_amount = int(recalculated_maker_decimal)
97
98
 
98
- # Try to increment taker to use more of the available maker amount
99
- # but ensure we don't exceed the original maker_amount
100
- while taker_amount > 0:
101
- test_taker = taker_amount + 1
102
- test_maker_decimal = Decimal(str(test_taker)) * price_decimal
103
- test_maker = int(test_maker_decimal)
104
-
105
- if test_maker <= maker_amount:
106
- # We can use this higher taker value
107
- taker_amount = test_taker
108
- recalculated_maker_amount = test_maker
109
- else:
110
- # Can't increase further without exceeding maker_amount
111
- break
112
-
113
99
  else: # SELL
114
100
  # For SELL: price = taker/maker
115
101
  # We want: taker = floor(maker * price)
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.10"
15
+ __version__ = "0.1.11"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -79,37 +79,23 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
79
79
 
80
80
  if side == OrderSide.BUY:
81
81
  # For BUY: price = maker/taker
82
- # Goal: Find maximum taker such that floor(taker * price) <= maker
83
- # Then use recalculated_maker = floor(taker * price)
82
+ # Goal: Calculate taker = floor(maker / price)
83
+ # Then recalculated_maker = floor(taker * price)
84
84
  #
85
- # This ensures precision: given (recalculated_maker, taker, price),
85
+ # Note: Due to integer arithmetic, recalculated_maker may be slightly less than
86
+ # the original maker_amount. This is expected and unavoidable with fixed precision.
87
+ #
88
+ # This ensures: given (recalculated_maker, taker, price),
86
89
  # you can always verify: recalculated_maker = floor(taker * price)
87
90
 
88
- # Calculate exact taker = maker / price
91
+ # Calculate taker amount: taker = floor(maker / price)
89
92
  exact_taker = maker_decimal / price_decimal
90
-
91
- # Start with floor(exact_taker)
92
93
  taker_amount = int(exact_taker)
93
94
 
94
- # Calculate corresponding maker = floor(taker * price)
95
+ # Recalculate maker = floor(taker * price) using exact Decimal arithmetic
95
96
  recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
97
  recalculated_maker_amount = int(recalculated_maker_decimal)
97
98
 
98
- # Try to increment taker to use more of the available maker amount
99
- # but ensure we don't exceed the original maker_amount
100
- while taker_amount > 0:
101
- test_taker = taker_amount + 1
102
- test_maker_decimal = Decimal(str(test_taker)) * price_decimal
103
- test_maker = int(test_maker_decimal)
104
-
105
- if test_maker <= maker_amount:
106
- # We can use this higher taker value
107
- taker_amount = test_taker
108
- recalculated_maker_amount = test_maker
109
- else:
110
- # Can't increase further without exceeding maker_amount
111
- break
112
-
113
99
  else: # SELL
114
100
  # For SELL: price = taker/maker
115
101
  # We want: taker = floor(maker * price)
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.10"
15
+ __version__ = "0.1.11"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -79,37 +79,23 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
79
79
 
80
80
  if side == OrderSide.BUY:
81
81
  # For BUY: price = maker/taker
82
- # Goal: Find maximum taker such that floor(taker * price) <= maker
83
- # Then use recalculated_maker = floor(taker * price)
82
+ # Goal: Calculate taker = floor(maker / price)
83
+ # Then recalculated_maker = floor(taker * price)
84
84
  #
85
- # This ensures precision: given (recalculated_maker, taker, price),
85
+ # Note: Due to integer arithmetic, recalculated_maker may be slightly less than
86
+ # the original maker_amount. This is expected and unavoidable with fixed precision.
87
+ #
88
+ # This ensures: given (recalculated_maker, taker, price),
86
89
  # you can always verify: recalculated_maker = floor(taker * price)
87
90
 
88
- # Calculate exact taker = maker / price
91
+ # Calculate taker amount: taker = floor(maker / price)
89
92
  exact_taker = maker_decimal / price_decimal
90
-
91
- # Start with floor(exact_taker)
92
93
  taker_amount = int(exact_taker)
93
94
 
94
- # Calculate corresponding maker = floor(taker * price)
95
+ # Recalculate maker = floor(taker * price) using exact Decimal arithmetic
95
96
  recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
97
  recalculated_maker_amount = int(recalculated_maker_decimal)
97
98
 
98
- # Try to increment taker to use more of the available maker amount
99
- # but ensure we don't exceed the original maker_amount
100
- while taker_amount > 0:
101
- test_taker = taker_amount + 1
102
- test_maker_decimal = Decimal(str(test_taker)) * price_decimal
103
- test_maker = int(test_maker_decimal)
104
-
105
- if test_maker <= maker_amount:
106
- # We can use this higher taker value
107
- taker_amount = test_taker
108
- recalculated_maker_amount = test_maker
109
- else:
110
- # Can't increase further without exceeding maker_amount
111
- break
112
-
113
99
  else: # SELL
114
100
  # For SELL: price = taker/maker
115
101
  # We want: taker = floor(maker * price)
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.10"
15
+ __version__ = "0.1.11"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -79,37 +79,23 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
79
79
 
80
80
  if side == OrderSide.BUY:
81
81
  # For BUY: price = maker/taker
82
- # Goal: Find maximum taker such that floor(taker * price) <= maker
83
- # Then use recalculated_maker = floor(taker * price)
82
+ # Goal: Calculate taker = floor(maker / price)
83
+ # Then recalculated_maker = floor(taker * price)
84
84
  #
85
- # This ensures precision: given (recalculated_maker, taker, price),
85
+ # Note: Due to integer arithmetic, recalculated_maker may be slightly less than
86
+ # the original maker_amount. This is expected and unavoidable with fixed precision.
87
+ #
88
+ # This ensures: given (recalculated_maker, taker, price),
86
89
  # you can always verify: recalculated_maker = floor(taker * price)
87
90
 
88
- # Calculate exact taker = maker / price
91
+ # Calculate taker amount: taker = floor(maker / price)
89
92
  exact_taker = maker_decimal / price_decimal
90
-
91
- # Start with floor(exact_taker)
92
93
  taker_amount = int(exact_taker)
93
94
 
94
- # Calculate corresponding maker = floor(taker * price)
95
+ # Recalculate maker = floor(taker * price) using exact Decimal arithmetic
95
96
  recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
97
  recalculated_maker_amount = int(recalculated_maker_decimal)
97
98
 
98
- # Try to increment taker to use more of the available maker amount
99
- # but ensure we don't exceed the original maker_amount
100
- while taker_amount > 0:
101
- test_taker = taker_amount + 1
102
- test_maker_decimal = Decimal(str(test_taker)) * price_decimal
103
- test_maker = int(test_maker_decimal)
104
-
105
- if test_maker <= maker_amount:
106
- # We can use this higher taker value
107
- taker_amount = test_taker
108
- recalculated_maker_amount = test_maker
109
- else:
110
- # Can't increase further without exceeding maker_amount
111
- break
112
-
113
99
  else: # SELL
114
100
  # For SELL: price = taker/maker
115
101
  # We want: taker = floor(maker * price)
@@ -0,0 +1,26 @@
1
+ """Opinion CLOB SDK - Python SDK for Opinion Prediction Market CLOB API"""
2
+
3
+ from opinion_clob_sdk.sdk import (
4
+ Client,
5
+ CHAIN_ID_BASE_MAINNET,
6
+ SUPPORTED_CHAIN_IDS
7
+ )
8
+ from opinion_clob_sdk.model import TopicStatus, TopicType, TopicStatusFilter
9
+ from opinion_clob_sdk.chain.exception import (
10
+ BalanceNotEnough,
11
+ NoPositionsToRedeem,
12
+ InsufficientGasBalance
13
+ )
14
+
15
+ __version__ = "0.1.11"
16
+ __all__ = [
17
+ "Client",
18
+ "TopicStatus",
19
+ "TopicType",
20
+ "TopicStatusFilter",
21
+ "CHAIN_ID_BASE_MAINNET",
22
+ "SUPPORTED_CHAIN_IDS",
23
+ "BalanceNotEnough",
24
+ "NoPositionsToRedeem",
25
+ "InsufficientGasBalance"
26
+ ]