axis-synome 0.1.0.dev62__tar.gz → 0.1.0.dev63__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.
- {axis_synome-0.1.0.dev62/src/axis_synome.egg-info → axis_synome-0.1.0.dev63}/PKG-INFO +1 -1
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/_version.py +2 -2
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/tokens.py +1 -6
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/formulas/asc_collateral_ratio.py +6 -4
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/formulas/asc_incentive.py +8 -5
- axis_synome-0.1.0.dev63/src/axis_synome/spec/asc/formulas/dab.py +25 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63/src/axis_synome.egg-info}/PKG-INFO +1 -1
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome.egg-info/SOURCES.txt +0 -1
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/conftest.py +2 -2
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/mocks.py +6 -6
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_asc_collateral_ratio.py +15 -2
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_asc_incentive.py +11 -6
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_dab.py +4 -3
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_latent_asc.py +3 -3
- axis_synome-0.1.0.dev62/src/axis_synome/spec/asc/README.md +0 -419
- axis_synome-0.1.0.dev62/src/axis_synome/spec/asc/formulas/dab.py +0 -24
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/.flake8 +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/AGENTS.md +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/CLAUDE.md +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/README.md +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/WRITING_SPECS.md +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/pyproject.toml +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/setup.cfg +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/export_entities.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/all_entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/all_entities/lending_markets.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/alm_proxies.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/asset_categories.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/assets.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/assets_by_prime.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/networks.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/primes.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/protocol_sets.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/types.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/formulas/asc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/formulas/latent_asc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/formulas/ratio_latent_asc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/formulas/resting_asc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/codegen_test/entities/agents.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/crypto_lending/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/crypto_lending/formulas/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/crypto_lending/formulas/lif.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/entities/audit_firms.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/entities/protocol_risk.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/entities/smart_contract_risk.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/administrative_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/administrative_rrc/administrative_risk.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/audit_factor.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/entities/lending_protocol.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/entities/precomputed_crr.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/financial_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/financial_rrc/entities.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/financial_rrc/perpetual_positions.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/asset_correlation_coefficient.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/capital_requirement_without_buffers.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/exposure_caps.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/fixed_crr_rrc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/instance_financial_rrc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/lending_rrc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/pipeline.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/precomputed_crr_rrc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/probability_of_default.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/formulas/required_risk_capital.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/lindy_factor.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/smart_contract_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/smart_contract_rrc/exceptions.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/risk_capital/smart_contract_rrc/smart_contract_risk.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/suraf/README.md +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/suraf/entities/assessor_score.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/suraf/entities/assets.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/suraf/entities/mappings.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/suraf/formulas/crr.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/suraf/formulas/scoring.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/correlation_matrix.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/evm_address.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/math_protocol.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/pendle_validation.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/references/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/references/graph.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/runtime/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/runtime/base.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/runtime/math.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/runtime/reference.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/validated_dataclass.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_support/validated_str.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_validator/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_validator/check_source_uuids.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_validator/checker.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_validator/flake8_plugin.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec_validator/python_subset.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome.egg-info/dependency_links.txt +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome.egg-info/entry_points.txt +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome.egg-info/requires.txt +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome.egg-info/top_level.txt +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_alm_proxies.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_asc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_asset_categories.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_evm_address.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_prime_agent_data_validation.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_ratio_latent_asc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_resting_asc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/administrative_rrc/test_administrative_risk.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/financial_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/financial_rrc/test_lending_rrc.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/financial_rrc/test_perpetual_positions.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/formulas/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/formulas/test_correlation_matrix.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/formulas/test_loss_given_default.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/smart_contract_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/smart_contract_rrc/test_exceptions.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/risk_capital/smart_contract_rrc/test_smart_contract_risk.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/scripts/test_export_entities.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/spec_support/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/spec_support/references/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/spec_support/references/test_graph.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/spec_support/runtime/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/spec_support/runtime/test_base.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/spec_support/runtime/test_math.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/spec_validator/test_check_source_uuids.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/spec_validator/test_checker.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/spec_validator/test_flake8_plugin.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/entities/test_assessor_score.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/formulas/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/formulas/test_crr.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/formulas/test_scoring.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/static/aave_ausdc/v1/crr_mapping.csv +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/static/aave_ausdc/v1/penalty.csv +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_1_scores.csv +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_2_scores.csv +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_3_scores.csv +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/static/aave_ausdc/v1/weights.csv +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/suraf_client/__init__.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/suraf_client/suraf_client.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/suraf/suraf_client/test_suraf_client.py +0 -0
- {axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/uv.lock +0 -0
|
@@ -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.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 1, 0, '
|
|
21
|
+
__version__ = version = '0.1.0.dev63'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 0, 'dev63')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
{axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/src/axis_synome/spec/asc/entities/tokens.py
RENAMED
|
@@ -56,14 +56,9 @@ class Token(Enum):
|
|
|
56
56
|
WETH = "WETH"
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
CASH_STABLECOINS = {Token.USDC, Token.
|
|
59
|
+
CASH_STABLECOINS = {Token.USDC, Token.USDT, Token.PYUSD}
|
|
60
60
|
"""Tokens treated as Cash Stablecoins for ASC/DAB calculations.
|
|
61
61
|
|
|
62
|
-
Note: The Atlas (A.3.3.2.1.3) currently defines Cash Stablecoins as
|
|
63
|
-
USDC, USDT, and pyUSD. This constant differs (includes USDS and DAI;
|
|
64
|
-
omits PYUSD) and the discrepancy should be reconciled — either by
|
|
65
|
-
amending the Atlas or by updating this set.
|
|
66
|
-
|
|
67
62
|
:source_uuid: 066a4d9f-13ed-4ac3-a55a-df7bf3429649
|
|
68
63
|
"""
|
|
69
64
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from axis_synome.spec.asc.entities.primes import EligiblePrimeAgentASC
|
|
2
|
+
from axis_synome.spec.asc.entities.tokens import Token
|
|
2
3
|
from axis_synome.spec.asc.entities.types import Position
|
|
3
4
|
from axis_synome.spec.asc.formulas.latent_asc import latent_asc
|
|
4
5
|
from axis_synome.spec.asc.formulas.resting_asc import resting_asc
|
|
@@ -7,13 +8,14 @@ from axis_synome.spec.asc.formulas.resting_asc import resting_asc
|
|
|
7
8
|
def collateral_portfolio(
|
|
8
9
|
positions: list[Position],
|
|
9
10
|
) -> float:
|
|
10
|
-
"""Total
|
|
11
|
+
"""Total capital deployed by the Prime Agent from Sky through the Allocation System, excluding USDS.
|
|
12
|
+
|
|
13
|
+
Positions are all assets the Prime has deployed via the Allocation System Primitive.
|
|
14
|
+
Any portion held in USDS is excluded per Atlas A.3.3.1.3.1.
|
|
11
15
|
|
|
12
16
|
:source_uuid: 64e1390f-68a1-43ec-87a8-8ae7b990f7ec
|
|
13
|
-
:ambiguity: collateral_portfolio sums all positions including USDS — Atlas
|
|
14
|
-
A.3.3.1.3.1 explicitly excludes USDS from the Agent Collateral Portfolio.
|
|
15
17
|
"""
|
|
16
|
-
return sum(p.value_usd for p in positions)
|
|
18
|
+
return sum(p.value_usd for p in positions if p.asset.underlying_asset != Token.USDS)
|
|
17
19
|
|
|
18
20
|
|
|
19
21
|
def asc_collateral_ratio(prime: EligiblePrimeAgentASC, positions: list[Position]) -> float:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from axis_synome.spec.asc.entities.primes import EligiblePrimeAgentASC
|
|
2
2
|
from axis_synome.spec.asc.entities.types import Position
|
|
3
|
+
from axis_synome.spec.asc.formulas.asc_collateral_ratio import collateral_portfolio
|
|
3
4
|
from axis_synome.spec.asc.formulas.latent_asc import latent_asc
|
|
4
5
|
from axis_synome.spec.asc.formulas.resting_asc import resting_asc
|
|
5
6
|
|
|
@@ -12,11 +13,13 @@ def asc_incentive(
|
|
|
12
13
|
) -> float:
|
|
13
14
|
"""ASC incentive payment: eligible ASC times (base_rate - treasury_bill_rate).
|
|
14
15
|
|
|
16
|
+
Eligible ASC is the lesser of actual ASC and minimum required ASC.
|
|
17
|
+
|
|
15
18
|
:source_uuid: 693330d6-9072-4054-bd61-d788537e34e8
|
|
16
|
-
:ambiguity: eligible_asc_usd = actual ASC with no min() cap — Atlas
|
|
17
|
-
A.3.3.2.2.4.1.1 defines Eligible ASC as the lesser of actual ASC and
|
|
18
|
-
Minimum ASC; the cap is absent, causing over-payment when actual ASC
|
|
19
|
-
exceeds the required minimum.
|
|
20
19
|
"""
|
|
21
|
-
|
|
20
|
+
actual_asc_usd: float = resting_asc(positions) + latent_asc(prime, positions)
|
|
21
|
+
agent = prime.value
|
|
22
|
+
portfolio_usd: float = collateral_portfolio(positions)
|
|
23
|
+
minimum_required_asc_usd: float = portfolio_usd * agent.min_pct_asc_of_collateral
|
|
24
|
+
eligible_asc_usd: float = min(actual_asc_usd, minimum_required_asc_usd)
|
|
22
25
|
return eligible_asc_usd * (base_rate - treasury_bill_rate)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from typing import Final
|
|
2
|
+
|
|
3
|
+
from axis_synome.spec.asc.entities.primes import EligiblePrimeAgentASC
|
|
4
|
+
from axis_synome.spec.asc.entities.types import Position
|
|
5
|
+
from axis_synome.spec.asc.formulas.asc_collateral_ratio import collateral_portfolio
|
|
6
|
+
|
|
7
|
+
DAB_REQUIRED_PCT: Final[float] = 0.25
|
|
8
|
+
"""Required DAB as a fraction of minimum required ASC.
|
|
9
|
+
|
|
10
|
+
:source_uuid: 1e129119-a2ce-4978-b235-c50f2a1c5e2e
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def dab_required(
|
|
15
|
+
prime: EligiblePrimeAgentASC,
|
|
16
|
+
positions: list[Position],
|
|
17
|
+
) -> float:
|
|
18
|
+
"""Required DAB: DAB_REQUIRED_PCT of minimum required ASC.
|
|
19
|
+
|
|
20
|
+
:source_uuid: 1e129119-a2ce-4978-b235-c50f2a1c5e2e
|
|
21
|
+
"""
|
|
22
|
+
agent = prime.value
|
|
23
|
+
portfolio_usd: float = collateral_portfolio(positions)
|
|
24
|
+
minimum_required_asc_usd: float = portfolio_usd * agent.min_pct_asc_of_collateral
|
|
25
|
+
return minimum_required_asc_usd * DAB_REQUIRED_PCT
|
|
@@ -17,7 +17,6 @@ src/axis_synome.egg-info/top_level.txt
|
|
|
17
17
|
src/axis_synome/spec/__init__.py
|
|
18
18
|
src/axis_synome/spec/all_entities/__init__.py
|
|
19
19
|
src/axis_synome/spec/all_entities/lending_markets.py
|
|
20
|
-
src/axis_synome/spec/asc/README.md
|
|
21
20
|
src/axis_synome/spec/asc/entities/__init__.py
|
|
22
21
|
src/axis_synome/spec/asc/entities/alm_proxies.py
|
|
23
22
|
src/axis_synome/spec/asc/entities/asset_categories.py
|
|
@@ -27,7 +27,7 @@ def spark_positions():
|
|
|
27
27
|
"pool_paired_with_usds": True,
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
|
-
"token": "
|
|
30
|
+
"token": "USDT",
|
|
31
31
|
"protocol": "Uniswap",
|
|
32
32
|
"network": "Ethereum Mainnet",
|
|
33
33
|
"value_usd": 250.0,
|
|
@@ -55,7 +55,7 @@ def spark_positions():
|
|
|
55
55
|
"value_usd": 200.0,
|
|
56
56
|
},
|
|
57
57
|
{"token": "USDT", "protocol": "Aave", "network": "Ethereum Mainnet", "value_usd": 150.0},
|
|
58
|
-
{"token": "
|
|
58
|
+
{"token": "PYUSD", "protocol": "Morpho", "network": "Ethereum Mainnet", "value_usd": 300.0},
|
|
59
59
|
]
|
|
60
60
|
# Map as the second step: convert raw records into typed Position objects
|
|
61
61
|
return mocks.positions_from_records(raw_data)
|
|
@@ -37,7 +37,7 @@ def spark_resting_positions() -> list[Position]:
|
|
|
37
37
|
- USDC in PSM3 on Arbitrum (L2 PSM) = 200.0
|
|
38
38
|
- USDC in PSM3 on Base (L2 PSM) = 150.0
|
|
39
39
|
- USDC in Curve paired with USDS = 300.0
|
|
40
|
-
-
|
|
40
|
+
- USDT in Uniswap paired with USDS = 250.0
|
|
41
41
|
- USDC in GUNI at 0.01% fee tier = 400.0
|
|
42
42
|
total = 1 400.0
|
|
43
43
|
"""
|
|
@@ -97,11 +97,11 @@ def spark_resting_positions() -> list[Position]:
|
|
|
97
97
|
),
|
|
98
98
|
Position(
|
|
99
99
|
asset=Asset(
|
|
100
|
-
token=Token.
|
|
100
|
+
token=Token.USDT,
|
|
101
101
|
protocol=Protocol.UNISWAP,
|
|
102
102
|
network=Network.ETHEREUM_MAINNET,
|
|
103
103
|
address=MOCK_ADDRESS,
|
|
104
|
-
underlying_asset=Token.
|
|
104
|
+
underlying_asset=Token.USDT,
|
|
105
105
|
underlying_asset_address=MOCK_ADDRESS,
|
|
106
106
|
underlying_asset_source="",
|
|
107
107
|
categories={AssetCategory.LENDING_MARKET},
|
|
@@ -133,7 +133,7 @@ def spark_latent_positions() -> list[Position]:
|
|
|
133
133
|
- USDC in Curve NOT paired with USDS = 100.0
|
|
134
134
|
- USDC in SparkLend (lending) = 200.0
|
|
135
135
|
- USDT in Aave (lending) = 150.0
|
|
136
|
-
-
|
|
136
|
+
- PYUSD in Morpho (lending) = 300.0
|
|
137
137
|
total = 750.0
|
|
138
138
|
"""
|
|
139
139
|
return [
|
|
@@ -179,11 +179,11 @@ def spark_latent_positions() -> list[Position]:
|
|
|
179
179
|
),
|
|
180
180
|
Position(
|
|
181
181
|
asset=Asset(
|
|
182
|
-
token=Token.
|
|
182
|
+
token=Token.PYUSD,
|
|
183
183
|
protocol=Protocol.MORPHO,
|
|
184
184
|
network=Network.ETHEREUM_MAINNET,
|
|
185
185
|
address=MOCK_ADDRESS,
|
|
186
|
-
underlying_asset=Token.
|
|
186
|
+
underlying_asset=Token.PYUSD,
|
|
187
187
|
underlying_asset_address=MOCK_ADDRESS,
|
|
188
188
|
underlying_asset_source="",
|
|
189
189
|
categories={AssetCategory.LENDING_MARKET},
|
|
@@ -19,8 +19,8 @@ from .mocks import MOCK_ADDRESS, MOCK_CATEGORIES
|
|
|
19
19
|
SPARK = EligiblePrimeAgentASC.SPARK
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
def
|
|
23
|
-
#
|
|
22
|
+
def test_collateral_portfolio_excludes_usds():
|
|
23
|
+
# USDS position is excluded per Atlas A.3.3.1.3.1; non-USDS positions are summed.
|
|
24
24
|
positions = [
|
|
25
25
|
Position(
|
|
26
26
|
asset=Asset(
|
|
@@ -48,6 +48,19 @@ def test_collateral_portfolio_sums_all_positions():
|
|
|
48
48
|
),
|
|
49
49
|
value_usd=900.0,
|
|
50
50
|
),
|
|
51
|
+
Position(
|
|
52
|
+
asset=Asset(
|
|
53
|
+
token=Token.USDS,
|
|
54
|
+
protocol=Protocol.UNISWAP,
|
|
55
|
+
network=Network.ETHEREUM_MAINNET,
|
|
56
|
+
address=MOCK_ADDRESS,
|
|
57
|
+
underlying_asset=Token.USDS,
|
|
58
|
+
underlying_asset_address=MOCK_ADDRESS,
|
|
59
|
+
underlying_asset_source="",
|
|
60
|
+
categories=MOCK_CATEGORIES,
|
|
61
|
+
),
|
|
62
|
+
value_usd=500.0,
|
|
63
|
+
),
|
|
51
64
|
]
|
|
52
65
|
assert collateral_portfolio(positions) == 1000.0
|
|
53
66
|
|
{axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_asc_incentive.py
RENAMED
|
@@ -16,8 +16,9 @@ SPARK = EligiblePrimeAgentASC.SPARK
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def test_positive_incentive_when_base_above_tbill():
|
|
19
|
-
#
|
|
20
|
-
#
|
|
19
|
+
# portfolio=1000, min_required_asc = 1000*0.05 = 50
|
|
20
|
+
# actual_asc=1000 > min_required, so eligible=50
|
|
21
|
+
# incentive = 50*0.02 = 1.0
|
|
21
22
|
positions = [
|
|
22
23
|
Position(
|
|
23
24
|
asset=Asset(
|
|
@@ -35,7 +36,7 @@ def test_positive_incentive_when_base_above_tbill():
|
|
|
35
36
|
]
|
|
36
37
|
assert asc_incentive(
|
|
37
38
|
SPARK, positions, base_rate=0.05, treasury_bill_rate=0.03
|
|
38
|
-
) == pytest.approx(
|
|
39
|
+
) == pytest.approx(1.0)
|
|
39
40
|
|
|
40
41
|
|
|
41
42
|
def test_zero_incentive_when_rates_equal():
|
|
@@ -61,6 +62,8 @@ def test_zero_incentive_when_rates_equal():
|
|
|
61
62
|
|
|
62
63
|
def test_negative_incentive_when_base_below_tbill():
|
|
63
64
|
# Can occur when the treasury bill rate exceeds the base rate.
|
|
65
|
+
# eligible = min(actual_asc=1000, min_required=50) = 50
|
|
66
|
+
# incentive = 50*(0.03-0.05) = -1.0
|
|
64
67
|
positions = [
|
|
65
68
|
Position(
|
|
66
69
|
asset=Asset(
|
|
@@ -78,7 +81,7 @@ def test_negative_incentive_when_base_below_tbill():
|
|
|
78
81
|
]
|
|
79
82
|
assert asc_incentive(
|
|
80
83
|
SPARK, positions, base_rate=0.03, treasury_bill_rate=0.05
|
|
81
|
-
) == pytest.approx(-
|
|
84
|
+
) == pytest.approx(-1.0)
|
|
82
85
|
|
|
83
86
|
|
|
84
87
|
def test_incentive_scales_with_asc_amount():
|
|
@@ -122,11 +125,13 @@ def test_incentive_scales_with_asc_amount():
|
|
|
122
125
|
def test_bridge_asc_incentive(spark_positions):
|
|
123
126
|
"""Shows asc_incentive against user-fetched positions.
|
|
124
127
|
|
|
125
|
-
|
|
128
|
+
portfolio=2150, min_required_asc = 2150*0.05 = 107.5
|
|
129
|
+
actual_asc=2150 > min_required, so eligible=107.5
|
|
130
|
+
incentive = 107.5*0.02 = 2.15
|
|
126
131
|
|
|
127
132
|
The rate parameters (base_rate, treasury_bill_rate) are supplied by the
|
|
128
133
|
caller — they come from a separate governance or market data source,
|
|
129
134
|
not from the position records.
|
|
130
135
|
"""
|
|
131
136
|
result = asc_incentive(SPARK, spark_positions, base_rate=0.05, treasury_bill_rate=0.03)
|
|
132
|
-
assert result == pytest.approx(
|
|
137
|
+
assert result == pytest.approx(2.15)
|
|
@@ -15,8 +15,9 @@ SPARK = EligiblePrimeAgentASC.SPARK
|
|
|
15
15
|
|
|
16
16
|
# dab_required
|
|
17
17
|
def test_dab_required_is_fraction_of_asc():
|
|
18
|
-
#
|
|
19
|
-
#
|
|
18
|
+
# portfolio = 200 + 100 = 300
|
|
19
|
+
# min_required_asc = portfolio * 0.05 = 15
|
|
20
|
+
# dab = min_required_asc * 0.25 = 3.75
|
|
20
21
|
positions = [
|
|
21
22
|
Position(
|
|
22
23
|
asset=Asset(
|
|
@@ -45,4 +46,4 @@ def test_dab_required_is_fraction_of_asc():
|
|
|
45
46
|
value_usd=100.0,
|
|
46
47
|
),
|
|
47
48
|
]
|
|
48
|
-
assert dab_required(SPARK, positions) == pytest.approx(75
|
|
49
|
+
assert dab_required(SPARK, positions) == pytest.approx(3.75)
|
{axis_synome-0.1.0.dev62 → axis_synome-0.1.0.dev63}/tests/axis_synome/asc/test_latent_asc.py
RENAMED
|
@@ -81,11 +81,11 @@ def test_cash_stablecoin_in_morpho_counts():
|
|
|
81
81
|
positions = [
|
|
82
82
|
Position(
|
|
83
83
|
asset=Asset(
|
|
84
|
-
token=Token.
|
|
84
|
+
token=Token.PYUSD,
|
|
85
85
|
protocol=Protocol.MORPHO,
|
|
86
86
|
network=Network.ETHEREUM_MAINNET,
|
|
87
87
|
address=MOCK_ADDRESS,
|
|
88
|
-
underlying_asset=Token.
|
|
88
|
+
underlying_asset=Token.PYUSD,
|
|
89
89
|
underlying_asset_address=MOCK_ADDRESS,
|
|
90
90
|
underlying_asset_source="",
|
|
91
91
|
categories=MOCK_CATEGORIES,
|
|
@@ -169,7 +169,7 @@ def test_pool_with_unknown_pairing_counts_as_latent():
|
|
|
169
169
|
|
|
170
170
|
|
|
171
171
|
def test_non_cash_stablecoin_in_lending_is_excluded():
|
|
172
|
-
# Only CASH_STABLECOINS (USDC,
|
|
172
|
+
# Only CASH_STABLECOINS (USDC, USDT, pyUSD) qualify.
|
|
173
173
|
positions = [
|
|
174
174
|
Position(
|
|
175
175
|
asset=Asset(
|