charli3_dendrite 1.6.3.dev0__tar.gz → 1.6.4.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/PKG-INFO +1 -1
  2. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/pyproject.toml +2 -2
  3. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/amm_base.py +70 -3
  4. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/minswap.py +41 -5
  5. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/spectrum.py +12 -0
  6. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/sundae.py +47 -1
  7. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/wingriders.py +6 -1
  8. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/LICENSE +0 -0
  9. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/README.md +0 -0
  10. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/__init__.py +0 -0
  11. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/backend/__init__.py +0 -0
  12. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/backend/backend_base.py +0 -0
  13. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/backend/blockfrost/__init__.py +0 -0
  14. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/backend/blockfrost/models.py +0 -0
  15. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/backend/dbsync/__init__.py +0 -0
  16. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/backend/dbsync/models.py +0 -0
  17. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/backend/ogmios_kupo/__init__.py +0 -0
  18. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/backend/ogmios_kupo/models.py +0 -0
  19. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/backend/utils.py +0 -0
  20. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dataclasses/__init__.py +0 -0
  21. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dataclasses/datums.py +0 -0
  22. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dataclasses/models.py +0 -0
  23. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/__init__.py +0 -0
  24. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/__init__.py +0 -0
  25. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/amm_types.py +0 -0
  26. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/cswap.py +0 -0
  27. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/dano.py +0 -0
  28. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/muesli.py +0 -0
  29. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/multi_asset.py +0 -0
  30. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/splash.py +0 -0
  31. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/sundae_v4.py +0 -0
  32. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/sundae_v4_deployments.json +0 -0
  33. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/sundae_v4_stableswap_math.py +0 -0
  34. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/amm/vyfi.py +0 -0
  35. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/core/__init__.py +0 -0
  36. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/core/base.py +0 -0
  37. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/core/errors.py +0 -0
  38. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/ob/__init__.py +0 -0
  39. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/ob/axo.py +0 -0
  40. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/ob/cardanoswaps.py +0 -0
  41. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/ob/chadswap.py +0 -0
  42. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/ob/djed.py +0 -0
  43. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/ob/geniusyield.py +0 -0
  44. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/ob/ob_base.py +0 -0
  45. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/dexs/ob/saturnswap.py +0 -0
  46. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/__init__.py +0 -0
  47. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/base.py +0 -0
  48. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/__init__.py +0 -0
  49. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/constants.py +0 -0
  50. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/datums.py +0 -0
  51. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/loader.py +0 -0
  52. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/market.py +0 -0
  53. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/math.py +0 -0
  54. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/__init__.py +0 -0
  55. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/aggregator.py +0 -0
  56. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/aggregator_datums.py +0 -0
  57. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/deployments.py +0 -0
  58. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/forward.py +0 -0
  59. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/leaves.py +0 -0
  60. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/locator.py +0 -0
  61. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/lp_pricing.py +0 -0
  62. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/recipes.json +0 -0
  63. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/redeemer.py +0 -0
  64. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/reproduce.py +0 -0
  65. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/oracles/structured_datums.py +0 -0
  66. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/state.py +0 -0
  67. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/__init__.py +0 -0
  68. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/_common.py +0 -0
  69. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/build.py +0 -0
  70. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/builder.py +0 -0
  71. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/context.py +0 -0
  72. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/create_loan.py +0 -0
  73. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/datum_synth.py +0 -0
  74. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/increase_loan.py +0 -0
  75. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/loan_ids.py +0 -0
  76. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/modify_collateral.py +0 -0
  77. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/oracle_redeemer.py +0 -0
  78. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/oracle_synth.py +0 -0
  79. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/redeemers.py +0 -0
  80. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/repay.py +0 -0
  81. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/topup_withdraw.py +0 -0
  82. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/danogo/transactions/verify.py +0 -0
  83. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/__init__.py +0 -0
  84. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/constants.py +0 -0
  85. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/datums.py +0 -0
  86. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/loader.py +0 -0
  87. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/market.py +0 -0
  88. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/math.py +0 -0
  89. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/__init__.py +0 -0
  90. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/feeds.py +0 -0
  91. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/fluid_api.py +0 -0
  92. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/witness.py +0 -0
  93. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/state.py +0 -0
  94. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/__init__.py +0 -0
  95. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/_common.py +0 -0
  96. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/borrow.py +0 -0
  97. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/borrow_terms.py +0 -0
  98. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/builder.py +0 -0
  99. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/change_collateral.py +0 -0
  100. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/context.py +0 -0
  101. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/datum_synth.py +0 -0
  102. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/lend.py +0 -0
  103. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/pool.py +0 -0
  104. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/recast.py +0 -0
  105. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/redeemers.py +0 -0
  106. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/repay.py +0 -0
  107. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/request.py +0 -0
  108. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/resolve.py +0 -0
  109. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/utxos.py +0 -0
  110. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/__init__.py +0 -0
  111. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/constants.py +0 -0
  112. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/datums.py +0 -0
  113. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/indexing.py +0 -0
  114. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/loader.py +0 -0
  115. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/market.py +0 -0
  116. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/rates.py +0 -0
  117. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/state.py +0 -0
  118. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/__init__.py +0 -0
  119. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/borrow.py +0 -0
  120. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/builder.py +0 -0
  121. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/change_collateral.py +0 -0
  122. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/claim.py +0 -0
  123. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/common.py +0 -0
  124. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/lender_bond.py +0 -0
  125. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/loan_action.py +0 -0
  126. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/loan_terms.py +0 -0
  127. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/oracle.py +0 -0
  128. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/pool_action.py +0 -0
  129. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/pool_cancel.py +0 -0
  130. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/pool_create.py +0 -0
  131. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/pool_edit.py +0 -0
  132. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/pool_terms.py +0 -0
  133. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/recast.py +0 -0
  134. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/redeemers.py +0 -0
  135. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/repay.py +0 -0
  136. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/resolve.py +0 -0
  137. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/markets.py +0 -0
  138. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/math.py +0 -0
  139. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/normalized.py +0 -0
  140. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/oracles/__init__.py +0 -0
  141. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/oracles/charli3.py +0 -0
  142. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/oracles/dex_pooled.py +0 -0
  143. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/oracles/fluid.py +0 -0
  144. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/oracles/models.py +0 -0
  145. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/oracles/orcfax.py +0 -0
  146. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/oracles/qtoken.py +0 -0
  147. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/plutus.py +0 -0
  148. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/rates.py +0 -0
  149. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/registry.py +0 -0
  150. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/transactions/__init__.py +0 -0
  151. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/transactions/base.py +0 -0
  152. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/transactions/infra.py +0 -0
  153. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/transactions/snapshot.py +0 -0
  154. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/lending/units.py +0 -0
  155. {charli3_dendrite-1.6.3.dev0 → charli3_dendrite-1.6.4.dev0}/src/charli3_dendrite/utility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: charli3_dendrite
3
- Version: 1.6.3.dev0
3
+ Version: 1.6.4.dev0
4
4
  Summary:
5
5
  License-File: LICENSE
6
6
  Author: Elder Millenial
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "charli3_dendrite"
3
- version = "1.6.3-dev0"
3
+ version = "1.6.4-dev0"
4
4
  description = ""
5
5
  authors = ["Elder Millenial <eldermillenial@protonmail.com>"]
6
6
  readme = "README.md"
@@ -50,7 +50,7 @@ module = ["pycardano", "pycardano.*", "dotenv", "nox", "uplc", "uplc.*"]
50
50
  ignore_missing_imports = true
51
51
 
52
52
  [tool.bumpversion]
53
- current_version = "1.6.3-dev0"
53
+ current_version = "1.6.4-dev0"
54
54
  parse = """(?x)
55
55
  (?P<major>\\d+)\\.
56
56
  (?P<minor>\\d+)\\.
@@ -1,5 +1,6 @@
1
1
  """Module providing base classes for AMM pools."""
2
2
 
3
+ import inspect
3
4
  from abc import abstractmethod
4
5
  from decimal import Decimal
5
6
  from typing import Any
@@ -80,6 +81,7 @@ class AbstractPoolState(AbstractPairState):
80
81
  address_target: Address | None = None,
81
82
  datum_target: PlutusData | None = None,
82
83
  minimum_receive: Assets | None = None,
84
+ swap_all: bool = False,
83
85
  ) -> PlutusData:
84
86
  """Create a swap datum for the pool.
85
87
 
@@ -95,13 +97,21 @@ class AbstractPoolState(AbstractPairState):
95
97
  Defaults to None.
96
98
  minimum_receive (Assets | None, optional): Overrides the baked on-chain
97
99
  minimum; fee and deposit still size from out_assets. Defaults to None.
100
+ swap_all (bool, optional): The order swaps whatever amount of the input
101
+ token it holds when executed; use it for an order funded by another
102
+ order's output, whose exact input is unknown when the datum is built.
103
+ Fee and deposit still size from in_assets. Defaults to False.
98
104
 
99
105
  Returns:
100
106
  PlutusData: The created swap datum.
101
107
 
102
108
  Raises:
103
- ValueError: If more than one asset is supplied as input or output.
109
+ ValueError: If more than one asset is supplied as input or output, or if
110
+ swap_all is set and the order datum cannot express it.
104
111
  """
112
+ datum_class = self.order_datum_class()
113
+ swap_all_kwargs = self._swap_all_kwargs(datum_class, swap_all)
114
+
105
115
  if not self.swap_forward and address_target is not None:
106
116
  print( # noqa: T201
107
117
  f"{self.__class__.__name__} does not support swap forwarding.",
@@ -111,7 +121,7 @@ class AbstractPoolState(AbstractPairState):
111
121
  # fee and deposit are still derived from the EXACT ``out_assets`` so relaxing
112
122
  # the floor never under-fees the order — only the step's ``minimum_receive``
113
123
  # loosens. Same output unit, so swap direction and lp_asset are unaffected.
114
- return self.order_datum_class().create_datum(
124
+ return datum_class.create_datum(
115
125
  address_source=address_source,
116
126
  in_assets=in_assets,
117
127
  out_assets=out_assets if minimum_receive is None else minimum_receive,
@@ -123,6 +133,53 @@ class AbstractPoolState(AbstractPairState):
123
133
  deposit=self.deposit(in_assets=in_assets, out_assets=out_assets),
124
134
  address_target=address_target,
125
135
  datum_target=datum_target,
136
+ **swap_all_kwargs,
137
+ )
138
+
139
+ def _swap_all_kwargs(
140
+ self,
141
+ datum_class: type[PlutusData],
142
+ swap_all: bool,
143
+ ) -> dict[str, bool]:
144
+ """The ``create_datum`` keyword arguments that request a swap-all order.
145
+
146
+ Empty unless ``swap_all`` is set, so an order datum without swap-all support
147
+ is built exactly as before.
148
+
149
+ Args:
150
+ datum_class (type[PlutusData]): The order datum class building the order.
151
+ swap_all (bool): Whether a swap-all order is requested.
152
+
153
+ Returns:
154
+ dict[str, bool]: The keyword arguments to pass to ``create_datum``.
155
+
156
+ Raises:
157
+ ValueError: If swap_all is set and ``datum_class`` has no
158
+ ``create_datum`` taking a ``swap_all`` parameter.
159
+ """
160
+ if not swap_all:
161
+ return {}
162
+ create_datum = getattr(datum_class, "create_datum", None)
163
+ if (
164
+ create_datum is None
165
+ or "swap_all" not in inspect.signature(create_datum).parameters
166
+ ):
167
+ raise self._swap_all_error(
168
+ f"{datum_class.__name__} has no swap-all form",
169
+ )
170
+ return {"swap_all": True}
171
+
172
+ def _swap_all_error(self, reason: str) -> ValueError:
173
+ """The error for a swap-all order this pool cannot build.
174
+
175
+ Args:
176
+ reason (str): Why the order cannot swap whatever amount it holds.
177
+
178
+ Returns:
179
+ ValueError: An error naming the pool class and the reason.
180
+ """
181
+ return ValueError(
182
+ f"{self.__class__.__name__} cannot build a swap-all order: {reason}.",
126
183
  )
127
184
 
128
185
  def swap_utxo(
@@ -135,6 +192,7 @@ class AbstractPoolState(AbstractPairState):
135
192
  address_target: Address | None = None,
136
193
  datum_target: PlutusData | None = None,
137
194
  minimum_receive: Assets | None = None,
195
+ swap_all: bool = False,
138
196
  ) -> tuple[TransactionOutput | None, PlutusData]:
139
197
  """Create a swap UTXO for the pool.
140
198
 
@@ -151,13 +209,19 @@ class AbstractPoolState(AbstractPairState):
151
209
  Defaults to None.
152
210
  minimum_receive (Assets | None, optional): Overrides the baked on-chain
153
211
  minimum; fee and deposit still size from out_assets. Defaults to None.
212
+ swap_all (bool, optional): The order swaps whatever amount of the input
213
+ token it holds when executed; use it for an order funded by another
214
+ order's output, whose exact input is unknown when the datum is built.
215
+ Fee, deposit and the order value still size from in_assets. Defaults to
216
+ False.
154
217
 
155
218
  Returns:
156
219
  tuple[TransactionOutput, PlutusData]: A tuple containing the created
157
220
  transaction output and the swap datum.
158
221
 
159
222
  Raises:
160
- ValueError: If more than one asset is supplied as input or output.
223
+ ValueError: If more than one asset is supplied as input or output, or if
224
+ swap_all is set and the order datum cannot express it.
161
225
  """
162
226
  # Basic checks
163
227
  if len(in_assets) != 1 or len(out_assets) != 1:
@@ -174,6 +238,9 @@ class AbstractPoolState(AbstractPairState):
174
238
  address_target=address_target,
175
239
  datum_target=datum_target,
176
240
  minimum_receive=minimum_receive,
241
+ # Passed only when set, so a swap_datum override without swap-all
242
+ # support is called exactly as before.
243
+ **({"swap_all": True} if swap_all else {}),
177
244
  )
178
245
 
179
246
  in_assets.root["lovelace"] = (
@@ -316,8 +316,21 @@ class SwapExactInV2(PlutusData):
316
316
  killable: Union[BoolTrue, BoolFalse]
317
317
 
318
318
  @classmethod
319
- def from_assets(cls, in_asset: Assets, out_asset: Assets) -> "SwapExactInV2":
320
- """Parse an Assets object into a SwapExactInV2 datum."""
319
+ def from_assets(
320
+ cls,
321
+ in_asset: Assets,
322
+ out_asset: Assets,
323
+ deducted_amount: int | None = None,
324
+ ) -> "SwapExactInV2":
325
+ """Parse an Assets object into a SwapExactInV2 datum.
326
+
327
+ Args:
328
+ in_asset: The asset swapped in.
329
+ out_asset: The asset swapped out; its quantity is the minimum receive.
330
+ deducted_amount: When None, the order swaps exactly the quantity of
331
+ ``in_asset``. Otherwise the order swaps everything it holds of the
332
+ input asset less ``deducted_amount`` (``SAOAll``).
333
+ """
321
334
  assert len(in_asset) == 1
322
335
 
323
336
  merged_assets = in_asset + out_asset
@@ -326,7 +339,11 @@ class SwapExactInV2(PlutusData):
326
339
  BoolTrue() if in_asset.unit() == merged_assets.unit() else BoolFalse()
327
340
  )
328
341
 
329
- option = SAOSpecificAmount(swap_amount=in_asset.quantity())
342
+ option: SAOSpecificAmount | SAOAll
343
+ if deducted_amount is None:
344
+ option = SAOSpecificAmount(swap_amount=in_asset.quantity())
345
+ else:
346
+ option = SAOAll(deducted_amount=deducted_amount)
330
347
 
331
348
  return cls(
332
349
  a_to_b_direction=direction,
@@ -544,10 +561,29 @@ class MinswapV2OrderDatum(OrderDatum):
544
561
  deposit: Assets,
545
562
  address_target: Address | None = None,
546
563
  datum_target: PlutusData | None = None,
564
+ swap_all: bool = False,
547
565
  ):
548
- """Create an order datum."""
566
+ """Create an order datum.
567
+
568
+ With ``swap_all`` the order swaps whatever it holds of the input asset when
569
+ executed (``SAOAll``) instead of exactly ``in_assets``. The validator swaps
570
+ the held quantity less ``deducted_amount`` and pays the batcher fee from the
571
+ remaining ADA, so a token input deducts nothing and an ADA input deducts the
572
+ batcher fee and deposit the order carries alongside its input.
573
+ """
549
574
  full_address_source = PlutusFullAddress.from_address(address_source)
550
- step = SwapExactInV2.from_assets(in_asset=in_assets, out_asset=out_assets)
575
+ deducted_amount = None
576
+ if swap_all:
577
+ deducted_amount = (
578
+ batcher_fee.quantity() + deposit.quantity()
579
+ if in_assets.unit() == "lovelace"
580
+ else 0
581
+ )
582
+ step = SwapExactInV2.from_assets(
583
+ in_asset=in_assets,
584
+ out_asset=out_assets,
585
+ deducted_amount=deducted_amount,
586
+ )
551
587
 
552
588
  # Minswap V2's ExtraDatum carries only the 32-byte HASH of the datum the
553
589
  # batcher attaches to the forwarded output (Constr 1 for a datum-hash output,
@@ -367,6 +367,7 @@ class SpectrumCPPState(AbstractConstantProductPoolState):
367
367
  address_target: Address | None = None,
368
368
  datum_target: PlutusData | None = None,
369
369
  minimum_receive: Assets | None = None,
370
+ swap_all: bool = False,
370
371
  ) -> PlutusData:
371
372
  """Create a PlutusData object representing a swap datum.
372
373
 
@@ -380,10 +381,20 @@ class SpectrumCPPState(AbstractConstantProductPoolState):
380
381
  Defaults to None.
381
382
  datum_target (PlutusData | None): The target datum for the swap.
382
383
  Defaults to None.
384
+ minimum_receive (Assets | None): Overrides the baked on-chain minimum.
385
+ Defaults to None.
386
+ swap_all (bool): Request an order that swaps whatever amount of the
387
+ input token it holds. Defaults to False.
383
388
 
384
389
  Returns:
385
390
  PlutusData: A PlutusData object representing the swap datum.
391
+
392
+ Raises:
393
+ ValueError: If ``swap_all`` is set; the Spectrum order datum has no
394
+ swap-all form.
386
395
  """
396
+ swap_all_kwargs = self._swap_all_kwargs(SpectrumOrderDatum, swap_all)
397
+
387
398
  if self.swap_forward and address_source is not None:
388
399
  print( # noqa: T201
389
400
  f"{self.__class__.__name__} does not support swap forwarding.",
@@ -407,6 +418,7 @@ class SpectrumCPPState(AbstractConstantProductPoolState):
407
418
  ],
408
419
  volume_fee=volume_fee,
409
420
  pool_token=self.pool_nft,
421
+ **swap_all_kwargs,
410
422
  )
411
423
 
412
424
  @classmethod
@@ -34,6 +34,10 @@ from charli3_dendrite.dexs.core.errors import InvalidPoolError
34
34
  from charli3_dendrite.dexs.core.errors import NoAssetsError
35
35
  from charli3_dendrite.dexs.core.errors import NotAPoolError
36
36
 
37
+ # A swap-all SundaeSwap V3 stableswap order offers this multiple of its expected
38
+ # input, so any realistic delivery is swapped in full.
39
+ SWAP_ALL_OFFER_MULTIPLE = 2
40
+
37
41
 
38
42
  @dataclass
39
43
  class AtoB(PlutusData):
@@ -616,8 +620,11 @@ class SundaeSwapCPPState(AbstractConstantProductPoolState):
616
620
  address_target: Address | None = None,
617
621
  datum_target: PlutusData | None = None,
618
622
  minimum_receive: Assets | None = None,
623
+ swap_all: bool = False,
619
624
  ) -> PlutusData:
620
625
  """Create a swap datum."""
626
+ swap_all_kwargs = self._swap_all_kwargs(SundaeOrderDatum, swap_all)
627
+
621
628
  if self.swap_forward and address_target is not None:
622
629
  print(f"{self.__class__.__name__} does not support swap forwarding.")
623
630
 
@@ -629,6 +636,7 @@ class SundaeSwapCPPState(AbstractConstantProductPoolState):
629
636
  in_assets=in_assets,
630
637
  out_assets=out_assets if minimum_receive is None else minimum_receive,
631
638
  fee=self.batcher_fee(in_assets=in_assets, out_assets=out_assets).quantity(),
639
+ **swap_all_kwargs,
632
640
  )
633
641
 
634
642
 
@@ -769,7 +777,20 @@ class SundaeSwapV3CPPState(AbstractConstantProductPoolState):
769
777
  address_target: Address | None = None,
770
778
  datum_target: PlutusData | None = None,
771
779
  minimum_receive: Assets | None = None,
780
+ swap_all: bool = False,
772
781
  ) -> PlutusData:
782
+ """Create a swap datum.
783
+
784
+ Raises:
785
+ ValueError: If ``swap_all`` is set. The constant-product pool swaps
786
+ exactly the order's offer, so the order cannot swap an amount
787
+ unknown when the datum is built.
788
+ """
789
+ if swap_all:
790
+ raise self._swap_all_error(
791
+ "the constant-product pool swaps exactly the order's offer",
792
+ )
793
+
773
794
  ident = bytes.fromhex(self.pool_nft.unit()[64:])
774
795
 
775
796
  datum = SundaeV3OrderDatum.create_datum(
@@ -948,13 +969,38 @@ class SundaeSwapV3StableSwap(AbstractStableSwapPoolState):
948
969
  address_target: Address | None = None,
949
970
  datum_target: PlutusData | None = None,
950
971
  minimum_receive: Assets | None = None,
972
+ swap_all: bool = False,
951
973
  ) -> PlutusData:
974
+ """Create a swap datum.
975
+
976
+ The stableswap pool swaps the smaller of the order's offer and the input it
977
+ holds. With ``swap_all`` the offer is ``SWAP_ALL_OFFER_MULTIPLE`` times
978
+ ``in_assets``, so the order swaps whatever amount of the input token it
979
+ holds when executed. The order value is still built from ``in_assets``.
980
+
981
+ Raises:
982
+ ValueError: If ``swap_all`` is set with an ADA input. An ADA offer
983
+ shares the order value with the protocol fee and deposit, so
984
+ swapping all of it would leave no ADA on the output.
985
+ """
986
+ if swap_all and in_assets.unit() == "lovelace":
987
+ raise self._swap_all_error(
988
+ "an ADA input cannot swap whatever arrives because the deposit "
989
+ "and fee share the input value",
990
+ )
991
+
952
992
  ident = bytes.fromhex(self.pool_nft.unit()[64:])
953
993
 
994
+ offer = in_assets
995
+ if swap_all:
996
+ offer = Assets(
997
+ root={in_assets.unit(): SWAP_ALL_OFFER_MULTIPLE * in_assets.quantity()},
998
+ )
999
+
954
1000
  datum = SundaeV3OrderDatum.create_datum(
955
1001
  ident=ident,
956
1002
  address_source=address_source,
957
- in_assets=in_assets,
1003
+ in_assets=offer,
958
1004
  out_assets=out_assets if minimum_receive is None else minimum_receive,
959
1005
  fee=self.batcher_fee(in_assets=in_assets, out_assets=out_assets).quantity(),
960
1006
  address_target=address_target,
@@ -921,8 +921,12 @@ class WingRidersV2SSPState(AbstractStableSwapPoolState, WingRidersV2CPPState):
921
921
  address_target: Address | None = None,
922
922
  datum_target: PlutusData | None = None,
923
923
  minimum_receive: Assets | None = None,
924
+ swap_all: bool = False,
924
925
  ) -> PlutusData:
925
- return self.order_datum_class().create_datum(
926
+ datum_class = self.order_datum_class()
927
+ swap_all_kwargs = self._swap_all_kwargs(datum_class, swap_all)
928
+
929
+ return datum_class.create_datum(
926
930
  address_source=address_source,
927
931
  in_assets=in_assets,
928
932
  out_assets=out_assets if minimum_receive is None else minimum_receive,
@@ -936,4 +940,5 @@ class WingRidersV2SSPState(AbstractStableSwapPoolState, WingRidersV2CPPState):
936
940
  datum_target=datum_target,
937
941
  a_scale=self.asset_mulitipliers[0],
938
942
  b_scale=self.asset_mulitipliers[1],
943
+ **swap_all_kwargs,
939
944
  )