Skip to main content

State Variables

Public Variables

VariableTypeDescription
orderBookImplementationaddressCurrent OrderBook implementation address
kuruAmmVaultImplementationaddressCurrent KuruAMMVault implementation address
marginAccountAddressaddressMarginAccount contract address
TRUSTED_FORWARDERaddressAddress for meta-transaction forwarding

Mappings

mapping(address => MarketParams) public verifiedMarket;
Stores market parameters for each deployed OrderBook. Used to validate markets during swaps.

Core Functions

initialize

One-time initialization of the Router contract.
function initialize(
    address _owner,
    address _marginAccount,
    address _orderbookImplementation,
    address _kuruAmmVaultImplementation,
    address _trustedForwarder
) public initializer
Sets the contract owner and core component addresses. Can only be called once. Required before deploying any markets.

deployProxy

Deploys a new OrderBook market with an associated KuruAMMVault.
function deployProxy(
    IOrderBook.OrderBookType _type,
    address _baseAssetAddress,
    address _quoteAssetAddress,
    uint96 _sizePrecision,
    uint32 _pricePrecision,
    uint32 _tickSize,
    uint96 _minSize,
    uint96 _maxSize,
    uint256 _takerFeeBps,
    uint256 _makerFeeBps,
    uint96 _kuruAmmSpread
) public returns (address proxy)
Market Types:
  • NO_NATIVE - Both base and quote are ERC20 tokens
  • NATIVE_IN_BASE - Native token (Monad) as base asset
  • NATIVE_IN_QUOTE - Native token (Monad) as quote asset
Deploys both OrderBook and KuruAMMVault using Create2 for deterministic addresses. Registers the market in verifiedMarket mapping. Returns the deployed OrderBook proxy address.

computeAddress

Computes the deterministic address for an OrderBook proxy.
function computeAddress(
    address _baseAssetAddress,
    address _quoteAssetAddress,
    uint96 _sizePrecision,
    uint32 _pricePrecision,
    uint32 _tickSize,
    uint96 _minSize,
    uint96 _maxSize,
    uint256 _takerFeeBps,
    uint256 _makerFeeBps,
    uint96 _kuruAmmSpread,
    address oldImplementation,
    bool old
) public view returns (address proxy)
Pre-computes the deployment address before actual deployment. Supports implementation upgrades while preserving addresses.

computeVaultAddress

Computes the deterministic address for a KuruAMMVault.
function computeVaultAddress(
    address _marketAddress,
    address oldImplementation,
    bool old
) public view returns (address)
Pre-computes the vault address for a given market address. Used for planning and verification.

anyToAnySwap

Enables multi-hop swaps across different markets.
function anyToAnySwap(
    address[] calldata _marketAddresses,
    bool[] calldata _isBuy,
    bool[] calldata _nativeSend,
    address _debitToken,
    address _creditToken,
    uint256 _amount,
    uint256 _minAmountOut
) external payable returns (uint256 _amountOut)
Routes swaps through multiple markets. Validates each market via verifiedMarket mapping and enforces slippage protection via _minAmountOut. Supports native token transfers when _nativeSend is true. Example: Swap TOKEN_A → Native → TOKEN_B
const markets = [tokenAMarket, nativeMarket];
const isBuy = [false, false];  // Sell TOKEN_A, sell Native
const nativeSend = [false, true];

await router.anyToAnySwap(
    markets, isBuy, nativeSend,
    tokenA, tokenB, amount, minAmountOut,
    { value: nativeAmount }
);

Events

MarketRegistered

event MarketRegistered(
    address baseAsset,
    address quoteAsset,
    address market,
    address vaultAddress,
    uint32 pricePrecision,
    uint96 sizePrecision,
    uint32 tickSize,
    uint96 minSize,
    uint96 maxSize,
    uint256 takerFeeBps,
    uint256 makerFeeBps,
    uint96 kuruAmmSpread
);
Emitted when a new market is successfully deployed via deployProxy. Contains all market parameters and addresses for the OrderBook and KuruAMMVault.

OBImplementationUpdated

event OBImplementationUpdated(
    address previousImplementation,
    address newImplementation
);
Emitted when the OrderBook implementation address is updated. Future market deployments will use the new implementation.

VaultImplementationUpdated

event VaultImplementationUpdated(
    address previousImplementation,
    address newImplementation
);
Emitted when the KuruAMMVault implementation address is updated. Future vault deployments will use the new implementation.

KuruRouterSwap

event KuruRouterSwap(
    address msgSender,
    address debitToken,
    address creditToken,
    uint256 amountIn,
    uint256 amountOut
);
Emitted after a successful multi-hop swap via anyToAnySwap. Tracks the swap input/output for the entire routing path.