Registry is a central address book. Every protocol contract resolves peer contract addresses through the Registry at runtime rather than storing them as constructor constants. This enables safe protocol upgrades — updating a Registry entry propagates to all contracts automatically.
Testnet address: CC35XWCH7SCQROTNW7PA6HZKP4JMNSVV2K7CX3HY2PSI2MI2ZQQH73ID
Stored Addresses
The Registry stores addresses for every protocol component:| Key | Description |
|---|---|
LendingPoolXLM | XLM lending pool contract |
LendingPoolUSDC | USDC lending pool contract |
LendingPoolAquariusUSDC | Aquarius USDC lending pool |
LendingPoolSoroswapUSDC | Soroswap USDC lending pool |
RiskEngineContract | Risk Engine contract |
RateModelContract | Rate Model contract |
OracleContract | Oracle (Reflector passthrough) |
AccountManagerContract | Account Manager |
SmartAccountContractHash | WASM hash used to deploy new SmartAccounts |
NativeXLMAddress | XLM Stellar Asset Contract (SAC) |
USDCAddress | USDC token contract |
BlendPoolAddress | External: Blend Capital pool |
TrackingTokenAddress | Tracking Token contract |
AquariusRouterAddress | External: Aquarius router |
AquariusPoolIndex | Aquarius pool pool_index |
Treasury | Protocol treasury address |
Account Management Functions
The Registry also stores user account data.add_account
trader. Called by AccountManager during create_account().
Authorization: AccountManager only
update_account
trader. Called when reusing an inactive account.
get_accounts
trader (active and historical).
This is the primary way to look up a user’s margin account address.
get_smart_account_hash
Address Getter Functions
Each stored address has a corresponding getter:Address Setter Functions
Each stored address has a setter callable by the admin:Querying the Registry (TypeScript Example)
Related
- Deployed Contracts — all current testnet addresses
- Architecture — why centralized address resolution matters for upgrades

