Contracts
Allocrypt deploys two core contracts plus protocol-owned Safe wallets on Monad (chain 143). The router is non-custodial, the lens is a read-only view layer, and the treasury/admin safes anchor protocol control.
Unaudited
These contracts have not been formally audited. Use at your own risk. Always verify contract addresses on Monadscan before interacting.
Deployed Addresses
PortfolioRouter
The router is a non-custodial deposit router. It accepts a batch of deposit instructions, pulls tokens from the caller, optionally swaps via 0x, and deposits into external vaults. Resulting shares are sent directly to the caller (or a specified receiver) — the router never holds funds between transactions.
Constructor
constructor(address wmon, address treasury, address zeroExAllowanceTarget, address zeroExSwapTarget)Core method
function deposit(DepositRequest calldata request) external payableEach DepositRequest specifies a vault type, target, asset, amount, optional swap data, and receiver.
Vault types handled
Native MON handling
For KINTSU and APRIORI vault types, the router unwraps WMON to native MON before calling the LST deposit function (which expects payable calls).
PortfolioLens
A read-only view contract (Solady Ownable) that aggregates user positions across all configured vaults. The owner can add, remove, or update vault configurations (max 16).
Key methods
function getUserPosition(address user, uint256 vaultIndex)
→ (uint256 shares, uint256 assets, uint256 usdValue)function getTotalValue(address user)
→ (uint256 totalUsd)function addVault(VaultConfig calldata config) onlyOwnerShare → asset conversion
Conversion is vault-type aware: ERC4626 uses convertToAssets(), UPSHIFT uses getSharePrice(), KINTSU uses convertToAssets(uint96), and APRIORI uses standard ERC4626.
USD valuation
Pyth price feeds provide real-time USD pricing (18-decimal precision). Stale price detection is built in.

