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 payable

Each DepositRequest specifies a vault type, target, asset, amount, optional swap data, and receiver.

Vault types handled

ERC4626Standard vault interface — calls deposit(assets, receiver). Used for Euler Earn.
UPSHIFTCustom interface — calls deposit(assetIn, amount, receiver). Used for Upshift earnAUSD.
KINTSUNative MON — unwraps WMON, calls deposit{value}(minShares, receiver). Used for Kintsu sMON.
APRIORINative MON — unwraps WMON, calls deposit{value}(assets, receiver). Used for aPriori aprMON.

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) onlyOwner

Share → 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.

External Vault Addresses

Token Addresses

Infrastructure