sodax.moneyMarket: supply, borrow, withdraw, repay. Each has a complete one-call form (handles the relay end-to-end) and a create*Intent form when you want the transaction only.
The money market list on Ethereum is its own list, separate from the swap list: some tokens appear in one and not the other. Native ETH is in the money market list today. Read the list at runtime, as below, or see Networks & Assets.
Supply from Ethereum
Supplying an ERC-20 needs an allowance first, the same as any EVM network:approve resets it to zero first, so the user signs twice. See USDT approvals. Supplying native ETH needs no approval.
Borrow from Ethereum
dstChainKey and dstAddress default to the source, but any supported network can be the destination. That is the cross-network story in one parameter: collateral supplied from one network, borrowed liquidity delivered to another. Here the user acts from Ethereum and receives USDC on Arbitrum:
dstChainKey and dstAddress to deliver on Ethereum. Build every amount from the token’s own decimals.
withdraw and repay follow the same shape. Withdraw and borrow need no approval on any network; repaying with an ERC-20 needs an allowance, like supply.
Building a lending UI
sodax.moneyMarket.data exposes what you need for rates, positions, and health factors without extra indexing:
getReservesHumanized(): all reserves, human-readable.getUserReservesHumanized(spokeChainKey, userAddress): a user’s positions.formatReservesUSD(request)/formatUserSummary(request): USD-converted reserves and portfolio summaries.
Error handling
The module returns typed results. Discriminate onresult.error.code ('RELAY_TIMEOUT', 'EXECUTION_FAILED', …) with structured context on result.error.context.
Full reference, including intent-only methods, gas estimation, and the per-method error-code table: Lend / Borrow (Money Market).