opinion-clob-sdk 0.1.8__py3-none-any.whl → 0.1.10__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 (106) hide show
  1. opinion_clob_sdk/__init__.py +1 -1
  2. opinion_clob_sdk/chain/py_order_utils/utils.py +52 -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 +52 -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 +52 -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 +52 -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 +52 -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 +52 -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 +52 -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 +52 -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 +26 -0
  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/__init__.py +0 -0
  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/chain/contract_caller.py +390 -0
  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/chain/contracts/__init__.py +0 -0
  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/chain/contracts/conditional_tokens.py +707 -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/chain/contracts/erc20.py +111 -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/chain/exception.py +11 -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/chain/py_order_utils/__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/chain/py_order_utils/builders/__init__.py +0 -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/chain/py_order_utils/builders/base_builder.py +41 -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/chain/py_order_utils/builders/exception.py +2 -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/chain/py_order_utils/builders/order_builder.py +90 -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/chain/py_order_utils/builders/order_builder_test.py +40 -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/chain/py_order_utils/constants.py +2 -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/chain/py_order_utils/model/__init__.py +0 -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/chain/py_order_utils/model/order.py +254 -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/chain/py_order_utils/model/order_type.py +9 -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/chain/py_order_utils/model/sides.py +8 -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/chain/py_order_utils/model/signatures.py +8 -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/chain/py_order_utils/signer.py +20 -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/chain/py_order_utils/utils.py +139 -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/chain/safe/__init__.py +0 -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/chain/safe/constants.py +19 -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/chain/safe/eip712/__init__.py +176 -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/chain/safe/enums.py +6 -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/chain/safe/exceptions.py +94 -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/chain/safe/multisend.py +347 -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/chain/safe/safe.py +141 -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/chain/safe/safe_contracts/__init__.py +0 -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/chain/safe/safe_contracts/compatibility_fallback_handler_v1_3_0.py +327 -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/chain/safe/safe_contracts/multisend_v1_3_0.py +22 -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/chain/safe/safe_contracts/safe_v1_3_0.py +1035 -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/chain/safe/safe_contracts/utils.py +26 -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/chain/safe/safe_signature.py +364 -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/chain/safe/safe_test.py +37 -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/chain/safe/safe_tx.py +437 -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/chain/safe/signatures.py +63 -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/chain/safe/typing.py +17 -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/chain/safe/utils.py +218 -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/config.py +4 -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/model.py +19 -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/__init__.py +26 -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/chain/__init__.py +0 -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/chain/contract_caller.py +390 -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/chain/contracts/__init__.py +0 -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/chain/contracts/conditional_tokens.py +707 -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/opinion_clob_sdk/chain/contracts/erc20.py +111 -0
  64. opinion_clob_sdk/opinion_clob_sdk/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
  65. opinion_clob_sdk/opinion_clob_sdk/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
  66. opinion_clob_sdk/opinion_clob_sdk/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
  67. opinion_clob_sdk/opinion_clob_sdk/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
  68. opinion_clob_sdk/opinion_clob_sdk/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
  69. opinion_clob_sdk/opinion_clob_sdk/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
  70. opinion_clob_sdk/opinion_clob_sdk/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
  71. opinion_clob_sdk/opinion_clob_sdk/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
  72. opinion_clob_sdk/opinion_clob_sdk/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
  73. opinion_clob_sdk/opinion_clob_sdk/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
  74. opinion_clob_sdk/opinion_clob_sdk/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
  75. opinion_clob_sdk/opinion_clob_sdk/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
  76. opinion_clob_sdk/opinion_clob_sdk/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
  77. opinion_clob_sdk/opinion_clob_sdk/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
  78. opinion_clob_sdk/opinion_clob_sdk/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 +139 -0
  79. opinion_clob_sdk/opinion_clob_sdk/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
  80. opinion_clob_sdk/opinion_clob_sdk/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
  81. opinion_clob_sdk/opinion_clob_sdk/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
  82. opinion_clob_sdk/opinion_clob_sdk/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
  83. opinion_clob_sdk/opinion_clob_sdk/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
  84. opinion_clob_sdk/opinion_clob_sdk/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
  85. opinion_clob_sdk/opinion_clob_sdk/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
  86. opinion_clob_sdk/opinion_clob_sdk/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
  87. opinion_clob_sdk/opinion_clob_sdk/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
  88. opinion_clob_sdk/opinion_clob_sdk/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
  89. opinion_clob_sdk/opinion_clob_sdk/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
  90. opinion_clob_sdk/opinion_clob_sdk/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
  91. opinion_clob_sdk/opinion_clob_sdk/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
  92. opinion_clob_sdk/opinion_clob_sdk/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
  93. opinion_clob_sdk/opinion_clob_sdk/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
  94. opinion_clob_sdk/opinion_clob_sdk/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
  95. opinion_clob_sdk/opinion_clob_sdk/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
  96. opinion_clob_sdk/opinion_clob_sdk/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
  97. opinion_clob_sdk/opinion_clob_sdk/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
  98. opinion_clob_sdk/opinion_clob_sdk/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
  99. opinion_clob_sdk/opinion_clob_sdk/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
  100. opinion_clob_sdk/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
  101. 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
  102. 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
  103. {opinion_clob_sdk-0.1.8.dist-info → opinion_clob_sdk-0.1.10.dist-info}/METADATA +1 -1
  104. {opinion_clob_sdk-0.1.8.dist-info → opinion_clob_sdk-0.1.10.dist-info}/RECORD +106 -20
  105. {opinion_clob_sdk-0.1.8.dist-info → opinion_clob_sdk-0.1.10.dist-info}/WHEEL +0 -0
  106. {opinion_clob_sdk-0.1.8.dist-info → opinion_clob_sdk-0.1.10.dist-info}/top_level.txt +0 -0
@@ -42,19 +42,22 @@ def prepend_zx(in_str: str) -> str:
42
42
  def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, decimals: int) -> tuple[int, int]:
43
43
  """
44
44
  Calculate the maker and taker amounts based on the price and side.
45
-
45
+
46
+ Uses precise Decimal arithmetic to ensure precision within 6 significant digits
47
+ (matching the matching engine's precision limit).
48
+
46
49
  Args:
47
50
  price: The price of the order (between 0.001 and 0.999)
48
51
  maker_amount: The maker amount in base units
49
52
  side: The order side (BUY or SELL)
50
- decimals: The number of decimal places for the currency
51
-
53
+ decimals: The number of decimal places for the currency (unused, kept for compatibility)
54
+
52
55
  Returns:
53
56
  tuple[int, int]: A tuple containing (recalculated_maker_amount, taker_amount)
54
- For BUY: price = taker/maker
55
- For SELL: price = taker/maker
57
+ For BUY: price = maker/taker, so taker = maker/price
58
+ For SELL: price = taker/maker, so taker = maker*price
56
59
  """
57
-
60
+
58
61
  # Validate price using Decimal for exact comparison
59
62
  try:
60
63
  price_decimal = Decimal(str(price))
@@ -68,42 +71,69 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
68
71
  if not (min_price <= price_decimal <= max_price):
69
72
  raise ValueError(f"Price must be between {min_price} and {max_price} (inclusive), got {price}")
70
73
 
71
- # Ensure price doesn't have excessive precision (max 3 decimal places for prediction markets)
72
- if price_decimal.as_tuple().exponent < -3:
73
- raise ValueError(f"Price precision cannot exceed 3 decimal places, got {price}")
74
+ # Ensure price doesn't have excessive precision (max 6 decimal places to match engine precision)
75
+ if price_decimal.as_tuple().exponent < -6:
76
+ raise ValueError(f"Price precision cannot exceed 6 decimal places, got {price}")
74
77
 
75
78
  maker_decimal = Decimal(str(maker_amount))
76
- decimals_decimal = Decimal(str(decimals))
77
79
 
78
80
  if side == OrderSide.BUY:
79
81
  # For BUY: price = maker/taker
80
- # Calculate taker amount: taker = maker / price
81
- exact_taker = math.floor(maker_decimal / price_decimal / decimals_decimal * decimals_decimal)
82
+ # Goal: Find maximum taker such that floor(taker * price) <= maker
83
+ # Then use recalculated_maker = floor(taker * price)
84
+ #
85
+ # This ensures precision: given (recalculated_maker, taker, price),
86
+ # you can always verify: recalculated_maker = floor(taker * price)
87
+
88
+ # Calculate exact taker = maker / price
89
+ exact_taker = maker_decimal / price_decimal
90
+
91
+ # Start with floor(exact_taker)
82
92
  taker_amount = int(exact_taker)
83
93
 
84
- # Recalculate maker amount from taker to maintain precision
85
- # maker = taker * price, use Decimal for precision then round down
86
- exact_maker = Decimal(str(taker_amount)) * price_decimal
87
- recalculated_maker_amount = int(math.floor(exact_maker))
94
+ # Calculate corresponding maker = floor(taker * price)
95
+ recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
+ recalculated_maker_amount = int(recalculated_maker_decimal)
97
+
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
+
88
113
  else: # SELL
89
114
  # For SELL: price = taker/maker
90
- # Calculate taker amount: taker = maker * price
91
- exact_taker = math.floor(maker_decimal * price_decimal / decimals_decimal * decimals_decimal)
115
+ # We want: taker = floor(maker * price)
116
+ # Maker stays the same
117
+
118
+ # Calculate exact taker = maker * price
119
+ exact_taker = maker_decimal * price_decimal
92
120
 
121
+ # Round down to get integer taker
93
122
  taker_amount = int(exact_taker)
94
123
 
95
124
  # For SELL, maker amount doesn't change
96
125
  recalculated_maker_amount = int(maker_amount)
97
-
126
+
98
127
  # Ensure amounts are at least 1
99
128
  taker_amount = int(max(1, taker_amount))
100
129
  recalculated_maker_amount = int(max(1, recalculated_maker_amount))
101
130
 
102
131
  logging.debug(f"Order calculation: taker_amount={taker_amount}, recalculated_maker_amount={recalculated_maker_amount}")
103
132
 
104
- calculated_price = recalculated_maker_amount / taker_amount if side == OrderSide.BUY else taker_amount / recalculated_maker_amount
105
-
133
+ # Validate the calculated price is within bounds
134
+ calculated_price = recalculated_maker_amount / taker_amount if side == OrderSide.BUY else taker_amount / recalculated_maker_amount
135
+
106
136
  if calculated_price > 0.999 or calculated_price < 0.001:
107
137
  raise ValueError("invalid taker_amount and recalculated_maker_amount")
108
-
138
+
109
139
  return recalculated_maker_amount, taker_amount
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.8"
15
+ __version__ = "0.1.10"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -42,19 +42,22 @@ def prepend_zx(in_str: str) -> str:
42
42
  def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, decimals: int) -> tuple[int, int]:
43
43
  """
44
44
  Calculate the maker and taker amounts based on the price and side.
45
-
45
+
46
+ Uses precise Decimal arithmetic to ensure precision within 6 significant digits
47
+ (matching the matching engine's precision limit).
48
+
46
49
  Args:
47
50
  price: The price of the order (between 0.001 and 0.999)
48
51
  maker_amount: The maker amount in base units
49
52
  side: The order side (BUY or SELL)
50
- decimals: The number of decimal places for the currency
51
-
53
+ decimals: The number of decimal places for the currency (unused, kept for compatibility)
54
+
52
55
  Returns:
53
56
  tuple[int, int]: A tuple containing (recalculated_maker_amount, taker_amount)
54
- For BUY: price = taker/maker
55
- For SELL: price = taker/maker
57
+ For BUY: price = maker/taker, so taker = maker/price
58
+ For SELL: price = taker/maker, so taker = maker*price
56
59
  """
57
-
60
+
58
61
  # Validate price using Decimal for exact comparison
59
62
  try:
60
63
  price_decimal = Decimal(str(price))
@@ -68,42 +71,69 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
68
71
  if not (min_price <= price_decimal <= max_price):
69
72
  raise ValueError(f"Price must be between {min_price} and {max_price} (inclusive), got {price}")
70
73
 
71
- # Ensure price doesn't have excessive precision (max 3 decimal places for prediction markets)
72
- if price_decimal.as_tuple().exponent < -3:
73
- raise ValueError(f"Price precision cannot exceed 3 decimal places, got {price}")
74
+ # Ensure price doesn't have excessive precision (max 6 decimal places to match engine precision)
75
+ if price_decimal.as_tuple().exponent < -6:
76
+ raise ValueError(f"Price precision cannot exceed 6 decimal places, got {price}")
74
77
 
75
78
  maker_decimal = Decimal(str(maker_amount))
76
- decimals_decimal = Decimal(str(decimals))
77
79
 
78
80
  if side == OrderSide.BUY:
79
81
  # For BUY: price = maker/taker
80
- # Calculate taker amount: taker = maker / price
81
- exact_taker = math.floor(maker_decimal / price_decimal / decimals_decimal * decimals_decimal)
82
+ # Goal: Find maximum taker such that floor(taker * price) <= maker
83
+ # Then use recalculated_maker = floor(taker * price)
84
+ #
85
+ # This ensures precision: given (recalculated_maker, taker, price),
86
+ # you can always verify: recalculated_maker = floor(taker * price)
87
+
88
+ # Calculate exact taker = maker / price
89
+ exact_taker = maker_decimal / price_decimal
90
+
91
+ # Start with floor(exact_taker)
82
92
  taker_amount = int(exact_taker)
83
93
 
84
- # Recalculate maker amount from taker to maintain precision
85
- # maker = taker * price, use Decimal for precision then round down
86
- exact_maker = Decimal(str(taker_amount)) * price_decimal
87
- recalculated_maker_amount = int(math.floor(exact_maker))
94
+ # Calculate corresponding maker = floor(taker * price)
95
+ recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
+ recalculated_maker_amount = int(recalculated_maker_decimal)
97
+
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
+
88
113
  else: # SELL
89
114
  # For SELL: price = taker/maker
90
- # Calculate taker amount: taker = maker * price
91
- exact_taker = math.floor(maker_decimal * price_decimal / decimals_decimal * decimals_decimal)
115
+ # We want: taker = floor(maker * price)
116
+ # Maker stays the same
117
+
118
+ # Calculate exact taker = maker * price
119
+ exact_taker = maker_decimal * price_decimal
92
120
 
121
+ # Round down to get integer taker
93
122
  taker_amount = int(exact_taker)
94
123
 
95
124
  # For SELL, maker amount doesn't change
96
125
  recalculated_maker_amount = int(maker_amount)
97
-
126
+
98
127
  # Ensure amounts are at least 1
99
128
  taker_amount = int(max(1, taker_amount))
100
129
  recalculated_maker_amount = int(max(1, recalculated_maker_amount))
101
130
 
102
131
  logging.debug(f"Order calculation: taker_amount={taker_amount}, recalculated_maker_amount={recalculated_maker_amount}")
103
132
 
104
- calculated_price = recalculated_maker_amount / taker_amount if side == OrderSide.BUY else taker_amount / recalculated_maker_amount
105
-
133
+ # Validate the calculated price is within bounds
134
+ calculated_price = recalculated_maker_amount / taker_amount if side == OrderSide.BUY else taker_amount / recalculated_maker_amount
135
+
106
136
  if calculated_price > 0.999 or calculated_price < 0.001:
107
137
  raise ValueError("invalid taker_amount and recalculated_maker_amount")
108
-
138
+
109
139
  return recalculated_maker_amount, taker_amount
@@ -12,7 +12,7 @@ from opinion_clob_sdk.chain.exception import (
12
12
  InsufficientGasBalance
13
13
  )
14
14
 
15
- __version__ = "0.1.8"
15
+ __version__ = "0.1.10"
16
16
  __all__ = [
17
17
  "Client",
18
18
  "TopicStatus",
@@ -42,19 +42,22 @@ def prepend_zx(in_str: str) -> str:
42
42
  def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, decimals: int) -> tuple[int, int]:
43
43
  """
44
44
  Calculate the maker and taker amounts based on the price and side.
45
-
45
+
46
+ Uses precise Decimal arithmetic to ensure precision within 6 significant digits
47
+ (matching the matching engine's precision limit).
48
+
46
49
  Args:
47
50
  price: The price of the order (between 0.001 and 0.999)
48
51
  maker_amount: The maker amount in base units
49
52
  side: The order side (BUY or SELL)
50
- decimals: The number of decimal places for the currency
51
-
53
+ decimals: The number of decimal places for the currency (unused, kept for compatibility)
54
+
52
55
  Returns:
53
56
  tuple[int, int]: A tuple containing (recalculated_maker_amount, taker_amount)
54
- For BUY: price = taker/maker
55
- For SELL: price = taker/maker
57
+ For BUY: price = maker/taker, so taker = maker/price
58
+ For SELL: price = taker/maker, so taker = maker*price
56
59
  """
57
-
60
+
58
61
  # Validate price using Decimal for exact comparison
59
62
  try:
60
63
  price_decimal = Decimal(str(price))
@@ -68,42 +71,69 @@ def calculate_order_amounts(price: float, maker_amount: int, side: OrderSide, de
68
71
  if not (min_price <= price_decimal <= max_price):
69
72
  raise ValueError(f"Price must be between {min_price} and {max_price} (inclusive), got {price}")
70
73
 
71
- # Ensure price doesn't have excessive precision (max 3 decimal places for prediction markets)
72
- if price_decimal.as_tuple().exponent < -3:
73
- raise ValueError(f"Price precision cannot exceed 3 decimal places, got {price}")
74
+ # Ensure price doesn't have excessive precision (max 6 decimal places to match engine precision)
75
+ if price_decimal.as_tuple().exponent < -6:
76
+ raise ValueError(f"Price precision cannot exceed 6 decimal places, got {price}")
74
77
 
75
78
  maker_decimal = Decimal(str(maker_amount))
76
- decimals_decimal = Decimal(str(decimals))
77
79
 
78
80
  if side == OrderSide.BUY:
79
81
  # For BUY: price = maker/taker
80
- # Calculate taker amount: taker = maker / price
81
- exact_taker = math.floor(maker_decimal / price_decimal / decimals_decimal * decimals_decimal)
82
+ # Goal: Find maximum taker such that floor(taker * price) <= maker
83
+ # Then use recalculated_maker = floor(taker * price)
84
+ #
85
+ # This ensures precision: given (recalculated_maker, taker, price),
86
+ # you can always verify: recalculated_maker = floor(taker * price)
87
+
88
+ # Calculate exact taker = maker / price
89
+ exact_taker = maker_decimal / price_decimal
90
+
91
+ # Start with floor(exact_taker)
82
92
  taker_amount = int(exact_taker)
83
93
 
84
- # Recalculate maker amount from taker to maintain precision
85
- # maker = taker * price, use Decimal for precision then round down
86
- exact_maker = Decimal(str(taker_amount)) * price_decimal
87
- recalculated_maker_amount = int(math.floor(exact_maker))
94
+ # Calculate corresponding maker = floor(taker * price)
95
+ recalculated_maker_decimal = Decimal(str(taker_amount)) * price_decimal
96
+ recalculated_maker_amount = int(recalculated_maker_decimal)
97
+
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
+
88
113
  else: # SELL
89
114
  # For SELL: price = taker/maker
90
- # Calculate taker amount: taker = maker * price
91
- exact_taker = math.floor(maker_decimal * price_decimal / decimals_decimal * decimals_decimal)
115
+ # We want: taker = floor(maker * price)
116
+ # Maker stays the same
117
+
118
+ # Calculate exact taker = maker * price
119
+ exact_taker = maker_decimal * price_decimal
92
120
 
121
+ # Round down to get integer taker
93
122
  taker_amount = int(exact_taker)
94
123
 
95
124
  # For SELL, maker amount doesn't change
96
125
  recalculated_maker_amount = int(maker_amount)
97
-
126
+
98
127
  # Ensure amounts are at least 1
99
128
  taker_amount = int(max(1, taker_amount))
100
129
  recalculated_maker_amount = int(max(1, recalculated_maker_amount))
101
130
 
102
131
  logging.debug(f"Order calculation: taker_amount={taker_amount}, recalculated_maker_amount={recalculated_maker_amount}")
103
132
 
104
- calculated_price = recalculated_maker_amount / taker_amount if side == OrderSide.BUY else taker_amount / recalculated_maker_amount
105
-
133
+ # Validate the calculated price is within bounds
134
+ calculated_price = recalculated_maker_amount / taker_amount if side == OrderSide.BUY else taker_amount / recalculated_maker_amount
135
+
106
136
  if calculated_price > 0.999 or calculated_price < 0.001:
107
137
  raise ValueError("invalid taker_amount and recalculated_maker_amount")
108
-
138
+
109
139
  return recalculated_maker_amount, taker_amount
@@ -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.10"
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
+ ]