Workspace IndexDev Notes › Thirdweb — platform survey

#128PoC

Thirdweb — platform survey

Contracts, wallets/AA, backend tx, Unity SDK — breadth bought with best-in-class parts.

Reference — docs/features/thirdweb.md. Already used in the AA card's pillars ②③.

Why

Not a neutral survey — this project already depends on it. The AA card's sponsored-gas and atomic-batch pillars run on thirdweb's 4337 stack, and the D1 gas decision on the agent PoC turns on exactly the tradeoff this note names: thirdweb gives you a paymaster, but only for a 4337 account, which is a different account type from the 7702/7710 one the mandate story is built on. Breadth is convenient right up to the point where one part has to be the best one.

How it works

Reading note across four surfaces (contract deploys, Connect wallets and account abstraction, Engine for backend-signed transactions, the Unity SDK), each rated against doing it directly. The touchpoints that matter here are named: the AA pillars already shipped, backend transactions for the AP2 path, and the Unity track the game card would need.

Related code

# Thirdweb — platform survey across four surfaces (contracts, Connect wallets/AA,
# Engine backend tx, Unity SDK), each rated against doing it directly. Prints a
# feature-comparison table from a dict of {feature: supported_bool}.

SURFACES = {
    "Contract deploys": {
        "one-click deploy from templates": True,
        "custom Solidity, no thirdweb lock-in": True,
        "gas-optimized beyond OpenZeppelin defaults": False,
    },
    "Connect (wallets / AA)": {
        "ERC-4337 smart accounts": True,
        "sponsored gas (paymaster)": True,
        "ERC-7702 / 7710 delegated accounts": False,  # different account type — the D1 gap
    },
    "Engine (backend tx)": {
        "server-signed transactions": True,
        "managed key custody": True,
        "self-hosted signer, zero vendor dependency": False,
    },
    "Unity SDK": {
        "in-game wallet connect": True,
        "NFT/inventory bridging": True,
        "console-platform support (parity with mobile/web)": False,
    },
}


def coverage(features: dict) -> float:
    return sum(features.values()) / len(features)


def print_table():
    print(f"{'Surface':<26}{'Feature':<45}{'Supported'}")
    print("-" * 80)
    for surface, features in SURFACES.items():
        for feature, supported in features.items():
            mark = "yes" if supported else "NO"
            print(f"{surface:<26}{feature:<45}{mark}")


if __name__ == "__main__":
    print("Thirdweb platform survey — feature coverage by surface\n")
    print_table()

    print("\nCoverage ratio per surface:")
    for surface, features in SURFACES.items():
        print(f"  {surface:<26} {coverage(features):.0%}")

    gaps = [
        f"{surface} / {feature}"
        for surface, features in SURFACES.items()
        for feature, supported in features.items()
        if not supported
    ]
    print("\nGaps where 'best-in-class' breaks (breadth's limit):")
    for gap in gaps:
        print(f"  - {gap}")

← All Dev Notes · Workspace Index · Top ↑

Thirdweb — 플랫폼 서베이

컨트랙트·지갑/AA·백엔드 tx·Unity SDK — 각 부문 1등을 내주고 산 넓이.

참조 — docs/features/thirdweb.md. AA 카드의 ②③ 요소에서 이미 쓰고 있습니다.

중립적 서베이가 아닙니다 — 이 프로젝트가 이미 의존하고 있습니다. AA 카드의 가스 대납·원자적 배치 요소가 thirdweb의 4337 스택 위에서 돌고, 에이전트 PoC의 D1 가스 결정이 정확히 이 노트가 짚는 트레이드오프에 달려 있습니다: thirdweb은 paymaster를 주지만 4337 계정에 한해서이고, 그건 위임 서사가 딛고 선 7702/7710 계정과 다른 종류입니다. 넓이는 편리합니다 — 어느 한 부분이 반드시 최고여야 하는 지점 전까지는.

동작 방식

네 표면(컨트랙트 배포, Connect 지갑·계정 추상화, 백엔드 서명 트랜잭션용 Engine, Unity SDK)에 걸친 정독 노트로, 각각을 직접 구현하는 경우와 견줍니다. 여기서 의미 있는 접점은 명시되어 있습니다 — 이미 나간 AA 요소들, AP2 경로의 백엔드 트랜잭션, 그리고 게임 카드가 필요로 할 Unity 트랙.

관련 코드

# Thirdweb — platform survey across four surfaces (contracts, Connect wallets/AA,
# Engine backend tx, Unity SDK), each rated against doing it directly. Prints a
# feature-comparison table from a dict of {feature: supported_bool}.

SURFACES = {
    "Contract deploys": {
        "one-click deploy from templates": True,
        "custom Solidity, no thirdweb lock-in": True,
        "gas-optimized beyond OpenZeppelin defaults": False,
    },
    "Connect (wallets / AA)": {
        "ERC-4337 smart accounts": True,
        "sponsored gas (paymaster)": True,
        "ERC-7702 / 7710 delegated accounts": False,  # different account type — the D1 gap
    },
    "Engine (backend tx)": {
        "server-signed transactions": True,
        "managed key custody": True,
        "self-hosted signer, zero vendor dependency": False,
    },
    "Unity SDK": {
        "in-game wallet connect": True,
        "NFT/inventory bridging": True,
        "console-platform support (parity with mobile/web)": False,
    },
}


def coverage(features: dict) -> float:
    return sum(features.values()) / len(features)


def print_table():
    print(f"{'Surface':<26}{'Feature':<45}{'Supported'}")
    print("-" * 80)
    for surface, features in SURFACES.items():
        for feature, supported in features.items():
            mark = "yes" if supported else "NO"
            print(f"{surface:<26}{feature:<45}{mark}")


if __name__ == "__main__":
    print("Thirdweb platform survey — feature coverage by surface\n")
    print_table()

    print("\nCoverage ratio per surface:")
    for surface, features in SURFACES.items():
        print(f"  {surface:<26} {coverage(features):.0%}")

    gaps = [
        f"{surface} / {feature}"
        for surface, features in SURFACES.items()
        for feature, supported in features.items()
        if not supported
    ]
    print("\nGaps where 'best-in-class' breaks (breadth's limit):")
    for gap in gaps:
        print(f"  - {gap}")

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