axis-synome 0.1.0.dev67__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.
- {axis_synome-0.1.0.dev67/src/axis_synome.egg-info → axis_synome-0.1.0.dev68}/PKG-INFO +1 -1
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/_version.py +2 -2
- axis_synome-0.1.0.dev68/src/axis_synome/export_entities.py +397 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/alm_proxies.py +14 -4
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/assets_by_prime.py +47 -11
- axis_synome-0.1.0.dev68/src/axis_synome/spec/asc/entities/assets_missing_from_atlas.py +414 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/protocol_sets.py +1 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/tokens.py +3 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68/src/axis_synome.egg-info}/PKG-INFO +1 -1
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome.egg-info/SOURCES.txt +1 -0
- axis_synome-0.1.0.dev68/tests/axis_synome/scripts/test_export_entities.py +198 -0
- axis_synome-0.1.0.dev67/src/axis_synome/export_entities.py +0 -233
- axis_synome-0.1.0.dev67/tests/axis_synome/scripts/test_export_entities.py +0 -76
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/.flake8 +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/AGENTS.md +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/CLAUDE.md +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/README.md +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/WRITING_SPECS.md +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/examples/01_prime_basics.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/examples/02_assets_and_tokens_of_a_prime.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/examples/03_inverse_lookups.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/examples/04_atlas_provenance.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/examples/05_feeding_a_formula.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/examples/README.md +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/pyproject.toml +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/setup.cfg +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/all_entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/all_entities/lending_markets.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/asset_categories.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/assets.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/networks.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/primes.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/types.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/asc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/asc_collateral_ratio.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/asc_incentive.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/dab.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/latent_asc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/ratio_latent_asc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/formulas/resting_asc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/codegen_test/entities/agents.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/crypto_lending/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/crypto_lending/formulas/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/crypto_lending/formulas/lif.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/audit_firms.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/capital_types.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/protocol_risk.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/risk_categories.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/entities/smart_contract_risk.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/administrative_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/administrative_rrc/administrative_risk.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/aggregate_rrc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/audit_factor.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/capital_composition.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/entities/lending_protocol.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/entities/precomputed_crr.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/examples/risk_capital_walkthrough.ipynb +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/financial_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/financial_rrc/entities.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/financial_rrc/perpetual_positions.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/asset_correlation_coefficient.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/capital_requirement_without_buffers.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/exposure_caps.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/fixed_crr_rrc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/instance_financial_rrc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/lending_rrc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/pipeline.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/precomputed_crr_rrc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/probability_of_default.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/formulas/required_risk_capital.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/instance_rrc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/jrc_loss_allocation.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/lindy_factor.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/smart_contract_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/smart_contract_rrc/exceptions.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/smart_contract_rrc/smart_contract_risk.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/risk_capital/total_risk_capital.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/README.md +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/entities/assessor_score.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/entities/assets.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/entities/mappings.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/formulas/crr.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/suraf/formulas/scoring.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_inspect/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_inspect/__main__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_inspect/cli.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/correlation_matrix.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/evm_address.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/math_protocol.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/pendle_validation.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/references/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/references/graph.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/runtime/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/runtime/base.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/runtime/math.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/runtime/reference.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/validated_dataclass.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_support/validated_str.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_validator/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_validator/check_source_uuids.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_validator/checker.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_validator/flake8_plugin.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec_validator/python_subset.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome.egg-info/dependency_links.txt +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome.egg-info/entry_points.txt +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome.egg-info/requires.txt +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome.egg-info/top_level.txt +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/conftest.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/mocks.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_alm_proxies.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_asc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_asc_collateral_ratio.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_asc_incentive.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_asset_categories.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_dab.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_evm_address.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_latent_asc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_prime_agent_data_validation.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_ratio_latent_asc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/asc/test_resting_asc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/administrative_rrc/test_administrative_risk.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/financial_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/financial_rrc/test_lending_rrc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/financial_rrc/test_perpetual_positions.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/formulas/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/formulas/test_correlation_matrix.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/formulas/test_loss_given_default.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/smart_contract_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/smart_contract_rrc/test_exceptions.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/smart_contract_rrc/test_smart_contract_risk.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_a321_a322_integration.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_aggregate_rrc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_capital_composition.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_instance_rrc.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_jrc_loss_allocation.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/risk_capital/test_total_risk_capital.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_inspect/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_inspect/test_cli.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/references/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/references/test_graph.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/runtime/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/runtime/test_base.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_support/runtime/test_math.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_validator/test_check_source_uuids.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_validator/test_checker.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/spec_validator/test_flake8_plugin.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/entities/test_assessor_score.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/formulas/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/formulas/test_crr.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/formulas/test_scoring.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/crr_mapping.csv +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/penalty.csv +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_1_scores.csv +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_2_scores.csv +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_3_scores.csv +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/static/aave_ausdc/v1/weights.csv +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/suraf_client/__init__.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/suraf_client/suraf_client.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/suraf/suraf_client/test_suraf_client.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/tests/axis_synome/test_examples.py +0 -0
- {axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/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.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()
|
{axis_synome-0.1.0.dev67 → axis_synome-0.1.0.dev68}/src/axis_synome/spec/asc/entities/alm_proxies.py
RENAMED
|
@@ -209,8 +209,18 @@ class AlmProxy(Enum):
|
|
|
209
209
|
GROVE_MONAD = GROVE_MONAD_ALM_PROXY
|
|
210
210
|
|
|
211
211
|
|
|
212
|
-
#
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
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,
|