axis-synome 0.1.0.dev33__tar.gz → 0.1.0.dev34__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 (101) hide show
  1. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/PKG-INFO +1 -1
  2. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/_version.py +2 -2
  3. axis_synome-0.1.0.dev34/src/axis_synome/spec/asc/entities/alm_proxies.py +209 -0
  4. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/entities/networks.py +2 -0
  5. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/entities/primes.py +4 -0
  6. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome.egg-info/PKG-INFO +1 -1
  7. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome.egg-info/SOURCES.txt +2 -0
  8. axis_synome-0.1.0.dev34/tests/axis_synome/asc/test_alm_proxies.py +32 -0
  9. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/.flake8 +0 -0
  10. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/README.md +0 -0
  11. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/WRITING_SPECS.md +0 -0
  12. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/pyproject.toml +0 -0
  13. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/setup.cfg +0 -0
  14. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/__init__.py +0 -0
  15. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/__init__.py +0 -0
  16. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/README.md +0 -0
  17. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/entities/__init__.py +0 -0
  18. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/entities/assets.py +0 -0
  19. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/entities/assets_by_prime.py +0 -0
  20. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/entities/protocol_sets.py +0 -0
  21. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/entities/tokens.py +0 -0
  22. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/entities/types.py +0 -0
  23. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/formulas/asc.py +0 -0
  24. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/formulas/asc_collateral_ratio.py +0 -0
  25. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/formulas/asc_incentive.py +0 -0
  26. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/formulas/dab.py +0 -0
  27. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/formulas/latent_asc.py +0 -0
  28. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/formulas/ratio_latent_asc.py +0 -0
  29. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/asc/formulas/resting_asc.py +0 -0
  30. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/codegen_test/entities/agents.py +0 -0
  31. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/crypto_lending/__init__.py +0 -0
  32. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/crypto_lending/formulas/__init__.py +0 -0
  33. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/crypto_lending/formulas/lif.py +0 -0
  34. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/risk_capital/__init__.py +0 -0
  35. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/risk_capital/financial_rrc/__init__.py +0 -0
  36. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/risk_capital/financial_rrc/entities.py +0 -0
  37. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/risk_capital/financial_rrc/perpetual_positions.py +0 -0
  38. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/risk_capital/formulas/__init__.py +0 -0
  39. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/risk_capital/formulas/required_risk_capital.py +0 -0
  40. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/suraf/README.md +0 -0
  41. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/suraf/entities/assessor_score.py +0 -0
  42. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/suraf/entities/assets.py +0 -0
  43. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/suraf/entities/mappings.py +0 -0
  44. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/suraf/formulas/crr.py +0 -0
  45. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec/suraf/formulas/scoring.py +0 -0
  46. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_support/__init__.py +0 -0
  47. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_support/evm_address.py +0 -0
  48. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_support/pendle_validation.py +0 -0
  49. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_support/runtime/__init__.py +0 -0
  50. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_support/runtime/base.py +0 -0
  51. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_support/runtime/math.py +0 -0
  52. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_support/runtime/reference.py +0 -0
  53. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_support/validated_dataclass.py +0 -0
  54. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_support/validated_str.py +0 -0
  55. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_validator/__init__.py +0 -0
  56. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_validator/checker.py +0 -0
  57. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_validator/flake8_plugin.py +0 -0
  58. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome/spec_validator/python_subset.py +0 -0
  59. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome.egg-info/dependency_links.txt +0 -0
  60. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome.egg-info/entry_points.txt +0 -0
  61. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome.egg-info/requires.txt +0 -0
  62. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/src/axis_synome.egg-info/top_level.txt +0 -0
  63. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/__init__.py +0 -0
  64. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/conftest.py +0 -0
  65. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/mocks.py +0 -0
  66. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/test_asc.py +0 -0
  67. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/test_asc_collateral_ratio.py +0 -0
  68. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/test_asc_incentive.py +0 -0
  69. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/test_dab.py +0 -0
  70. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/test_evm_address.py +0 -0
  71. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/test_latent_asc.py +0 -0
  72. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/test_prime_agent_data_validation.py +0 -0
  73. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/test_ratio_latent_asc.py +0 -0
  74. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/asc/test_resting_asc.py +0 -0
  75. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/risk_capital/__init__.py +0 -0
  76. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/risk_capital/financial_rrc/__init__.py +0 -0
  77. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/risk_capital/financial_rrc/test_perpetual_positions.py +0 -0
  78. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/risk_capital/formulas/__init__.py +0 -0
  79. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/risk_capital/formulas/test_loss_given_default.py +0 -0
  80. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/spec_support/__init__.py +0 -0
  81. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/spec_support/runtime/__init__.py +0 -0
  82. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/spec_support/runtime/test_base.py +0 -0
  83. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/spec_support/runtime/test_math.py +0 -0
  84. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/spec_validator/test_checker.py +0 -0
  85. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/spec_validator/test_flake8_plugin.py +0 -0
  86. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/__init__.py +0 -0
  87. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/entities/__init__.py +0 -0
  88. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/entities/test_assessor_score.py +0 -0
  89. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/formulas/__init__.py +0 -0
  90. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/formulas/test_crr.py +0 -0
  91. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/formulas/test_scoring.py +0 -0
  92. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/static/aave_ausdc/v1/crr_mapping.csv +0 -0
  93. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/static/aave_ausdc/v1/penalty.csv +0 -0
  94. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_1_scores.csv +0 -0
  95. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_2_scores.csv +0 -0
  96. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_3_scores.csv +0 -0
  97. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/static/aave_ausdc/v1/weights.csv +0 -0
  98. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/suraf_client/__init__.py +0 -0
  99. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/suraf_client/suraf_client.py +0 -0
  100. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/tests/axis_synome/suraf/suraf_client/test_suraf_client.py +0 -0
  101. {axis_synome-0.1.0.dev33 → axis_synome-0.1.0.dev34}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: axis-synome
3
- Version: 0.1.0.dev33
3
+ Version: 0.1.0.dev34
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.dev33'
22
- __version_tuple__ = version_tuple = (0, 1, 0, 'dev33')
21
+ __version__ = version = '0.1.0.dev34'
22
+ __version_tuple__ = version_tuple = (0, 1, 0, 'dev34')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -0,0 +1,209 @@
1
+ """ALM Proxy contract deployments per (Prime, Network).
2
+
3
+ The ALM Proxy is the contract authorised to allocate liquidity for a Sky Star
4
+ (Prime) on a given chain. Each deployment is defined as a ``Final`` constant
5
+ carrying its Atlas provenance via a ``:source_uuid:`` docstring marker; the
6
+ ``AlmProxy`` enum at the bottom of the module aggregates the constants into
7
+ a closed-world set for graph traversal.
8
+
9
+ The set below is the union of (a) entries currently approved in the Sky
10
+ Atlas — each constant's ``:source_uuid:`` is the authoritative reference to
11
+ the Atlas document — and (b) entries used by downstream consumers that
12
+ maintain their own hard-coded allocation tracker config. Where the two
13
+ disagree the divergence is documented in the constant's docstring. The
14
+ Atlas is the governance source of truth; entries that exist only on the
15
+ consumer side are kept so that axis_synome remains a superset that those
16
+ consumers can pull from.
17
+ """
18
+
19
+ from enum import Enum
20
+ from typing import Final
21
+
22
+ from axis_synome.spec.asc.entities.networks import Network
23
+ from axis_synome.spec.asc.entities.primes import PrimeAgent
24
+ from axis_synome.spec_support.evm_address import EvmAddress
25
+ from axis_synome.spec_support.validated_dataclass import validated_dataclass
26
+
27
+
28
+ @validated_dataclass
29
+ class AlmProxyDeployment:
30
+ """A Sky Star's ALM Proxy contract deployment on a specific network."""
31
+
32
+ prime: PrimeAgent
33
+ network: Network
34
+ address: EvmAddress
35
+
36
+
37
+ # --- Spark (Atlas ALM Contracts parent :source_uuid: 7db865de-8519-464b-8752-f39ecaf54fd2) ---
38
+
39
+ SPARK_ETHEREUM_MAINNET_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
40
+ prime=PrimeAgent.SPARK,
41
+ network=Network.ETHEREUM_MAINNET,
42
+ address=EvmAddress("0x1601843c5E9bC251A3272907010AFa41Fa18347E"),
43
+ )
44
+ """ALM Proxy contract deployment for Spark on Ethereum Mainnet.
45
+
46
+ :source_uuid: a29a6751-4809-446c-a659-0dd93ca40379
47
+ """
48
+
49
+
50
+ SPARK_BASE_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
51
+ prime=PrimeAgent.SPARK,
52
+ network=Network.BASE,
53
+ address=EvmAddress("0x2917956eFF0B5eaF030abDB4EF4296DF775009cA"),
54
+ )
55
+ """ALM Proxy contract deployment for Spark on Base.
56
+
57
+ :source_uuid: 425339ce-8e44-430b-ab8c-6c69f0b757e9
58
+ """
59
+
60
+
61
+ SPARK_ARBITRUM_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
62
+ prime=PrimeAgent.SPARK,
63
+ network=Network.ARBITRUM,
64
+ address=EvmAddress("0x92afd6F2385a90e44da3a8B60fe36f6cBe1D8709"),
65
+ )
66
+ """ALM Proxy contract deployment for Spark on Arbitrum.
67
+
68
+ :source_uuid: c671b407-fcb2-48eb-8217-2ec156b581ad
69
+ """
70
+
71
+
72
+ SPARK_UNICHAIN_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
73
+ prime=PrimeAgent.SPARK,
74
+ network=Network.UNICHAIN,
75
+ address=EvmAddress("0x345E368fcCd62266B3f5F37C9a131FD1c39f5869"),
76
+ )
77
+ """ALM Proxy contract deployment for Spark on Unichain.
78
+
79
+ :source_uuid: 6affe08d-0c1c-4cbf-a100-4a04c58220bb
80
+ """
81
+
82
+
83
+ SPARK_OPTIMISM_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
84
+ prime=PrimeAgent.SPARK,
85
+ network=Network.OPTIMISM,
86
+ address=EvmAddress("0x876664f0c9Ff24D1aa355Ce9f1680AE1A5bf36fB"),
87
+ )
88
+ """ALM Proxy contract deployment for Spark on Optimism.
89
+
90
+ :source_uuid: f1895dfc-a18c-4009-bfd3-1c16c9a62092
91
+ """
92
+
93
+
94
+ SPARK_AVALANCHE_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
95
+ prime=PrimeAgent.SPARK,
96
+ network=Network.AVALANCHE,
97
+ address=EvmAddress("0xecE6B0E8a54c2f44e066fBb9234e7157B15b7FeC"),
98
+ )
99
+ """ALM Proxy contract deployment for Spark on Avalanche.
100
+
101
+ Discrepancy: the Atlas document below records the address as ``TBD`` while
102
+ sentinel stl-verify config.go already uses the address encoded above. The
103
+ ``:source_uuid:`` still points at the Atlas document so the entry remains
104
+ auditable once the Atlas value is filled in.
105
+
106
+ :source_uuid: 179f186a-079b-4663-b06c-b21f9dec85ca
107
+ """
108
+
109
+
110
+ # --- Grove (Atlas ALM Contracts parent :source_uuid: f233a46b-8dff-4335-8ccf-dc3f1c18a96f) ---
111
+
112
+ GROVE_ETHEREUM_MAINNET_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
113
+ prime=PrimeAgent.GROVE,
114
+ network=Network.ETHEREUM_MAINNET,
115
+ address=EvmAddress("0x491EDFB0B8b608044e227225C715981a30F3A44E"),
116
+ )
117
+ """ALM Proxy contract deployment for Grove on Ethereum Mainnet.
118
+
119
+ :source_uuid: fda13ac2-b3ed-4b2a-9be6-9247632dafe3
120
+ """
121
+
122
+
123
+ GROVE_AVALANCHE_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
124
+ prime=PrimeAgent.GROVE,
125
+ network=Network.AVALANCHE,
126
+ address=EvmAddress("0x7107DD8F56642327945294a18A4280C78e153644"),
127
+ )
128
+ """ALM Proxy contract deployment for Grove on Avalanche.
129
+
130
+ :source_uuid: 0704f4b5-ee5c-455c-932f-94591b8a6594
131
+ """
132
+
133
+
134
+ GROVE_BASE_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
135
+ prime=PrimeAgent.GROVE,
136
+ network=Network.BASE,
137
+ address=EvmAddress("0x9B746dBC5269e1DF6e4193Bcb441C0FbBF1CeCEe"),
138
+ )
139
+ """ALM Proxy contract deployment for Grove on Base.
140
+
141
+ Discrepancy: sentinel stl-verify config.go does not currently include this
142
+ deployment; the address below is sourced from the Atlas document referenced
143
+ by ``:source_uuid:`` and should be added to the Go side.
144
+
145
+ :source_uuid: 5c382a94-ce36-4ffa-862b-4718382450fe
146
+ """
147
+
148
+
149
+ GROVE_PLASMA_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
150
+ prime=PrimeAgent.GROVE,
151
+ network=Network.PLASMA,
152
+ address=EvmAddress("0x0C462Fff7Cc975bC9F2B0aEB8270febA5FD71e1B"),
153
+ )
154
+ """ALM Proxy contract deployment for Grove on Plasma.
155
+
156
+ Discrepancy: sentinel stl-verify config.go does not currently include this
157
+ deployment; the address below is sourced from the Atlas document referenced
158
+ by ``:source_uuid:`` and should be added to the Go side.
159
+
160
+ :source_uuid: 9d0bcc23-02d4-4389-9c85-707acf900dee
161
+ """
162
+
163
+
164
+ GROVE_PLUME_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
165
+ prime=PrimeAgent.GROVE,
166
+ network=Network.PLUME,
167
+ address=EvmAddress("0x1DB91ad50446a671e2231f77e00948E68876F812"),
168
+ )
169
+ """ALM Proxy contract deployment for Grove on Plume.
170
+
171
+ :source_uuid: dcf0beac-b93e-41a7-b8b6-98c1d4cc819b
172
+ """
173
+
174
+
175
+ GROVE_MONAD_ALM_PROXY: Final[AlmProxyDeployment] = AlmProxyDeployment(
176
+ prime=PrimeAgent.GROVE,
177
+ network=Network.MONAD,
178
+ address=EvmAddress("0x94B398ACb2fcE988871218221EA6a4a2b26CcCbC"),
179
+ )
180
+ """ALM Proxy contract deployment for Grove on Monad.
181
+
182
+ Discrepancy: no Atlas ALM Proxy Contract document exists for Grove on Monad
183
+ yet, so ``:source_uuid:`` is omitted. The address is sourced from sentinel
184
+ stl-verify config.go and should be backfilled in the Atlas.
185
+ """
186
+
187
+
188
+ class AlmProxy(Enum):
189
+ """Closed-world set of all known ALM Proxy deployments.
190
+
191
+ Each member's value is one of the ``Final[AlmProxyDeployment]`` constants
192
+ defined above. The constants carry the canonical ``:source_uuid:`` markers
193
+ used by the synome formula extractor; this enum exists so that downstream
194
+ consumers can traverse the deployments as a closed set.
195
+ """
196
+
197
+ SPARK_ETHEREUM_MAINNET = SPARK_ETHEREUM_MAINNET_ALM_PROXY
198
+ SPARK_BASE = SPARK_BASE_ALM_PROXY
199
+ SPARK_ARBITRUM = SPARK_ARBITRUM_ALM_PROXY
200
+ SPARK_UNICHAIN = SPARK_UNICHAIN_ALM_PROXY
201
+ SPARK_OPTIMISM = SPARK_OPTIMISM_ALM_PROXY
202
+ SPARK_AVALANCHE = SPARK_AVALANCHE_ALM_PROXY
203
+
204
+ GROVE_ETHEREUM_MAINNET = GROVE_ETHEREUM_MAINNET_ALM_PROXY
205
+ GROVE_AVALANCHE = GROVE_AVALANCHE_ALM_PROXY
206
+ GROVE_BASE = GROVE_BASE_ALM_PROXY
207
+ GROVE_PLASMA = GROVE_PLASMA_ALM_PROXY
208
+ GROVE_PLUME = GROVE_PLUME_ALM_PROXY
209
+ GROVE_MONAD = GROVE_MONAD_ALM_PROXY
@@ -9,6 +9,8 @@ class Network(Enum):
9
9
  UNICHAIN = "Unichain"
10
10
  AVALANCHE = "Avalanche"
11
11
  PLASMA = "Plasma"
12
+ PLUME = "Plume"
13
+ MONAD = "Monad"
12
14
 
13
15
 
14
16
  # L2 networks: all networks that are not Ethereum mainnet.
@@ -39,6 +39,8 @@ class PrimeAgent(Enum):
39
39
  Network.AVALANCHE,
40
40
  Network.BASE,
41
41
  Network.ETHEREUM_MAINNET,
42
+ Network.OPTIMISM,
43
+ Network.UNICHAIN,
42
44
  },
43
45
  )
44
46
  GROVE = PrimeAgentData(
@@ -51,6 +53,8 @@ class PrimeAgent(Enum):
51
53
  Network.BASE,
52
54
  Network.ETHEREUM_MAINNET,
53
55
  Network.PLASMA,
56
+ Network.PLUME,
57
+ Network.MONAD,
54
58
  },
55
59
  )
56
60
  KEEL = PrimeAgentData(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: axis-synome
3
- Version: 0.1.0.dev33
3
+ Version: 0.1.0.dev34
4
4
  Summary: Axis specification modules (entities, formulas, validators)
5
5
  Author-email: Archon Tech <hello@archontech.ai>
6
6
  License: MIT
@@ -14,6 +14,7 @@ src/axis_synome.egg-info/top_level.txt
14
14
  src/axis_synome/spec/__init__.py
15
15
  src/axis_synome/spec/asc/README.md
16
16
  src/axis_synome/spec/asc/entities/__init__.py
17
+ src/axis_synome/spec/asc/entities/alm_proxies.py
17
18
  src/axis_synome/spec/asc/entities/assets.py
18
19
  src/axis_synome/spec/asc/entities/assets_by_prime.py
19
20
  src/axis_synome/spec/asc/entities/networks.py
@@ -60,6 +61,7 @@ src/axis_synome/spec_validator/python_subset.py
60
61
  tests/axis_synome/asc/__init__.py
61
62
  tests/axis_synome/asc/conftest.py
62
63
  tests/axis_synome/asc/mocks.py
64
+ tests/axis_synome/asc/test_alm_proxies.py
63
65
  tests/axis_synome/asc/test_asc.py
64
66
  tests/axis_synome/asc/test_asc_collateral_ratio.py
65
67
  tests/axis_synome/asc/test_asc_incentive.py
@@ -0,0 +1,32 @@
1
+ """Tests for ALM Proxy deployment entities."""
2
+
3
+ from axis_synome.spec.asc.entities.alm_proxies import AlmProxy, AlmProxyDeployment
4
+ from axis_synome.spec.asc.entities.primes import PrimeAgent
5
+
6
+
7
+ class TestAlmProxyEnum:
8
+ def test_imports_and_constructs(self) -> None:
9
+ # Importing the module triggers EIP-55 validation on every member, so
10
+ # reaching this point means all addresses are well-formed checksums.
11
+ assert len(list(AlmProxy)) == 12
12
+
13
+ def test_unique_prime_network_pairs(self) -> None:
14
+ pairs = {(m.value.prime, m.value.network) for m in AlmProxy}
15
+ assert len(pairs) == len(list(AlmProxy))
16
+
17
+ def test_each_member_payload_is_deployment(self) -> None:
18
+ for member in AlmProxy:
19
+ assert isinstance(member.value, AlmProxyDeployment)
20
+
21
+ def test_deployment_networks_match_prime_networks(self) -> None:
22
+ # Every deployment's network must be declared on its prime's network set.
23
+ for member in AlmProxy:
24
+ dep = member.value
25
+ assert dep.network in dep.prime.value.networks, (
26
+ f"{member.name}: {dep.network} not in {dep.prime.name}.networks"
27
+ )
28
+
29
+ def test_covers_both_active_primes(self) -> None:
30
+ primes = {m.value.prime for m in AlmProxy}
31
+ assert PrimeAgent.SPARK in primes
32
+ assert PrimeAgent.GROVE in primes