charli3_dendrite 1.6.0.dev1__tar.gz → 1.6.1.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.0.dev1 → charli3_dendrite-1.6.1.dev0}/PKG-INFO +1 -1
  2. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/pyproject.toml +2 -2
  3. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/ob/cardanoswaps.py +176 -41
  4. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/LICENSE +0 -0
  5. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/README.md +0 -0
  6. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/__init__.py +0 -0
  7. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/backend/__init__.py +0 -0
  8. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/backend/backend_base.py +0 -0
  9. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/backend/blockfrost/__init__.py +0 -0
  10. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/backend/blockfrost/models.py +0 -0
  11. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/backend/dbsync/__init__.py +0 -0
  12. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/backend/dbsync/models.py +0 -0
  13. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/backend/ogmios_kupo/__init__.py +0 -0
  14. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/backend/ogmios_kupo/models.py +0 -0
  15. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/backend/utils.py +0 -0
  16. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dataclasses/__init__.py +0 -0
  17. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dataclasses/datums.py +0 -0
  18. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dataclasses/models.py +0 -0
  19. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/__init__.py +0 -0
  20. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/__init__.py +0 -0
  21. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/amm_base.py +0 -0
  22. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/amm_types.py +0 -0
  23. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/cswap.py +0 -0
  24. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/dano.py +0 -0
  25. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/minswap.py +0 -0
  26. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/muesli.py +0 -0
  27. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/multi_asset.py +0 -0
  28. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/spectrum.py +0 -0
  29. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/splash.py +0 -0
  30. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/sundae.py +0 -0
  31. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/sundae_v4.py +0 -0
  32. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/sundae_v4_deployments.json +0 -0
  33. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/sundae_v4_stableswap_math.py +0 -0
  34. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/vyfi.py +0 -0
  35. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/amm/wingriders.py +0 -0
  36. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/core/__init__.py +0 -0
  37. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/core/base.py +0 -0
  38. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/core/errors.py +0 -0
  39. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/ob/__init__.py +0 -0
  40. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/ob/axo.py +0 -0
  41. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/ob/chadswap.py +0 -0
  42. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/ob/djed.py +0 -0
  43. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/ob/geniusyield.py +0 -0
  44. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/ob/ob_base.py +0 -0
  45. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/dexs/ob/saturnswap.py +0 -0
  46. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/__init__.py +0 -0
  47. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/base.py +0 -0
  48. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/__init__.py +0 -0
  49. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/constants.py +0 -0
  50. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/datums.py +0 -0
  51. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/loader.py +0 -0
  52. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/market.py +0 -0
  53. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/math.py +0 -0
  54. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/__init__.py +0 -0
  55. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/aggregator.py +0 -0
  56. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/aggregator_datums.py +0 -0
  57. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/deployments.py +0 -0
  58. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/forward.py +0 -0
  59. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/leaves.py +0 -0
  60. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/locator.py +0 -0
  61. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/lp_pricing.py +0 -0
  62. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/recipes.json +0 -0
  63. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/redeemer.py +0 -0
  64. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/reproduce.py +0 -0
  65. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/oracles/structured_datums.py +0 -0
  66. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/state.py +0 -0
  67. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/__init__.py +0 -0
  68. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/_common.py +0 -0
  69. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/build.py +0 -0
  70. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/builder.py +0 -0
  71. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/context.py +0 -0
  72. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/create_loan.py +0 -0
  73. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/datum_synth.py +0 -0
  74. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/increase_loan.py +0 -0
  75. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/loan_ids.py +0 -0
  76. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/modify_collateral.py +0 -0
  77. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/oracle_redeemer.py +0 -0
  78. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/oracle_synth.py +0 -0
  79. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/redeemers.py +0 -0
  80. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/repay.py +0 -0
  81. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/topup_withdraw.py +0 -0
  82. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/danogo/transactions/verify.py +0 -0
  83. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/__init__.py +0 -0
  84. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/constants.py +0 -0
  85. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/datums.py +0 -0
  86. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/loader.py +0 -0
  87. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/market.py +0 -0
  88. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/math.py +0 -0
  89. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/__init__.py +0 -0
  90. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/feeds.py +0 -0
  91. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/fluid_api.py +0 -0
  92. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/oracles/witness.py +0 -0
  93. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/state.py +0 -0
  94. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/__init__.py +0 -0
  95. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/_common.py +0 -0
  96. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/borrow.py +0 -0
  97. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/borrow_terms.py +0 -0
  98. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/builder.py +0 -0
  99. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/change_collateral.py +0 -0
  100. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/context.py +0 -0
  101. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/datum_synth.py +0 -0
  102. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/lend.py +0 -0
  103. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/pool.py +0 -0
  104. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/recast.py +0 -0
  105. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/redeemers.py +0 -0
  106. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/repay.py +0 -0
  107. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/request.py +0 -0
  108. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/resolve.py +0 -0
  109. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens/transactions/utxos.py +0 -0
  110. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/__init__.py +0 -0
  111. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/constants.py +0 -0
  112. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/datums.py +0 -0
  113. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/indexing.py +0 -0
  114. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/loader.py +0 -0
  115. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/market.py +0 -0
  116. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/rates.py +0 -0
  117. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/state.py +0 -0
  118. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/__init__.py +0 -0
  119. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/borrow.py +0 -0
  120. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/builder.py +0 -0
  121. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/change_collateral.py +0 -0
  122. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/claim.py +0 -0
  123. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/common.py +0 -0
  124. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/lender_bond.py +0 -0
  125. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/loan_action.py +0 -0
  126. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/loan_terms.py +0 -0
  127. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/oracle.py +0 -0
  128. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/pool_action.py +0 -0
  129. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/pool_cancel.py +0 -0
  130. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/pool_create.py +0 -0
  131. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/pool_edit.py +0 -0
  132. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/pool_terms.py +0 -0
  133. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/recast.py +0 -0
  134. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/redeemers.py +0 -0
  135. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/repay.py +0 -0
  136. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/fluidtokens_v4/transactions/resolve.py +0 -0
  137. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/markets.py +0 -0
  138. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/math.py +0 -0
  139. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/normalized.py +0 -0
  140. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/oracles/__init__.py +0 -0
  141. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/oracles/charli3.py +0 -0
  142. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/oracles/dex_pooled.py +0 -0
  143. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/oracles/fluid.py +0 -0
  144. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/oracles/models.py +0 -0
  145. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/oracles/orcfax.py +0 -0
  146. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/oracles/qtoken.py +0 -0
  147. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/plutus.py +0 -0
  148. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/rates.py +0 -0
  149. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/registry.py +0 -0
  150. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/transactions/__init__.py +0 -0
  151. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/transactions/base.py +0 -0
  152. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/transactions/infra.py +0 -0
  153. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/transactions/snapshot.py +0 -0
  154. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.dev0}/src/charli3_dendrite/lending/units.py +0 -0
  155. {charli3_dendrite-1.6.0.dev1 → charli3_dendrite-1.6.1.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.0.dev1
3
+ Version: 1.6.1.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.0-dev1"
3
+ version = "1.6.1-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.0-dev1"
53
+ current_version = "1.6.1-dev0"
54
54
  parse = """(?x)
55
55
  (?P<major>\\d+)\\.
56
56
  (?P<minor>\\d+)\\.
@@ -207,13 +207,96 @@ def ask_beacon_name(ask_id: bytes, ask_name: bytes) -> bytes:
207
207
  return _sha256(_AskAsset(ask_id, ask_name).to_cbor())
208
208
 
209
209
 
210
+ @dataclass
211
+ class CardanoSwapsTxId(PlutusData):
212
+ """A transaction id wrapper, as the pre-release build encodes it."""
213
+
214
+ CONSTR_ID = 0
215
+ tx_hash: bytes
216
+
217
+
218
+ @dataclass
219
+ class CardanoSwapsOutputReference(PlutusData):
220
+ """An output reference in the pre-release build's shape.
221
+
222
+ ``Constr 0 [Constr 0 [tx_hash], output_index]``: the transaction id is
223
+ wrapped in its own constructor.
224
+ """
225
+
226
+ CONSTR_ID = 0
227
+ transaction_id: CardanoSwapsTxId
228
+ output_index: int
229
+
230
+
231
+ @dataclass
232
+ class CardanoSwapsSomeOutRef(PlutusData):
233
+ """``Some`` output reference in the pre-release build's shape."""
234
+
235
+ CONSTR_ID = 0
236
+ value: CardanoSwapsOutputReference
237
+
238
+ @classmethod
239
+ def from_ref(cls, tx_hash: bytes, output_index: int) -> "CardanoSwapsSomeOutRef":
240
+ """``Some`` reference to the output ``tx_hash#output_index``."""
241
+ return cls(
242
+ value=CardanoSwapsOutputReference(
243
+ transaction_id=CardanoSwapsTxId(tx_hash=tx_hash),
244
+ output_index=output_index,
245
+ ),
246
+ )
247
+
248
+ def ref(self) -> tuple[bytes, int]:
249
+ """The referenced output as ``(tx_hash, output_index)``."""
250
+ return self.value.transaction_id.tx_hash, self.value.output_index
251
+
252
+
253
+ @dataclass
254
+ class CardanoSwapsOutRefV3(PlutusData):
255
+ """An output reference in the official (Plutus V3) contracts' shape.
256
+
257
+ ``Constr 0 [transaction_id, output_index]``: the transaction id is a plain
258
+ bytestring.
259
+ """
260
+
261
+ CONSTR_ID = 0
262
+ transaction_id: bytes
263
+ output_index: int
264
+
265
+
266
+ @dataclass
267
+ class CardanoSwapsSomeOutRefV3(PlutusData):
268
+ """``Some`` output reference in the official (Plutus V3) contracts' shape."""
269
+
270
+ CONSTR_ID = 0
271
+ value: CardanoSwapsOutRefV3
272
+
273
+ @classmethod
274
+ def from_ref(
275
+ cls,
276
+ tx_hash: bytes,
277
+ output_index: int,
278
+ ) -> "CardanoSwapsSomeOutRefV3":
279
+ """``Some`` reference to the output ``tx_hash#output_index``."""
280
+ return cls(
281
+ value=CardanoSwapsOutRefV3(
282
+ transaction_id=tx_hash,
283
+ output_index=output_index,
284
+ ),
285
+ )
286
+
287
+ def ref(self) -> tuple[bytes, int]:
288
+ """The referenced output as ``(tx_hash, output_index)``."""
289
+ return self.value.transaction_id, self.value.output_index
290
+
291
+
210
292
  @dataclass(frozen=True)
211
293
  class CardanoSwapsContract:
212
294
  """One deployment of the Cardano-Swaps one-way contracts.
213
295
 
214
296
  Everything that differs between deployments: script hashes and bytes, the
215
- Plutus version, the beacon-name rule, whether a new swap's staking key must
216
- sign its creation, and which builders are allowed.
297
+ Plutus version, the shape a continuation's ``prev_input`` is written in, the
298
+ beacon-name rule, whether a new swap's staking key must sign its creation,
299
+ and which builders are allowed.
217
300
  """
218
301
 
219
302
  swap_validator_hash: str
@@ -221,6 +304,7 @@ class CardanoSwapsContract:
221
304
  swap_script_hex: str
222
305
  beacon_script_hex: str
223
306
  script_class: type[PlutusV2Script] | type[PlutusV3Script]
307
+ prev_input_class: type[CardanoSwapsSomeOutRef] | type[CardanoSwapsSomeOutRefV3]
224
308
  pair_beacon_name: Callable[[bytes, bytes, bytes, bytes], bytes]
225
309
  offer_beacon_name: Callable[[bytes, bytes], bytes]
226
310
  ask_beacon_name: Callable[[bytes, bytes], bytes]
@@ -243,6 +327,7 @@ OFFICIAL_CONTRACT = CardanoSwapsContract(
243
327
  swap_script_hex=SWAP_VALIDATOR_SCRIPT_HEX,
244
328
  beacon_script_hex=BEACON_POLICY_SCRIPT_HEX,
245
329
  script_class=PlutusV3Script,
330
+ prev_input_class=CardanoSwapsSomeOutRefV3,
246
331
  pair_beacon_name=pair_beacon_name,
247
332
  offer_beacon_name=offer_beacon_name,
248
333
  ask_beacon_name=ask_beacon_name,
@@ -257,6 +342,7 @@ LEGACY_CONTRACT = CardanoSwapsContract(
257
342
  swap_script_hex=LEGACY_SWAP_VALIDATOR_SCRIPT_HEX,
258
343
  beacon_script_hex=LEGACY_BEACON_POLICY_SCRIPT_HEX,
259
344
  script_class=PlutusV2Script,
345
+ prev_input_class=CardanoSwapsSomeOutRef,
260
346
  pair_beacon_name=legacy_pair_beacon_name,
261
347
  offer_beacon_name=legacy_offer_beacon_name,
262
348
  ask_beacon_name=legacy_ask_beacon_name,
@@ -266,6 +352,20 @@ LEGACY_CONTRACT = CardanoSwapsContract(
266
352
  )
267
353
 
268
354
 
355
+ def contract_for_beacon(beacon_id: bytes) -> CardanoSwapsContract:
356
+ """The contract whose beacon policy is ``beacon_id`` (a datum's ``beacon_id``).
357
+
358
+ Raises:
359
+ ValueError: ``beacon_id`` is neither contract's beacon policy.
360
+ """
361
+ for contract in (OFFICIAL_CONTRACT, LEGACY_CONTRACT):
362
+ if beacon_id.hex() == contract.beacon_policy_id:
363
+ return contract
364
+ raise ValueError(
365
+ f"Unknown Cardano-Swaps beacon policy id {beacon_id.hex()}.",
366
+ )
367
+
368
+
269
369
  def _unit(policy: bytes, name: bytes) -> str:
270
370
  """Build a dendrite asset unit from on-chain policy + name bytes.
271
371
 
@@ -291,6 +391,11 @@ _SIZING_ADDRESS = Address(
291
391
  _SIZING_COIN = 1_000_000
292
392
  _SIZING_COIN_WIDTH = range(2**16, 2**32)
293
393
 
394
+ # How far past the chain tip a fill's validity may end (one hour of slots). An
395
+ # expiring swap needs an upper bound at or before its expiration; bounding it
396
+ # from the tip as well keeps it inside the node's slot-to-time forecast horizon.
397
+ _FILL_VALIDITY_SLOTS = 3600
398
+
294
399
 
295
400
  def _min_lovelace_at(output: TransactionOutput, coins_per_utxo_byte: int) -> int:
296
401
  """The ledger min-UTxO of ``output`` at ``coins_per_utxo_byte``.
@@ -330,31 +435,6 @@ class CardanoSwapsRational(PlutusData):
330
435
  denominator: int
331
436
 
332
437
 
333
- @dataclass
334
- class CardanoSwapsTxId(PlutusData):
335
- """A transaction id wrapper."""
336
-
337
- CONSTR_ID = 0
338
- tx_hash: bytes
339
-
340
-
341
- @dataclass
342
- class CardanoSwapsOutputReference(PlutusData):
343
- """A reference to a transaction output (tx id + output index)."""
344
-
345
- CONSTR_ID = 0
346
- transaction_id: CardanoSwapsTxId
347
- output_index: int
348
-
349
-
350
- @dataclass
351
- class CardanoSwapsSomeOutRef(PlutusData):
352
- """``Some`` wrapper for an optional output reference."""
353
-
354
- CONSTR_ID = 0
355
- value: CardanoSwapsOutputReference
356
-
357
-
358
438
  @dataclass
359
439
  class CardanoSwapsSomeInt(PlutusData):
360
440
  """``Some`` wrapper for an optional integer (POSIX millis expiration)."""
@@ -370,6 +450,10 @@ class CardanoSwapsSwapDatum(OrderDatum):
370
450
  Asset policy/name pairs are kept as separate flat bytestrings (not an
371
451
  ``AssetClass``) to match the on-chain 11-field wire format exactly. ADA is
372
452
  the empty bytestring in the ``*_id`` / ``*_name`` fields.
453
+
454
+ ``prev_input`` parses in either contract's output-reference shape; the two
455
+ differ in field 0 (a bytestring vs a wrapping constructor), so each datum
456
+ decodes to exactly one of them. :meth:`prev_input_ref` reads either.
373
457
  """
374
458
 
375
459
  CONSTR_ID = 0
@@ -383,9 +467,20 @@ class CardanoSwapsSwapDatum(OrderDatum):
383
467
  ask_name: bytes
384
468
  ask_beacon: bytes
385
469
  swap_price: CardanoSwapsRational
386
- prev_input: Union[CardanoSwapsSomeOutRef, PlutusNone]
470
+ prev_input: Union[CardanoSwapsSomeOutRefV3, CardanoSwapsSomeOutRef, PlutusNone]
387
471
  expiration: Union[CardanoSwapsSomeInt, PlutusNone]
388
472
 
473
+ def prev_input_ref(self) -> tuple[bytes, int] | None:
474
+ """The consumed output this datum's ``prev_input`` records.
475
+
476
+ Returns:
477
+ ``(tx_hash, output_index)`` in either shape, or ``None`` when
478
+ ``prev_input`` is ``None`` (a swap that has not been filled).
479
+ """
480
+ if isinstance(self.prev_input, PlutusNone):
481
+ return None
482
+ return self.prev_input.ref()
483
+
389
484
  def offer_unit(self) -> str:
390
485
  """The dendrite unit of the offered (output) asset."""
391
486
  return _unit(self.offer_id, self.offer_name)
@@ -463,20 +558,25 @@ class CardanoSwapsSwapDatum(OrderDatum):
463
558
  self,
464
559
  tx_hash: bytes,
465
560
  output_index: int,
561
+ *,
562
+ contract: CardanoSwapsContract | None = None,
466
563
  ) -> "CardanoSwapsSwapDatum":
467
564
  """This datum with ``prev_input`` pointing at the consumed ``tx_hash#index``.
468
565
 
469
566
  The validator requires a fill's continuing output to carry the spent datum
470
- unchanged except for ``prev_input``, which must reference the spent UTxO.
567
+ unchanged except for ``prev_input``, which must reference the spent UTxO
568
+ in the output-reference shape of ``contract``'s validator. ``contract``
569
+ defaults to the one this datum's ``beacon_id`` names.
570
+
571
+ Raises:
572
+ ValueError: ``contract`` is not given and ``beacon_id`` is neither
573
+ contract's beacon policy.
471
574
  """
575
+ if contract is None:
576
+ contract = contract_for_beacon(self.beacon_id)
472
577
  return dataclasses.replace(
473
578
  self,
474
- prev_input=CardanoSwapsSomeOutRef(
475
- value=CardanoSwapsOutputReference(
476
- transaction_id=CardanoSwapsTxId(tx_hash=tx_hash),
477
- output_index=output_index,
478
- ),
479
- ),
579
+ prev_input=contract.prev_input_class.from_ref(tx_hash, output_index),
480
580
  )
481
581
 
482
582
  def continuation_min_lovelace(
@@ -486,6 +586,7 @@ class CardanoSwapsSwapDatum(OrderDatum):
486
586
  *,
487
587
  prev_output_index: int = 0,
488
588
  address: Address | None = None,
589
+ contract: CardanoSwapsContract | None = None,
489
590
  ) -> int:
490
591
  """The min-UTxO of a continuing output of this swap that holds ``held``.
491
592
 
@@ -505,9 +606,15 @@ class CardanoSwapsSwapDatum(OrderDatum):
505
606
  continuation's ``prev_input`` records.
506
607
  address: The swap address; defaults to a staked address of the same
507
608
  size as every base address.
609
+ contract: The contract whose ``prev_input`` shape the continuation
610
+ is written in; by default the one ``beacon_id`` names.
508
611
 
509
612
  Returns:
510
613
  The lovelace the continuing output must hold.
614
+
615
+ Raises:
616
+ ValueError: ``contract`` is not given and ``beacon_id`` is neither
617
+ contract's beacon policy.
511
618
  """
512
619
  tokens = Assets(
513
620
  root={
@@ -519,7 +626,11 @@ class CardanoSwapsSwapDatum(OrderDatum):
519
626
  output = TransactionOutput(
520
627
  address=address if address is not None else _SIZING_ADDRESS,
521
628
  amount=asset_to_value(self.beacon_assets(1) + tokens),
522
- datum=self.continuation_datum(bytes(32), prev_output_index),
629
+ datum=self.continuation_datum(
630
+ bytes(32),
631
+ prev_output_index,
632
+ contract=contract,
633
+ ),
523
634
  )
524
635
  return _self_funded_min_lovelace(output, coins_per_utxo_byte)
525
636
 
@@ -531,6 +642,7 @@ class CardanoSwapsSwapDatum(OrderDatum):
531
642
  held_ask: int = 0,
532
643
  prev_output_index: int = 0,
533
644
  address: Address | None = None,
645
+ contract: CardanoSwapsContract | None = None,
534
646
  ) -> int:
535
647
  """The offer a taker can draw from a swap UTxO holding ``gross`` of it.
536
648
 
@@ -549,14 +661,20 @@ class CardanoSwapsSwapDatum(OrderDatum):
549
661
  prev_output_index: The swap UTxO's own output index, which the
550
662
  continuation's ``prev_input`` records.
551
663
  address: The swap address, when known.
664
+ contract: The contract whose ``prev_input`` shape the continuation
665
+ is written in; by default the one ``beacon_id`` names.
552
666
 
553
667
  Returns:
554
668
  The claimable offer quantity, floored at 0.
555
669
 
556
670
  Raises:
557
671
  InvalidPoolError: ``swap_price`` is not a positive rational.
672
+ ValueError: ``contract`` is not given and ``beacon_id`` is neither
673
+ contract's beacon policy.
558
674
  """
559
675
  self.price()
676
+ if contract is None:
677
+ contract = contract_for_beacon(self.beacon_id)
560
678
  if self.offer_unit() != "lovelace":
561
679
  return gross
562
680
  full_ask = held_ask + self.required_ask(gross)
@@ -565,6 +683,7 @@ class CardanoSwapsSwapDatum(OrderDatum):
565
683
  coins_per_utxo_byte,
566
684
  prev_output_index=prev_output_index,
567
685
  address=address,
686
+ contract=contract,
568
687
  )
569
688
  return max(0, gross - floor)
570
689
 
@@ -575,6 +694,7 @@ class CardanoSwapsSwapDatum(OrderDatum):
575
694
  *,
576
695
  prev_output_index: int = 0,
577
696
  address: Address | None = None,
697
+ contract: CardanoSwapsContract | None = None,
578
698
  ) -> int:
579
699
  """The lovelace a new swap offering ``offer_quantity`` funds for its min-UTxO.
580
700
 
@@ -595,12 +715,16 @@ class CardanoSwapsSwapDatum(OrderDatum):
595
715
  coins_per_utxo_byte: The ``coins_per_utxo_byte`` protocol parameter.
596
716
  prev_output_index: The output index the swap UTxO is created at.
597
717
  address: The swap address, when known.
718
+ contract: The contract whose ``prev_input`` shape the continuation
719
+ is written in; by default the one ``beacon_id`` names.
598
720
 
599
721
  Returns:
600
722
  The carrier lovelace.
601
723
 
602
724
  Raises:
603
725
  InvalidPoolError: ``swap_price`` is not a positive rational.
726
+ ValueError: ``contract`` is not given and ``beacon_id`` is neither
727
+ contract's beacon policy.
604
728
  """
605
729
  self.price()
606
730
  ask_unit = self.ask_unit()
@@ -617,6 +741,7 @@ class CardanoSwapsSwapDatum(OrderDatum):
617
741
  coins_per_utxo_byte,
618
742
  prev_output_index=prev_output_index,
619
743
  address=address,
744
+ contract=contract,
620
745
  )
621
746
  if needed <= carrier:
622
747
  return carrier
@@ -629,6 +754,7 @@ class CardanoSwapsSwapDatum(OrderDatum):
629
754
  coins_per_utxo_byte,
630
755
  prev_output_index=prev_output_index,
631
756
  address=address,
757
+ contract=contract,
632
758
  )
633
759
 
634
760
 
@@ -750,9 +876,9 @@ class _CardanoSwapsOneWayOrderState(AbstractOrderState):
750
876
 
751
877
  :meth:`CardanoSwapsSwapDatum.claimable_offer` over this UTxO's offer
752
878
  balance and accumulated ask, sized at its own output index (which the
753
- continuation's ``prev_input`` records) and at its address when known. A
754
- :meth:`swap_utxo` fill of this amount always leaves the continuing output
755
- funded.
879
+ continuation's ``prev_input`` records, in this contract's shape) and at
880
+ its address when known. A :meth:`swap_utxo` fill of this amount always
881
+ leaves the continuing output funded.
756
882
 
757
883
  Args:
758
884
  coins_per_utxo_byte: The ``coins_per_utxo_byte`` protocol parameter.
@@ -766,6 +892,7 @@ class _CardanoSwapsOneWayOrderState(AbstractOrderState):
766
892
  held_ask=self.assets[self.in_unit],
767
893
  prev_output_index=self.tx_index,
768
894
  address=Address.decode(self.address) if self.address is not None else None,
895
+ contract=self.CONTRACT,
769
896
  )
770
897
 
771
898
  @property
@@ -1055,6 +1182,7 @@ class _CardanoSwapsOneWayOrderState(AbstractOrderState):
1055
1182
  tx_builder.context.protocol_param.coins_per_utxo_byte,
1056
1183
  prev_output_index=len(tx_builder.outputs),
1057
1184
  address=swap_address,
1185
+ contract=cls.CONTRACT,
1058
1186
  )
1059
1187
  if offer_unit == "lovelace":
1060
1188
  txo.amount.coin = offer.quantity() + carrier
@@ -1183,9 +1311,15 @@ class _CardanoSwapsOneWayOrderState(AbstractOrderState):
1183
1311
  )
1184
1312
  # An expiring swap is fillable only by a transaction whose validity ends at
1185
1313
  # or before the expiration (the validator reads it as the upper bound).
1314
+ # The bound is also kept within _FILL_VALIDITY_SLOTS of the tip: a node
1315
+ # cannot convert a slot past its forecast horizon to time, so a far
1316
+ # expiration as the upper bound fails evaluation and submission.
1186
1317
  expiration = self.order_datum.expiration
1187
1318
  if isinstance(expiration, CardanoSwapsSomeInt):
1188
- deadline = posix_ms_to_slot(expiration.value)
1319
+ deadline = min(
1320
+ posix_ms_to_slot(expiration.value),
1321
+ tx_builder.context.last_block_slot + _FILL_VALIDITY_SLOTS,
1322
+ )
1189
1323
  if tx_builder.ttl is None or tx_builder.ttl > deadline:
1190
1324
  tx_builder.ttl = deadline
1191
1325
  # No witness datum: the order UTxO carries its SwapDatum inline (CS requires
@@ -1199,10 +1333,11 @@ class _CardanoSwapsOneWayOrderState(AbstractOrderState):
1199
1333
  # and ``offer_taken = offer_in - offer_out`` from this output — there is
1200
1334
  # no separate maker payment; the maker collects the accumulated ask on
1201
1335
  # CLOSE. The datum is identical to the input EXCEPT prev_input = consumed
1202
- # TxOutRef.
1336
+ # TxOutRef, in the output-reference shape this contract's validator reads.
1203
1337
  cont_datum = self.order_datum.continuation_datum(
1204
1338
  bytes.fromhex(self.tx_hash),
1205
1339
  self.tx_index,
1340
+ contract=self.CONTRACT,
1206
1341
  )
1207
1342
 
1208
1343
  # Continuing value = consumed value, less the offer taken, plus the ask