Skip to main content
Needs the next SDK release. The backend config lists money market tokens for Robinhood Chain, but @sodax/sdk 2.1.0 lists none, so on 2.1.0 these calls fail validation with an unsupported-token error. Robinhood Chain money market support is on main for the next release. The code below is written for that release.
Fragmented money markets mean lower capital efficiency and worse rates. The SODAX money market pools lending liquidity on the hub while letting users act from any supported network, including Robinhood Chain. A user can supply tokens from Robinhood Chain and borrow on another network, or borrow into their Robinhood Chain account against collateral held elsewhere, without your product running its own lending infrastructure. Four actions, all through 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 assets that work in the money market from Robinhood Chain are a subset of the Robinhood Chain swap list. Stock Tokens are not among them; they are swap-only. Read the list at runtime, as below, or see Networks & Assets.

Supply from Robinhood Chain

Supplying an ERC-20 token needs an allowance first, the same as any EVM network:

Borrow to Robinhood Chain

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.
Build every amount from the token’s own decimals: on Robinhood Chain, USDG uses 6 while ETH and bnUSD use 18. withdraw and repay follow the same shape. Withdraw and borrow need no approval on any network; repaying with an ERC-20 token needs an allowance, like supply. Native ETH needs no approval.

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 on result.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).