Workspace IndexKnowledge Notes › Institutional custody study

#178PoC

Institutional custody study

MPC · approval flows · AA · AML — and which parts are buildable without a VASP licence.

Not yet scoped — a reading study first, then whichever PoC items survive the licence question.

Why

Everything else in this catalogue is a single wallet acting for itself. Institutional custody is the opposite shape: keys split across an MPC quorum, transactions gated by an approval workflow, and a compliance surface that is legal rather than technical. The useful output is a separation — which parts are engineering (MPC, approval state machines, AA policies) and which parts are a licence you either have or do not.

How it works

Reading study, not a deployment: MPC signing (threshold schemes vs. the key-splitting DVT already studied elsewhere here), approval workflows as state machines, where account abstraction's policy layer overlaps custody policy, and AML/travel-rule obligations. The PoC candidates are the ones that need no VASP registration — an approval-flow simulator, an AA policy contract with quorum caveats — and those are exactly the ones this card would become.

Related code

"""Institutional custody study PoC -- M-of-N threshold approval gate.
Illustrates the core mechanism behind MPC custody and approval workflows: a transaction
only executes once a quorum of independent signers has approved it.
"""

from dataclasses import dataclass, field


@dataclass
class Transaction:
    id: str
    description: str
    approvals: set[str] = field(default_factory=set)


class ApprovalQuorum:
    def __init__(self, signers: list[str], threshold: int):
        self.signers = set(signers)
        self.threshold = threshold  # "M" of "N"

    def approve(self, tx: Transaction, signer: str) -> str:
        if signer not in self.signers:
            return f"REJECTED: {signer} is not a registered quorum member"
        if signer in tx.approvals:
            return f"NOOP: {signer} already approved {tx.id}"
        tx.approvals.add(signer)
        return f"recorded approval from {signer} ({len(tx.approvals)}/{self.threshold})"

    def can_execute(self, tx: Transaction) -> bool:
        return len(tx.approvals) >= self.threshold

    def execute(self, tx: Transaction) -> str:
        if not self.can_execute(tx):
            return f"BLOCKED: {tx.id} has {len(tx.approvals)}/{self.threshold} approvals"
        return f"EXECUTED: {tx.id} ({tx.description}) -- quorum of {self.threshold} met"


if __name__ == "__main__":
    quorum = ApprovalQuorum(signers=["alice", "bob", "carol", "dave"], threshold=3)
    tx = Transaction(id="withdraw-001", description="withdraw 100 ETH to cold wallet")

    for signer in ["alice", "eve", "bob", "alice", "carol"]:
        print(" ", quorum.approve(tx, signer))
        print("  execute?", quorum.execute(tx))

Where it lands in Jayverse

  • Wallet: build the AA-policy-with-quorum-caveats contract this PoC names as licence-free. Jayverse Wallet's simulate-before-sign already overlaps custody policy — add quorum caveats to the policy layer as the concrete PoC output.
  • Rabbit: build the approval-flow state machine on ERC-4337/7702 session keys and mandates. That is explicitly one of the no-VASP-licence-needed candidates this PoC lists, and Rabbit already has the session-key primitive to build it on.
  • Auditor: run the engineering-vs-licence separation before any custody-adjacent feature. Before Verex holds user funds or Number distributes licensed readings, list which parts are buildable now and which require a licence, per this PoC's method.

Key expressions

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

Expression뜻 · 쓰이는 자리
gated by~에 의해 통제·제한되는 · "transactions gated by an approval workflow"
quorum caveats정족수 관련 제약 조건 · "an AA policy contract with quorum caveats"
compliance surface컴플라이언스가 걸리는 영역 · "a compliance surface that is legal rather than technical"
survive (a filter)걸러내는 과정에서 살아남다 · "whichever PoC items survive the licence question"
opposite shape정반대의 형태·구조 · "Institutional custody is the opposite shape"
overlap with~와 겹치다, 맞물리다 · "where account abstraction's policy layer overlaps custody policy"
key-splitting키를 여러 조각으로 나누어 분산 보관하는 방식 · "threshold schemes vs. the key-splitting DVT"
MPC다자간 계산(Multi-Party Computation) · 키를 분할해 여러 참여자가 공동 서명하는 방식. "keys split across an MPC quorum"
VASP가상자산서비스제공자(Virtual Asset Service Provider) · 이 라이선스 유무로 엔지니어링 가능 범위가 갈린다. "which parts are buildable without a VASP licence"
AML자금세탁방지(Anti-Money Laundering) · 트래블룰 등 컴플라이언스 의무 문맥에서 언급된다. "AML/travel-rule obligations"
DVT분산 검증자 기술(Distributed Validator Technology) · 키 분할 방식의 비교 대상으로 언급된다. "threshold schemes vs. the key-splitting DVT"

← All Knowledge Notes · Workspace Index · Top ↑

기관 커스터디 스터디

MPC · 승인 플로우 · AA · AML — 그리고 VASP 없이 만들 수 있는 부분은 어디까지인가.

아직 범위 미정 — 먼저 정독, 그다음 라이선스 질문을 통과한 PoC 항목만.

이 카탈로그의 나머지는 전부 「지갑 하나가 자기 자신을 위해 행동한다」입니다. 기관 커스터디는 정반대 모양입니다 — 키는 MPC 정족수로 쪼개지고, 트랜잭션은 승인 워크플로가 막고, 컴플라이언스 표면은 기술이 아니라 법입니다. 유용한 산출물은 분리입니다: 어디까지가 엔지니어링(MPC·승인 상태기계·AA 정책)이고, 어디부터가 있거나 없거나인 라이선스인가.

동작 방식

배포가 아니라 정독 스터디입니다: MPC 서명(임계 방식 vs. 여기 DVT 카드에서 이미 다룬 키 분할), 상태기계로서의 승인 워크플로, 계정 추상화의 정책 계층이 커스터디 정책과 겹치는 지점, 그리고 AML·트래블룰 의무. PoC 후보는 VASP 등록이 필요 없는 것들 — 승인 플로우 시뮬레이터, 정족수 caveat을 가진 AA 정책 컨트랙트 — 이고, 이 카드가 실제로 될 것도 그것들입니다.

관련 코드

"""Institutional custody study PoC -- M-of-N threshold approval gate.
Illustrates the core mechanism behind MPC custody and approval workflows: a transaction
only executes once a quorum of independent signers has approved it.
"""

from dataclasses import dataclass, field


@dataclass
class Transaction:
    id: str
    description: str
    approvals: set[str] = field(default_factory=set)


class ApprovalQuorum:
    def __init__(self, signers: list[str], threshold: int):
        self.signers = set(signers)
        self.threshold = threshold  # "M" of "N"

    def approve(self, tx: Transaction, signer: str) -> str:
        if signer not in self.signers:
            return f"REJECTED: {signer} is not a registered quorum member"
        if signer in tx.approvals:
            return f"NOOP: {signer} already approved {tx.id}"
        tx.approvals.add(signer)
        return f"recorded approval from {signer} ({len(tx.approvals)}/{self.threshold})"

    def can_execute(self, tx: Transaction) -> bool:
        return len(tx.approvals) >= self.threshold

    def execute(self, tx: Transaction) -> str:
        if not self.can_execute(tx):
            return f"BLOCKED: {tx.id} has {len(tx.approvals)}/{self.threshold} approvals"
        return f"EXECUTED: {tx.id} ({tx.description}) -- quorum of {self.threshold} met"


if __name__ == "__main__":
    quorum = ApprovalQuorum(signers=["alice", "bob", "carol", "dave"], threshold=3)
    tx = Transaction(id="withdraw-001", description="withdraw 100 ETH to cold wallet")

    for signer in ["alice", "eve", "bob", "alice", "carol"]:
        print(" ", quorum.approve(tx, signer))
        print("  execute?", quorum.execute(tx))

Jayverse에서의 위치

  • Wallet: 이 PoC가 라이선스 없이 가능하다고 명명한 쿼럼 제약이 있는 AA 정책 컨트랙트를 만든다. Jayverse Wallet의 simulate-before-sign은 이미 커스터디 정책과 겹치므로, 정책 레이어에 쿼럼 제약을 추가하는 것을 구체적인 PoC 산출물로 삼는다.
  • Rabbit: ERC-4337/7702 세션 키와 맨데이트 위에 승인 플로우 상태 머신을 만든다. 이는 이 PoC가 나열한 VASP 라이선스가 필요 없는 후보 중 하나이며, Rabbit은 이미 그 위에 만들 세션 키 기본 요소를 갖고 있다.
  • Auditor: 커스터디 인접 기능을 만들기 전에 엔지니어링 대 라이선스 분리를 먼저 한다. Verex가 사용자 자금을 보유하거나 Number가 라이선스된 읽기를 배포하기 전에, 이 PoC의 방법대로 지금 만들 수 있는 부분과 라이선스가 필요한 부분을 나눠 적는다.

핵심 표현

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

Expression뜻 · 쓰이는 자리
gated by~에 의해 통제·제한되는 · "transactions gated by an approval workflow"
quorum caveats정족수 관련 제약 조건 · "an AA policy contract with quorum caveats"
compliance surface컴플라이언스가 걸리는 영역 · "a compliance surface that is legal rather than technical"
survive (a filter)걸러내는 과정에서 살아남다 · "whichever PoC items survive the licence question"
opposite shape정반대의 형태·구조 · "Institutional custody is the opposite shape"
overlap with~와 겹치다, 맞물리다 · "where account abstraction's policy layer overlaps custody policy"
key-splitting키를 여러 조각으로 나누어 분산 보관하는 방식 · "threshold schemes vs. the key-splitting DVT"
MPC다자간 계산(Multi-Party Computation) · 키를 분할해 여러 참여자가 공동 서명하는 방식. "keys split across an MPC quorum"
VASP가상자산서비스제공자(Virtual Asset Service Provider) · 이 라이선스 유무로 엔지니어링 가능 범위가 갈린다. "which parts are buildable without a VASP licence"
AML자금세탁방지(Anti-Money Laundering) · 트래블룰 등 컴플라이언스 의무 문맥에서 언급된다. "AML/travel-rule obligations"
DVT분산 검증자 기술(Distributed Validator Technology) · 키 분할 방식의 비교 대상으로 언급된다. "threshold schemes vs. the key-splitting DVT"

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