axis-synome 0.1.0.dev66__tar.gz → 0.1.0.dev68__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 (175) hide show
  1. {axis_synome-0.1.0.dev66/src/axis_synome.egg-info → axis_synome-0.1.0.dev68}/PKG-INFO +1 -1
  2. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/_version.py +2 -2
  3. axis_synome-0.1.0.dev68/src/axis_synome/export_entities.py +397 -0
  4. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/alm_proxies.py +14 -4
  5. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/assets_by_prime.py +47 -11
  6. axis_synome-0.1.0.dev68/src/axis_synome/spec/asc/entities/assets_missing_from_atlas.py +414 -0
  7. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/protocol_sets.py +1 -0
  8. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/tokens.py +3 -0
  9. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68/src/axis_synome.egg-info}/PKG-INFO +1 -1
  10. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome.egg-info/SOURCES.txt +1 -0
  11. axis_synome-0.1.0.dev68/tests/axis_synome/scripts/test_export_entities.py +198 -0
  12. axis_synome-0.1.0.dev66/src/axis_synome/export_entities.py +0 -233
  13. axis_synome-0.1.0.dev66/tests/axis_synome/scripts/test_export_entities.py +0 -76
  14. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/.flake8 +0 -0
  15. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/AGENTS.md +0 -0
  16. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/CLAUDE.md +0 -0
  17. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/README.md +0 -0
  18. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/WRITING_SPECS.md +0 -0
  19. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/examples/01_prime_basics.py +0 -0
  20. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/examples/02_assets_and_tokens_of_a_prime.py +0 -0
  21. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/examples/03_inverse_lookups.py +0 -0
  22. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/examples/04_atlas_provenance.py +0 -0
  23. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/examples/05_feeding_a_formula.py +0 -0
  24. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/examples/README.md +0 -0
  25. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/pyproject.toml +0 -0
  26. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/setup.cfg +0 -0
  27. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/__init__.py +0 -0
  28. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/__init__.py +0 -0
  29. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/all_entities/__init__.py +0 -0
  30. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/all_entities/lending_markets.py +0 -0
  31. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/__init__.py +0 -0
  32. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/asset_categories.py +0 -0
  33. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/assets.py +0 -0
  34. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/networks.py +0 -0
  35. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/primes.py +0 -0
  36. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/types.py +0 -0
  37. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/asc.py +0 -0
  38. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/asc_collateral_ratio.py +0 -0
  39. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/asc_incentive.py +0 -0
  40. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/dab.py +0 -0
  41. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/latent_asc.py +0 -0
  42. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/ratio_latent_asc.py +0 -0
  43. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/resting_asc.py +0 -0
  44. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/codegen_test/entities/agents.py +0 -0
  45. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/crypto_lending/__init__.py +0 -0
  46. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/crypto_lending/formulas/__init__.py +0 -0
  47. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/crypto_lending/formulas/lif.py +0 -0
  48. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/__init__.py +0 -0
  49. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/audit_firms.py +0 -0
  50. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/capital_types.py +0 -0
  51. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/protocol_risk.py +0 -0
  52. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/risk_categories.py +0 -0
  53. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/smart_contract_risk.py +0 -0
  54. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/__init__.py +0 -0
  55. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/administrative_rrc/__init__.py +0 -0
  56. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/administrative_rrc/administrative_risk.py +0 -0
  57. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/aggregate_rrc.py +0 -0
  58. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/audit_factor.py +0 -0
  59. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/capital_composition.py +0 -0
  60. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/entities/__init__.py +0 -0
  61. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/entities/lending_protocol.py +0 -0
  62. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/entities/precomputed_crr.py +0 -0
  63. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/examples/risk_capital_walkthrough.ipynb +0 -0
  64. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/financial_rrc/__init__.py +0 -0
  65. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/financial_rrc/entities.py +0 -0
  66. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/financial_rrc/perpetual_positions.py +0 -0
  67. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/__init__.py +0 -0
  68. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/__init__.py +0 -0
  69. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/asset_correlation_coefficient.py +0 -0
  70. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/capital_requirement_without_buffers.py +0 -0
  71. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/exposure_caps.py +0 -0
  72. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/fixed_crr_rrc.py +0 -0
  73. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/instance_financial_rrc.py +0 -0
  74. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/lending_rrc.py +0 -0
  75. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/pipeline.py +0 -0
  76. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/precomputed_crr_rrc.py +0 -0
  77. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/probability_of_default.py +0 -0
  78. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/required_risk_capital.py +0 -0
  79. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/instance_rrc.py +0 -0
  80. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/jrc_loss_allocation.py +0 -0
  81. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/lindy_factor.py +0 -0
  82. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/smart_contract_rrc/__init__.py +0 -0
  83. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/smart_contract_rrc/exceptions.py +0 -0
  84. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/smart_contract_rrc/smart_contract_risk.py +0 -0
  85. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/total_risk_capital.py +0 -0
  86. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/README.md +0 -0
  87. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/entities/assessor_score.py +0 -0
  88. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/entities/assets.py +0 -0
  89. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/entities/mappings.py +0 -0
  90. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/formulas/crr.py +0 -0
  91. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/formulas/scoring.py +0 -0
  92. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_inspect/__init__.py +0 -0
  93. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_inspect/__main__.py +0 -0
  94. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_inspect/cli.py +0 -0
  95. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/__init__.py +0 -0
  96. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/correlation_matrix.py +0 -0
  97. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/evm_address.py +0 -0
  98. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/math_protocol.py +0 -0
  99. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/pendle_validation.py +0 -0
  100. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/references/__init__.py +0 -0
  101. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/references/graph.py +0 -0
  102. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/runtime/__init__.py +0 -0
  103. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/runtime/base.py +0 -0
  104. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/runtime/math.py +0 -0
  105. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/runtime/reference.py +0 -0
  106. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/validated_dataclass.py +0 -0
  107. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/validated_str.py +0 -0
  108. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_validator/__init__.py +0 -0
  109. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_validator/check_source_uuids.py +0 -0
  110. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_validator/checker.py +0 -0
  111. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_validator/flake8_plugin.py +0 -0
  112. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_validator/python_subset.py +0 -0
  113. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome.egg-info/dependency_links.txt +0 -0
  114. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome.egg-info/entry_points.txt +0 -0
  115. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome.egg-info/requires.txt +0 -0
  116. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/src/axis_synome.egg-info/top_level.txt +0 -0
  117. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/__init__.py +0 -0
  118. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/conftest.py +0 -0
  119. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/mocks.py +0 -0
  120. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_alm_proxies.py +0 -0
  121. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_asc.py +0 -0
  122. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_asc_collateral_ratio.py +0 -0
  123. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_asc_incentive.py +0 -0
  124. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_asset_categories.py +0 -0
  125. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_dab.py +0 -0
  126. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_evm_address.py +0 -0
  127. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_latent_asc.py +0 -0
  128. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_prime_agent_data_validation.py +0 -0
  129. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_ratio_latent_asc.py +0 -0
  130. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_resting_asc.py +0 -0
  131. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/__init__.py +0 -0
  132. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/administrative_rrc/test_administrative_risk.py +0 -0
  133. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/financial_rrc/__init__.py +0 -0
  134. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/financial_rrc/test_lending_rrc.py +0 -0
  135. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/financial_rrc/test_perpetual_positions.py +0 -0
  136. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/formulas/__init__.py +0 -0
  137. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/formulas/test_correlation_matrix.py +0 -0
  138. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/formulas/test_loss_given_default.py +0 -0
  139. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/smart_contract_rrc/__init__.py +0 -0
  140. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/smart_contract_rrc/test_exceptions.py +0 -0
  141. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/smart_contract_rrc/test_smart_contract_risk.py +0 -0
  142. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_a321_a322_integration.py +0 -0
  143. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_aggregate_rrc.py +0 -0
  144. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_capital_composition.py +0 -0
  145. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_instance_rrc.py +0 -0
  146. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_jrc_loss_allocation.py +0 -0
  147. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_total_risk_capital.py +0 -0
  148. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_inspect/__init__.py +0 -0
  149. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_inspect/test_cli.py +0 -0
  150. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/__init__.py +0 -0
  151. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/references/__init__.py +0 -0
  152. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/references/test_graph.py +0 -0
  153. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/runtime/__init__.py +0 -0
  154. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/runtime/test_base.py +0 -0
  155. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/runtime/test_math.py +0 -0
  156. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_validator/test_check_source_uuids.py +0 -0
  157. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_validator/test_checker.py +0 -0
  158. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_validator/test_flake8_plugin.py +0 -0
  159. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/__init__.py +0 -0
  160. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/entities/__init__.py +0 -0
  161. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/entities/test_assessor_score.py +0 -0
  162. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/formulas/__init__.py +0 -0
  163. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/formulas/test_crr.py +0 -0
  164. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/formulas/test_scoring.py +0 -0
  165. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/crr_mapping.csv +0 -0
  166. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/penalty.csv +0 -0
  167. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_1_scores.csv +0 -0
  168. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_2_scores.csv +0 -0
  169. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_3_scores.csv +0 -0
  170. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/weights.csv +0 -0
  171. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/suraf_client/__init__.py +0 -0
  172. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/suraf_client/suraf_client.py +0 -0
  173. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/suraf_client/test_suraf_client.py +0 -0
  174. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/tests/axis_synome/test_examples.py +0 -0
  175. {axis_synome-0.1.0.dev66 → axis_synome-0.1.0.dev68}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: axis-synome
3
- Version: 0.1.0.dev66
3
+ Version: 0.1.0.dev68
4
4
  Summary: Axis specification modules (entities, formulas, validators)
5
5
  Author-email: Archon Tech <hello@archontech.ai>
6
6
  License: MIT
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.1.0.dev66'
22
- __version_tuple__ = version_tuple = (0, 1, 0, 'dev66')
21
+ __version__ = version = '0.1.0.dev68'
22
+ __version_tuple__ = version_tuple = (0, 1, 0, 'dev68')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -0,0 +1,397 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import importlib.metadata
5
+ import json
6
+ import re
7
+ import subprocess
8
+ from pathlib import Path
9
+ from typing import Any
10
+
11
+ from pydantic import BaseModel, ConfigDict, Field
12
+
13
+ from axis_synome.spec.asc.entities.alm_proxies import (
14
+ STL_ADDITIONAL_PROXIES,
15
+ AlmProxy,
16
+ )
17
+ from axis_synome.spec.asc.entities.assets_by_prime import ASSETS_BY_PRIME, PrimeName
18
+ from axis_synome.spec.asc.entities.assets_missing_from_atlas import (
19
+ MISSING_FROM_ATLAS_BY_PRIME,
20
+ )
21
+ from axis_synome.spec.asc.entities.networks import STL_CHAIN_BY_NETWORK
22
+ from axis_synome.spec.asc.entities.protocol_sets import (
23
+ ATOKEN_PROTOCOLS,
24
+ ERC4626_PROTOCOLS,
25
+ L1_PSM_PROTOCOLS,
26
+ L2_PSM_PROTOCOLS,
27
+ UNISWAP_STYLE_PROTOCOLS,
28
+ Protocol,
29
+ )
30
+
31
+ # Proxy roles. "alm" is the canonical ALM Proxy holding operational allocation
32
+ # positions; "subproxy" is an additional SubProxy/treasury wallet tracked for the
33
+ # same (star, chain).
34
+ PROXY_ROLE_ALM = "alm"
35
+ PROXY_ROLE_SUBPROXY = "subproxy"
36
+
37
+
38
+ class ProxyEntry(BaseModel):
39
+ """A single ALM-controlled wallet exported for a (star, chain).
40
+
41
+ More than one may exist per (star, chain): the canonical ALM Proxy plus any
42
+ additional SubProxy/treasury wallets. ``role`` lets consumers tell them apart
43
+ without relying on list position.
44
+ """
45
+
46
+ model_config = ConfigDict(extra="forbid")
47
+
48
+ star: str
49
+ chain: str
50
+ address: str
51
+ role: str
52
+
53
+
54
+ class TokenEntryModel(BaseModel):
55
+ model_config = ConfigDict(extra="forbid")
56
+
57
+ contract_address: str
58
+ wallet_address: str
59
+ asset_address: str | None
60
+ star: str
61
+ chain: str
62
+ protocol: str
63
+ allocation_type: str
64
+ token_type: str
65
+
66
+
67
+ class AssetsByPrimeContainer(BaseModel):
68
+ model_config = ConfigDict(extra="forbid")
69
+
70
+ # star -> list of token entries.
71
+ entries: dict[str, list[TokenEntryModel]] = Field(serialization_alias="ASSETS_BY_PRIME")
72
+
73
+
74
+ class AlmProxiesContainer(BaseModel):
75
+ model_config = ConfigDict(extra="forbid")
76
+
77
+ # star -> chain -> list of proxies.
78
+ proxies: dict[str, dict[str, list[ProxyEntry]]] = Field(serialization_alias="AlmProxy")
79
+
80
+
81
+ class EntitiesModel(BaseModel):
82
+ model_config = ConfigDict(extra="forbid")
83
+
84
+ assets_by_prime: AssetsByPrimeContainer
85
+ alm_proxies: AlmProxiesContainer
86
+
87
+
88
+ class AscModel(BaseModel):
89
+ model_config = ConfigDict(extra="forbid")
90
+
91
+ entities: EntitiesModel
92
+
93
+
94
+ class SpecModel(BaseModel):
95
+ model_config = ConfigDict(extra="forbid")
96
+
97
+ asc: AscModel
98
+
99
+
100
+ class AxisSynomeModel(BaseModel):
101
+ model_config = ConfigDict(extra="forbid")
102
+
103
+ spec: SpecModel
104
+
105
+
106
+ class AxisSynomeContract(BaseModel):
107
+ model_config = ConfigDict(extra="forbid")
108
+
109
+ version: str
110
+ axis_synome_git_commit: str
111
+ axis_synome: AxisSynomeModel
112
+
113
+
114
+ def _slug(text: str) -> str:
115
+ return re.sub(r"[^a-z0-9]+", "-", text.lower()).strip("-")
116
+
117
+
118
+ def _prime_to_star(prime: PrimeName | str) -> str:
119
+ text = prime.value if isinstance(prime, PrimeName) else str(prime)
120
+ return text.lower().replace(" ", "-")
121
+
122
+
123
+ def _token_type(protocol: Protocol, chain: str, token_name: str) -> str:
124
+ if protocol in ATOKEN_PROTOCOLS:
125
+ return "atoken"
126
+
127
+ if protocol in ERC4626_PROTOCOLS:
128
+ return "erc4626"
129
+
130
+ if protocol == Protocol.CURVE:
131
+ return "curve"
132
+
133
+ if protocol in UNISWAP_STYLE_PROTOCOLS:
134
+ if "LP" in token_name.upper():
135
+ return "uni_v3_lp"
136
+ return "uni_v3_pool"
137
+
138
+ if protocol == Protocol.CENTRIFUGE:
139
+ if chain == "plume":
140
+ return "centrifuge_feeder"
141
+ return "centrifuge"
142
+
143
+ if protocol == Protocol.ANCHORAGE:
144
+ return "anchorage"
145
+
146
+ if protocol in L1_PSM_PROTOCOLS | L2_PSM_PROTOCOLS:
147
+ return "psm3"
148
+
149
+ return "erc20"
150
+
151
+
152
+ def _allocation_type(protocol: Protocol) -> str:
153
+ if protocol in L1_PSM_PROTOCOLS | L2_PSM_PROTOCOLS:
154
+ return "psm3"
155
+ return "allocation"
156
+
157
+
158
+ def _version_from_package_metadata() -> str:
159
+ return importlib.metadata.version("axis-synome")
160
+
161
+
162
+ def _axis_synome_git_commit() -> str:
163
+ repo_root = Path(__file__).resolve().parents[2]
164
+ try:
165
+ return subprocess.check_output(
166
+ ["git", "rev-parse", "HEAD"], cwd=repo_root, text=True
167
+ ).strip()
168
+ except (subprocess.CalledProcessError, FileNotFoundError):
169
+ return "unknown"
170
+
171
+
172
+ def build_axis_synome_contract(
173
+ version: str | None = None,
174
+ axis_synome_git_commit: str | None = None,
175
+ ) -> AxisSynomeContract:
176
+ # Canonical ALM Proxy per (star, chain). This is the wallet that holds the
177
+ # operational allocation positions, and the wallet that every token entry on
178
+ # that (star, chain) binds to.
179
+ alm_proxy_by_key: dict[tuple[str, str], str] = {}
180
+ for member in AlmProxy:
181
+ deployment = member.value
182
+ chain = STL_CHAIN_BY_NETWORK.get(deployment.network)
183
+ if chain is None:
184
+ continue
185
+
186
+ star = _prime_to_star(deployment.prime.name)
187
+ alm_proxy_by_key[(star, chain)] = str(deployment.address).lower()
188
+
189
+ # All wallets to export per (star, chain): the canonical ALM Proxy first,
190
+ # then any additional SubProxy/treasury wallets. Additional wallets are
191
+ # appended rather than replacing the ALM Proxy, so both stay tracked.
192
+ # Value is a list of (address, role) so consumers can distinguish the
193
+ # canonical ALM proxy from additional SubProxy wallets.
194
+ proxies_by_key: dict[tuple[str, str], list[tuple[str, str]]] = {
195
+ key: [(address, PROXY_ROLE_ALM)] for key, address in alm_proxy_by_key.items()
196
+ }
197
+ for (prime, network), addresses in STL_ADDITIONAL_PROXIES.items():
198
+ chain = STL_CHAIN_BY_NETWORK.get(network)
199
+ if chain is None:
200
+ continue
201
+
202
+ star = _prime_to_star(prime.name)
203
+ for address in addresses:
204
+ address = str(address).lower()
205
+ existing = proxies_by_key.setdefault((star, chain), [])
206
+ if any(addr == address for addr, _ in existing):
207
+ raise ValueError(
208
+ f"additional proxy {address} for {star}/{chain} duplicates a "
209
+ "canonical ALM proxy; remove it from STL_ADDITIONAL_PROXIES"
210
+ )
211
+ existing.append((address, PROXY_ROLE_SUBPROXY))
212
+
213
+ entries: list[dict[str, Any]] = []
214
+ seen_entry_keys: set[tuple[str, str, str]] = set()
215
+ missing_proxy_keys: set[tuple[str, str]] = set()
216
+ for prime_name, assets in ASSETS_BY_PRIME.items():
217
+ star = _prime_to_star(prime_name)
218
+ if star not in {"spark", "grove"}:
219
+ continue
220
+
221
+ for asset in assets:
222
+ chain = STL_CHAIN_BY_NETWORK.get(asset.network)
223
+ if chain is None:
224
+ continue
225
+
226
+ wallet = alm_proxy_by_key.get((star, chain))
227
+ if wallet is None:
228
+ # Assets exist for this (star, chain) but no ALM proxy is
229
+ # defined, so they would silently vanish from the export. Fail
230
+ # loudly instead, mirroring the duplicate-entry guard below.
231
+ missing_proxy_keys.add((star, chain))
232
+ continue
233
+
234
+ contract_address = str(asset.address).lower()
235
+ entry_key = (chain, contract_address, wallet)
236
+ if entry_key in seen_entry_keys:
237
+ raise ValueError(
238
+ "duplicate token entry for "
239
+ f"chain={chain} contract={contract_address} wallet={wallet}; "
240
+ "resolve the conflicting Asset definitions in assets_by_prime"
241
+ )
242
+ seen_entry_keys.add(entry_key)
243
+
244
+ entries.append({
245
+ "contract_address": contract_address,
246
+ "wallet_address": wallet,
247
+ "asset_address": str(asset.underlying_asset_address).lower(),
248
+ "star": star,
249
+ "chain": chain,
250
+ "protocol": _slug(asset.protocol.value),
251
+ "allocation_type": _allocation_type(asset.protocol),
252
+ "token_type": _token_type(asset.protocol, chain, asset.token.value),
253
+ })
254
+
255
+ # STL positions with no Atlas backing. These bind to the same ALM Proxy and
256
+ # share the duplicate / missing-proxy guards above, but carry their STL
257
+ # protocol, allocation_type and token_type verbatim rather than deriving
258
+ # them — the legacy pol/asset/proxy values are not a function of protocol.
259
+ for prime_name, missing_assets in MISSING_FROM_ATLAS_BY_PRIME.items():
260
+ star = _prime_to_star(prime_name)
261
+ if star not in {"spark", "grove"}:
262
+ continue
263
+
264
+ for missing in missing_assets:
265
+ chain = STL_CHAIN_BY_NETWORK.get(missing.network)
266
+ if chain is None:
267
+ continue
268
+
269
+ # risk_capital holdings bind to an explicit SubProxy wallet; all
270
+ # other rows bind to the canonical ALM Proxy for the (star, chain).
271
+ if missing.wallet_address is not None:
272
+ wallet = str(missing.wallet_address).lower()
273
+ else:
274
+ wallet = alm_proxy_by_key.get((star, chain))
275
+ if wallet is None:
276
+ missing_proxy_keys.add((star, chain))
277
+ continue
278
+
279
+ contract_address = str(missing.address).lower()
280
+ entry_key = (chain, contract_address, wallet)
281
+ if entry_key in seen_entry_keys:
282
+ raise ValueError(
283
+ "duplicate token entry for "
284
+ f"chain={chain} contract={contract_address} wallet={wallet}; "
285
+ "resolve the conflicting Asset definitions in assets_by_prime "
286
+ "and assets_missing_from_atlas"
287
+ )
288
+ seen_entry_keys.add(entry_key)
289
+
290
+ entries.append({
291
+ "contract_address": contract_address,
292
+ "wallet_address": wallet,
293
+ "asset_address": (
294
+ str(missing.underlying_asset_address).lower()
295
+ if missing.underlying_asset_address is not None
296
+ else None
297
+ ),
298
+ "star": star,
299
+ "chain": chain,
300
+ "protocol": missing.protocol,
301
+ "allocation_type": missing.allocation_type,
302
+ "token_type": missing.token_type,
303
+ })
304
+
305
+ if missing_proxy_keys:
306
+ raise ValueError(
307
+ "assets defined for (star, chain) with no canonical ALM proxy: "
308
+ f"{sorted(missing_proxy_keys)}; add the ALM proxy to the AlmProxy enum"
309
+ )
310
+
311
+ assets_by_prime_export: dict[str, list[TokenEntryModel]] = {}
312
+ for entry in entries:
313
+ assets_by_prime_export.setdefault(entry["star"], []).append(TokenEntryModel(**entry))
314
+
315
+ alm_proxy_export: dict[str, dict[str, list[ProxyEntry]]] = {}
316
+ for (star, chain), addr_roles in proxies_by_key.items():
317
+ alm_proxy_export.setdefault(star, {})[chain] = [
318
+ ProxyEntry(star=star, chain=chain, address=address, role=role)
319
+ for address, role in addr_roles
320
+ ]
321
+
322
+ return AxisSynomeContract(
323
+ version=version or _version_from_package_metadata(),
324
+ axis_synome_git_commit=axis_synome_git_commit or _axis_synome_git_commit(),
325
+ axis_synome=AxisSynomeModel(
326
+ spec=SpecModel(
327
+ asc=AscModel(
328
+ entities=EntitiesModel(
329
+ assets_by_prime=AssetsByPrimeContainer(entries=assets_by_prime_export),
330
+ alm_proxies=AlmProxiesContainer(proxies=alm_proxy_export),
331
+ )
332
+ )
333
+ )
334
+ ),
335
+ )
336
+
337
+
338
+ def export_axis_synome_contract(
339
+ data_path: Path,
340
+ schema_path: Path,
341
+ version: str | None,
342
+ axis_synome_git_commit: str | None,
343
+ ) -> None:
344
+ config = build_axis_synome_contract(
345
+ version=version,
346
+ axis_synome_git_commit=axis_synome_git_commit,
347
+ )
348
+
349
+ data_path.parent.mkdir(parents=True, exist_ok=True)
350
+ schema_path.parent.mkdir(parents=True, exist_ok=True)
351
+
352
+ data_path.write_text(config.model_dump_json(indent=2, by_alias=True), encoding="utf-8")
353
+
354
+ schema = AxisSynomeContract.model_json_schema(by_alias=True)
355
+ schema_path.write_text(json.dumps(schema, indent=2), encoding="utf-8")
356
+
357
+
358
+ def main() -> None:
359
+ parser = argparse.ArgumentParser(
360
+ description="Export axis-synome entities contract JSON and pydantic schema."
361
+ )
362
+ parser.add_argument(
363
+ "--out",
364
+ type=Path,
365
+ default=Path("generated/stl/axis_synome_entities.json"),
366
+ help="Output JSON data path",
367
+ )
368
+ parser.add_argument(
369
+ "--schema-out",
370
+ type=Path,
371
+ default=Path("generated/stl/axis_synome_entities.schema.json"),
372
+ help="Output JSON schema path",
373
+ )
374
+ parser.add_argument(
375
+ "--version",
376
+ type=str,
377
+ default=None,
378
+ help="Version string embedded in exported config (default resolves from pyproject metadata)",
379
+ )
380
+ parser.add_argument(
381
+ "--git-commit",
382
+ type=str,
383
+ default=None,
384
+ help="axis-synome git commit hash embedded in exported config (default resolves from git)",
385
+ )
386
+
387
+ args = parser.parse_args()
388
+ export_axis_synome_contract(
389
+ args.out,
390
+ args.schema_out,
391
+ version=args.version,
392
+ axis_synome_git_commit=args.git_commit,
393
+ )
394
+
395
+
396
+ if __name__ == "__main__":
397
+ main()
@@ -209,8 +209,18 @@ class AlmProxy(Enum):
209
209
  GROVE_MONAD = GROVE_MONAD_ALM_PROXY
210
210
 
211
211
 
212
- # Temporary STL compatibility overrides while tracker config migrates.
213
- STL_ALM_PROXY_ADDRESS_OVERRIDES: Final[dict[tuple[PrimeAgent, Network], str]] = {
214
- (PrimeAgent.SPARK, Network.ETHEREUM_MAINNET): "0x3300f198988e4c9c63f75df86de36421f06af8c4",
215
- (PrimeAgent.GROVE, Network.ETHEREUM_MAINNET): "0x1369f7b2b38c76b6478c0f0e66d94923421891ba",
212
+ # Additional ALM-controlled wallets that are NOT the canonical ALM Proxy but
213
+ # must still be tracked by downstream consumers. The canonical ALM Proxy holds
214
+ # the operational allocation positions; these SubProxy ("risk capital" /
215
+ # treasury) wallets hold capital separately and are exported alongside the ALM
216
+ # Proxy for the same (Prime, Network) rather than replacing it.
217
+ STL_ADDITIONAL_PROXIES: Final[dict[tuple[PrimeAgent, Network], list[str]]] = {
218
+ # Spark SubProxy — Atlas A.6.1.1.1.2.1.1.3.1.1.2.
219
+ (PrimeAgent.SPARK, Network.ETHEREUM_MAINNET): [
220
+ "0x3300f198988e4c9c63f75df86de36421f06af8c4",
221
+ ],
222
+ # Grove SubProxy — Atlas A.6.1.1.2.2.1.1.3.1.1.2.
223
+ (PrimeAgent.GROVE, Network.ETHEREUM_MAINNET): [
224
+ "0x1369f7b2b38c76b6478c0f0e66d94923421891ba",
225
+ ],
216
226
  }
@@ -263,6 +263,47 @@ ASSETS_BY_PRIME: dict[PrimeName, list[Asset]] = {
263
263
  underlying_asset_source="A.6.1.1.2.2.6.1.3.4.1.1.2.2.2",
264
264
  categories={AssetCategory.LENDING_MARKET},
265
265
  ),
266
+ # Galaxy Arch CLOs. The GACLO-1 token is on Avalanche while deposits are
267
+ # made on Ethereum Mainnet, so the Atlas-recorded Underlying Asset
268
+ # Address is mainnet USDC (0xA0b8…) per the Instance Configuration
269
+ # Document. Network is Avalanche to match the token deployment chain.
270
+ Asset(
271
+ token=Token.GACLO_1,
272
+ network=Network.AVALANCHE,
273
+ protocol=Protocol.GALAXY,
274
+ address=EvmAddress("0x2C0aDFF8e114f3cA106051144353aC703D24B901"),
275
+ source="A.6.1.1.2.2.6.1.3.1.9.1.2.2.1",
276
+ underlying_asset=Token.USDC,
277
+ underlying_asset_address=EvmAddress("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"),
278
+ underlying_asset_source="A.6.1.1.2.2.6.1.3.1.9.1.2.2.3",
279
+ categories={AssetCategory.REAL_WORLD_ASSET},
280
+ ),
281
+ Asset(
282
+ token=Token.ACRDX,
283
+ network=Network.PLUME,
284
+ protocol=Protocol.CENTRIFUGE,
285
+ address=EvmAddress("0x9477724Bb54AD5417de8Baff29e59DF3fB4DA74f"),
286
+ source="A.6.1.1.2.2.6.1.3.5.1.1.2.2.1",
287
+ underlying_asset=Token.USDC,
288
+ underlying_asset_address=EvmAddress("0x222365EF19F7947e5484218551B56bb3965Aa7aF"),
289
+ underlying_asset_source="A.6.1.1.2.2.6.1.3.5.1.1.2.2.2",
290
+ categories={AssetCategory.REAL_WORLD_ASSET},
291
+ ),
292
+ # Monad Uniswap AUSD/USDC pool. The Atlas Underlying Asset Address node
293
+ # records USDC (0xA0b8…), which is the asset supplied by the Grove
294
+ # Liquidity Layer; the token name carries no "LP" marker so the export
295
+ # derives token_type "uni_v3_pool".
296
+ Asset(
297
+ token=Token.UNISWAP_AUSD_USDC_POOL,
298
+ network=Network.MONAD,
299
+ protocol=Protocol.UNISWAP,
300
+ address=EvmAddress("0x6B405DCA74897c9442d369DcF6c0EC230f7E1c7C"),
301
+ source="A.6.1.1.2.2.6.1.3.1.12.1.2.2.1",
302
+ underlying_asset=Token.USDC,
303
+ underlying_asset_address=EvmAddress("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"),
304
+ underlying_asset_source="A.6.1.1.2.2.6.1.3.1.12.1.2.2.2",
305
+ categories={AssetCategory.CASH_STABLECOIN},
306
+ ),
266
307
  ],
267
308
  PrimeName.OBEX: [
268
309
  Asset(
@@ -410,17 +451,12 @@ ASSETS_BY_PRIME: dict[PrimeName, list[Asset]] = {
410
451
  underlying_asset_source="A.6.1.1.1.2.6.1.3.1.2.1.2.2.2",
411
452
  categories={AssetCategory.LENDING_MARKET},
412
453
  ),
413
- Asset(
414
- token=Token.SP_USDC,
415
- network=Network.ETHEREUM_MAINNET,
416
- protocol=Protocol.ARKIS,
417
- address=EvmAddress("0x377C3bd93f2a2984E1E7bE6A5C22c525eD4A4815"),
418
- source="A.6.1.1.1.2.6.1.3.1.10.1.2.2.1",
419
- underlying_asset=Token.USDC,
420
- underlying_asset_address=EvmAddress("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"),
421
- underlying_asset_source="A.6.1.1.1.2.6.1.3.1.10.1.2.2.2",
422
- categories={AssetCategory.LENDING_MARKET},
423
- ),
454
+ # TODO(axis-synome owners): the real Arkis vault (expected ~0x38464507…)
455
+ # is not yet defined here. The previous ARKIS entry reused the SparkLend
456
+ # USDC aToken address (0x377C3bd9…, kept below under SPARKLEND_PROTOCOL),
457
+ # which collapsed two distinct positions into one. It has been removed;
458
+ # add the Arkis vault with its own address once the Atlas reference is
459
+ # available.
424
460
  Asset(
425
461
  token=Token.BUIDL_I,
426
462
  network=Network.ETHEREUM_MAINNET,