Workspace IndexKnowledge Notes › Moralis — wallet snapshot via API

#119PoC

Moralis — wallet snapshot via API

Querying balance/net-worth for an address with Moralis's Wallet API.

Service — from 2026-08-03's service-discovery track (39/113: Moralis).

Why

A quick evaluation of a common build-vs-buy tradeoff in crypto tooling — instead of indexing chain data yourself (event logs, balance changes) to answer "what does this wallet hold," a hosted indexing API like Moralis answers it in one call.

How it works

Planned: a small server route calling Moralis's Wallet API (net-worth and token-balance endpoints) with a server-held API key, rendering a simple portfolio snapshot for any address a visitor enters — read-only, no wallet connection needed. Not yet built.

Related code

"""Moralis Wallet API: fetch a mock wallet snapshot (token balances) and
compute a simple portfolio summary using mock prices, instead of indexing
chain data yourself.
"""

def mock_moralis_get_wallet_tokens(address):
    # Simulates what Moralis's Wallet API would return for token balances.
    return {
        "address": address,
        "tokens": [
            {"symbol": "ETH", "balance": 1.85},
            {"symbol": "USDC", "balance": 2500.0},
            {"symbol": "LINK", "balance": 120.0},
        ],
    }


MOCK_PRICES_USD = {"ETH": 3200.0, "USDC": 1.0, "LINK": 14.5}


def summarize_portfolio(snapshot, prices):
    rows = []
    total = 0.0
    for token in snapshot["tokens"]:
        price = prices.get(token["symbol"], 0.0)
        value = token["balance"] * price
        total += value
        rows.append((token["symbol"], token["balance"], price, value))
    return rows, total


address = "0xA1b2C3d4E5f6789012345678901234567890AbCd"
snapshot = mock_moralis_get_wallet_tokens(address)
print(f"wallet snapshot for {snapshot['address']}:")

rows, total = summarize_portfolio(snapshot, MOCK_PRICES_USD)
for symbol, balance, price, value in rows:
    print(f"  {symbol:5s} balance={balance:>10.4f}  price=${price:>8.2f}  value=${value:>10.2f}")

print(f"\ntotal portfolio value: ${total:,.2f}")

Where it lands in Jayverse

  • Wallet: default to a hosted indexing API for portfolio/net-worth display, not a self-built indexer. Use Moralis or an equivalent for balance and net-worth first, and only build a custom indexer once a concrete gap forces it.
  • Devnet: confirm the chosen indexing API actually supports Anvil devnet (chainId 313370) before depending on it. If it doesn't, that unsupported-chain gap is exactly the case that justifies building the custom indexer instead.

Key expressions

Words and phrases from this page worth keeping, with the Korean meaning and the sentence they come from.

Expression뜻 · 쓰이는 자리
build-vs-buy tradeoff직접 구축할지 외부 서비스를 살지의 선택 문제 · 개발 전략을 논할 때. "a common build-vs-buy tradeoff in crypto tooling"
in one call한 번의 호출로 · API가 복잡한 조회를 단순화할 때. "a hosted indexing API... answers it in one call"
hosted (service)(외부에서) 호스팅되는, 운영해주는 · 직접 운영하지 않고 맡기는 서비스를 말할 때. "a hosted indexing API like Moralis"
render (verb)(화면을) 렌더링하다, 그려주다 · 데이터를 화면에 표시할 때. "rendering a simple portfolio snapshot"
server-held서버가 보관하는 · 민감한 키를 클라이언트가 아닌 서버가 쥘 때. "a server-held API key"
Moralis모랄리스 · 지갑 잔액·순자산을 API 한 번으로 조회해주는 호스팅형 인덱싱 서비스. "Moralis's Wallet API (net-worth and token-balance endpoints)"

← All Knowledge Notes · Workspace Index · Top ↑

Moralis — API로 지갑 스냅샷 조회

Moralis Wallet API로 특정 주소의 잔고·순자산 조회.

서비스 — 2026-08-03 서비스 탐방 트랙 (39/113: Moralis).

크립토 도구에서 흔히 마주치는 build-vs-buy 판단을 빠르게 검증합니다 — "이 지갑이 뭘 들고 있는가"에 답하려고 이벤트 로그·잔고 변화를 직접 인덱싱하는 대신, Moralis 같은 호스팅 인덱싱 API가 호출 한 번으로 답을 줍니다.

동작 방식

계획: 서버 라우트가 서버에 보관된 API 키로 Moralis Wallet API(순자산·토큰 잔고 엔드포인트)를 호출해, 방문자가 입력한 임의 주소에 대한 간단한 포트폴리오 스냅샷을 보여줍니다 — 읽기 전용이며 지갑 연결이 필요 없습니다. 아직 미구현.

관련 코드

"""Moralis Wallet API: fetch a mock wallet snapshot (token balances) and
compute a simple portfolio summary using mock prices, instead of indexing
chain data yourself.
"""

def mock_moralis_get_wallet_tokens(address):
    # Simulates what Moralis's Wallet API would return for token balances.
    return {
        "address": address,
        "tokens": [
            {"symbol": "ETH", "balance": 1.85},
            {"symbol": "USDC", "balance": 2500.0},
            {"symbol": "LINK", "balance": 120.0},
        ],
    }


MOCK_PRICES_USD = {"ETH": 3200.0, "USDC": 1.0, "LINK": 14.5}


def summarize_portfolio(snapshot, prices):
    rows = []
    total = 0.0
    for token in snapshot["tokens"]:
        price = prices.get(token["symbol"], 0.0)
        value = token["balance"] * price
        total += value
        rows.append((token["symbol"], token["balance"], price, value))
    return rows, total


address = "0xA1b2C3d4E5f6789012345678901234567890AbCd"
snapshot = mock_moralis_get_wallet_tokens(address)
print(f"wallet snapshot for {snapshot['address']}:")

rows, total = summarize_portfolio(snapshot, MOCK_PRICES_USD)
for symbol, balance, price, value in rows:
    print(f"  {symbol:5s} balance={balance:>10.4f}  price=${price:>8.2f}  value=${value:>10.2f}")

print(f"\ntotal portfolio value: ${total:,.2f}")

Jayverse에서의 위치

  • Wallet: 포트폴리오·순자산 표시는 직접 만든 인덱서가 아니라 호스팅 인덱싱 API를 기본값으로 삼는다. 잔액과 순자산은 먼저 Moralis나 동급 API로 처리하고, 구체적인 공백이 강제할 때만 커스텀 인덱서를 만든다.
  • Devnet: 선택한 인덱싱 API가 Anvil devnet(체인ID 313370)을 실제로 지원하는지 의존하기 전에 확인한다. 지원하지 않는다면, 그 미지원 체인이라는 공백이 바로 커스텀 인덱서를 만들어야 하는 근거다.

핵심 표현

이 페이지의 영어 본문에서 배울 만한 단어와 표현, 뜻과 나온 자리.

Expression뜻 · 쓰이는 자리
build-vs-buy tradeoff직접 구축할지 외부 서비스를 살지의 선택 문제 · 개발 전략을 논할 때. "a common build-vs-buy tradeoff in crypto tooling"
in one call한 번의 호출로 · API가 복잡한 조회를 단순화할 때. "a hosted indexing API... answers it in one call"
hosted (service)(외부에서) 호스팅되는, 운영해주는 · 직접 운영하지 않고 맡기는 서비스를 말할 때. "a hosted indexing API like Moralis"
render (verb)(화면을) 렌더링하다, 그려주다 · 데이터를 화면에 표시할 때. "rendering a simple portfolio snapshot"
server-held서버가 보관하는 · 민감한 키를 클라이언트가 아닌 서버가 쥘 때. "a server-held API key"
Moralis모랄리스 · 지갑 잔액·순자산을 API 한 번으로 조회해주는 호스팅형 인덱싱 서비스. "Moralis's Wallet API (net-worth and token-balance endpoints)"

← 전체 기술 노트 · 워크스페이스 인덱스 · 맨 위 ↑