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.
- opinion_clob_sdk/__init__.py +1 -1
- opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
- opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
- opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
- opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
- opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
- opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
- opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
- opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
- opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py +8 -22
- opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/__init__.py +1 -1
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- {opinion_clob_sdk-0.1.10.dist-info → opinion_clob_sdk-0.1.11.dist-info}/METADATA +1 -1
- {opinion_clob_sdk-0.1.10.dist-info → opinion_clob_sdk-0.1.11.dist-info}/RECORD +67 -24
- {opinion_clob_sdk-0.1.10.dist-info → opinion_clob_sdk-0.1.11.dist-info}/WHEEL +0 -0
- {opinion_clob_sdk-0.1.10.dist-info → opinion_clob_sdk-0.1.11.dist-info}/top_level.txt +0 -0
opinion_clob_sdk/__init__.py
CHANGED
|
@@ -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:
|
|
83
|
-
# Then
|
|
82
|
+
# Goal: Calculate taker = floor(maker / price)
|
|
83
|
+
# Then recalculated_maker = floor(taker * price)
|
|
84
84
|
#
|
|
85
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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)
|
|
@@ -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:
|
|
83
|
-
# Then
|
|
82
|
+
# Goal: Calculate taker = floor(maker / price)
|
|
83
|
+
# Then recalculated_maker = floor(taker * price)
|
|
84
84
|
#
|
|
85
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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)
|
|
@@ -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:
|
|
83
|
-
# Then
|
|
82
|
+
# Goal: Calculate taker = floor(maker / price)
|
|
83
|
+
# Then recalculated_maker = floor(taker * price)
|
|
84
84
|
#
|
|
85
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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)
|
opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/opinion_clob_sdk/chain/py_order_utils/utils.py
CHANGED
|
@@ -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:
|
|
83
|
-
# Then
|
|
82
|
+
# Goal: Calculate taker = floor(maker / price)
|
|
83
|
+
# Then recalculated_maker = floor(taker * price)
|
|
84
84
|
#
|
|
85
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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)
|
|
@@ -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:
|
|
83
|
-
# Then
|
|
82
|
+
# Goal: Calculate taker = floor(maker / price)
|
|
83
|
+
# Then recalculated_maker = floor(taker * price)
|
|
84
84
|
#
|
|
85
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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)
|
|
@@ -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:
|
|
83
|
-
# Then
|
|
82
|
+
# Goal: Calculate taker = floor(maker / price)
|
|
83
|
+
# Then recalculated_maker = floor(taker * price)
|
|
84
84
|
#
|
|
85
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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)
|
|
@@ -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:
|
|
83
|
-
# Then
|
|
82
|
+
# Goal: Calculate taker = floor(maker / price)
|
|
83
|
+
# Then recalculated_maker = floor(taker * price)
|
|
84
84
|
#
|
|
85
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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)
|
|
@@ -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:
|
|
83
|
-
# Then
|
|
82
|
+
# Goal: Calculate taker = floor(maker / price)
|
|
83
|
+
# Then recalculated_maker = floor(taker * price)
|
|
84
84
|
#
|
|
85
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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)
|
|
@@ -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:
|
|
83
|
-
# Then
|
|
82
|
+
# Goal: Calculate taker = floor(maker / price)
|
|
83
|
+
# Then recalculated_maker = floor(taker * price)
|
|
84
84
|
#
|
|
85
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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)
|
|
@@ -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:
|
|
83
|
-
# Then
|
|
82
|
+
# Goal: Calculate taker = floor(maker / price)
|
|
83
|
+
# Then recalculated_maker = floor(taker * price)
|
|
84
84
|
#
|
|
85
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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
|
+
]
|